proposition: Theorem type_enum_t_by_measure : type_enum_t.
proof: Proof. Proof using Hm. apply constructive_choice in Hm; destruct Hm as (f & Hf); clear Hm. exists (fun j => let (a,n) := surj j in f a n). intros x. destruct (proj1 (Hf _ x) (Nat.le_refl _)) as (a & Ha). destruct (Hsurj (m x) a) as (n & Hn). exists n; rewrite Hn; auto. Qed.
imports: List Arith Bool Lia Eqdep_dec Undecidability.Synthetic.Definitions Undecidability.Synthetic.ReducibilityFacts Undecidability.Synthetic.InformativeDefinitions Undecidability.Synthetic.InformativeReducibilityFacts Undecidability.Shared.Libs.DLW.Utils(utils_tac utils_list utils_nat finite) Undecidability.Shared.Libs.DLW.Vec(pos vec) Undecidability.FOL.TRAKHTENBROT(notations utils fol_ops decidable)