2014-08-01 17:37:55 +00:00
|
|
|
logic.classes
|
|
|
|
=============
|
|
|
|
|
|
|
|
Useful classes for general logical manipulations.
|
|
|
|
|
|
|
|
* [inhabited](inhabited.lean) : inhabited types
|
2014-08-17 21:41:23 +00:00
|
|
|
* [nonempty](nonempty.lean) : nonempty type
|
2014-08-01 17:37:55 +00:00
|
|
|
* [decidable](decidable.lean) : decidable types
|
2014-08-17 21:41:23 +00:00
|
|
|
* [congr](congr.lean) : congruences with respect to suitable relations
|
|
|
|
|
|
|
|
Constructively, inhabited types have a witness, while nonempty types
|
|
|
|
are "proof irrelevant". Classically (assuming the axiom in
|
|
|
|
`logic.axioms.hilbert`) the two are equivalent. Type class inferences
|
|
|
|
are set up to use "inhabited" however, so users should use that to
|
|
|
|
declare that types have an element. Use "nonempty" in the hypothesis
|
|
|
|
of a theorem when the theorem does not depend on the witness chosen.
|