module Order.Diagram.Join where
Joinsđ
In the binary case, a least upper bound is called a join. A short computation shows that being a join is precisely being the lub of a family of two elements.
record is-join (P : Poset o â) (a b lub : â P â) : Type (o â â) where
no-eta-equality
open Poset P
field
: a †lub
lâ€join : b †lub
râ€join : (ub' : Ob) â a †ub' â b †ub' â lub †ub'
least
record Join (P : Poset o â) (a b : â P â) : Type (o â â) where
no-eta-equality
field
: â P â
lub : is-join P a b lub
has-join open is-join has-join public
: Poset o â â Type (o â â)
Has-joins = â x y â Join P x y
Has-joins P
open is-join
: â {a b lub} â is-join P a b lub â is-lub P (if_then a else b) lub
is-joinâis-lub .famâ€lub true = join .lâ€join
is-joinâis-lub join .famâ€lub false = join .râ€join
is-joinâis-lub join .least ub' x = join .least ub' (x true) (x false)
is-joinâis-lub join
: â {a b lub} â is-lub P (if_then a else b) lub â is-join P a b lub
is-lubâis-join .lâ€join = lub .famâ€lub true
is-lubâis-join lub .râ€join = lub .famâ€lub false
is-lubâis-join lub .least ub' a<ub' b<ub' = lub .least ub' λ where
is-lubâis-join lub â a<ub'
true â b<ub' false
An important lemma about joins is that, if , then the least upper bound of and is just :
: â {a b} â a †b â is-join P a b b
gtâis-join .lâ€join = aâ€b
gtâis-join aâ€b .râ€join = â€-refl
gtâis-join aâ€b .least ub' _ bâ€ub' = bâ€ub'
gtâis-join aâ€b
: â {a b l} â a †b â is-join P a b l â b ⥠l
gt-join = join-unique (gtâis-join aâ€b) l gt-join aâ€b l
As coproductsđ
Joins are the âthinningâ of coproducts; Put another way, when we allow a set of relators, rather than insisting on a propositional relation, the concept of join needs to be refined to that of coproduct.
open is-coproduct
open Coproduct
: â {a b lub : Ob} â is-join P a b lub â Coproduct (posetâcategory P) a b
is-joinâcoproduct .coapex = _
is-joinâcoproduct lub .inâ = lub .is-join.lâ€join
is-joinâcoproduct lub .inâ = lub .is-join.râ€join
is-joinâcoproduct lub .has-is-coproduct .[_,_] a<q b<q =
is-joinâcoproduct lub .is-join.least _ a<q b<q
lub .has-is-coproduct .inââfactor = prop!
is-joinâcoproduct lub .has-is-coproduct .inââfactor = prop!
is-joinâcoproduct lub .has-is-coproduct .unique _ _ _ = prop! is-joinâcoproduct lub