definition example theorem proof

A Symmetric Monoidal Preorder is symmetric monoidal closed (or just closed) if for every there is an element , the hom-element, such that

for all . “Closed” means the preorder is closed under “taking homs”. Think of as a single-use -to- converter: and suffice to get iff suffices to get a single-use converter.

Sources: 7 Sketches §2.5.1, Definition 2.79, Remark 2.81, 2.89, Examples 2.83, 2.85, 2.86, Proposition 2.87, 2.98, Exercises 2.82, 2.84; DaoFP §19.1, §20.1 (“Self-enrichment”); related: Compact Closed Category, Cartesian Closed Category, Monoidal Closed Category.

Examples

  • Cost: (Example 2.83) — subtraction defined from order and product.
  • : , implication (7S Exercise 2.84).
  • : (7S Exercise 2.94).
  • Non-example: (Example 2.85).
  • Chemistry is not closed, but would be a “potential reaction” (Example 2.86, Resource Theory).

Closedness is an adjunction (7S Exercise 2.82)

Condition (2.80) says exactly that is left adjoint to in a Galois Connection, once both are monotone: is monotone by axiom (a); from reflexivity we get , and then gives , hence .

Proposition 2.87

For closed : (a) ; (b) distributes over joins: whenever exists (left adjoints preserve joins, Right Adjoints Preserve Meets); (c) — “a and a -to- converter give a ” (counit, plus symmetry); (d) — “a is a nothing-to- converter” (from and (c)); (e) — converters compose (apply (c) twice).

Self-enrichment (Remark 2.89): makes a -category: since , and (e) is composition. “Before you can really enrich others, you should really enrich yourself.” DaoFP §20.1: any monoidal closed category is self-enriched via internal homs , with composition from the evaluation counit.

Proposition 2.98. If has all joins, then is closed iff distributes over joins (2.88); then by the Adjoint Functor Theorem for Preorders. A closed preorder with all joins is a Quantale.

Docs: Vignette: monoidal preorders & SMCs

Builds on: Bool (Monoidal Preorder) (BoolPre), Cost (CostPre) — run those notes’ Julia code first.

# closed structure computed from joins on a finite quantale: v ⊸ w = ⋁{a | a ⊗ v ≤ w}
hom_from_joins(V, elems, v, w) = join(V, [a for a in elems if leq(V, otimes(V, a, v), w)])
 
# check the adjunction (2.80) on samples
is_closed(V, elems) = all(leq(V, otimes(V, a, v), w) == leq(V, a, hom(V, v, w)) for a in elems, v in elems, w in elems)
is_closed(BoolPre(), [false, true])                          # true
is_closed(CostPre(), [0.0, 1.0, 2.5, Inf])                   # true
-- Mathlib: `HImp` / `HeytingAlgebra` is the cartesian case (⊓ ⊣ ⇨);
-- `OrderedCommMonoid` + residuation: see `Order.Quantale` (Mathlib.Algebra.Order.Quantale)
#check @le_himp_iff              -- a ≤ b ⇨ c ↔ a ⊓ b ≤ c
#check IsQuantale                -- mul distributes over sSup; residuals exist (leftResiduation)
class MonoidalPreorder v => Closed v where
  hom :: v -> v -> v            -- v ⊸ w, with  leq (a <> v) w == leq a (hom v w)
 
instance Closed All  where hom (All v) (All w) = All (not v || w)
instance Closed Cost where hom = homCost