proposition: Lemma is_BinMaFin_disjoint_guard: forall (g1': @LGraph pSGG_Bin (@addr pSGG_Bin) (prod (@addr pSGG_Bin) LR) unit) (g2'': Graph') x0 es0, is_guarded_BinMaFin' (fun v => x0 <> v) (fun e => ~ In e es0) g1' -> vvalid g1' x0 -> (forall e, In e es0 -> fst e = x0) -> Disjoint addr (vvalid g2'') (vvalid g1') -> disjointed_guard (vvalid g2'') (vvalid g1') (evalid g2'') (evalid g1').
proof: Proof. intros. split; auto. rewrite Disjoint_spec in *. intros e ? ?. pose proof @valid_graph' _ _ _ _ g2'' _ (maGraph' _) e H3. apply (H2 _ H5). destruct (in_dec equiv_dec e es0); destruct e as [v lr]. + specialize (H1 _ i). simpl in H1. rewrite left_right_sound0' by auto. subst; auto. + destruct H as [X _]. pose (pg1 := Build_GeneralGraph _ _ _ (fun g: LGraph => BinMaFin' g) (gpredicate_sub_labeledgraph (fun v => x0 <> v) (fun e => ~ In e es0) g1') X: Graph'). assert (evalid pg1 (v, lr)) by (simpl; rewrite Intersection_spec; split; auto). assert (src g2'' (v, lr) = src pg1 (v, lr)) by (rewrite !left_right_sound0'; auto). apply (@valid_graph' _ _ _ _ pg1 _ (maGraph' _)) in H. rewrite H6; auto. destruct H; auto. 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