proposition: Lemma va_reachable_dag_update_unfold {SGA_vs: PointwiseGraphAssum_vs SGP}: forall (g: Graph) x S d d', vvalid g x -> step_list g x S -> vgamma (Graph_PointwiseGraph (labeledgraph_vgen g x d)) x = d' -> Included (reachable_through_set g S) (vguard g) -> Included (reachable_through_set g S) (vguard (labeledgraph_vgen g x d)) -> reachable_dag_vertices_at x (labeledgraph_vgen g x d) = vertex_at x d' * reachable_through_dag_vertices_at S g.
proof: Proof. intros. erewrite va_reachable_dag_unfold by eauto. unfold reachable_through_dag_vertices_at. normalize. f_equal. rewrite (add_andp _ _ (vertices_at_sepcon_unique_1x _ _ _ _)). rewrite (add_andp _ _ (vertices_at_sepcon_unique_1x (Graph_PointwiseGraph g) _ _ d')). rewrite !(andp_comm _ (!! _)). apply andp_prop_ext; [reflexivity |]. intros. f_equal. apply va_reachable_through_partialgraph_eq; auto. split; [reflexivity | split; intros; [| reflexivity]]. simpl. unfold update_vlabel. destruct_eq_dec x v; [exfalso | auto]. subst v. simpl in H6; clear H5. destruct H6 as [? [y [? ?]]]. simpl in H4. apply H4. exists y; split; 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