Add an instance of Semilattice for Map.
Signed-off-by: Danila Fedorin <danila.fedorin@gmail.com>
This commit is contained in:
		
							parent
							
								
									a4eaa6269f
								
							
						
					
					
						commit
						1b7a3f02eb
					
				
							
								
								
									
										40
									
								
								Lattice.agda
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								Lattice.agda
									
									
									
									
									
								
							| @ -112,12 +112,12 @@ module IsEquivalenceInstances where | |||||||
|                 , ⊆-trans m₃ m₂ m₁ m₃⊆m₂ m₂⊆m₁ |                 , ⊆-trans m₃ m₂ m₁ m₃⊆m₂ m₂⊆m₁ | ||||||
|                 ) |                 ) | ||||||
| 
 | 
 | ||||||
|             LiftEquivalence : IsEquivalence Map _≈_ |         LiftEquivalence : IsEquivalence Map _≈_ | ||||||
|             LiftEquivalence = record |         LiftEquivalence = record | ||||||
|                 { ≈-refl = λ {m₁} → ≈-refl m₁ |             { ≈-refl = λ {m₁} → ≈-refl m₁ | ||||||
|                 ; ≈-sym = λ {m₁} {m₂} → ≈-sym m₁ m₂ |             ; ≈-sym = λ {m₁} {m₂} → ≈-sym m₁ m₂ | ||||||
|                 ; ≈-trans = λ {m₁} {m₂} {m₃} → ≈-trans m₁ m₂ m₃ |             ; ≈-trans = λ {m₁} {m₂} {m₃} → ≈-trans m₁ m₂ m₃ | ||||||
|                 } |             } | ||||||
| 
 | 
 | ||||||
| module IsSemilatticeInstances where | module IsSemilatticeInstances where | ||||||
|     module ForNat where |     module ForNat where | ||||||
| @ -216,6 +216,34 @@ module IsSemilatticeInstances where | |||||||
|             ; ⊔-idemp = ⊔-idemp |             ; ⊔-idemp = ⊔-idemp | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  |     module ForMap {a} {A B : Set a} | ||||||
|  |         (≡-dec-A : Decidable (_≡_ {a} {A})) | ||||||
|  |         (_≈₂_ : B → B → Set a) | ||||||
|  |         (_⊔₂_ : B → B → B) | ||||||
|  |         (sB : IsSemilattice B _≈₂_ _⊔₂_) where | ||||||
|  | 
 | ||||||
|  |         open import Map A B ≡-dec-A | ||||||
|  | 
 | ||||||
|  |         private | ||||||
|  |             infix 4 _≈_ | ||||||
|  |             infixl 20 _⊔_ | ||||||
|  | 
 | ||||||
|  |             _≈_ : Map → Map → Set a | ||||||
|  |             _≈_ = lift (_≈₂_) | ||||||
|  | 
 | ||||||
|  |             _⊔_ : Map → Map → Map | ||||||
|  |             m₁ ⊔ m₂ = union _⊔₂_ m₁ m₂ | ||||||
|  | 
 | ||||||
|  |         module MapEquiv = IsEquivalenceInstances.ForMap A B ≡-dec-A _≈₂_ (IsSemilattice.≈-equiv sB) | ||||||
|  | 
 | ||||||
|  |         MapIsUnionSemilattice : IsSemilattice Map _≈_ _⊔_ | ||||||
|  |         MapIsUnionSemilattice = record | ||||||
|  |             { ≈-equiv = MapEquiv.LiftEquivalence | ||||||
|  |             ; ⊔-assoc = union-assoc _≈₂_ (IsSemilattice.≈-refl sB) (IsSemilattice.≈-sym sB) _⊔₂_ (IsSemilattice.⊔-assoc sB) | ||||||
|  |             ; ⊔-comm = union-comm _≈₂_ (IsSemilattice.≈-refl sB) (IsSemilattice.≈-sym sB) _⊔₂_ (IsSemilattice.⊔-comm sB) | ||||||
|  |             ; ⊔-idemp = union-idemp _≈₂_ (IsSemilattice.≈-refl sB) (IsSemilattice.≈-sym sB) _⊔₂_ (IsSemilattice.⊔-idemp sB) | ||||||
|  |             } | ||||||
|  | 
 | ||||||
