proposition: Lemma va_reachable_dag_unfold {SGA_vs: PointwiseGraphAssum_vs SGP}: forall (g: Graph) x S d, vvalid g x -> step_list g x S -> vgamma (Graph_PointwiseGraph g) x = d -> reachable_dag_vertices_at x g = vertex_at x d * reachable_through_dag_vertices_at S g.
proof: Proof. intros. subst. unfold reachable_dag_vertices_at, reachable_through_dag_vertices_at. apply pred_ext; normalize. + apply andp_right. - apply prop_right. rewrite Forall_forall; intros. eapply local_dag_step; eauto. rewrite (H0 x0) in H2; auto. - apply derives_refl'. apply localDag_vertices_unfold; auto. + assert ((vertex_at x (vgamma (Graph_PointwiseGraph g) x): Pred) * vertices_at (reachable_through_set g S) (Graph_PointwiseGraph g) |-- !!localDag g x). - eapply derives_trans; [apply vertices_at_sepcon_unique_1x; auto |]. apply prop_derives; intro. eapply localDag_step_rev; eauto. - rewrite (add_andp _ _ H2); normalize. apply derives_refl'. symmetry; apply localDag_vertices_unfold; 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