proposition: Lemma bin_graph_unfold: forall (g: Graph) x d l r, vvalid g x -> vgamma g x = (d, l, r) -> graph x g = vertex_at x (d, l, r) ⊗ graph l g ⊗ graph r g.
proof: Proof. intros. rewrite graph_unfold with (S := (l :: r :: nil)); auto. + change (Graph_PointwiseGraph g) with (LGraph_SGraph g). rewrite H0. simpl. rewrite ocon_emp. rewrite <- ocon_assoc. auto. + apply RGF. + intros. apply weak_valid_vvalid_dec. simpl in H1. destruct H1; [|destruct H1]; [subst x0 ..|exfalso; auto]. - apply (gamma_left_weak_valid _ x d l r); auto. - apply (gamma_right_weak_valid _ x d l r); auto. + apply (gamma_step_list _ _ d l r); auto. 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