| module IsLatticeInstances where | module IsLatticeInstances where | ||||||
|     module ForNat where |     module ForNat where | ||||||
|         open Nat |         open Nat | ||||||
|  | |||||||
							
								
								
									
										176
									
								
								Map.agda
									
									
									
									
									
								
							
							
						
						
									
										176
									
								
								Map.agda
									
									
									
									
									
								
							| @ -342,95 +342,97 @@ module _ (_≈_ : B → B → Set b) where | |||||||
|     lift : Map → Map → Set (a ⊔ b) |     lift : Map → Map → Set (a ⊔ b) | ||||||
|     lift m₁ m₂ = subset m₁ m₂ × subset m₂ m₁ |     lift m₁ m₂ = subset m₁ m₂ × subset m₂ m₁ | ||||||
| 
 | 
 | ||||||
| module _ (f : B → B → B) where |     module _ (≈-refl : ∀ {b : B} → b ≈ b) | ||||||
|     module I = ImplInsert f |              (≈-sym : ∀ {b₁ b₂ : B} → b₁ ≈ b₂ → b₂ ≈ b₁) | ||||||
|  |              (f : B → B → B) where | ||||||
|  |         module I = ImplInsert f | ||||||
| 
 | 
 | ||||||
|     module _ (f-idemp : ∀ (b : B) → f b b ≡ b) where |         module _ (f-idemp : ∀ (b : B) → f b b ≈ b) where | ||||||
|         union-idemp : ∀ (m : Map) → lift (_≡_) (union f m m) m |             union-idemp : ∀ (m : Map) → lift (union f m m) m | ||||||
|         union-idemp m@(l , u) = (mm-m-subset , m-mm-subset) |             union-idemp m@(l , u) = (mm-m-subset , m-mm-subset) | ||||||
|             where |                 where | ||||||
|                 mm-m-subset : subset (_≡_) (union f m m) m |                     mm-m-subset : subset (union f m m) m | ||||||
|                 mm-m-subset k v k,v∈mm |                     mm-m-subset k v k,v∈mm | ||||||
|                     with Expr-Provenance f k ((` m) ∪ (` m)) (∈-cong proj₁ k,v∈mm) |                         with Expr-Provenance f k ((` m) ∪ (` m)) (∈-cong proj₁ k,v∈mm) | ||||||
|                 ...   | (_ , (bothᵘ (single {v'} v'∈m) (single {v''} v''∈m) , v'v''∈mm)) |                     ...   | (_ , (bothᵘ (single {v'} v'∈m) (single {v''} v''∈m) , v'v''∈mm)) | ||||||
|                         rewrite Map-functional {m = m} v'∈m v''∈m |                             rewrite Map-functional {m = m} v'∈m v''∈m | ||||||
|                         rewrite Map-functional {m = union f m m} k,v∈mm v'v''∈mm = |                             rewrite Map-functional {m = union f m m} k,v∈mm v'v''∈mm = | ||||||
|                         (v'' , (f-idemp v'' , v''∈m)) |                             (v'' , (f-idemp v'' , v''∈m)) | ||||||
|                 ...   | (_ , (in₁ (single {v'} v'∈m) k∉km , _)) = absurd (k∉km (∈-cong proj₁ v'∈m)) |                     ...   | (_ , (in₁ (single {v'} v'∈m) k∉km , _)) = absurd (k∉km (∈-cong proj₁ v'∈m)) | ||||||
|                 ...   | (_ , (in₂ k∉km (single {v''} v''∈m) , _)) = absurd (k∉km (∈-cong proj₁ v''∈m)) |                     ...   | (_ , (in₂ k∉km (single {v''} v''∈m) , _)) = absurd (k∉km (∈-cong proj₁ v''∈m)) | ||||||
| 
 | 
 | ||||||
