/** * Heyting algebras are bounded (distributive) lattices that are also equipped with an additional binary operation * `implies` (also written as `→`). Heyting algebras also define a complement operation `not` (sometimes written as * `¬a`) * * However, in Heyting algebras this operation is only a pseudo-complement, since Heyting algebras do not necessarily * provide the law of the excluded middle. This means that there is no guarantee that `a ∨ ¬a = 1`. * * Heyting algebras model intuitionistic logic. For a model of classical logic, see the boolean algebra type class * implemented as `BooleanAlgebra`. * * A `HeytingAlgebra` must satisfy the following laws in addition to `BoundedDistributiveLattice` laws: * * - Implication: * - `a → a <-> 1` * - `a ∧ (a → b) <-> a ∧ b` * - `b ∧ (a → b) <-> b` * - `a → (b ∧ c) <-> (a → b) ∧ (a → c)` * - Complemented * - `¬a <-> a → 0` * * @since 2.0.0 */ import { BoundedDistributiveLattice } from './BoundedDistributiveLattice' /** * @category model * @since 2.0.0 */ export interface HeytingAlgebra extends BoundedDistributiveLattice { readonly implies: (x: A, y: A) => A readonly not: (x: A) => A }