proposition: Lemma va_labeledgraph_add_edge_eq': forall (g: LGraph) es e s d data, ~ evalid g e -> is_guarded_BinMaFin' (fun x => s <> x) (fun e => ~ In e es) g -> let g' := labeledgraph_add_edge g e s d data in @vertices_at _ _ _ _ _ _ SGP _ (Intersection _ (vvalid g) (fun x => s <> x)) (Graph_PointwiseGraph g) = @vertices_at _ _ _ _ _ _ SGP _ (Intersection _ (vvalid g') (fun x => s <> x)) (Graph_PointwiseGraph g').
proof: Proof. intros. apply Graph.va_labeledgraph_add_edge_eq; auto. + unfold Included, Ensembles.In. intros x0 ?. destruct H0 as [X _]. pose (g0 := Build_GeneralGraph _ _ _ (fun g => BinMaFin' (pg_lg g)) _ X: Graph'). assert (vvalid g0 x0) by auto. apply vvalid_vguard' in H0. simpl in H0 |- *. rewrite !Intersection_spec in H0. tauto. + unfold Included, Ensembles.In. intros x0 ?. destruct H0 as [X _]. pose (g0 := Build_GeneralGraph _ _ _ (fun g => BinMaFin' (pg_lg g)) _ X: Graph'). assert (vvalid g0 x0) by auto. apply vvalid_vguard' in H0. simpl in H0 |- *. rewrite !Intersection_spec in H0. unfold addValidFunc, updateEdgeFunc. split; [| split]; [tauto | tauto |]. destruct_eq_dec e (x0, L); subst; [tauto |]. destruct_eq_dec e (x0, R); subst; [tauto |]. tauto. Qed.
imports: CertiGraph.lib.Ensembles_ext Coq.Lists.List VST.msl.seplog VST.msl.log_normalize CertiGraph.lib.Coqlib CertiGraph.lib.EquivDec_ext CertiGraph.msl_ext.log_normalize CertiGraph.msl_ext.iter_sepcon CertiGraph.msl_ext.seplog 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.BinGraph CertiGraph.graph.MathGraph CertiGraph.graph.FiniteGraph CertiGraph.msl_application.Graph Coq.Logic.Classical