module Order.Diagram.Meet whereprivate variable
  o ā : LevelMeetsš
As mentioned before, in the binary case, we refer to glbs as meets: The meet of and is, if it exists, the greatest element satisfying and
record is-meet (P : Poset o ā) (a b glb : ā P ā) : Type (o ā ā) where
  no-eta-equality
  open Poset P
  field
    meetā¤l   : glb ⤠a
    meetā¤r   : glb ⤠b
    greatest : (lb' : Ob) ā lb' ⤠a ā lb' ⤠b ā lb' ⤠glb
record Meet (P : Poset o ā) (a b : ā P ā) : Type (o ā ā) where
  no-eta-equality
  field
    glb : ā P ā
    has-meet : is-meet P a b glb
  open is-meet has-meet public
open is-meet
Has-meets : Poset o ā ā Type (o ā ā)
Has-meets P = ā x y ā Meet P x yunquoteDecl H-Level-is-meet = declare-record-hlevel 1 H-Level-is-meet (quote is-meet)
module _ {P : Poset o ā} where
  open Poset P
  open is-glb
  open GlbA shuffling of terms shows that being a meet is precisely being the greatest lower bound of a family of two elements.
  is-meetāis-glb : ā {a b glb} ā is-meet P a b glb ā is-glb P (if_then a else b) glb
  is-meetāis-glb meet .glbā¤fam true = meet .meetā¤l
  is-meetāis-glb meet .glbā¤fam false = meet .meetā¤r
  is-meetāis-glb meet .greatest glb' x = meet .greatest glb' (x true) (x false)
  is-glbāis-meet : ā {F : Bool ā Ob} {glb} ā is-glb P F glb ā is-meet P (F true) (F false) glb
  is-glbāis-meet glb .meetā¤l = glb .glbā¤fam true
  is-glbāis-meet glb .meetā¤r = glb .glbā¤fam false
  is-glbāis-meet glb .greatest lb' lb'<a lb'<b = glb .greatest lb' Ī» where
    true  ā lb'<a
    false ā lb'<b  meet-unique : ā {a b x y} ā is-meet P a b x ā is-meet P a b y ā x ā” y
  meet-unique {a = a} {b} x-meet y-meet = glb-unique
    (is-meetāis-glb x-meet)
    (is-meetāis-glb y-meet)
  Meet-is-prop : ā {a b} ā is-prop (Meet P a b)
  Meet-is-prop p q i .Meet.glb =
    meet-unique (Meet.has-meet p) (Meet.has-meet q) i
  Meet-is-prop {a = a} {b = b} p q i .Meet.has-meet =
    is-propāpathp
      {B = Ī» i ā is-meet P a b (meet-unique (Meet.has-meet p) (Meet.has-meet q) i)}
      (Ī» i ā hlevel 1)
      (Meet.has-meet p) (Meet.has-meet q) i
  instance
    H-Level-Meet
      : ā {a b} {n}
      ā H-Level (Meet P a b) (suc n)
    H-Level-Meet = prop-instance Meet-is-prop
  MeetāGlb : ā {a b} ā Meet P a b ā Glb P (if_then a else b)
  MeetāGlb meet .Glb.glb = Meet.glb meet
  MeetāGlb meet .Glb.has-glb = is-meetāis-glb (Meet.has-meet meet)
  GlbāMeet : ā {a b} ā Glb P (if_then a else b) ā Meet P a b
  GlbāMeet glb .Meet.glb = Glb.glb glb
  GlbāMeet glb .Meet.has-meet = is-glbāis-meet (Glb.has-glb glb)
  is-meetāis-glb : ā {a b glb} ā is-equiv (is-meetāis-glb {a} {b} {glb})
  is-meetāis-glb = biimp-is-equiv! _ is-glbāis-meet
  MeetāGlb : ā {a b} ā is-equiv (MeetāGlb {a} {b})
  MeetāGlb = biimp-is-equiv! _ GlbāMeetAn important lemma about meets is that, if then the greatest lower bound of and is just
  leāis-meet : ā {a b} ā a ⤠b ā is-meet P a b a
  leāis-meet aā¤b .meetā¤l = ā¤-refl
  leāis-meet aā¤b .meetā¤r = aā¤b
  leāis-meet aā¤b .greatest lb' lb'ā¤a _ = lb'ā¤a
  le-meet : ā {a b l} ā a ⤠b ā is-meet P a b l ā a ā” l
  le-meet aā¤b l = meet-unique (leāis-meet aā¤b) lAs productsš
When passing from posets to categories, meets become products: coming from the other direction, if a category has each a proposition, then products in are simply meets.
  open is-product
  open Product
  is-meetāproduct : ā {a b glb : Ob} ā is-meet P a b glb ā Product (posetācategory P) a b
  is-meetāproduct glb .apex = _
  is-meetāproduct glb .Ļā = glb .is-meet.meetā¤l
  is-meetāproduct glb .Ļā = glb .is-meet.meetā¤r
  is-meetāproduct glb .has-is-product .āØ_,_ā© q<a q<b =
    glb .is-meet.greatest _ q<a q<b
  is-meetāproduct glb .has-is-product .ĻāāāØā© = prop!
  is-meetāproduct glb .has-is-product .ĻāāāØā© = prop!
  is-meetāproduct glb .has-is-product .unique _ _ = prop!