Putting this in “Miscellaneous” for now because while it feels a bit like a proposal, it is really not important enough to make one formally; I’m just curious about the design consderations of the standard library.
The axiom constructive_indefinite_description
, as postulated in Coq.Logic.IndefiniteDescription
, has the following type:
Definition indefinite_description :=
forall (A : Type) (P : A->Prop), ex P -> sig P.
This is straightforward enough, but I cannot help but compare it to another possible axiom which is even simpler in concept:
Definition simple_description :=
forall (A : Type), inhabited A -> A.
These two are provably equivalent:
Proposition simple_description_implies_indefinite_description :
simple_description -> indefinite_description.
Proof.
intro d. repeat intro.
apply d; firstorder.
Defined.
Proposition indefinite_description_implies_simple_description :
indefinite_description -> simple_description.
Proof.
intro d. repeat intro.
apply proj1_sig with (P := λ _, True), d; firstorder.
Defined.
Why is the former proposition, rather than the latter, the one given as an axiom in the standard library? It doesn’t really matter (that’s the whole point of being equivalent) but I find the latter just more aesthetic somehow in its directness, and it seems to be somewhat clearer (and more honest perhaps?) with regard to what the axiom ‘does’.