一意選択公理
Definite descriptionという公理から一意選択公理が成り立つことを示す。
From Stdlib Require Import Logic.Description.
Definite descriptionは一意存在の証明からその項を取り出すことができる。上記の A : Type は暗黙の引数である。
Section UniqueChoice. Variable A B : Type.A, B: Typeforall R : A -> B -> Prop, (forall x : A, exists ! y : B, R x y) -> {f : A -> B | forall x : A, R x (f x)}A, B: Typeforall R : A -> B -> Prop, (forall x : A, exists ! y : B, R x y) -> {f : A -> B | forall x : A, R x (f x)}A, B: Type
R: A -> B -> Prop
H: forall x : A, exists ! y : B, R x y{f : A -> B | forall x : A, R x (f x)}A, B: Type
R: A -> B -> Prop
H: forall x : A, exists ! y : B, R x y
F:= fun a : A => constructive_definite_description (R a) (H a): forall a : A, {x : B | R a x}{f : A -> B | forall x : A, R x (f x)}A, B: Type
R: A -> B -> Prop
H: forall x : A, exists ! y : B, R x y
F:= fun a : A => constructive_definite_description (R a) (H a): forall a : A, {x : B | R a x}forall x : A, R x (proj1_sig (F x))exact (proj2_sig (F a)). Defined.A, B: Type
R: A -> B -> Prop
H: forall x : A, exists ! y : B, R x y
F:= fun a : A => constructive_definite_description (R a) (H a): forall a : A, {x : B | R a x}
a: AR a (proj1_sig (F a))A, B: Typeforall R : A -> B -> Prop, (forall x : A, exists ! y : B, R x y) -> exists f : A -> B, forall x : A, R x (f x)A, B: Typeforall R : A -> B -> Prop, (forall x : A, exists ! y : B, R x y) -> exists f : A -> B, forall x : A, R x (f x)A, B: Type
R: A -> B -> Prop
H: forall x : A, exists ! y : B, R x yexists f : A -> B, forall x : A, R x (f x)A, B: Type
R: A -> B -> Prop
H: forall x : A, exists ! y : B, R x y{f : A -> B | forall x : A, R x (f x)}assumption. Qed. End UniqueChoice.A, B: Type
R: A -> B -> Prop
H: forall x : A, exists ! y : B, R x yforall x : A, exists ! y : B, R x y