Add an equivalence constraint on lattice relations.
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
This commit is contained in:
parent
971d75bb2b
commit
8febffc8e3
52
Lattice.agda
52
Lattice.agda
|
@ -1,7 +1,7 @@
|
||||||
module Lattice where
|
module Lattice where
|
||||||
|
|
||||||
import Data.Nat.Properties as NatProps
|
import Data.Nat.Properties as NatProps
|
||||||
open import Relation.Binary.PropositionalEquality as Eq using (_≡_; sym)
|
open import Relation.Binary.PropositionalEquality as Eq using (_≡_; sym; isEquivalence)
|
||||||
open import Relation.Binary.Definitions
|
open import Relation.Binary.Definitions
|
||||||
open import Data.Nat as Nat using (ℕ; _≤_)
|
open import Data.Nat as Nat using (ℕ; _≤_)
|
||||||
open import Data.Product using (_×_; _,_)
|
open import Data.Product using (_×_; _,_)
|
||||||
|
@ -10,15 +10,25 @@ open import Agda.Primitive using (lsuc; Level)
|
||||||
|
|
||||||
open import NatMap using (NatMap)
|
open import NatMap using (NatMap)
|
||||||
|
|
||||||
|
record IsEquivalence {a} (A : Set a) (_≈_ : A → A → Set a) : Set a where
|
||||||
|
field
|
||||||
|
≈-refl : {a : A} → a ≈ a
|
||||||
|
≈-sym : {a b : A} → a ≈ b → b ≈ a
|
||||||
|
≈-trans : {a b c : A} → a ≈ b → b ≈ c → a ≈ c
|
||||||
|
|
||||||
record IsSemilattice {a} (A : Set a)
|
record IsSemilattice {a} (A : Set a)
|
||||||
(_≈_ : A → A → Set a)
|
(_≈_ : A → A → Set a)
|
||||||
(_⊔_ : A → A → A) : Set a where
|
(_⊔_ : A → A → A) : Set a where
|
||||||
|
|
||||||
field
|
field
|
||||||
|
≈-equiv : IsEquivalence A _≈_
|
||||||
|
|
||||||
⊔-assoc : (x y z : A) → ((x ⊔ y) ⊔ z) ≈ (x ⊔ (y ⊔ z))
|
⊔-assoc : (x y z : A) → ((x ⊔ y) ⊔ z) ≈ (x ⊔ (y ⊔ z))
|
||||||
⊔-comm : (x y : A) → (x ⊔ y) ≈ (y ⊔ x)
|
⊔-comm : (x y : A) → (x ⊔ y) ≈ (y ⊔ x)
|
||||||
⊔-idemp : (x : A) → (x ⊔ x) ≈ x
|
⊔-idemp : (x : A) → (x ⊔ x) ≈ x
|
||||||
|
|
||||||
|
open IsEquivalence ≈-equiv public
|
||||||
|
|
||||||
record IsLattice {a} (A : Set a)
|
record IsLattice {a} (A : Set a)
|
||||||
(_≈_ : A → A → Set a)
|
(_≈_ : A → A → Set a)
|
||||||
(_⊔_ : A → A → A)
|
(_⊔_ : A → A → A)
|
||||||
|
@ -66,14 +76,24 @@ module IsSemilatticeInstances where
|
||||||
|
|
||||||
NatIsMaxSemilattice : IsSemilattice ℕ _≡_ _⊔_
|
NatIsMaxSemilattice : IsSemilattice ℕ _≡_ _⊔_
|
||||||
NatIsMaxSemilattice = record
|
NatIsMaxSemilattice = record
|
||||||
{ ⊔-assoc = ⊔-assoc
|
{ ≈-equiv = record
|
||||||
|
{ ≈-refl = refl
|
||||||
|
; ≈-sym = sym
|
||||||
|
; ≈-trans = trans
|
||||||
|
}
|
||||||
|
; ⊔-assoc = ⊔-assoc
|
||||||
; ⊔-comm = ⊔-comm
|
; ⊔-comm = ⊔-comm
|
||||||
; ⊔-idemp = ⊔-idem
|
; ⊔-idemp = ⊔-idem
|
||||||
}
|
}
|
||||||
|
|
||||||
NatIsMinSemilattice : IsSemilattice ℕ _≡_ _⊓_
|
NatIsMinSemilattice : IsSemilattice ℕ _≡_ _⊓_
|
||||||
NatIsMinSemilattice = record
|
NatIsMinSemilattice = record
|
||||||
{ ⊔-assoc = ⊓-assoc
|
{ ≈-equiv = record
|
||||||
|
{ ≈-refl = refl
|
||||||
|
; ≈-sym = sym
|
||||||
|
; ≈-trans = trans
|
||||||
|
}
|
||||||
|
; ⊔-assoc = ⊓-assoc
|
||||||
; ⊔-comm = ⊓-comm
|
; ⊔-comm = ⊓-comm
|
||||||
; ⊔-idemp = ⊓-idem
|
; ⊔-idemp = ⊓-idem
|
||||||
}
|
}
|
||||||
|
@ -114,9 +134,33 @@ module IsSemilatticeInstances where
|
||||||
, IsSemilattice.⊔-idemp sB b
|
, IsSemilattice.⊔-idemp sB b
|
||||||
)
|
)
|
||||||
|
|
||||||
|
≈-refl : {p : A × B} → p ≈ p
|
||||||
|
≈-refl =
|
||||||
|
( IsSemilattice.≈-refl sA
|
||||||
|
, IsSemilattice.≈-refl sB
|
||||||
|
)
|
||||||
|
|
||||||
|
≈-sym : {p₁ p₂ : A × B} → p₁ ≈ p₂ → p₂ ≈ p₁
|
||||||
|
≈-sym (a₁≈a₂ , b₁≈b₂) =
|
||||||
|
( IsSemilattice.≈-sym sA a₁≈a₂
|
||||||
|
, IsSemilattice.≈-sym sB b₁≈b₂
|
||||||
|
)
|
||||||
|
|
||||||
|
≈-trans : {p₁ p₂ p₃ : A × B} → p₁ ≈ p₂ → p₂ ≈ p₃ → p₁ ≈ p₃
|
||||||
|
≈-trans (a₁≈a₂ , b₁≈b₂) (a₂≈a₃ , b₂≈b₃) =
|
||||||
|
( IsSemilattice.≈-trans sA a₁≈a₂ a₂≈a₃
|
||||||
|
, IsSemilattice.≈-trans sB b₁≈b₂ b₂≈b₃
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
ProdIsSemilattice : IsSemilattice (A × B) _≈_ _⊔_
|
ProdIsSemilattice : IsSemilattice (A × B) _≈_ _⊔_
|
||||||
ProdIsSemilattice = record
|
ProdIsSemilattice = record
|
||||||
{ ⊔-assoc = ⊔-assoc
|
{ ≈-equiv = record
|
||||||
|
{ ≈-refl = ≈-refl
|
||||||
|
; ≈-sym = ≈-sym
|
||||||
|
; ≈-trans = ≈-trans
|
||||||
|
}
|
||||||
|
; ⊔-assoc = ⊔-assoc
|
||||||
; ⊔-comm = ⊔-comm
|
; ⊔-comm = ⊔-comm
|
||||||
; ⊔-idemp = ⊔-idemp
|
; ⊔-idemp = ⊔-idemp
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user