Documentation

Mathlib.Algebra.Order.Quantale

Theory of quantales #

Quantales are the non-commutative generalization of locales/frames and as such are linked to point-free topology and order theory. Applications are found throughout logic, quantum mechanics, and computer science (see e.g. [Vickers1989] and [Mulvey1986]).

The most general definition of quantale occurring in literature, is that a quantale is a semigroup distributing over a complete sup-semilattice. In our definition below, we use the fact that every complete sup-semilattice is in fact a complete lattice, and make constructs defined for those immediately available. Another view could be to define a quantale as a complete idempotent semiring, i.e. a complete semiring in which + and sup coincide. However, we will often encounter additive quantales, i.e. quantales in which the semigroup operator is thought of as addition, in which case the link with semirings will lead to confusion notationally.

In this file, we follow the basic definition set out on the wikipedia page on quantales, using a mixin typeclass to make the special cases of unital, commutative, idempotent, integral, and involutive quantales easier to add on later.

Main definitions #

Notation #

References #

https://en.wikipedia.org/wiki/Quantale https://encyclopediaofmath.org/wiki/Quantale https://ncatlab.org/nlab/show/quantale

class IsAddQuantale (α : Type u_1) [AddSemigroup α] [CompleteLattice α] :

An additive quantale is an additive semigroup distributing over a complete lattice.

  • add_sSup_distrib (x : α) (s : Set α) : x + sSup s = ys, x + y

    Addition is distributive over join in a quantale

  • sSup_add_distrib (s : Set α) (y : α) : sSup s + y = xs, x + y

    Addition is distributive over join in a quantale

