{-# OPTIONS --postfix-projections --safe --without-K #-}
module MAUV.Frame where
open import Level using (suc; _⊔_)
open import Algebra.Ordered
open import Algebra using (_DistributesOver_)
open import Data.Product as Product using (_×_; _,_)
open import Relation.Binary.Bundles using (Poset)
open import Relation.Binary.Definitions
open import MAUV.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 → Carrier
𝟘 : Carrier
⅋-◁-isCommutativeDuoidal : IsCommutativeDuoidal _≈_ _≲_ _⅋_ _◁_ I I
⅋-distrib-+ : _DistributesOver_ _≲_ _⅋_ _+_
⅋-distrib-𝟘 : ∀ {x} → (𝟘 ⅋ x) ≲ 𝟘
+-mono : Monotonic₂ _≲_ _≲_ _≲_ _+_
+-◁-entropy : Entropy _≲_ _+_ _◁_
+-tidy : (I + I) ≲ I
𝟘-expand : 𝟘 ≲ (𝟘 ◁ 𝟘)
𝟘≲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 }
+-isPomagma : IsPomagma _≈_ _≲_ _+_
+-isPomagma = record
{ isPartialOrder = isPartialOrder
; mono = +-mono
}
+-pomagma : Pomagma _ _ _
+-pomagma = record { isPomagma = +-isPomagma }
module FrameModel {a ℓ₁ ℓ₂} (frame : Frame a ℓ₁ ℓ₂) where
import Algebra.Ordered.Construction.LowerSet
import Algebra.Ordered.Construction.ZeroPlusIdeal
import Algebra.Ordered.Construction.Chu
open Frame frame
module L where
open Algebra.Ordered.Construction.LowerSet poset public
open DayCommutative ⅋-isCommutativePomonoid public
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
)
module I where
open Algebra.Ordered.Construction.ZeroPlusIdeal +-pomagma 𝟘 public
open DayCommutative ⅋-isCommutativePomonoid ⅋-distrib-+ ⅋-distrib-𝟘 public
renaming
( _∙_ to _⅋_
; ∙-mono to ⅋-mono
; ∙-comm to ⅋-comm
; ∙-assoc to ⅋-assoc
; ∙-identityˡ to ⅋-identityˡ
; ∙-identityʳ to ⅋-identityʳ
)
open DayEntropic ◁-isPomonoid +-◁-entropy +-tidy 𝟘-expand 𝟘≲I public
open DayDuoidal ⅋-◁-isCommutativeDuoidal ⅋-distrib-+ ⅋-distrib-𝟘 +-◁-entropy +-tidy 𝟘-expand 𝟘≲I public
open I
public
using
( Ideal
; ICarrier
; ≤-closed
; ∨-closed
; _≤_
; *≤*
)
units-iso : I.ε I.≈ I.ι
units-iso .Product.proj₁ = I.ε≤ι
units-iso .Product.proj₂ .*≤* {x} x≤I = I.leaf x x≤I , refl
module C where
private
module C where
open Algebra.Ordered.Construction.Chu.Construction
I.⊸-∙-isResiduatedCommutativePomonoid
I.∧-⊤-isBoundedMeetSemilattice
I.∨-⊥-isBoundedJoinSemilattice
I.ε
public
K-m : (I.ε I.◁ I.ε) I.≤ I.ε
K-m = I.≤-trans (I.◁-mono (I.≤-reflexive units-iso) I.≤-refl) (I.≤-reflexive (I.◁-identityˡ _))
K-u : I.ι I.≤ I.ε
K-u = I.≤-reflexive (I.Eq.sym units-iso)
open SelfDual I.∙-◁-isDuoidal K-m K-u public
open C public
mix : C.ε C.≈ C.¬ C.ε
mix .Product.proj₁ .C.fpos = I.≤-refl
mix .Product.proj₁ .C.fneg = I.≤-refl
mix .Product.proj₂ .C.fpos = I.≤-refl
mix .Product.proj₂ .C.fneg = I.≤-refl
ε-eq-ι : C.ε C.≈ C.ι
ε-eq-ι .Product.proj₁ .C.fpos = I.≤-reflexive units-iso
ε-eq-ι .Product.proj₁ .C.fneg = I.≤-reflexive (I.Eq.sym units-iso)
ε-eq-ι .Product.proj₂ .C.fpos = I.≤-reflexive (I.Eq.sym units-iso)
ε-eq-ι .Product.proj₂ .C.fneg = I.≤-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._&_ = C._&_
model .Model.⊤ = C.⊤
model .Model.mix = C.mix
model .Model.&-⊤-isBoundedMeet = C.&-⊤-isBoundedMeet
model .Model.⊗-◁-isCommutativeDuoidal = C.⊗-◁-isCommutativeDuoidal
model .Model.I-eq-J = C.ε-eq-ι
model .Model.◁-self-dual = C.self-dual
model .Model.⊗-isStarAutonomous = C.⊗-isStarAutonomous
embed : Carrier → Chu
embed x = C.embed (I.η x)