module Cubical.Relation.Binary.Order.Pseudolattice.Base where open import Cubical.Foundations.Prelude open import Cubical.Foundations.SIP open import Cubical.Relation.Binary.Base open import Cubical.Relation.Binary.Order.Poset renaming (isPseudolattice to pseudolattice) open import Cubical.Relation.Binary.Order.StrictOrder open BinaryRelation private variable ℓ ℓ' : Level record IsPseudolattice {L : Type ℓ} (_≤_ : L → L → Type ℓ') : Type (ℓ-max ℓ ℓ') where constructor ispseudolattice field isPoset : IsPoset _≤_ isPseudolattice : pseudolattice (poset L _≤_ isPoset) open IsPoset isPoset public _∧l_ : L → L → L a ∧l b = (isPseudolattice .fst a b) .fst _∨l_ : L → L → L a ∨l b = (isPseudolattice .snd a b) .fst infixl 7 _∧l_ infixl 6 _∨l_ record PseudolatticeStr (ℓ' : Level) (L : Type ℓ) : Type (ℓ-suc (ℓ-max ℓ ℓ')) where constructor pseudolatticestr field _≤_ : L → L → Type ℓ' is-pseudolattice : IsPseudolattice _≤_ open IsPseudolattice is-pseudolattice public Pseudolattice : ∀ ℓ ℓ' → Type (ℓ-suc (ℓ-max ℓ ℓ')) Pseudolattice ℓ ℓ' = TypeWithStr ℓ (PseudolatticeStr ℓ') makeIsPseudolattice : {L : Type ℓ} {_≤_ : L → L → Type ℓ'} (is-setL : isSet L) (is-prop-valued : isPropValued _≤_) (is-refl : isRefl _≤_) (is-trans : isTrans _≤_) (is-antisym : isAntisym _≤_) (is-meet-semipseudolattice : isMeetSemipseudolattice (poset L _≤_ (isposet is-setL is-prop-valued is-refl is-trans is-antisym))) (is-join-semipseudolattice : isJoinSemipseudolattice (poset L _≤_ (isposet is-setL is-prop-valued is-refl is-trans is-antisym))) → IsPseudolattice _≤_ makeIsPseudolattice {_≤_ = _≤_} is-setL is-prop-valued is-refl is-trans is-antisym is-meet-semipseudolattice is-join-semipseudolattice = PS where PS : IsPseudolattice _≤_ PS .IsPseudolattice.isPoset = isposet is-setL is-prop-valued is-refl is-trans is-antisym PS .IsPseudolattice.isPseudolattice = is-meet-semipseudolattice , is-join-semipseudolattice