proposition: Lemma svwl_gen2gen_no_edge: forall from to l g1 g2, graph_has_gen g1 to -> from <> to -> gen_unmarked g1 to -> scan_vertex_while_loop from to l g1 g2 -> forall gen1 gen2, gen1 <> to -> gen2gen_no_edge g1 gen1 gen2 -> gen2gen_no_edge g2 gen1 gen2.
proof: Proof. intros. unfold gen2gen_no_edge in *. intros. destruct H5. simpl in H5. eapply svwl_graph_has_v_inv in H5; eauto. simpl in H5. destruct H5 as [? | [? ?]]. 2: contradiction. erewrite <- svwl_dst_unchanged; eauto. apply H4. split; simpl in *. 1: assumption. cut (get_edges g1 (gen1, vidx) = get_edges g2 (gen1, vidx)). + intros; rewrite H7; assumption. + unfold get_edges. unfold make_fields. erewrite svwl_raw_fields; eauto. Qed.
imports: Coq.ZArith.ZArith Coq.Program.Basics Coq.micromega.Lia compcert.lib.Integers compcert.common.Values VST.veric.base VST.veric.Clight_lemmas VST.veric.val_lemmas VST.veric.shares VST.msl.seplog VST.msl.shares VST.zlist.sublist VST.floyd.coqlib3 VST.floyd.functional_base VST.floyd.data_at_rec_lemmas VST.zlist.list_solver CertiGraph.lib.EquivDec_ext CertiGraph.lib.List_ext CertiGraph.graph.graph_model CertiGraph.graph.graph_gen