mk_iff_of_inductive_prop i r makes an iff rule for the inductively defined proposition i.
The new rule r has the shape ∀ps is, i as ↔ ⋁_j, ∃cs, is = cs, where ps are the type
parameters, is are the indices, j ranges over all possible constructors, the cs are the
parameters for each constructors, the equalities is = cs are the instantiations for each
constructor for each of the indices to the inductive type i.
In each case, we remove constructor parameters (i.e. cs) when the corresponding equality would
be just c = i for some index i.
For example: mk_iff_of_inductive_prop on list.chain produces:
mk_iff_of_inductive_prop i r makes an iff rule for the inductively defined proposition i.
The new rule r has the shape ∀ps is, i as ↔ ⋁_j, ∃cs, is = cs, where ps are the type
parameters, is are the indices, j ranges over all possible constructors, the cs are the
parameters for each constructors, the equalities is = cs are the instantiations for each
constructor for each of the indices to the inductive type i.
In each case, we remove constructor parameters (i.e. cs) when the corresponding equality would
be just c = i for some index i.
For example: mk_iff_of_inductive_prop on list.chain produces: