proposition: Lemma map_fst_split: forall {A B} (l: list (A * B)), map fst l = fst (split l).
proof: Proof. intros. pose proof (split_length_l l). pose proof (split_length_r l). pose proof (split_combine l). destruct (split l). simpl in *. rewrite <- H0 in H. erewrite <- H1; eauto. now rewrite map_fst_combine. 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