Instances
    structure AddQuantale (α : Type u_1) [AddSemigroup α] [CompleteLattice α] [IsAddQuantale α] :

    A quantale is a semigroup distributing over a complete lattice.

      Instances For
        class IsQuantale (α : Type u_1) [Semigroup α] [CompleteLattice α] :

        A quantale is a semigroup distributing over a complete lattice.

        • mul_sSup_distrib (x : α) (s : Set α) : x * sSup s = ys, x * y

          Multiplication is distributive over join in a quantale

        • sSup_mul_distrib (s : Set α) (y : α) : sSup s * y = xs, x * y

          Multiplication is distributive over join in a quantale

        Instances
          structure Quantale (α : Type u_1) [Semigroup α] [CompleteLattice α] [IsQuantale α] :

          A quantale is a semigroup distributing over a complete lattice.

            Instances For
              theorem mul_sSup_distrib {α : Type u_1} {x : α} {s : Set α} [Semigroup α] [CompleteLattice α] [IsQuantale α] :
              x * sSup s = ys, x * y
              theorem add_sSup_distrib {α : Type u_1} {x : α} {s : Set α} [AddSemigroup α] [CompleteLattice α] [IsAddQuantale α] :
              x + sSup s = ys, x + y
              theorem sSup_mul_distrib {α : Type u_1} {x : α} {s : Set α} [Semigroup α] [CompleteLattice α] [IsQuantale α] :
              sSup s * x = ys, y * x
              theorem sSup_add_distrib {α : Type u_1} {x : α} {s : Set α} [AddSemigroup α] [CompleteLattice α] [IsAddQuantale α] :
              sSup s + x = ys, y + x
              def AddQuantale.leftAddResiduation {α : Type u_1} [AddSemigroup α] [CompleteLattice α] (x y : α) :
              α

              Left- and right- residuation operators on an additive quantale are similar to the Heyting operator on complete lattices, but for a non-commutative logic. I.e. x ≤ y ⇨ₗ z ↔ x + y ≤ z or alternatively x ⇨ₗ y = sSup { z | z + x ≤ y }.

              Equations
              Instances For
                def AddQuantale.rightAddResiduation {α : Type u_1} [AddSemigroup α] [CompleteLattice α] (x y : α) :
                α

                Left- and right- residuation operators on an additive quantale are similar to the Heyting operator on complete lattices, but for a non-commutative logic. I.e. x ≤ y ⇨ᵣ z ↔ y + x ≤ z or alternatively x ⇨ₗ y = sSup { z | x + z ≤ y }."

                Equations
                Instances For

                  Left- and right- residuation operators on an additive quantale are similar to the Heyting operator on complete lattices, but for a non-commutative logic. I.e. x ≤ y ⇨ₗ z ↔ x + y ≤ z or alternatively x ⇨ₗ y = sSup { z | z + x ≤ y }.

                  Equations
                  Instances For

                    Left- and right- residuation operators on an additive quantale are similar to the Heyting operator on complete lattices, but for a non-commutative logic. I.e. x ≤ y ⇨ᵣ z ↔ y + x ≤ z or alternatively x ⇨ₗ y = sSup { z | x + z ≤ y }."

                    Equations
                    Instances For
                      def Quantale.leftMulResiduation {α : Type u_1} [Semigroup α] [CompleteLattice α] (x y : α) :
                      α

                      Left- and right-residuation operators on a quantale are similar to the Heyting operator on complete lattices, but for a non-commutative logic. I.e. x ≤ y ⇨ₗ z ↔ x * y ≤ z or alternatively x ⇨ₗ y = sSup { z | z * x ≤ y }.

                      Equations
                      Instances For
                        def Quantale.rightMulResiduation {α : Type u_1} [Semigroup α] [CompleteLattice α] (x y : α) :
                        α

                        Left- and right- residuation operators on a quantale are similar to the Heyting operator on complete lattices, but for a non-commutative logic. I.e. x ≤ y ⇨ᵣ z ↔ y * x ≤ z or alternatively x ⇨ₗ y = sSup { z | x * z ≤ y }.

                        Equations
                        Instances For

                          Left- and right-residuation operators on a quantale are similar to the Heyting operator on complete lattices, but for a non-commutative logic. I.e. x ≤ y ⇨ₗ z ↔ x * y ≤ z or alternatively x ⇨ₗ y = sSup { z | z * x ≤ y }.

                          Equations
                          Instances For

                            Left- and right- residuation operators on a quantale are similar to the Heyting operator on complete lattices, but for a non-commutative logic. I.e. x ≤ y ⇨ᵣ z ↔ y * x ≤ z or alternatively x ⇨ₗ y = sSup { z | x * z ≤ y }.

                            Equations
                            Instances For
                              theorem Quantale.mul_iSup_distrib {α : Type u_1} {ι : Type u_2} {x : α} {f : ια} [Semigroup α] [CompleteLattice α] [IsQuantale α] :
                              x * ⨆ (i : ι), f i = ⨆ (i : ι), x * f i
                              theorem AddQuantale.add_iSup_distrib {α : Type u_1} {ι : Type u_2} {x : α} {f : ια} [AddSemigroup α] [CompleteLattice α] [IsAddQuantale α] :
                              x + ⨆ (i : ι), f i = ⨆ (i : ι), x + f i
                              theorem Quantale.iSup_mul_distrib {α : Type u_1} {ι : Type u_2} {x : α} {f : ια} [Semigroup α] [CompleteLattice α] [IsQuantale α] :
                              (⨆ (i : ι), f i) * x = ⨆ (i : ι), f i * x
                              theorem AddQuantale.iSup_add_distrib {α : Type u_1} {ι : Type u_2} {x : α} {f : ια} [AddSemigroup α] [CompleteLattice α] [IsAddQuantale α] :
                              (⨆ (i : ι), f i) + x = ⨆ (i : ι), f i + x
                              theorem Quantale.mul_sup_distrib {α : Type u_1} {x y z : α} [Semigroup α] [CompleteLattice α] [IsQuantale α] :
                              x * (y z) = x * y x * z
                              theorem AddQuantale.add_sup_distrib {α : Type u_1} {x y z : α} [AddSemigroup α] [CompleteLattice α] [IsAddQuantale α] :
                              x + y z = (x + y) (x + z)
                              theorem Quantale.sup_mul_distrib {α : Type u_1} {x y z : α} [Semigroup α] [CompleteLattice α] [IsQuantale α] :
                              (x y) * z = x * z y * z
                              theorem AddQuantale.sup_add_distrib {α : Type u_1} {x y z : α} [AddSemigroup α] [CompleteLattice α] [IsAddQuantale α] :
                              x y + z = (x + z) (y + z)
                              @[simp]
                              theorem Quantale.bot_mul {α : Type u_3} [Semigroup α] [CompleteLattice α] [IsQuantale α] {x : α} :
                              @[simp]
                              theorem AddQuantale.bot_add {α : Type u_3} [AddSemigroup α] [CompleteLattice α] [IsAddQuantale α] {x : α} :
                              @[simp]
                              theorem Quantale.mul_bot {α : Type u_3} [Semigroup α] [CompleteLattice α] [IsQuantale α] {x : α} :
                              @[simp]
                              theorem AddQuantale.add_bot {α : Type u_3} [AddSemigroup α] [CompleteLattice α] [IsAddQuantale α] {x : α} :