proposition: Lemma vertices_at_ramif_xQ: forall {A: Type} (Pure: A -> Prop) (g: Graph) (G L: V -> Prop) (g': A -> Graph) (L' G': A -> V -> Prop), (exists F, Prop_join L F G /\ (forall a, Pure a -> Prop_join (L' a) F (G' a)) /\ (forall a, Pure a -> vertices_identical F g (g' a))) -> vertices_at G g |-- vertices_at L g * (ALL a: A, !! Pure a --> (vertices_at (L' a) (g' a) -* vertices_at (G' a) (g' a))).
proof: Proof. intros. unfold vertices_at. apply pred_sepcon_ramif_xQ. destruct H as [F [? [? ?]]]. exists F; split; [| split]; auto. intros. unfold graph_vcell; f_equal. specialize (H1 a H2). rewrite vertices_identical_spec in H1. apply H1; auto. Qed.
imports: Coq.Logic.Classical VST.msl.seplog VST.msl.log_normalize VST.msl.ramification_lemmas CertiGraph.lib.Coqlib CertiGraph.lib.EquivDec_ext CertiGraph.lib.EnumEnsembles CertiGraph.lib.List_ext CertiGraph.lib.Relation_ext CertiGraph.lib.Equivalence_ext CertiGraph.lib.Morphisms_ext CertiGraph.msl_ext.log_normalize CertiGraph.msl_ext.iter_sepcon CertiGraph.msl_ext.ramification_lemmas CertiGraph.msl_ext.abs_addr CertiGraph.msl_ext.seplog CertiGraph.graph.graph_model CertiGraph.graph.graph_gen CertiGraph.graph.path_lemmas CertiGraph.graph.reachable_computable CertiGraph.graph.reachable_ind CertiGraph.graph.subgraph2 CertiGraph.graph.dag CertiGraph.graph.FiniteGraph