A lattice is a partial order in which every pair of elements has a meet (greatest lower bound) and a join (least upper bound).
The meet and join give the lattice two binary operations. These operations satisfy four laws: commutativity (), associativity (), idempotence (), and absorption ( and ). Absorption is the law that ties meet and join together — it says that combining an element with something larger than it (via join) and then taking the meet recovers the original.
A lattice can equivalently be defined as a set with two binary operations satisfying these four laws, without reference to an underlying order. The order is recoverable: if and only if . The order-theoretic and algebraic definitions produce the same structure.
A lattice is complete if meets and joins exist for all subsets, not just pairs. A lattice is bounded if it has a top element (join of everything) and a bottom element (meet of everything). Every complete lattice is bounded, since the join of the empty set is and the meet of the empty set is . A lattice is distributive if meet distributes over join: .
A Heyting algebra is a bounded distributive lattice with an additional operation — the Heyting implication — satisfying the residuation law: if and only if . Implication is right adjoint to meet. A Boolean algebra is a Heyting algebra where every element has a complement (). Every Boolean algebra is a Heyting algebra. The converse is false — Heyting algebras allow a constructive logic where excluded middle does not hold.
The power set of any set, ordered by inclusion, is a complete Boolean algebra. The open sets of a topological space, ordered by inclusion, form a complete Heyting algebra that is generally not Boolean. These are the two most basic examples, and the gap between them — Boolean versus Heyting — is the gap between classical and constructive logic.