proposition: Lemma mark_list_mark_ramify: forall {A} (g1 g2: Graph) (g3: A -> Graph) x l y l', (forall (g: Graph) x y, reachable g x y \/ ~ reachable g x y) -> vvalid g1 x -> step_list g1 x (l ++ y :: l') -> relation_list (mark1 x :: mark_list l :: nil) g1 g2 -> Included (Intersection V (reachable g2 x) (Complement V (reachable g2 y))) (vguard g2) -> (forall a, mark y g2 (g3 a) -> Included (Intersection V (reachable g2 x) (Complement V (reachable g2 y))) (vguard (g3 a))) -> @derives Pred _ (reachable_vertices_at x g2) (reachable_vertices_at y g2 * (ALL a: A, !! mark y g2 (g3 a) --> (reachable_vertices_at y (g3 a) -* reachable_vertices_at x (g3 a)))).
proof: Proof. intros. destruct_relation_list g1' in H2. destruct H5 as [? _]. apply (mark_list_eq x) in H2. destruct H2 as [_ ?]. rewrite <- H5 in H2; clear g1' H5. apply mark_neighbor_ramify; auto. + destruct H2. rewrite <- (H2 x). auto. + rewrite <- (step_si g1); auto. hnf in H1. rewrite <- H1. rewrite in_app_iff. right. apply in_eq. Qed.
imports: VST.msl.seplog VST.msl.log_normalize CertiGraph.lib.Coqlib CertiGraph.lib.Ensembles_ext CertiGraph.lib.EquivDec_ext CertiGraph.lib.List_ext CertiGraph.lib.relation_list CertiGraph.msl_ext.log_normalize CertiGraph.msl_ext.iter_sepcon CertiGraph.msl_ext.ramification_lemmas CertiGraph.graph.graph_model CertiGraph.graph.path_lemmas CertiGraph.graph.reachable_computable CertiGraph.graph.reachable_ind CertiGraph.graph.subgraph2 CertiGraph.graph.graph_gen CertiGraph.graph.dag CertiGraph.graph.weak_mark_lemmas CertiGraph.msl_application.Graph Coq.Logic.Classical