proposition: Lemma va_labeledgraph_add_edge_right: forall (g g1 g2 g3 g4: Graph) (g1' g2' g3' g4': LGraph) (x l r x0 r0: addr), vvalid g x -> vgamma g x = (null, l, r) -> vcopy1 x g g1 g1' -> extended_copy l (g1: LGraph, g1') (g2: LGraph, g2') -> ecopy1 (x, L) (g2: LGraph, g2') (g3: LGraph, g3') -> extended_copy r (g3: LGraph, g3') (g4: LGraph, g4') -> x0 = LocalGraphCopy.vmap g1 x -> is_guarded_BinMaFin' (fun x => x0 <> x) (fun e => ~ In e ((x0, L) :: nil)) g4' -> vertices_at (Intersection _ (vvalid g4') (fun x => x0 <> x)) g4' = vertices_at (Intersection _ (vvalid (labeledgraph_add_edge g4' (x0, R) x0 r0 (null, L))) (fun x => x0 <> x)) (LGraph_SGraph (labeledgraph_add_edge g4' (x0, R) x0 r0 (null, L))).
proof: Proof. intros. eapply va_labeledgraph_add_edge_eq'; eauto. eapply is_BinMaFin_not_evalid; eauto. + eapply extended_copy_vvalid_mono in H4; [exact H4 |]. eapply ecopy1_vvalid_mono in H3; [exact H3 |]. eapply extended_copy_vvalid_mono in H2; [exact H2 |]. eapply vcopy1_copied_root_valid in H1; auto. subst x0; auto. + intros ? [? | []]. subst e; auto. + intros [? | []]. inversion H7. Qed.
imports: CertiGraph.lib.Ensembles_ext Coq.Lists.List VST.msl.seplog VST.msl.log_normalize VST.msl.ramification_lemmas VST.msl.Coqlib2 CertiGraph.lib.Coqlib CertiGraph.lib.EquivDec_ext CertiGraph.lib.relation_list CertiGraph.lib.Morphisms_ext CertiGraph.msl_ext.log_normalize CertiGraph.msl_ext.iter_sepcon CertiGraph.graph.graph_model CertiGraph.graph.path_lemmas CertiGraph.graph.reachable_computable CertiGraph.graph.reachable_ind CertiGraph.graph.graph_gen CertiGraph.graph.graph_relation CertiGraph.graph.subgraph2 CertiGraph.graph.dag CertiGraph.graph.weak_mark_lemmas CertiGraph.graph.graph_morphism CertiGraph.graph.local_graph_copy CertiGraph.msl_application.Graph CertiGraph.msl_application.GraphBin CertiGraph.msl_application.Graph_Copy Coq.Logic.Classical