proposition: Lemma NoDup_app_inv: forall (A : Type) (l1 l2 : list A), NoDup l1 -> NoDup l2 -> (forall x, In x l1 -> ~ In x l2) -> NoDup (l1 ++ l2).
proof: Proof. induction l1; intros. rewrite app_nil_l. auto. rewrite <- app_comm_cons. apply NoDup_cons. intro. apply in_app_or in H2. destruct H2. apply NoDup_cons_2 in H. auto. apply (H1 a). apply in_eq. auto. apply IHl1. apply NoDup_cons_1 in H. auto. auto. intro y; intros. apply H1. apply in_cons. auto. Qed.
imports: Coq.Lists.List Coq.micromega.Lia Coq.Sorting.Permutation Coq.ZArith.ZArith_base Coq.ZArith.Zcomplements Coq.Logic.FunctionalExtensionality CertiGraph.lib.Coqlib CertiGraph.lib.EquivDec_ext VST.zlist.sublist VST.zlist.list_solver