|                 m-mm-subset : subset (_≡_) m (union f m m) |                     m-mm-subset : subset m (union f m m) | ||||||
|                 m-mm-subset k v k,v∈m = (f v v , (sym (f-idemp v) , I.union-combines u u k,v∈m k,v∈m)) |                     m-mm-subset k v k,v∈m = (f v v , (≈-sym (f-idemp v) , I.union-combines u u k,v∈m k,v∈m)) | ||||||
| 
 | 
 | ||||||
|     module _ (f-comm : ∀ (b₁ b₂ : B) → f b₁ b₂ ≡ f b₂ b₁) where |         module _ (f-comm : ∀ (b₁ b₂ : B) → f b₁ b₂ ≈ f b₂ b₁) where | ||||||
|         union-comm : ∀ (m₁ m₂ : Map) → lift (_≡_) (union f m₁ m₂) (union f m₂ m₁) |             union-comm : ∀ (m₁ m₂ : Map) → lift (union f m₁ m₂) (union f m₂ m₁) | ||||||
|         union-comm m₁ m₂ = (union-comm-subset m₁ m₂ , union-comm-subset m₂ m₁) |             union-comm m₁ m₂ = (union-comm-subset m₁ m₂ , union-comm-subset m₂ m₁) | ||||||
|             where |                 where | ||||||
|                 union-comm-subset : ∀ (m₁ m₂ : Map) → subset (_≡_) (union f m₁ m₂) (union f m₂ m₁) |                     union-comm-subset : ∀ (m₁ m₂ : Map) → subset (union f m₁ m₂) (union f m₂ m₁) | ||||||
|                 union-comm-subset m₁@(l₁ , u₁) m₂@(l₂ , u₂) k v k,v∈m₁m₂ |                     union-comm-subset m₁@(l₁ , u₁) m₂@(l₂ , u₂) k v k,v∈m₁m₂ | ||||||
|                     with Expr-Provenance f k ((` m₁) ∪ (` m₂)) (∈-cong proj₁ k,v∈m₁m₂) |                         with Expr-Provenance f k ((` m₁) ∪ (` m₂)) (∈-cong proj₁ k,v∈m₁m₂) | ||||||
|                 ...   | (_ , (bothᵘ {v₁} {v₂} (single v₁∈m₁) (single v₂∈m₂) , v₁v₂∈m₁m₂)) |                     ...   | (_ , (bothᵘ {v₁} {v₂} (single v₁∈m₁) (single v₂∈m₂) , v₁v₂∈m₁m₂)) | ||||||
|                         rewrite Map-functional {m = union f m₁ m₂} k,v∈m₁m₂ v₁v₂∈m₁m₂ = |                             rewrite Map-functional {m = union f m₁ m₂} k,v∈m₁m₂ v₁v₂∈m₁m₂ = | ||||||
|                         (f v₂ v₁ , (f-comm v₁ v₂ , I.union-combines u₂ u₁ v₂∈m₂ v₁∈m₁)) |                             (f v₂ v₁ , (f-comm v₁ v₂ , I.union-combines u₂ u₁ v₂∈m₂ v₁∈m₁)) | ||||||
|                 ...   | (_ , (in₁ {v₁} (single v₁∈m₁) k∉km₂ , v₁∈m₁m₂)) |                     ...   | (_ , (in₁ {v₁} (single v₁∈m₁) k∉km₂ , v₁∈m₁m₂)) | ||||||
|                         rewrite Map-functional {m = union f m₁ m₂} k,v∈m₁m₂ v₁∈m₁m₂ = |                             rewrite Map-functional {m = union f m₁ m₂} k,v∈m₁m₂ v₁∈m₁m₂ = | ||||||
|                         (v₁ , (refl , I.union-preserves-∈₂ k∉km₂ v₁∈m₁)) |                             (v₁ , (≈-refl , I.union-preserves-∈₂ k∉km₂ v₁∈m₁)) | ||||||
|                 ...   | (_ , (in₂ {v₂} k∉km₁ (single v₂∈m₂) , v₂∈m₁m₂)) |                     ...   | (_ , (in₂ {v₂} k∉km₁ (single v₂∈m₂) , v₂∈m₁m₂)) | ||||||
|                         rewrite Map-functional {m = union f m₁ m₂} k,v∈m₁m₂ v₂∈m₁m₂ = |                             rewrite Map-functional {m = union f m₁ m₂} k,v∈m₁m₂ v₂∈m₁m₂ = | ||||||
|                         (v₂ , (refl , I.union-preserves-∈₁ u₂ v₂∈m₂ k∉km₁)) |                             (v₂ , (≈-refl , I.union-preserves-∈₁ u₂ v₂∈m₂ k∉km₁)) | ||||||
| 
 | 
 | ||||||
