Library Coq.Logic.ClassicalDescription
This file provides classical logic and definite description, which is
equivalent to providing classical logic and Church's iota operator
Classical logic and definite descriptions implies excluded-middle
in Set and leads to a classical world populated with non
computable functions. It conflicts with the impredicativity of
Set
Set Implicit Arguments.
Require Export Classical. Require Export Description. Require Import ChoiceFacts.
The idea for the following proof comes from ChicliPottierSimpson02
Theorem excluded_middle_informative : forall P:Prop, {P} + {~ P}.
Theorem classical_definite_description :
forall (A : Type) (P : A->Prop), inhabited A ->
{ x : A | (exists! x : A, P x) -> P x }.
Church's iota operator
Definition iota (A : Type) (i:inhabited A) (P : A->Prop) : A
:= proj1_sig (classical_definite_description P i).
Definition iota_spec (A : Type) (i:inhabited A) (P : A->Prop) :
(exists! x:A, P x) -> P (iota i P)
:= proj2_sig (classical_definite_description P i).
Axiom of unique "choice" (functional reification of functional relations)
Theorem dependent_unique_choice :
forall (A:Type) (B:A -> Type) (R:forall x:A, B x -> Prop),
(forall x:A, exists! y : B x, R x y) ->
(exists f : (forall x:A, B x), forall x:A, R x (f x)).
Theorem unique_choice :
forall (A B:Type) (R:A -> B -> Prop),
(forall x:A, exists! y : B, R x y) ->
(exists f : A -> B, forall x:A, R x (f x)).
forall (A:Type) (B:A -> Type) (R:forall x:A, B x -> Prop),
(forall x:A, exists! y : B x, R x y) ->
(exists f : (forall x:A, B x), forall x:A, R x (f x)).
Theorem unique_choice :
forall (A B:Type) (R:A -> B -> Prop),
(forall x:A, exists! y : B, R x y) ->
(exists f : A -> B, forall x:A, R x (f x)).
Compatibility lemmas
Unset Implicit Arguments.
Definition dependent_description := dependent_unique_choice.
Definition description := unique_choice.