proposition: Lemma si_reachable_subgraph: forall (g1 g2: PreGraph V E) S, g1 ~=~ g2 -> (reachable_subgraph g1 S) ~=~ (reachable_subgraph g2 S).
proof: Proof. intros. pose proof (fun x => si_reachable_through_set g1 g2 S x H). destruct H as [? [? [? ?]]]. split; [| split; [| split]]; simpl; unfold predicate_evalid, predicate_vvalid; simpl; intros; auto. + rewrite (H0 v), H. tauto. + rewrite (H0 (src g1 e)), (H0 (dst g1 e)), H1. specialize (H1 e). split; intros; [rewrite <- H2, <- H3 | rewrite H2, H3]; intuition. + apply H2; tauto. + apply H3; tauto. Qed.
imports: Coq.Arith.Arith Coq.Logic.ProofIrrelevance Coq.Logic.FunctionalExtensionality Coq.Classes.Morphisms Coq.Classes.Equivalence CertiGraph.lib.Coqlib CertiGraph.lib.Ensembles_ext CertiGraph.lib.relation_list CertiGraph.lib.List_ext CertiGraph.lib.Equivalence_ext CertiGraph.lib.EquivDec_ext VST.msl.Coqlib2 CertiGraph.graph.graph_model CertiGraph.graph.path_lemmas CertiGraph.graph.reachable_ind CertiGraph.graph.graph_gen CertiGraph.graph.graph_relation