Definition multiset_of (T : choiceType) of phant T := @multiset T.Notation "A `&` B" := (msetI A B) : mset_scope.Identity Coercion multiset_multiset_of : multiset_of >-> multiset.Definition f K (A : multiset K) := enum_mset_def A.Definition E := (erefl f).Notation enum_mset := EnumMset.f.Canonical enum_mset_unlock := Unlockable EnumMset.E.Canonical mset_finpredType (T: choiceType) :=
  mkFinPredType (multiset T) (fun A => undup (enum_mset A))
                (fun _ => undup_uniq _) (fun _ _ => mem_undup _ _).Implicit Types (a b c : K) (A B C D : {mset K}) (s : seq K).Fact msetn_key : unit.Fact seq_mset_key : unit.Fact msetU_key : unit.Fact msetI_key : unit.Fact msetD_key : unit.Fact msetB_key : unit.Fact msetM_key : unit.Definition mproper A B := msubset A B && ~~ msubset B A.

(* Specifications: *)
Lemma msetP {A B} : A =1 B <-> A = B.
Lemma mset0E a : mset0 a = 0.
Lemma msetnxx n a : (msetn n a) a = n.
Lemma count_mem_mset a A : count_mem a A = A a.
Lemma perm_undup_mset A : perm_eq (undup A) (finsupp A).