Skip to content

Commit 710d760

Browse files
Add dom∪ˡ≡∪dom to Map/Dec.agda (#18)
1 parent 6032446 commit 710d760

File tree

1 file changed

+57
-2
lines changed

1 file changed

+57
-2
lines changed

src/Axiom/Set/Map/Dec.agda

Lines changed: 57 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ open import abstract-set-theory.Prelude hiding (map; Monoid)
88
import Data.Sum as Sum
99
open import Data.These hiding (map)
1010

11-
open Theoryᵈ thᵈ using (_∈?_; th; incl-set'; incl-set; incl-set-proj₁⊇)
11+
open Theoryᵈ thᵈ using (_∈?_; ∈-sp; th; incl-set'; incl-set; incl-set-proj₁⊇)
1212
open Theory th
13-
open import Axiom.Set.Rel th using (dom; dom∈)
13+
open import Axiom.Set.Rel th using (Rel; dom; dom∈; dom∪)
1414
open import Axiom.Set.Map th
15+
open import Axiom.Set.Properties th using (∈-∪⁺; ∈-∪⁻; ∪-⊆ˡ)
1516
open import Data.Product.Properties using (×-≡,≡→≡; ×-≡,≡←≡)
1617

1718
open Equivalence
@@ -87,3 +88,57 @@ module Lookupᵐᵈ (sp-∈ : spec-∈ A) where
8788

8889
dom∪⁺≡∪dom : dom ((m ∪⁺ m')ˢ) ≡ᵉ dom (m ˢ) ∪ dom (m' ˢ)
8990
dom∪⁺≡∪dom = to dom∪⁺⇔∪dom , from dom∪⁺⇔∪dom
91+
92+
93+
open import Function.Reasoning
94+
open Unionᵐ sp-∈ using (_∪ˡ_)
95+
96+
private
97+
rhs-∪ˡ : Rel A V
98+
rhs-∪ˡ = (filterᵐ (sp-∘ (sp-¬ (sp-∈ {X = dom (m ˢ)})) proj₁) m') ˢ
99+
100+
dom∪ˡˡ : dom (m ˢ) ⊆ dom ((m ∪ˡ m') ˢ)
101+
dom∪ˡˡ {a} a∈ = a∈ ∶
102+
a ∈ dom (m ˢ) |> ∪-⊆ˡ ∶
103+
a ∈ dom (m ˢ) ∪ dom rhs-∪ˡ |> proj₂ dom∪ ∶
104+
a ∈ dom ((m ˢ) ∪ rhs-∪ˡ) |> id ∶
105+
a ∈ dom ((m ∪ˡ m') ˢ)
106+
107+
dom∪ˡʳ : dom (m' ˢ) ⊆ dom ((m ∪ˡ m') ˢ)
108+
dom∪ˡʳ {a} a∈ with a ∈? dom (m ˢ)
109+
... | yes p = dom∪ˡˡ p
110+
... | no ¬p = a∈ ∶
111+
a ∈ dom (m' ˢ) |> from ∈-map ∶
112+
(∃[ ab ] a ≡ proj₁ ab × ab ∈ (m' ˢ)) |>′
113+
(λ { (ab , refl , ab∈m') (¬p , ab∈m') ∶
114+
(a ∉ dom (m ˢ) × ab ∈ (m' ˢ)) |> to ∈-filter ∶
115+
ab ∈ rhs-∪ˡ |> (λ ab∈f to ∈-map (ab , refl , ab∈f)) ∶
116+
a ∈ dom rhs-∪ˡ
117+
}) ∶
118+
a ∈ dom rhs-∪ˡ |> ∈-∪⁺ ∘ inj₂ ∶
119+
a ∈ dom (m ˢ) ∪ dom rhs-∪ˡ |> proj₂ dom∪ ∶
120+
a ∈ dom ((m ˢ) ∪ rhs-∪ˡ) |> id ∶
121+
a ∈ dom ((m ∪ˡ m') ˢ)
122+
123+
dom∪ˡ⊆∪dom : dom ((m ∪ˡ m') ˢ) ⊆ dom (m ˢ) ∪ dom (m' ˢ)
124+
dom∪ˡ⊆∪dom {a} a∈dom∪ with ∈-∪⁻ (proj₁ dom∪ a∈dom∪)
125+
... | inj₁ a∈domm = ∈-∪⁺ (inj₁ a∈domm)
126+
... | inj₂ a∈domf = a∈domf ∶
127+
a ∈ dom rhs-∪ˡ |> from ∈-map ∶
128+
(∃[ ab ] a ≡ proj₁ ab × ab ∈ rhs-∪ˡ) |>′
129+
(λ { (ab , refl , ab∈fm')
130+
ab ∈ rhs-∪ˡ ∋ ab∈fm' |> proj₂ ∘ from ∈-filter ∶
131+
ab ∈ (m' ˢ) |> (λ ab∈m' to ∈-map (ab , refl , ab∈m')) ∶
132+
a ∈ dom (m' ˢ)
133+
}) ∶
134+
a ∈ dom (m' ˢ) |> ∈-∪⁺ ∘ inj₂ ∶
135+
a ∈ dom (m ˢ) ∪ dom (m' ˢ)
136+
137+
∪dom⊆dom∪ˡ : dom (m ˢ) ∪ dom (m' ˢ) ⊆ dom ((m ∪ˡ m') ˢ)
138+
∪dom⊆dom∪ˡ {a} a∈
139+
with from ∈-∪ a∈
140+
... | inj₁ a∈ˡ = dom∪ˡˡ a∈ˡ
141+
... | inj₂ a∈ʳ = dom∪ˡʳ a∈ʳ
142+
143+
dom∪ˡ≡∪dom : dom ((m ∪ˡ m')ˢ) ≡ᵉ dom (m ˢ) ∪ dom (m' ˢ)
144+
dom∪ˡ≡∪dom = dom∪ˡ⊆∪dom , ∪dom⊆dom∪ˡ

0 commit comments

Comments
 (0)