|     module _ (f-assoc : ∀ (b₁ b₂ b₃ : B) → f (f b₁ b₂) b₃ ≡ f b₁ (f b₂ b₃))  where |         module _ (f-assoc : ∀ (b₁ b₂ b₃ : B) → f (f b₁ b₂) b₃ ≈ f b₁ (f b₂ b₃))  where | ||||||
|         union-assoc : ∀ (m₁ m₂ m₃ : Map) → lift (_≡_) (union f (union f m₁ m₂) m₃) (union f m₁ (union f m₂ m₃)) |             union-assoc : ∀ (m₁ m₂ m₃ : Map) → lift (union f (union f m₁ m₂) m₃) (union f m₁ (union f m₂ m₃)) | ||||||
|         union-assoc m₁@(l₁ , u₁) m₂@(l₂ , u₂) m₃@(l₃ , u₃) = (union-assoc₁ , union-assoc₂) |             union-assoc m₁@(l₁ , u₁) m₂@(l₂ , u₂) m₃@(l₃ , u₃) = (union-assoc₁ , union-assoc₂) | ||||||
|             where |                 where | ||||||
|                 union-assoc₁ : subset (_≡_) (union f (union f m₁ m₂) m₃) (union f m₁ (union f m₂ m₃)) |                     union-assoc₁ : subset (union f (union f m₁ m₂) m₃) (union f m₁ (union f m₂ m₃)) | ||||||
|                 union-assoc₁ k v k,v∈m₁₂m₃ |                     union-assoc₁ k v k,v∈m₁₂m₃ | ||||||
|                     with Expr-Provenance f k (((` m₁) ∪ (` m₂)) ∪ (` m₃)) (∈-cong proj₁ k,v∈m₁₂m₃) |                         with Expr-Provenance f k (((` m₁) ∪ (` m₂)) ∪ (` m₃)) (∈-cong proj₁ k,v∈m₁₂m₃) | ||||||
|                 ...   | (_ , (in₂ k∉ke₁₂ (single {v₃} v₃∈e₃) , v₃∈m₁₂m₃)) |                     ...   | (_ , (in₂ k∉ke₁₂ (single {v₃} v₃∈e₃) , v₃∈m₁₂m₃)) | ||||||
|                         rewrite Map-functional {m = union f (union f m₁ m₂) m₃} k,v∈m₁₂m₃ v₃∈m₁₂m₃ = |                             rewrite Map-functional {m = union f (union f m₁ m₂) m₃} k,v∈m₁₂m₃ v₃∈m₁₂m₃ = | ||||||
|                         let (k∉ke₁ , k∉ke₂) = I.∉-union-∉-either {l₁ = l₁} {l₂ = l₂} k∉ke₁₂ |                             let (k∉ke₁ , k∉ke₂) = I.∉-union-∉-either {l₁ = l₁} {l₂ = l₂} k∉ke₁₂ | ||||||
|                         in (v₃ , (refl , I.union-preserves-∈₂ k∉ke₁ (I.union-preserves-∈₂ k∉ke₂ v₃∈e₃))) |                             in (v₃ , (≈-refl , I.union-preserves-∈₂ k∉ke₁ (I.union-preserves-∈₂ k∉ke₂ v₃∈e₃))) | ||||||
|                 ...   | (_ , (in₁ (in₂ k∉ke₁ (single {v₂} v₂∈e₂)) k∉ke₃ , v₂∈m₁₂m₃)) |                     ...   | (_ , (in₁ (in₂ k∉ke₁ (single {v₂} v₂∈e₂)) k∉ke₃ , v₂∈m₁₂m₃)) | ||||||
|                         rewrite Map-functional {m = union f (union f m₁ m₂) m₃} k,v∈m₁₂m₃ v₂∈m₁₂m₃ = |                             rewrite Map-functional {m = union f (union f m₁ m₂) m₃} k,v∈m₁₂m₃ v₂∈m₁₂m₃ = | ||||||
|                         (v₂ , (refl , I.union-preserves-∈₂ k∉ke₁ (I.union-preserves-∈₁ u₂ v₂∈e₂ k∉ke₃))) |                             (v₂ , (≈-refl , I.union-preserves-∈₂ k∉ke₁ (I.union-preserves-∈₁ u₂ v₂∈e₂ k∉ke₃))) | ||||||
|                 ...   | (_ , (bothᵘ (in₂ k∉ke₁ (single {v₂} v₂∈e₂)) (single {v₃} v₃∈e₃) , v₂v₃∈m₁₂m₃)) |                     ...   | (_ , (bothᵘ (in₂ k∉ke₁ (single {v₂} v₂∈e₂)) (single {v₃} v₃∈e₃) , v₂v₃∈m₁₂m₃)) | ||||||
|                         rewrite Map-functional {m = union f (union f m₁ m₂) m₃} k,v∈m₁₂m₃ v₂v₃∈m₁₂m₃ = |                             rewrite Map-functional {m = union f (union f m₁ m₂) m₃} k,v∈m₁₂m₃ v₂v₃∈m₁₂m₃ = | ||||||
|                         (f v₂ v₃ , (refl , I.union-preserves-∈₂ k∉ke₁  (I.union-combines u₂ u₃ v₂∈e₂ v₃∈e₃))) |                             (f v₂ v₃ , (≈-refl , I.union-preserves-∈₂ k∉ke₁  (I.union-combines u₂ u₃ v₂∈e₂ v₃∈e₃))) | ||||||
|                 ...   | (_ , (in₁ (in₁ (single {v₁} v₁∈e₁) k∉ke₂) k∉ke₃ , v₁∈m₁₂m₃)) |                     ...   | (_ , (in₁ (in₁ (single {v₁} v₁∈e₁) k∉ke₂) k∉ke₃ , v₁∈m₁₂m₃)) | ||||||
|                         rewrite Map-functional {m = union f (union f m₁ m₂) m₃} k,v∈m₁₂m₃ v₁∈m₁₂m₃ = |                             rewrite Map-functional {m = union f (union f m₁ m₂) m₃} k,v∈m₁₂m₃ v₁∈m₁₂m₃ = | ||||||
|                         (v₁ , (refl , I.union-preserves-∈₁ u₁ v₁∈e₁ (I.union-preserves-∉ k∉ke₂ k∉ke₃))) |                             (v₁ , (≈-refl , I.union-preserves-∈₁ u₁ v₁∈e₁ (I.union-preserves-∉ k∉ke₂ k∉ke₃))) | ||||||
|                 ...   | (_ , (bothᵘ (in₁ (single {v₁} v₁∈e₁) k∉ke₂) (single {v₃} v₃∈e₃) , v₁v₃∈m₁₂m₃)) |                     ...   | (_ , (bothᵘ (in₁ (single {v₁} v₁∈e₁) k∉ke₂) (single {v₃} v₃∈e₃) , v₁v₃∈m₁₂m₃)) | ||||||
|                         rewrite Map-functional {m = union f (union f m₁ m₂) m₃} k,v∈m₁₂m₃ v₁v₃∈m₁₂m₃ = |                             rewrite Map-functional {m = union f (union f m₁ m₂) m₃} k,v∈m₁₂m₃ v₁v₃∈m₁₂m₃ = | ||||||
|                         (f v₁ v₃ , (refl , I.union-combines u₁ (I.union-preserves-Unique l₂ l₃ u₃) v₁∈e₁ (I.union-preserves-∈₂ k∉ke₂ v₃∈e₃))) |                             (f v₁ v₃ , (≈-refl , I.union-combines u₁ (I.union-preserves-Unique l₂ l₃ u₃) v₁∈e₁ (I.union-preserves-∈₂ k∉ke₂ v₃∈e₃))) | ||||||
|                 ...   | (_ , (in₁ (bothᵘ (single {v₁} v₁∈e₁) (single {v₂} v₂∈e₂)) k∉ke₃), v₁v₂∈m₁₂m₃) |                     ...   | (_ , (in₁ (bothᵘ (single {v₁} v₁∈e₁) (single {v₂} v₂∈e₂)) k∉ke₃), v₁v₂∈m₁₂m₃) | ||||||
|                         rewrite Map-functional {m = union f (union f m₁ m₂) m₃} k,v∈m₁₂m₃ v₁v₂∈m₁₂m₃ = |                             rewrite Map-functional {m = union f (union f m₁ m₂) m₃} k,v∈m₁₂m₃ v₁v₂∈m₁₂m₃ = | ||||||
|                         (f v₁ v₂ , (refl , I.union-combines u₁ (I.union-preserves-Unique l₂ l₃ u₃) v₁∈e₁ (I.union-preserves-∈₁ u₂ v₂∈e₂ k∉ke₃))) |                             (f v₁ v₂ , (≈-refl , I.union-combines u₁ (I.union-preserves-Unique l₂ l₃ u₃) v₁∈e₁ (I.union-preserves-∈₁ u₂ v₂∈e₂ k∉ke₃))) | ||||||
|                 ...   | (_ , (bothᵘ (bothᵘ (single {v₁} v₁∈e₁) (single {v₂} v₂∈e₂)) (single {v₃} v₃∈e₃) , v₁v₂v₃∈m₁₂m₃)) |                     ...   | (_ , (bothᵘ (bothᵘ (single {v₁} v₁∈e₁) (single {v₂} v₂∈e₂)) (single {v₃} v₃∈e₃) , v₁v₂v₃∈m₁₂m₃)) | ||||||
|                         rewrite Map-functional {m = union f (union f m₁ m₂) m₃} k,v∈m₁₂m₃ v₁v₂v₃∈m₁₂m₃ = |                             rewrite Map-functional {m = union f (union f m₁ m₂) m₃} k,v∈m₁₂m₃ v₁v₂v₃∈m₁₂m₃ = | ||||||
|                         (f v₁ (f v₂ v₃) , (f-assoc v₁ v₂ v₃ , I.union-combines u₁ (I.union-preserves-Unique l₂ l₃ u₃) v₁∈e₁ (I.union-combines u₂ u₃ v₂∈e₂ v₃∈e₃))) |                             (f v₁ (f v₂ v₃) , (f-assoc v₁ v₂ v₃ , I.union-combines u₁ (I.union-preserves-Unique l₂ l₃ u₃) v₁∈e₁ (I.union-combines u₂ u₃ v₂∈e₂ v₃∈e₃))) | ||||||
| 
 | 
 | ||||||
