I am probably missing something fundamental.
I can prove the following "identity":
Theorem identity_simple : forall a : Prop, a -> a.
With intro. intro. assumption.
.
However, I can't seem to prove:
Theorem identity : forall a : Prop, a.
Of course I can do intro
, but that leaves me with:
a : Prop
_________(1/1)
a
With which I do not know what to do.
The first form seems redundant, to state that for all a
, a
implies a
.
forall a : Prop, a -> a.
reads as "given the proof of some proposition a
we can construct a proof of the same proposition". Which is true, since we can just return the original proof.
Let's check it with Coq:
Print identity_simple.
(*
output:
identity_simple = fun (a : Prop) (H : a) => H
: forall a : Prop, a -> a
*)
the proof term fun (a : Prop) (H : a) => H
expresses exactly the described behavior.
The first form seems redundant, to state that for all
a
,a
impliesa
.
You are right in some sense -- it is pretty obvious. You can think of it as a test -- if you cannot prove it then there must be something wrong with the logic.
forall a : Prop, a.
reads as "we can construct a proof of any proposition". Which is not true, since for example, you cannot construct the proof of False
(in the empty context). And that would be a disaster -- we wouldn't want to use a logic in which everything is provable.