File tree Expand file tree Collapse file tree 2 files changed +39
-0
lines changed Expand file tree Collapse file tree 2 files changed +39
-0
lines changed Original file line number Diff line number Diff line change @@ -4,6 +4,7 @@ open import Class.Computational
4
4
open import Class.Hashable
5
5
6
6
open import Prelude.AssocList
7
+ open import Prelude.AssocList.Properties
7
8
open import Prelude.Bitmasks
8
9
open import Prelude.Closures
9
10
open import Prelude.Functions
Original file line number Diff line number Diff line change
1
+ module Prelude.AssocList.Properties where
2
+
3
+ open import Class.DecEq
4
+ open import Class.Decidable using (¿_¿²)
5
+ open import Prelude.Init
6
+ open import Prelude.AssocList
7
+ open import Prelude.Irrelevance using (·¬⇒¬)
8
+
9
+ private variable
10
+ K V : Type
11
+
12
+ module _ ⦃ _ : DecEq K ⦄ where
13
+
14
+ private variable
15
+ m : AssocList K V
16
+ k : K
17
+ v : V
18
+
19
+ ------------------------------------------------------------------------
20
+ -- ‼ and ⁉
21
+
22
+ map-‼ : ∀ {ks : List K} → (p : k ∈ᵐ map (_, v) ks) → map (_, v) ks ‼ p ≡ v
23
+ map-‼ {ks = _ ∷ _} First.[ refl ] = refl
24
+ map-‼ {ks = _ ∷ _} (_ ∷ p) = map-‼ p
25
+
26
+ ⁉⇒‼ : m ⁉ k ≡ just v → Σ[ p ∈ k ∈ᵐ m ] m ‼ p ≡ v
27
+ ⁉⇒‼ {m = m} {k = k} eq with k ∈ᵐ? m
28
+ ... | yes First.[ refl ] = First.[ refl ] , M.just-injective eq
29
+ ... | yes (x ∷ p) = x ∷ p , M.just-injective eq
30
+
31
+ ‼⇒⁉ : ∀ (p : k ∈ᵐ m) → m ‼ p ≡ v → m ⁉ k ≡ just v
32
+ ‼⇒⁉ {k = k} {m = m} {v = v} p eq with k ∈ᵐ? m | p
33
+ ... | yes First.[ refl ] | First.[ refl ] = cong just eq
34
+ ... | yes (≢k ∷ _) | First.[ refl ] = contradiction refl (·¬⇒¬ ≢k)
35
+ ... | yes First.[ refl ] | ≢k ∷ _ = contradiction refl (·¬⇒¬ ≢k)
36
+ ... | yes (_ ∷ p) | _ ∷ p′
37
+ rewrite ∈ᵐ-irrelevant p p′ = cong just eq
38
+ ... | no p | q = contradiction q p
You can’t perform that action at this time.
0 commit comments