Let be a Preorder and . An element is a join (least upper bound) of if
(a) for all , , and (b) for all with for all , we have .
We write or , and when . Joins are the dual of meets (replace by everywhere), so all remarks there — uniqueness up to equivalence, possible non-existence, Proposition 1.91 () — dualize.
Sources: 7 Sketches §1.1 (“joining systems”), Definition 1.81, Examples 1.87–1.89, Exercises 1.7, 1.85, 1.90, 1.94; Definition 1.93; CTfS §3.4.2 (Definition 3.4.2.1, Exercises 3.4.2.2–3.4.2.4), §3.4.4 (Exercises 3.4.4.3, 3.4.4.7, 3.4.4.10–3.4.4.11)
Examples
- Joining systems: for partitions, is the transitive closure of the union of connections — the smallest system bigger than both (§1.1.2, 7S Exercise 1.6).
- Booleans: join is OR; , (7S Exercise 1.7).
- Power Set: . Total Order: supremum. Divisibility Order: .
- has join ; has none.
Joins in science (Category Theory for Scientists §3.4.4)
- Taxonomy: in the tree of life ordered by “is a kind of”, the join of two species is their most specific common taxon; meets of distinct species usually do not exist (CTfS Exercise 3.4.4.3, Tree of Life).
- Geography: open regions of the earth ordered by inclusion have joins (unions) and binary meets (intersections). Assigning to each region the interval of temperatures recorded in it is a monotone map to intervals of that preserves joins (the range over a union is the smallest interval containing both ranges) but not meets: the range over can be strictly smaller than the intersection of the two ranges (CTfS Exercise 3.4.4.11).
- Security: the sets of people who need to know every piece of information in reverse inclusion () and are closed under intersection, so they have meets; joins of such sets need not be unions (CTfS Exercise 3.4.4.7).
Joins and observations
For any monotone and with joins, (7S Exercise 1.94); strict inequality is a Generative Effect. Left adjoints of Galois connections preserve joins (and right adjoints preserve meets); a map out of a preorder with all joins is a left adjoint iff it preserves joins (Adjoint Functor Theorem for Preorders).
Categorically a join is a Colimit in the thin category: is the Coproduct, is the bottom element, an Initial Object. In a Quantale the monoidal product distributes over all joins.
Docs: FinSets · C-set morphisms · Vignette: meets
function join_in(leq, xs, A)
ubs = [q for q in xs if all(leq(a, q) for a in A)]
for p in ubs
all(leq(p, q) for q in ubs) && return p
end
nothing
end
join_in((a,b) -> b % a == 0, 1:12, [4, 6]) # 12 (lcm)Catlab version (run in a fresh Julia session — Catlab exports its own compose, id, FinFunction, …):
using Catlab
X = FinSet(3); U = Subobject(X, [1,2]); V = Subobject(X, [2,3])
join(U, V) # {1,2,3}#check @IsLUB
#check @sSup
example (A B : Set ℕ) : A ⊔ B = A ∪ B := rfl
example (a b : Bool) : a ⊔ b = (a || b) := rfljoin :: Preorder a => [a] -> [a] -> Maybe a
join xs as =
let ubs = [q | q <- xs, all (`leq` q) as]
in case [p | p <- ubs, all (leq p) ubs] of
(p:_) -> Just p
[] -> Nothing