algebra.lattice

Type members

Classlikes

trait Bool[@specialized(Int, Long) A] extends Heyting[A] with GenBool[A]

Boolean algebras are Heyting algebras with the additional constraint that the law of the excluded middle is true (equivalently, double-negation is true).

Boolean algebras are Heyting algebras with the additional constraint that the law of the excluded middle is true (equivalently, double-negation is true).

This means that in addition to the laws Heyting algebras obey, boolean algebras also obey the following:

  • (a ∨ ¬a) = 1
  • ¬¬a = a

Boolean algebras generalize classical logic: one is equivalent to "true" and zero is equivalent to "false". Boolean algebras provide additional logical operators such as xor, nand, nor, and nxor which are commonly used.

Every boolean algebras has a dual algebra, which involves reversing true/false as well as and/or.

Companion
object
object Bool extends HeytingFunctions[[A] =>> Bool[A]] with GenBoolFunctions[[A] =>> Bool[A]]
Companion
class
class BoolFromBoolRing[A](orig: BoolRing[A]) extends GenBoolFromBoolRng[A] with Bool[A]

Every Boolean ring gives rise to a Boolean algebra:

Every Boolean ring gives rise to a Boolean algebra:

  • 0 and 1 are preserved;
  • ring multiplication (times) corresponds to and;
  • ring addition (plus) corresponds to xor;
  • a or b is then defined as a xor b xor (a and b);
  • complement (¬a) is defined as a xor 1.
trait BoundedDistributiveLattice[@specialized(Int, Long, Float, Double) A] extends BoundedLattice[A] with DistributiveLattice[A]

A bounded distributive lattice is a lattice that both bounded and distributive

A bounded distributive lattice is a lattice that both bounded and distributive

Companion
object
trait BoundedJoinSemilattice[@specialized(Int, Long, Float, Double) A] extends JoinSemilattice[A]
Companion
object
trait BoundedLattice[@specialized(Int, Long, Float, Double) A] extends Lattice[A] with BoundedMeetSemilattice[A] with BoundedJoinSemilattice[A]

A bounded lattice is a lattice that additionally has one element that is the bottom (zero, also written as ⊥), and one element that is the top (one, also written as ⊤).

A bounded lattice is a lattice that additionally has one element that is the bottom (zero, also written as ⊥), and one element that is the top (one, also written as ⊤).

This means that for any a in A:

join(zero, a) = a = meet(one, a)

Or written using traditional notation:

(0 ∨ a) = a = (1 ∧ a)

Companion
object
trait BoundedMeetSemilattice[@specialized(Int, Long, Float, Double) A] extends MeetSemilattice[A]
Companion
object
trait DeMorgan[@specialized(Int, Long) A] extends Logic[A]

De Morgan algebras are bounded lattices that are also equipped with a De Morgan involution.

De Morgan algebras are bounded lattices that are also equipped with a De Morgan involution.

De Morgan involution obeys the following laws:

  • ¬¬a = a
  • ¬(x∧y) = ¬x∨¬y

However, in De Morgan algebras this involution does not necessarily provide the law of the excluded middle. This means that there is no guarantee that (a ∨ ¬a) = 1. De Morgan algebra do not not necessarily provide the law of non contradiction either. This means that there is no guarantee that (a ∧ ¬a) = 0.

De Morgan algebras are useful to model fuzzy logic. For a model of classical logic, see the boolean algebra type class implemented as Bool.

Companion
object
object DeMorgan extends DeMorganFunctions[[A] =>> DeMorgan[A]]
Companion
class
trait DistributiveLattice[@specialized(Int, Long, Float, Double) A] extends Lattice[A]

A distributive lattice a lattice where join and meet distribute:

A distributive lattice a lattice where join and meet distribute:

  • a ∨ (b ∧ c) = (a ∨ b) ∧ (a ∨ c)
  • a ∧ (b ∨ c) = (a ∧ b) ∨ (a ∧ c)
Companion
object
class DualBool[@specialized(Int, Long) A](orig: Bool[A]) extends Bool[A]
trait GenBool[@specialized(Int, Long) A] extends DistributiveLattice[A] with BoundedJoinSemilattice[A]

Generalized Boolean algebra, that is, a Boolean algebra without the top element. Generalized Boolean algebras do not (in general) have (absolute) complements, but they have ''relative complements'' (see GenBool.without).

Generalized Boolean algebra, that is, a Boolean algebra without the top element. Generalized Boolean algebras do not (in general) have (absolute) complements, but they have ''relative complements'' (see GenBool.without).

