@@ -8,10 +8,11 @@ open import abstract-set-theory.Prelude hiding (map; Monoid)
88import Data.Sum as Sum
99open 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₁⊇)
1212open Theory th
13- open import Axiom.Set.Rel th using (dom; dom∈)
13+ open import Axiom.Set.Rel th using (Rel; dom; dom∈; dom∪ )
1414open import Axiom.Set.Map th
15+ open import Axiom.Set.Properties th using (∈-∪⁺; ∈-∪⁻; ∪-⊆ˡ)
1516open import Data.Product.Properties using (×-≡,≡→≡; ×-≡,≡←≡)
1617
1718open 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