module Order.Semilattice.Meet.NAry where
open is-glb open Glb module _ {o β} {P : Poset o β} (l : is-meet-semilattice P) where open is-meet-semilattice l open Poset P
n-Ary meetsπ
Let be a meet semilattice, and let be a finite family of elements of We can compute meets of in via induction on the size of the family.
βαΆ : β {n} (f : Fin n β Ob) β Ob βαΆ {0} f = top βαΆ {1} f = f fzero βαΆ {suc (suc n)} f = f fzero β© βαΆ (Ξ» i β f (fsuc i)) βαΆ -proj : β {n} {f : Fin n β Ob} (i : Fin n) β βαΆ f β€ f i βαΆ -proj {1} fzero = β€-refl βαΆ -proj {suc (suc n)} fzero = β©β€l βαΆ -proj {suc (suc n)} (fsuc i) = β€-trans β©β€r (βαΆ -proj i) βαΆ -universal : β {n} {f : Fin n β Ob} (x : Ob) β (β i β x β€ f i) β x β€ βαΆ f βαΆ -universal {n = 0} {f = f} x p = ! βαΆ -universal {n = 1} {f = f} x p = p fzero βαΆ -universal {n = suc (suc n)} {f = f} x p = β©-universal _ (p fzero) (βαΆ -universal x (p β fsuc)) Finite-glbs : β {n} (f : Fin n β Ob) β Glb P f Finite-glbs f .Glb.glb = βαΆ f Finite-glbs f .Glb.has-glb .is-glb.glbβ€fam = βαΆ -proj Finite-glbs f .Glb.has-glb .is-glb.greatest = βαΆ -universal
Furthermore, must also have meets of finitely indexed sets. Let be a finitely indexed set with enumeration and let be an family in is a finite family in so it must have a meet. Furthermore, is surjective, so it must reflect the meet.
opaque Finitely-indexed-glbs : β {βα΅’} {I : Type βα΅’} β is-finitely-indexed I β (f : I β Ob) β Glb P f Finitely-indexed-glbs {I = I} fin-indexed f = case fin-indexed of Ξ» cov β cover-reflects-glb (cov .is-cover) (Finite-glbs (f β cov .cover)) where open Finite-cover
Meet semilattice homomorphisms must also preserve finite meets. This follows from another induction on the size of the family we are taking a meet over.
module _ {o β o' β'} {P : Poset o β} {Q : Poset o' β'} {f : Monotone P Q} {Pl Ql} (hom : is-meet-slat-hom f Pl Ql) where abstract private module Pβ = is-meet-semilattice Pl module Qβ = is-meet-semilattice Ql open is-meet-slat-hom hom pres-βαΆ : β {n} (k : Fin n β β P β) β f # (βαΆ Pl k) β‘ βαΆ Ql (apply f β k) pres-βαΆ {n = 0} k = pres-top pres-βαΆ {n = 1} k = refl pres-βαΆ {n = suc (suc n)} k = f # (k fzero Pβ.β© βαΆ Pl (k β fsuc)) β‘β¨ pres-β© _ _ β©β‘ f # (k fzero) Qβ.β© f # βαΆ Pl (k β fsuc) β‘β¨ apβ Qβ._β©_ refl (pres-βαΆ (k β fsuc)) β©β‘ βαΆ Ql (apply f β k) β