Companion
object
object GenBool extends GenBoolFunctions[[A] =>> GenBool[A]]
Companion
class
class GenBoolFromBoolRng[A](orig: BoolRng[A]) extends GenBool[A]

Every Boolean rng gives rise to a Boolean algebra without top:

Every Boolean rng gives rise to a Boolean algebra without top:

  • 0 is preserved;
  • ring multiplication (times) corresponds to and;
  • ring addition (plus) corresponds to xor;
  • a or b is then defined as a xor b xor (a and b);
  • relative complement a\b is defined as a xor (a and b).

BoolRng.asBool.asBoolRing gives back the original BoolRng.

See also
trait Heyting[@specialized(Int, Long) A] extends BoundedDistributiveLattice[A]

Heyting algebras are bounded lattices that are also equipped with an additional binary operation imp (for implication, also written as →).

Heyting algebras are bounded lattices that are also equipped with an additional binary operation imp (for implication, also written as →).

Implication obeys the following laws:

  • a → a = 1
  • a ∧ (a → b) = a ∧ b
  • b ∧ (a → b) = b
  • a → (b ∧ c) = (a → b) ∧ (a → c)

In heyting algebras, and is equivalent to meet and or is equivalent to join; both methods are available.

Heyting algebra also define complement operation (sometimes written as ¬a). The complement of a is equivalent to (a → 0), and the following laws hold:

  • a ∧ ¬a = 0

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 Bool.

Companion
object
object Heyting extends HeytingFunctions[[A] =>> Heyting[A]] with HeytingGenBoolOverlap[[A] =>> Heyting[A]]
Companion
class
trait HeytingGenBoolOverlap[H <: ([A] =>> Heyting[A])]
trait JoinSemilattice[@specialized(Int, Long, Float, Double) A] extends Serializable

A join-semilattice (or upper semilattice) is a semilattice whose operation is called "join", and which can be thought of as a least upper bound.

A join-semilattice (or upper semilattice) is a semilattice whose operation is called "join", and which can be thought of as a least upper bound.

Companion
object
trait JoinSemilatticeFunctions[J <: ([A] =>> JoinSemilattice[A])]
trait Lattice[@specialized(Int, Long, Float, Double) A] extends JoinSemilattice[A] with MeetSemilattice[A]

A lattice is a set A together with two operations (meet and join). Both operations individually constitute semilattices (join- and meet-semilattices respectively): each operation is commutative, associative, and idempotent.

A lattice is a set A together with two operations (meet and join). Both operations individually constitute semilattices (join- and meet-semilattices respectively): each operation is commutative, associative, and idempotent.

Join can be thought of as finding a least upper bound (supremum), and meet can be thought of as finding a greatest lower bound (infimum).

The join and meet operations are also linked by absorption laws:

meet(a, join(a, b)) = join(a, meet(a, b)) = a

Companion
object
object Lattice extends JoinSemilatticeFunctions[[A] =>> Lattice[A]] with MeetSemilatticeFunctions[[A] =>> Lattice[A]]
Companion
class
trait Logic[@specialized(Int, Long) A] extends BoundedDistributiveLattice[A]

Logic models a logic generally. It is a bounded distributive lattice with an extra negation operator.

Logic models a logic generally. It is a bounded distributive lattice with an extra negation operator.

The negation operator obeys the weak De Morgan laws:

  • ¬(x∨y) = ¬x∧¬y
  • ¬(x∧y) = ¬¬(¬x∨¬y)

For intuitionistic logic see Heyting For fuzzy logic see DeMorgan

Companion
object
object Logic extends LogicFunctions[[A] =>> Logic[A]]
Companion
class
trait LogicFunctions[H <: ([A] =>> Logic[A])]
trait MeetSemilattice[@specialized(Int, Long, Float, Double) A] extends Serializable

A meet-semilattice (or lower semilattice) is a semilattice whose operation is called "meet", and which can be thought of as a greatest lower bound.

A meet-semilattice (or lower semilattice) is a semilattice whose operation is called "meet", and which can be thought of as a greatest lower bound.

Companion
object
trait MeetSemilatticeFunctions[M <: ([A] =>> MeetSemilattice[A])]
class MinMaxBoundedDistributiveLattice[A](min: A, max: A)(o: Order[A]) extends MinMaxLattice[A] with BoundedDistributiveLattice[A]
class MinMaxLattice[@specialized(Int, Long, Float, Double) A](order: Order[A]) extends DistributiveLattice[A]