proposition: Theorem constructive_dep_choice X Y (P : X -> Prop) (R : X -> Y -> Prop) : (forall x, P x -> sig (R x)) -> { f : forall x, P x -> Y | forall x Hx, R x (f x Hx) }.
proof: Proof. intros f. exists (fun x Hx => proj1_sig (f x Hx)). intros x Hx; apply (proj2_sig (f x Hx)). Qed.
imports: List Arith Lia Undecidability.Shared.Libs.DLW.Utils(utils_tac utils_list utils_nat fin_base) Undecidability.Shared.Libs.DLW.Vec(pos vec)