2014-09-16 18:44:50 +00:00
|
|
|
logic.core
|
|
|
|
==========
|
2014-08-01 17:37:55 +00:00
|
|
|
|
|
|
|
Logical operations and connectives.
|
|
|
|
|
|
|
|
* [prop](prop.lean) : the type Prop
|
|
|
|
* [eq](eq.lean) : equality and disequality
|
2014-08-28 01:39:55 +00:00
|
|
|
* [connectives](connectives.lean) : propositional connectives
|
2014-08-01 17:37:55 +00:00
|
|
|
* [cast](cast.lean) : casts and heterogeneous equality
|
|
|
|
* [quantifiers](quantifiers.lean) : existential and universal quantifiers
|
|
|
|
* [if](if.lean) : if-then-else
|
2014-08-22 20:23:45 +00:00
|
|
|
* [identities](identities.lean) : some useful identities
|
2014-09-16 18:44:50 +00:00
|
|
|
* [examples](examples/examples.md)
|
|
|
|
|
|
|
|
Type classes for general logical manipulations:
|
|
|
|
|
|
|
|
* [inhabited](inhabited.lean) : inhabited types
|
|
|
|
* [nonempty](nonempty.lean) : nonempty type
|
|
|
|
* [decidable](decidable.lean) : decidable types
|
|
|
|
* [instances](instances.lean) : type class instances
|
|
|
|
|
|
|
|
Constructively, inhabited types have a witness, while nonempty types
|
|
|
|
are "proof irrelevant". Classically (assuming the axioms 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.
|
|
|
|
|
|
|
|
|