I want to consider the following three (related?) Coq definitions.
Inductive nat1: Prop :=
| z1 : nat1
| s1 : nat1 -> nat1.
Inductive nat2 : Set :=
|
Just read about this in an hour. This is because Coq will assume equality of two proof object of a same Prop
. This is an axiom and is called proof irrelevance.
https://coq.inria.fr/library/Coq.Logic.ProofIrrelevance.html
It just thinks a predicate over Prop
(Here P
) doesn't really need to have some proof passed as its argument (or hypothesis) and removed it.
Consider this. Because of every nat1
are the same, whenever we try to proof some property P
, we can just abstract over some nat1
, while use the axiom to rewrite it to required ones. Thus Coq generated the "simplified" version of induction principle.
To generate the "full" version, you can use
Scheme nat1_ind_full := Induction for nat1 Sort Prop.
ref. Different induction principles for Prop and Type