Add a 'Finite Map' lattice
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
This commit is contained in:
@@ -141,9 +141,9 @@ private module ImplInsert (f : B → B → B) where
|
||||
rewrite union-subset-keys kl₁'⊆kl₂ =
|
||||
insert-keys-∈ k∈kl₂
|
||||
|
||||
union-equal-keys : ∀ (l₁ l₂ : List (A × B)) →
|
||||
union-equal-keys : ∀ {l₁ l₂ : List (A × B)} →
|
||||
keys l₁ ≡ keys l₂ → keys l₁ ≡ keys (union l₁ l₂)
|
||||
union-equal-keys l₁ l₂ kl₁≡kl₂
|
||||
union-equal-keys {l₁} {l₂} kl₁≡kl₂
|
||||
with subst (λ l → All (λ k → k ∈ l) (keys l₁)) kl₁≡kl₂ (All-x∈xs (keys l₁))
|
||||
... | kl₁⊆kl₂ = trans kl₁≡kl₂ (union-subset-keys {l₁} {l₂} kl₁⊆kl₂)
|
||||
|
||||
@@ -512,8 +512,8 @@ data Expr : Set (a ⊔ℓ b) where
|
||||
_∪_ : Expr → Expr → Expr
|
||||
_∩_ : Expr → Expr → Expr
|
||||
|
||||
open ImplInsert _⊔₂_ using (union-preserves-Unique) renaming (insert to insert-impl; union to union-impl)
|
||||
open ImplInsert _⊓₂_ using (intersect-preserves-Unique) renaming (intersect to intersect-impl)
|
||||
open ImplInsert _⊔₂_ using (union-preserves-Unique; union-equal-keys) renaming (insert to insert-impl; union to union-impl)
|
||||
open ImplInsert _⊓₂_ using (intersect-preserves-Unique; intersect-equal-keys) renaming (intersect to intersect-impl)
|
||||
|
||||
_⊔_ : Map → Map → Map
|
||||
_⊔_ (kvs₁ , _) (kvs₂ , uks₂) = (union-impl kvs₁ kvs₂ , union-preserves-Unique kvs₁ kvs₂ uks₂)
|
||||
@@ -881,3 +881,9 @@ isLattice = record
|
||||
; absorb-⊔-⊓ = absorb-⊔-⊓
|
||||
; absorb-⊓-⊔ = absorb-⊓-⊔
|
||||
}
|
||||
|
||||
⊔-equal-keys : ∀ {m₁ m₂ : Map} → keys m₁ ≡ keys m₂ → keys m₁ ≡ keys (m₁ ⊔ m₂)
|
||||
⊔-equal-keys km₁≡km₂ = union-equal-keys km₁≡km₂
|
||||
|
||||
⊓-equal-keys : ∀ {m₁ m₂ : Map} → keys m₁ ≡ keys m₂ → keys m₁ ≡ keys (m₁ ⊓ m₂)
|
||||
⊓-equal-keys km₁≡km₂ = intersect-equal-keys km₁≡km₂
|
||||
|
||||
Reference in New Issue
Block a user