proposition: Lemma si_reachable_by_through_set: forall (g1 g2: PreGraph V E) S p1 p2 n, g1 ~=~ g2 -> vertex_prop_coincide g1 g2 p1 p2 -> (reachable_by_through_set g1 S p1 n <-> reachable_by_through_set g2 S p2 n).
proof: Proof. cut (forall (g1 g2: PreGraph V E) S p1 p2 n, g1 ~=~ g2 -> vertex_prop_coincide g1 g2 p1 p2 -> reachable_by_through_set g1 S p1 n -> reachable_by_through_set g2 S p2 n); intros. + split; intro; [apply (H g1 g2 S p1 p2) | apply (H g2 g1 S p2 p1)]; auto. - symmetry; auto. - unfold vertex_prop_coincide in H1 |-* . intros. symmetry. apply H1; auto. + destruct H1 as [s [? ?]]. exists s; split; auto. rewrite <- (si_reachable_by g1 g2 p1 p2); auto. 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