|                 union-assoc₂ : subset (_≡_) (union f m₁ (union f m₂ m₃)) (union f (union f m₁ m₂) m₃)  |                     union-assoc₂ : subset (union f m₁ (union f m₂ m₃)) (union f (union f m₁ m₂) m₃)  | ||||||
|                 union-assoc₂ k v k,v∈m₁m₂₃ |                     union-assoc₂ k v k,v∈m₁m₂₃ | ||||||
|                     with Expr-Provenance f k ((` m₁) ∪ ((` m₂) ∪ (` m₃))) (∈-cong proj₁ k,v∈m₁m₂₃) |                         with Expr-Provenance f k ((` m₁) ∪ ((` m₂) ∪ (` m₃))) (∈-cong proj₁ k,v∈m₁m₂₃) | ||||||
|                 ...   | (_ , (in₂ k∉ke₁ (in₂ k∉ke₂ (single {v₃} v₃∈e₃)) , v₃∈m₁m₂₃)) |                     ...   | (_ , (in₂ k∉ke₁ (in₂ k∉ke₂ (single {v₃} v₃∈e₃)) , v₃∈m₁m₂₃)) | ||||||
|                         rewrite Map-functional {m = union f m₁ (union f m₂ m₃)} k,v∈m₁m₂₃ v₃∈m₁m₂₃ = |                             rewrite Map-functional {m = union f m₁ (union f m₂ m₃)} k,v∈m₁m₂₃ v₃∈m₁m₂₃ = | ||||||
|                         (v₃ , (refl , I.union-preserves-∈₂ (I.union-preserves-∉ k∉ke₁ k∉ke₂) v₃∈e₃)) |                             (v₃ , (≈-refl , I.union-preserves-∈₂ (I.union-preserves-∉ k∉ke₁ k∉ke₂) v₃∈e₃)) | ||||||
|                 ...   | (_ , (in₂ k∉ke₁ (in₁ (single {v₂} v₂∈e₂) k∉ke₃) , v₂∈m₁m₂₃)) |                     ...   | (_ , (in₂ k∉ke₁ (in₁ (single {v₂} v₂∈e₂) k∉ke₃) , v₂∈m₁m₂₃)) | ||||||
|                         rewrite Map-functional {m = union f m₁ (union f m₂ m₃)} k,v∈m₁m₂₃ v₂∈m₁m₂₃ = |                             rewrite Map-functional {m = union f m₁ (union f m₂ m₃)} k,v∈m₁m₂₃ v₂∈m₁m₂₃ = | ||||||
|                         (v₂ , (refl , I.union-preserves-∈₁ (I.union-preserves-Unique l₁ l₂ u₂) (I.union-preserves-∈₂ k∉ke₁ v₂∈e₂) k∉ke₃)) |                             (v₂ , (≈-refl , I.union-preserves-∈₁ (I.union-preserves-Unique l₁ l₂ u₂) (I.union-preserves-∈₂ k∉ke₁ v₂∈e₂) k∉ke₃)) | ||||||
|                 ...   | (_ , (in₂ k∉ke₁ (bothᵘ (single {v₂} v₂∈e₂) (single {v₃} v₃∈e₃)) , v₂v₃∈m₁m₂₃)) |                     ...   | (_ , (in₂ k∉ke₁ (bothᵘ (single {v₂} v₂∈e₂) (single {v₃} v₃∈e₃)) , v₂v₃∈m₁m₂₃)) | ||||||
|                         rewrite Map-functional {m = union f m₁ (union f m₂ m₃)} k,v∈m₁m₂₃ v₂v₃∈m₁m₂₃ = |                             rewrite Map-functional {m = union f m₁ (union f m₂ m₃)} k,v∈m₁m₂₃ v₂v₃∈m₁m₂₃ = | ||||||
|                         (f v₂ v₃ , (refl , I.union-combines (I.union-preserves-Unique l₁ l₂ u₂) u₃ (I.union-preserves-∈₂ k∉ke₁ v₂∈e₂) v₃∈e₃)) |                             (f v₂ v₃ , (≈-refl , I.union-combines (I.union-preserves-Unique l₁ l₂ u₂) u₃ (I.union-preserves-∈₂ k∉ke₁ v₂∈e₂) v₃∈e₃)) | ||||||
|                 ...   | (_ , (in₁ (single {v₁} v₁∈e₁) k∉ke₂₃ , v₁∈m₁m₂₃)) |                     ...   | (_ , (in₁ (single {v₁} v₁∈e₁) k∉ke₂₃ , v₁∈m₁m₂₃)) | ||||||
|                         rewrite Map-functional {m = union f m₁ (union f m₂ m₃)} k,v∈m₁m₂₃ v₁∈m₁m₂₃ = |                             rewrite Map-functional {m = union f m₁ (union f m₂ m₃)} k,v∈m₁m₂₃ v₁∈m₁m₂₃ = | ||||||
|                         let (k∉ke₂ , k∉ke₃) = I.∉-union-∉-either {l₁ = l₂} {l₂ = l₃} k∉ke₂₃ |                             let (k∉ke₂ , k∉ke₃) = I.∉-union-∉-either {l₁ = l₂} {l₂ = l₃} k∉ke₂₃ | ||||||
|                         in (v₁ , (refl , I.union-preserves-∈₁ (I.union-preserves-Unique l₁ l₂ u₂) (I.union-preserves-∈₁ u₁ v₁∈e₁ k∉ke₂) k∉ke₃)) |                             in (v₁ , (≈-refl , I.union-preserves-∈₁ (I.union-preserves-Unique l₁ l₂ u₂) (I.union-preserves-∈₁ u₁ v₁∈e₁ k∉ke₂) k∉ke₃)) | ||||||
|                 ...   | (_ , (bothᵘ (single {v₁} v₁∈e₁) (in₂ k∉ke₂ (single {v₃} v₃∈e₃)) , v₁v₃∈m₁m₂₃)) |                     ...   | (_ , (bothᵘ (single {v₁} v₁∈e₁) (in₂ k∉ke₂ (single {v₃} v₃∈e₃)) , v₁v₃∈m₁m₂₃)) | ||||||
|                         rewrite Map-functional {m = union f m₁ (union f m₂ m₃)} k,v∈m₁m₂₃ v₁v₃∈m₁m₂₃ = |                             rewrite Map-functional {m = union f m₁ (union f m₂ m₃)} k,v∈m₁m₂₃ v₁v₃∈m₁m₂₃ = | ||||||
|                         (f v₁ v₃ , (refl , I.union-combines (I.union-preserves-Unique l₁ l₂ u₂) u₃ (I.union-preserves-∈₁ u₁ v₁∈e₁ k∉ke₂) v₃∈e₃)) |                             (f v₁ v₃ , (≈-refl , I.union-combines (I.union-preserves-Unique l₁ l₂ u₂) u₃ (I.union-preserves-∈₁ u₁ v₁∈e₁ k∉ke₂) v₃∈e₃)) | ||||||
|                 ...   | (_ , (bothᵘ (single {v₁} v₁∈e₁) (in₁ (single {v₂} v₂∈e₂) k∉ke₃) , v₁v₂∈m₁m₂₃)) |                     ...   | (_ , (bothᵘ (single {v₁} v₁∈e₁) (in₁ (single {v₂} v₂∈e₂) k∉ke₃) , v₁v₂∈m₁m₂₃)) | ||||||
|                         rewrite Map-functional {m = union f m₁ (union f m₂ m₃)} k,v∈m₁m₂₃ v₁v₂∈m₁m₂₃ = |                             rewrite Map-functional {m = union f m₁ (union f m₂ m₃)} k,v∈m₁m₂₃ v₁v₂∈m₁m₂₃ = | ||||||
|                         (f v₁ v₂ , (refl , I.union-preserves-∈₁ (I.union-preserves-Unique l₁ l₂ u₂) (I.union-combines u₁ u₂ v₁∈e₁ v₂∈e₂) k∉ke₃)) |                             (f v₁ v₂ , (≈-refl , I.union-preserves-∈₁ (I.union-preserves-Unique l₁ l₂ u₂) (I.union-combines u₁ u₂ v₁∈e₁ v₂∈e₂) k∉ke₃)) | ||||||
|                 ...   | (_ , (bothᵘ (single {v₁} v₁∈e₁) (bothᵘ (single {v₂} v₂∈e₂) (single {v₃} v₃∈e₃)) , v₁v₂v₃∈m₁m₂₃)) |                     ...   | (_ , (bothᵘ (single {v₁} v₁∈e₁) (bothᵘ (single {v₂} v₂∈e₂) (single {v₃} v₃∈e₃)) , v₁v₂v₃∈m₁m₂₃)) | ||||||
|                         rewrite Map-functional {m = union f m₁ (union f m₂ m₃)} k,v∈m₁m₂₃ v₁v₂v₃∈m₁m₂₃ = |                             rewrite Map-functional {m = union f m₁ (union f m₂ m₃)} k,v∈m₁m₂₃ v₁v₂v₃∈m₁m₂₃ = | ||||||
|                         (f (f v₁ v₂) v₃ , (sym (f-assoc v₁ v₂ v₃) , I.union-combines (I.union-preserves-Unique l₁ l₂ u₂) u₃ (I.union-combines u₁ u₂ v₁∈e₁ v₂∈e₂) v₃∈e₃)) |                             (f (f v₁ v₂) v₃ , (≈-sym (f-assoc v₁ v₂ v₃) , I.union-combines (I.union-preserves-Unique l₁ l₂ u₂) u₃ (I.union-combines u₁ u₂ v₁∈e₁ v₂∈e₂) v₃∈e₃)) | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user