{-# OPTIONS --postfix-projections --safe --without-K #-} module NEL.Frame where open import Level using (suc; _⊔_; Lift; lift; 0ℓ; lower) open import Algebra.Ordered open import Algebra using (_DistributesOver_) open import Data.Product as Product using (_×_; _,_) open import Relation.Binary open import NEL.Model record Frame c ℓ₁ ℓ₂ : Set (suc (c ⊔ ℓ₁ ⊔ ℓ₂)) where field Carrier : Set c _≈_ : Carrier → Carrier → Set ℓ₁ _≲_ : Carrier → Carrier → Set ℓ₂ I : Carrier _◁_ : Carrier → Carrier → Carrier _⅋_ : Carrier → Carrier → Carrier ! : Carrier → Carrier !-discard : ∀ {x} → ! x ≲ I !-duplicate : ∀ {x} → ! x ≲ (! x ⅋ ! x) !-derelict : ∀ {x} → ! x ≲ x !-dig : ∀ {x} → ! x ≲ ! (! x) ⅋-◁-isCommutativeDuoidal : IsCommutativeDuoidal _≈_ _≲_ _⅋_ _◁_ I I open IsCommutativeDuoidal ⅋-◁-isCommutativeDuoidal public using ( isPreorder ; isPartialOrder ; refl ; reflexive ; trans ; antisym ; isEquivalence ; setoid ; module Eq ; ◁-isMagma ; ◁-isSemigroup ; ◁-isMonoid ; ◁-isPromagma ; ◁-isProsemigroup ; ◁-isPromonoid ; ◁-isPomagma ; ◁-isPosemigroup ; ◁-cong ; ◁-congˡ ; ◁-congʳ ; ◁-mono ; ◁-monoˡ ; ◁-monoʳ ; ◁-assoc ; ◁-identity ; ◁-identityˡ ; ◁-identityʳ ; ◁-isPomonoid ; ◁-idem-ε ; ε≲ι ) renaming ( ∙-isMagma to ⅋-isMagma ; ∙-isSemigroup to ⅋-isSemigroup ; ∙-isMonoid to ⅋-isMonoid ; ∙-isPromagma to ⅋-isPromagma ; ∙-isProsemigroup to ⅋-isProsemigroup ; ∙-isPromonoid to ⅋-isPromonoid ; ∙-isPomagma to ⅋-isPomagma ; ∙-isPosemigroup to ⅋-isPosemigroup ; ∙-isPomonoid to ⅋-isPomonoid ; ∙-isCommutativePomonoid to ⅋-isCommutativePomonoid ; isDuoidal to ⅋-◁-isDuoidal ; ∙-◁-entropy to ⅋-◁-entropy ; ∙-idem-ι to ⅋-idem-ι ; ∙-cong to ⅋-cong ; ∙-congˡ to ⅋-congˡ ; ∙-congʳ to ⅋-congʳ ; ∙-mono to ⅋-mono ; ∙-monoˡ to ⅋-monoˡ ; ∙-monoʳ to ⅋-monoʳ ; ∙-assoc to ⅋-assoc ; ∙-identity to ⅋-identity ; ∙-identityˡ to ⅋-identityˡ ; ∙-identityʳ to ⅋-identityʳ ; ∙-comm to ⅋-comm ) poset : Poset _ _ _ poset = record { isPartialOrder = isPartialOrder } module FrameModel {a ℓ₁ ℓ₂} (frame : Frame a ℓ₁ ℓ₂) where import Algebra.Ordered.Construction.LowerSet import Algebra.Ordered.Construction.Chu open Frame frame module L where open Algebra.Ordered.Construction.LowerSet poset public open DayDuoidal ⅋-◁-isDuoidal public using ( ε ; _◁_ ; ι ; ◁-mono ; ◁-monoˡ ; ◁-monoʳ ; ◁-cong ; ◁-congˡ ; ◁-congʳ ; ◁-assoc ; ◁-identity ; ◁-identityˡ ; ◁-identityʳ ; ◁-isPomonoid ; η-preserve-◁ ; η-preserve-◁⁻¹ ; ε≤ι ) renaming ( _∙_ to _⅋_ ; ∙-mono to ⅋-mono ; ∙-monoˡ to ⅋-monoˡ ; ∙-monoʳ to ⅋-monoʳ ; ∙-cong to ⅋-cong ; ∙-congˡ to ⅋-congˡ ; ∙-congʳ to ⅋-congʳ ; ∙-assoc to ⅋-assoc ; ∙-identity to ⅋-identity ; ∙-identityˡ to ⅋-identityˡ ; ∙-identityʳ to ⅋-identityʳ ; ∙-isPomonoid to ⅋-isPomonoid ; η-preserve-∙ to η-preserve-⅋ ; η-preserve-∙⁻¹ to η-preserve-⅋⁻¹ ; ∙-◁-isDuoidal to ⅋-◁-isDuoidal ) open DayCommutative ⅋-isCommutativePomonoid public using ( _⊸_ ; ⊸-residual-to ; ⊸-residual-from ; ⊸-residual ; module Exp) renaming ( ∙-comm to ⅋-comm ; ∙-isCommutativePomonoid to ⅋-isCommutativePomonoid ; ⊸-∙-isResiduatedCommutativePomonoid to ⊸-⅋-isResiduatedCommutativePomonoid ) open Exp ! !-discard !-duplicate !-derelict !-dig public using ( ! ; !-context; nil; pair; leaf ; !-mono ; !-monoidal-unit ; !-monoidal ; !-discard ; !-duplicate ; !-derelict ; !-dig ; η-preserve-! ) open L public using ( LowerSet ; ICarrier ; ≤-closed ; _≤_ ; *≤* ) module C where units-iso : L.ε L.≈ L.ι units-iso .Product.proj₁ = L.ε≤ι units-iso .Product.proj₂ .*≤* x≤I = x≤I private module C where open Algebra.Ordered.Construction.Chu.Construction L.⊸-⅋-isResiduatedCommutativePomonoid L.∧-⊤-isBoundedMeetSemilattice L.∨-⊥-isBoundedJoinSemilattice L.ε public K-m : (L.ε L.◁ L.ε) L.≤ L.ε K-m = L.≤-trans (L.◁-mono (L.≤-reflexive units-iso) L.≤-refl) (L.≤-reflexive (L.◁-identityˡ _)) K-u : L.ι L.≤ L.ε K-u = L.≤-reflexive (L.Eq.sym units-iso) open SelfDual L.⅋-◁-isDuoidal K-m K-u public open Exponential L.!-mono L.!-monoidal-unit L.!-monoidal L.!-discard L.!-duplicate L.!-derelict L.!-dig public open C public hiding (module SelfDual) mix : C.ε C.≈ C.¬ C.ε mix .Product.proj₁ .C.fpos = L.≤-refl mix .Product.proj₁ .C.fneg = L.≤-refl mix .Product.proj₂ .C.fpos = L.≤-refl mix .Product.proj₂ .C.fneg = L.≤-refl ε-eq-ι : C.ε C.≈ C.ι ε-eq-ι .Product.proj₁ .C.fpos = L.≤-reflexive units-iso ε-eq-ι .Product.proj₁ .C.fneg = L.≤-reflexive (L.Eq.sym units-iso) ε-eq-ι .Product.proj₂ .C.fpos = L.≤-reflexive (L.Eq.sym units-iso) ε-eq-ι .Product.proj₂ .C.fneg = L.≤-reflexive units-iso ⊗-◁-isCommutativeDuoidal : IsCommutativeDuoidal C._≈_ C._≤_ C._⊗_ C._◁_ C.ε C.ι ⊗-◁-isCommutativeDuoidal = record { isDuoidal = C.⊗-◁-isDuoidal ; ∙-comm = C.⊗-isCommutativePomonoid .IsCommutativePomonoid.comm } open C public using (Chu) model : Model (suc (suc (a ⊔ ℓ₂))) (a ⊔ ℓ₂) (a ⊔ ℓ₂) model .Model.Carrier = C.Chu model .Model._≈_ = C._≈_ model .Model._≲_ = C._≤_ model .Model.¬ = C.¬ model .Model.I = C.ε model .Model.J = C.ι model .Model._⊗_ = C._⊗_ model .Model._◁_ = C._◁_ model .Model.mix = C.mix model .Model.⊗-◁-isCommutativeDuoidal = C.⊗-◁-isCommutativeDuoidal model .Model.I-eq-J = C.ε-eq-ι model .Model.◁-self-dual = C.self-dual model .Model.⊗-isStarAutonomous = C.⊗-isStarAutonomous model .Model.! = C.! model .Model.!-mono = C.!-mono model .Model.!-monoidal {x}{y} = C.!-monoidal {x}{y} model .Model.!-monoidal-unit = C.!-monoidal-unit model .Model.!-discard {x} = C.!-discard {x} model .Model.!-duplicate {x} = C.!-duplicate {x} model .Model.!-derelict = C.!-derelict model .Model.!-dig {x} = C.!-dig {x} embed : Carrier → Chu embed x = C.embed (L.η x)