proposition: Lemma get_edges_snd_NoDup: forall g v, NoDup (map snd (get_edges g v)).
proof: Proof. intros. unfold get_edges. unfold make_fields. remember (raw_fields (vlabel g v)). remember O. clear Heql Heqn g. revert n. induction l; intros; simpl; [constructor|]. destruct a; [destruct s|]; simpl; [apply IHl..|]. rewrite NoDup_cons_iff. split; trivial. intro. apply list_in_map_inv in H. destruct H as [x [? ?]]. rewrite <- filter_sum_right_In_iff in H0. apply In_nth with (d := field_t_inhabitant) in H0. destruct H0 as [p [? ?]]. apply make_fields'_edge_depends_on_index in H1; [subst x; simpl in H; lia|]. rewrite make_fields'_eq_length in H0. rewrite Zlength_correct. split; [lia|]. apply Nat2Z.inj_lt; assumption. Qed.
imports: Coq.ZArith.ZArith Coq.Program.Basics 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 CertiGraph.lib.Coqlib CertiGraph.lib.EquivDec_ext CertiGraph.lib.List_ext CertiGraph.graph.graph_model CertiGraph.graph.graph_gen CertiGraph.graph.path_lemmas CertiGraph.graph.subgraph2 CertiGraph.graph.graph_relation CertiGraph.graph.graph_isomorphism CertiGraph.graph.reachable_ind CertiGraph.CertiGC.GCGraph