proposition: Lemma InA_eqk_eqke : forall (elt : Type) (k : X.t) (e : elt) (ls : list (key * elt)), InA (eq_key (elt := elt)) (k, e) ls -> exists e', InA (eq_key_elt (elt := elt)) (k, e') ls.
proof: Proof. induction ls; intros; inversion H; subst. - destruct a. exists e0. constructor. unfold eq_key, Raw.Proofs.PX.eqk in H1. simpl in H1. unfold eq_key_elt, Raw.Proofs.PX.eqke. tauto. - specialize (IHls H1). destruct IHls. exists x. apply InA_cons_tl. exact H0. Qed.
imports: Fiat.QueryStructure.Implementation.DataStructures.Bags.BagsInterface Fiat.QueryStructure.Implementation.DataStructures.Bags.BagsProperties Coq.Arith.PeanoNat Coq.FSets.FMapInterface Coq.FSets.FMapFacts Coq.FSets.FMapAVL Fiat.Common Fiat.Common.List.ListFacts Fiat.Common.List.FlattenList Fiat.Common.SetEqProperties Fiat.Common.FMapExtensions Fiat.Common.List.PermutationFacts