Prove a property of multi-key lookup
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
This commit is contained in:
parent
20dc99ba1f
commit
a22c0c9252
|
@ -30,6 +30,7 @@ open import Lattice.Map ≡-dec-A lB as Map
|
||||||
; absorb-⊓-⊔ to absorb-⊓ᵐ-⊔ᵐ
|
; absorb-⊓-⊔ to absorb-⊓ᵐ-⊔ᵐ
|
||||||
; ≈-dec to ≈ᵐ-dec
|
; ≈-dec to ≈ᵐ-dec
|
||||||
; _[_] to _[_]ᵐ
|
; _[_] to _[_]ᵐ
|
||||||
|
; []-∈ to []ᵐ-∈
|
||||||
; m₁≼m₂⇒m₁[k]≼m₂[k] to m₁≼m₂⇒m₁[k]ᵐ≼m₂[k]ᵐ
|
; m₁≼m₂⇒m₁[k]≼m₂[k] to m₁≼m₂⇒m₁[k]ᵐ≼m₂[k]ᵐ
|
||||||
; locate to locateᵐ
|
; locate to locateᵐ
|
||||||
; keys to keysᵐ
|
; keys to keysᵐ
|
||||||
|
@ -104,6 +105,10 @@ module WithKeys (ks : List A) where
|
||||||
_[_] : FiniteMap → List A → List B
|
_[_] : FiniteMap → List A → List B
|
||||||
_[_] (m₁ , _) ks = m₁ [ ks ]ᵐ
|
_[_] (m₁ , _) ks = m₁ [ ks ]ᵐ
|
||||||
|
|
||||||
|
[]-∈ : ∀ {k : A} {v : B} {ks' : List A} (fm : FiniteMap) →
|
||||||
|
k ∈ˡ ks' → (k , v) ∈ fm → v ∈ˡ (fm [ ks' ])
|
||||||
|
[]-∈ {k} {v} {ks'} (m , _) k∈ks' k,v∈fm = []ᵐ-∈ m k,v∈fm k∈ks'
|
||||||
|
|
||||||
≈-equiv : IsEquivalence FiniteMap _≈_
|
≈-equiv : IsEquivalence FiniteMap _≈_
|
||||||
≈-equiv = record
|
≈-equiv = record
|
||||||
{ ≈-refl =
|
{ ≈-refl =
|
||||||
|
|
|
@ -1112,6 +1112,19 @@ _[_] m (k ∷ ks)
|
||||||
... | yes k∈km = proj₁ (locate {m = m} k∈km) ∷ (m [ ks ])
|
... | yes k∈km = proj₁ (locate {m = m} k∈km) ∷ (m [ ks ])
|
||||||
... | no _ = m [ ks ]
|
... | no _ = m [ ks ]
|
||||||
|
|
||||||
|
[]-∈ : ∀ {k : A} {v : B} {ks : List A} (m : Map) →
|
||||||
|
(k , v) ∈ m → k ∈ˡ ks → v ∈ˡ (m [ ks ])
|
||||||
|
[]-∈ {k} {v} {ks} m k,v∈m (here refl)
|
||||||
|
with ∈k-dec k (proj₁ m)
|
||||||
|
... | no k∉km = ⊥-elim (k∉km (forget k,v∈m))
|
||||||
|
... | yes k∈km
|
||||||
|
with (v' , k,v'∈m) ← locate {m = m} k∈km
|
||||||
|
rewrite Map-functional {m = m} k,v'∈m k,v∈m = here refl
|
||||||
|
[]-∈ {k} {v} {k' ∷ ks'} m k,v∈m (there k∈ks')
|
||||||
|
with ∈k-dec k' (proj₁ m)
|
||||||
|
... | no _ = []-∈ m k,v∈m k∈ks'
|
||||||
|
... | yes _ = there ([]-∈ m k,v∈m k∈ks')
|
||||||
|
|
||||||
m₁≼m₂⇒m₁[k]≼m₂[k] : ∀ (m₁ m₂ : Map) {k : A} {v₁ v₂ : B} →
|
m₁≼m₂⇒m₁[k]≼m₂[k] : ∀ (m₁ m₂ : Map) {k : A} {v₁ v₂ : B} →
|
||||||
m₁ ≼ m₂ → (k , v₁) ∈ m₁ → (k , v₂) ∈ m₂ → v₁ ≼₂ v₂
|
m₁ ≼ m₂ → (k , v₁) ∈ m₁ → (k , v₂) ∈ m₂ → v₁ ≼₂ v₂
|
||||||
m₁≼m₂⇒m₁[k]≼m₂[k] m₁ m₂ m₁≼m₂ k,v₁∈m₁ k,v₂∈m₂
|
m₁≼m₂⇒m₁[k]≼m₂[k] m₁ m₂ m₁≼m₂ k,v₁∈m₁ k,v₂∈m₂
|
||||||
|
|
Loading…
Reference in New Issue
Block a user