proposition: Lemma lcv_gen_unmarked: forall (to : nat) (g : LGraph) (v : VType), graph_has_gen g to -> raw_mark (vlabel g v) = false -> forall gen, vgeneration v <> gen -> gen_unmarked g gen -> gen_unmarked (lgraph_copy_v g v to) gen.
proof: Proof. intros. unfold gen_unmarked in *. intros. assert (graph_has_v (lgraph_copy_v g v to) (gen, idx)) by (split; assumption). apply lcv_graph_has_v_inv in H5. 2: assumption. destruct H5. - pose proof H5. destruct H6. simpl in * |- . specialize (H2 H6 _ H7). rewrite <- lcv_raw_mark; try assumption. destruct v. simpl in *. intro. apply H1. inversion H8. reflexivity. - rewrite H5. rewrite lcv_vlabel_new; try assumption. unfold new_copied_v in H5. inversion H5. subst. assumption. 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