proposition: Lemma graph_unfold: forall (g: Graph) {rfg: ReachableFiniteGraph g} x S (V_DEC: forall x : V, In x S -> Decidable (vvalid g x)), vvalid g x -> step_list g x S -> reachable_vertices_at x g = vertex_at x (vgamma (Graph_PointwiseGraph g) x) ⊗ graphs S g.
proof: Proof. intros. rewrite graphs_graphs'; auto. unfold reachable_vertices_at. unfold reachable_through_vertices_at. change (vertex_at x (vgamma (Graph_PointwiseGraph g) x)) with (graph_vcell (Graph_PointwiseGraph g) x). assert (forall y, reachable g x y <-> x = y \/ reachable_through_set g S y). { intros. rewrite (reachable_ind' g x S); intuition. } symmetry. apply pred_sepcon_ocon1; intros. + apply SGBA_VE. + apply RFG_reachable_through_set_decicable; auto. + specialize (H1 a). intuition. + apply precise_graph_cell. + apply joinable_graph_cell. 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