proposition: Lemma vertices_at_sepcon_unique_xx {SGA_vs: PointwiseGraphAssum_vs SGP}: forall (g1 g2: Graph) P1 P2, vertices_at P1 g1 * vertices_at P2 g2 |-- !! Disjoint _ P1 P2.
proof: Proof. intros. eapply derives_trans with (!! (forall x, P1 x -> P2 x -> False)). 2: apply prop_derives; rewrite Disjoint_spec; auto. rewrite prop_forall_allp. apply allp_right; intro x. rewrite !prop_impl_imp. apply imp_andp_adjoint; normalize. apply imp_andp_adjoint; normalize. eapply derives_trans; [apply sepcon_derives; apply pred_sepcon_prop_true; eauto |]. rewrite sepcon_assoc, (sepcon_comm TT), !sepcon_assoc. rewrite TT_sepcon_TT, <- sepcon_assoc. unfold graph_vcell. eapply derives_trans; [apply sepcon_derives; [apply vertex_at_sep | apply derives_refl] |]. normalize. 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