[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f✝ f₁ f₂ : Filter α
g✝ g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → β → γ
f : Filter α
g : Filter β
⊢ ∀ {x y : Set γ},
    x ∈ {s | ∃ u v, u ∈ f ∧ v ∈ g ∧ image2 m u v ⊆ s} →
      y ∈ {s | ∃ u v, u ∈ f ∧ v ∈ g ∧ image2 m u v ⊆ s} → x ∩ y ∈ {s | ∃ u v, u ∈ f ∧ v ∈ g ∧ image2 m u v ⊆ s}
[PROOFSTEP]
simp only [exists_prop, Set.mem_setOf_eq, subset_inter_iff]
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f✝ f₁ f₂ : Filter α
g✝ g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → β → γ
f : Filter α
g : Filter β
⊢ ∀ {x y : Set γ},
    (∃ u v, u ∈ f ∧ v ∈ g ∧ image2 m u v ⊆ x) →
      (∃ u v, u ∈ f ∧ v ∈ g ∧ image2 m u v ⊆ y) → ∃ u v, u ∈ f ∧ v ∈ g ∧ image2 m u v ⊆ x ∧ image2 m u v ⊆ y
[PROOFSTEP]
rintro _ _ ⟨s₁, s₂, hs₁, hs₂, hs⟩ ⟨t₁, t₂, ht₁, ht₂, ht⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f✝ f₁ f₂ : Filter α
g✝ g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁✝ s₂✝ : Set α
t t₁✝ t₂✝ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → β → γ
f : Filter α
g : Filter β
x✝ y✝ : Set γ
s₁ : Set α
s₂ : Set β
hs₁ : s₁ ∈ f
hs₂ : s₂ ∈ g
hs : image2 m s₁ s₂ ⊆ x✝
t₁ : Set α
t₂ : Set β
ht₁ : t₁ ∈ f
ht₂ : t₂ ∈ g
ht : image2 m t₁ t₂ ⊆ y✝
⊢ ∃ u v, u ∈ f ∧ v ∈ g ∧ image2 m u v ⊆ x✝ ∧ image2 m u v ⊆ y✝
[PROOFSTEP]
exact
  ⟨s₁ ∩ t₁, s₂ ∩ t₂, inter_sets f hs₁ ht₁, inter_sets g hs₂ ht₂,
    (image2_subset (inter_subset_left _ _) <| inter_subset_left _ _).trans hs,
    (image2_subset (inter_subset_right _ _) <| inter_subset_right _ _).trans ht⟩
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f✝ f₁ f₂ : Filter α
g✝ g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → β → γ
f : Filter α
g : Filter β
⊢ map (fun p => m p.fst p.snd) (f ×ˢ g) = map₂ m f g
[PROOFSTEP]
ext s
[GOAL]
case a
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f✝ f₁ f₂ : Filter α
g✝ g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s✝ s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → β → γ
f : Filter α
g : Filter β
s : Set γ
⊢ s ∈ map (fun p => m p.fst p.snd) (f ×ˢ g) ↔ s ∈ map₂ m f g
[PROOFSTEP]
simp [mem_prod_iff, prod_subset_iff]
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f✝ f₁ f₂ : Filter α
g✝ g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
f : Filter α
g : Filter β
⊢ map₂ Prod.mk f g = f ×ˢ g
[PROOFSTEP]
simp only [← map_prod_eq_map₂, map_id']
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
⊢ map₂ m f g = ⊥ ↔ f = ⊥ ∨ g = ⊥
[PROOFSTEP]
simp only [← empty_mem_iff_bot, mem_map₂_iff, subset_empty_iff, image2_eq_empty_iff]
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
⊢ (∃ s t, s ∈ f ∧ t ∈ g ∧ (s = ∅ ∨ t = ∅)) ↔ ∅ ∈ f ∨ ∅ ∈ g
[PROOFSTEP]
constructor
[GOAL]
case mp
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
⊢ (∃ s t, s ∈ f ∧ t ∈ g ∧ (s = ∅ ∨ t = ∅)) → ∅ ∈ f ∨ ∅ ∈ g
[PROOFSTEP]
rintro ⟨s, t, hs, ht, rfl | rfl⟩
[GOAL]
case mp.intro.intro.intro.intro.inl
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t✝ t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
t : Set β
ht : t ∈ g
hs : ∅ ∈ f
⊢ ∅ ∈ f ∨ ∅ ∈ g
[PROOFSTEP]
exact Or.inl hs
[GOAL]
case mp.intro.intro.intro.intro.inr
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s✝ s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
s : Set α
hs : s ∈ f
ht : ∅ ∈ g
⊢ ∅ ∈ f ∨ ∅ ∈ g
[PROOFSTEP]
exact Or.inr ht
[GOAL]
case mpr
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
⊢ ∅ ∈ f ∨ ∅ ∈ g → ∃ s t, s ∈ f ∧ t ∈ g ∧ (s = ∅ ∨ t = ∅)
[PROOFSTEP]
rintro (h | h)
[GOAL]
case mpr.inl
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h✝ h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
h : ∅ ∈ f
⊢ ∃ s t, s ∈ f ∧ t ∈ g ∧ (s = ∅ ∨ t = ∅)
[PROOFSTEP]
exact ⟨_, _, h, univ_mem, Or.inl rfl⟩
[GOAL]
case mpr.inr
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h✝ h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
h : ∅ ∈ g
⊢ ∃ s t, s ∈ f ∧ t ∈ g ∧ (s = ∅ ∨ t = ∅)
[PROOFSTEP]
exact ⟨_, _, univ_mem, h, Or.inr rfl⟩
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
⊢ NeBot (map₂ m f g) ↔ NeBot f ∧ NeBot g
[PROOFSTEP]
simp_rw [neBot_iff]
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
⊢ map₂ m f g ≠ ⊥ ↔ f ≠ ⊥ ∧ g ≠ ⊥
[PROOFSTEP]
exact map₂_eq_bot_iff.not.trans not_or
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
⊢ map₂ m (f₁ ⊔ f₂) g = map₂ m f₁ g ⊔ map₂ m f₂ g
[PROOFSTEP]
ext u
[GOAL]
case a
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
u : Set γ
⊢ u ∈ map₂ m (f₁ ⊔ f₂) g ↔ u ∈ map₂ m f₁ g ⊔ map₂ m f₂ g
[PROOFSTEP]
constructor
[GOAL]
case a.mp
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
u : Set γ
⊢ u ∈ map₂ m (f₁ ⊔ f₂) g → u ∈ map₂ m f₁ g ⊔ map₂ m f₂ g
[PROOFSTEP]
rintro ⟨s, t, ⟨h₁, h₂⟩, ht, hu⟩
[GOAL]
case a.mp.intro.intro.intro.intro.intro
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁✝ h₂✝ : Filter γ
s✝ s₁ s₂ : Set α
t✝ t₁ t₂ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
u : Set γ
s : Set α
t : Set β
h₁ : s ∈ f₁.sets
h₂ : s ∈ f₂.sets
ht : t ∈ g
hu : image2 m s t ⊆ u
⊢ u ∈ map₂ m f₁ g ⊔ map₂ m f₂ g
[PROOFSTEP]
exact ⟨mem_of_superset (image2_mem_map₂ h₁ ht) hu, mem_of_superset (image2_mem_map₂ h₂ ht) hu⟩
[GOAL]
case a.mpr
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
u : Set γ
⊢ u ∈ map₂ m f₁ g ⊔ map₂ m f₂ g → u ∈ map₂ m (f₁ ⊔ f₂) g
[PROOFSTEP]
rintro ⟨⟨s₁, t₁, hs₁, ht₁, hu₁⟩, s₂, t₂, hs₂, ht₂, hu₂⟩
[GOAL]
case a.mpr.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁✝ s₂✝ : Set α
t t₁✝ t₂✝ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
u : Set γ
s₁ : Set α
t₁ : Set β
hs₁ : s₁ ∈ f₁
ht₁ : t₁ ∈ g
hu₁ : image2 m s₁ t₁ ⊆ u
s₂ : Set α
t₂ : Set β
hs₂ : s₂ ∈ f₂
ht₂ : t₂ ∈ g
hu₂ : image2 m s₂ t₂ ⊆ u
⊢ u ∈ map₂ m (f₁ ⊔ f₂) g
[PROOFSTEP]
refine' ⟨s₁ ∪ s₂, t₁ ∩ t₂, union_mem_sup hs₁ hs₂, inter_mem ht₁ ht₂, _⟩
[GOAL]
case a.mpr.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁✝ s₂✝ : Set α
t t₁✝ t₂✝ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
u : Set γ
s₁ : Set α
t₁ : Set β
hs₁ : s₁ ∈ f₁
ht₁ : t₁ ∈ g
hu₁ : image2 m s₁ t₁ ⊆ u
s₂ : Set α
t₂ : Set β
hs₂ : s₂ ∈ f₂
ht₂ : t₂ ∈ g
hu₂ : image2 m s₂ t₂ ⊆ u
⊢ image2 m (s₁ ∪ s₂) (t₁ ∩ t₂) ⊆ u
[PROOFSTEP]
rw [image2_union_left]
[GOAL]
case a.mpr.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁✝ s₂✝ : Set α
t t₁✝ t₂✝ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
u : Set γ
s₁ : Set α
t₁ : Set β
hs₁ : s₁ ∈ f₁
ht₁ : t₁ ∈ g
hu₁ : image2 m s₁ t₁ ⊆ u
s₂ : Set α
t₂ : Set β
hs₂ : s₂ ∈ f₂
ht₂ : t₂ ∈ g
hu₂ : image2 m s₂ t₂ ⊆ u
⊢ image2 m s₁ (t₁ ∩ t₂) ∪ image2 m s₂ (t₁ ∩ t₂) ⊆ u
[PROOFSTEP]
exact
  union_subset ((image2_subset_left <| inter_subset_left _ _).trans hu₁)
    ((image2_subset_left <| inter_subset_right _ _).trans hu₂)
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
⊢ map₂ m f (g₁ ⊔ g₂) = map₂ m f g₁ ⊔ map₂ m f g₂
[PROOFSTEP]
ext u
[GOAL]
case a
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
u : Set γ
⊢ u ∈ map₂ m f (g₁ ⊔ g₂) ↔ u ∈ map₂ m f g₁ ⊔ map₂ m f g₂
[PROOFSTEP]
constructor
[GOAL]
case a.mp
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
u : Set γ
⊢ u ∈ map₂ m f (g₁ ⊔ g₂) → u ∈ map₂ m f g₁ ⊔ map₂ m f g₂
[PROOFSTEP]
rintro ⟨s, t, hs, ⟨h₁, h₂⟩, hu⟩
[GOAL]
case a.mp.intro.intro.intro.intro.intro
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁✝ h₂✝ : Filter γ
s✝ s₁ s₂ : Set α
t✝ t₁ t₂ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
u : Set γ
s : Set α
t : Set β
hs : s ∈ f
hu : image2 m s t ⊆ u
h₁ : t ∈ g₁.sets
h₂ : t ∈ g₂.sets
⊢ u ∈ map₂ m f g₁ ⊔ map₂ m f g₂
[PROOFSTEP]
exact ⟨mem_of_superset (image2_mem_map₂ hs h₁) hu, mem_of_superset (image2_mem_map₂ hs h₂) hu⟩
[GOAL]
case a.mpr
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
u : Set γ
⊢ u ∈ map₂ m f g₁ ⊔ map₂ m f g₂ → u ∈ map₂ m f (g₁ ⊔ g₂)
[PROOFSTEP]
rintro ⟨⟨s₁, t₁, hs₁, ht₁, hu₁⟩, s₂, t₂, hs₂, ht₂, hu₂⟩
[GOAL]
case a.mpr.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁✝ s₂✝ : Set α
t t₁✝ t₂✝ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
u : Set γ
s₁ : Set α
t₁ : Set β
hs₁ : s₁ ∈ f
ht₁ : t₁ ∈ g₁
hu₁ : image2 m s₁ t₁ ⊆ u
s₂ : Set α
t₂ : Set β
hs₂ : s₂ ∈ f
ht₂ : t₂ ∈ g₂
hu₂ : image2 m s₂ t₂ ⊆ u
⊢ u ∈ map₂ m f (g₁ ⊔ g₂)
[PROOFSTEP]
refine' ⟨s₁ ∩ s₂, t₁ ∪ t₂, inter_mem hs₁ hs₂, union_mem_sup ht₁ ht₂, _⟩
[GOAL]
case a.mpr.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁✝ s₂✝ : Set α
t t₁✝ t₂✝ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
u : Set γ
s₁ : Set α
t₁ : Set β
hs₁ : s₁ ∈ f
ht₁ : t₁ ∈ g₁
hu₁ : image2 m s₁ t₁ ⊆ u
s₂ : Set α
t₂ : Set β
hs₂ : s₂ ∈ f
ht₂ : t₂ ∈ g₂
hu₂ : image2 m s₂ t₂ ⊆ u
⊢ image2 m (s₁ ∩ s₂) (t₁ ∪ t₂) ⊆ u
[PROOFSTEP]
rw [image2_union_right]
[GOAL]
case a.mpr.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁✝ s₂✝ : Set α
t t₁✝ t₂✝ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
u : Set γ
s₁ : Set α
t₁ : Set β
hs₁ : s₁ ∈ f
ht₁ : t₁ ∈ g₁
hu₁ : image2 m s₁ t₁ ⊆ u
s₂ : Set α
t₂ : Set β
hs₂ : s₂ ∈ f
ht₂ : t₂ ∈ g₂
hu₂ : image2 m s₂ t₂ ⊆ u
⊢ image2 m (s₁ ∩ s₂) t₁ ∪ image2 m (s₁ ∩ s₂) t₂ ⊆ u
[PROOFSTEP]
exact
  union_subset ((image2_subset_right <| inter_subset_left _ _).trans hu₁)
    ((image2_subset_right <| inter_subset_right _ _).trans hu₂)
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h✝ h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
u : Set γ
h : u ∈ map (fun b => m a b) g
⊢ image2 m {a} ((fun b => m a b) ⁻¹' u) ⊆ u
[PROOFSTEP]
rw [image2_singleton_left, image_subset_iff]
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h✝ h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
u : Set γ
h : u ∈ map (fun a => m a b) f
⊢ image2 m ((fun a => m a b) ⁻¹' u) {b} ⊆ u
[PROOFSTEP]
rw [image2_singleton_right, image_subset_iff]
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
⊢ map₂ m (pure a) (pure b) = pure (m a b)
[PROOFSTEP]
rw [map₂_pure_right, map_pure]
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f✝ f₁ f₂ : Filter α
g✝ g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → β → γ
f : Filter α
g : Filter β
⊢ map₂ m f g = map₂ (fun a b => m b a) g f
[PROOFSTEP]
ext u
[GOAL]
case a
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f✝ f₁ f₂ : Filter α
g✝ g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → β → γ
f : Filter α
g : Filter β
u : Set γ
⊢ u ∈ map₂ m f g ↔ u ∈ map₂ (fun a b => m b a) g f
[PROOFSTEP]
constructor
[GOAL]
case a.mp
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f✝ f₁ f₂ : Filter α
g✝ g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → β → γ
f : Filter α
g : Filter β
u : Set γ
⊢ u ∈ map₂ m f g → u ∈ map₂ (fun a b => m b a) g f
[PROOFSTEP]
rintro ⟨s, t, hs, ht, hu⟩
[GOAL]
case a.mpr
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f✝ f₁ f₂ : Filter α
g✝ g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → β → γ
f : Filter α
g : Filter β
u : Set γ
⊢ u ∈ map₂ (fun a b => m b a) g f → u ∈ map₂ m f g
[PROOFSTEP]
rintro ⟨s, t, hs, ht, hu⟩
[GOAL]
case a.mp.intro.intro.intro.intro
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f✝ f₁ f₂ : Filter α
g✝ g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s✝ s₁ s₂ : Set α
t✝ t₁ t₂ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → β → γ
f : Filter α
g : Filter β
u : Set γ
s : Set α
t : Set β
hs : s ∈ f
ht : t ∈ g
hu : image2 m s t ⊆ u
⊢ u ∈ map₂ (fun a b => m b a) g f
[PROOFSTEP]
refine' ⟨t, s, ht, hs, by rwa [image2_swap]⟩
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f✝ f₁ f₂ : Filter α
g✝ g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s✝ s₁ s₂ : Set α
t✝ t₁ t₂ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → β → γ
f : Filter α
g : Filter β
u : Set γ
s : Set α
t : Set β
hs : s ∈ f
ht : t ∈ g
hu : image2 m s t ⊆ u
⊢ image2 (fun a b => m b a) t s ⊆ u
[PROOFSTEP]
rwa [image2_swap]
[GOAL]
case a.mpr.intro.intro.intro.intro
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f✝ f₁ f₂ : Filter α
g✝ g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s✝ s₁ s₂ : Set α
t✝ t₁ t₂ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → β → γ
f : Filter α
g : Filter β
u : Set γ
s : Set β
t : Set α
hs : s ∈ g
ht : t ∈ f
hu : image2 (fun a b => m b a) s t ⊆ u
⊢ u ∈ map₂ m f g
[PROOFSTEP]
refine' ⟨t, s, ht, hs, by rwa [image2_swap]⟩
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f✝ f₁ f₂ : Filter α
g✝ g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s✝ s₁ s₂ : Set α
t✝ t₁ t₂ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → β → γ
f : Filter α
g : Filter β
u : Set γ
s : Set β
t : Set α
hs : s ∈ g
ht : t ∈ f
hu : image2 (fun a b => m b a) s t ⊆ u
⊢ image2 m t s ⊆ u
[PROOFSTEP]
rwa [image2_swap]
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h✝ h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
h : NeBot g
⊢ map₂ (fun x x_1 => x) f g = f
[PROOFSTEP]
ext u
[GOAL]
case a
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h✝ h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
h : NeBot g
u : Set α
⊢ u ∈ map₂ (fun x x_1 => x) f g ↔ u ∈ f
[PROOFSTEP]
refine' ⟨_, fun hu => ⟨_, _, hu, univ_mem, (image2_left <| h.nonempty_of_mem univ_mem).subset⟩⟩
[GOAL]
case a
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h✝ h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
h : NeBot g
u : Set α
⊢ u ∈ map₂ (fun x x_1 => x) f g → u ∈ f
[PROOFSTEP]
rintro ⟨s, t, hs, ht, hu⟩
[GOAL]
case a.intro.intro.intro.intro
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h✝ h₁ h₂ : Filter γ
s✝ s₁ s₂ : Set α
t✝ t₁ t₂ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
h : NeBot g
u s : Set α
t : Set β
hs : s ∈ f
ht : t ∈ g
hu : image2 (fun x x_1 => x) s t ⊆ u
⊢ u ∈ f
[PROOFSTEP]
rw [image2_left (h.nonempty_of_mem ht)] at hu 
[GOAL]
case a.intro.intro.intro.intro
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h✝ h₁ h₂ : Filter γ
s✝ s₁ s₂ : Set α
t✝ t₁ t₂ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
h : NeBot g
u s : Set α
t : Set β
hs : s ∈ f
ht : t ∈ g
hu : s ⊆ u
⊢ u ∈ f
[PROOFSTEP]
exact mem_of_superset hs hu
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h✝ h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
h : NeBot f
⊢ map₂ (fun x y => y) f g = g
[PROOFSTEP]
rw [map₂_swap, map₂_left h]
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f✝ f₁ f₂ : Filter α
g✝ g₁ g₂ : Filter β
h✝ h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → β → γ → δ
f : Filter α
g : Filter β
h : Filter γ
⊢ ∀ {x y : Set δ},
    x ∈ {s | ∃ u v w, u ∈ f ∧ v ∈ g ∧ w ∈ h ∧ image3 m u v w ⊆ s} →
      y ∈ {s | ∃ u v w, u ∈ f ∧ v ∈ g ∧ w ∈ h ∧ image3 m u v w ⊆ s} →
        x ∩ y ∈ {s | ∃ u v w, u ∈ f ∧ v ∈ g ∧ w ∈ h ∧ image3 m u v w ⊆ s}
[PROOFSTEP]
simp only [exists_prop, mem_setOf_eq, subset_inter_iff]
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f✝ f₁ f₂ : Filter α
g✝ g₁ g₂ : Filter β
h✝ h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → β → γ → δ
f : Filter α
g : Filter β
h : Filter γ
⊢ ∀ {x y : Set δ},
    (∃ u v w, u ∈ f ∧ v ∈ g ∧ w ∈ h ∧ image3 m u v w ⊆ x) →
      (∃ u v w, u ∈ f ∧ v ∈ g ∧ w ∈ h ∧ image3 m u v w ⊆ y) →
        ∃ u v w, u ∈ f ∧ v ∈ g ∧ w ∈ h ∧ image3 m u v w ⊆ x ∧ image3 m u v w ⊆ y
[PROOFSTEP]
rintro _ _ ⟨s₁, s₂, s₃, hs₁, hs₂, hs₃, hs⟩ ⟨t₁, t₂, t₃, ht₁, ht₂, ht₃, ht⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f✝ f₁ f₂ : Filter α
g✝ g₁ g₂ : Filter β
h✝ h₁ h₂ : Filter γ
s s₁✝ s₂✝ : Set α
t t₁✝ t₂✝ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → β → γ → δ
f : Filter α
g : Filter β
h : Filter γ
x✝ y✝ : Set δ
s₁ : Set α
s₂ : Set β
s₃ : Set γ
hs₁ : s₁ ∈ f
hs₂ : s₂ ∈ g
hs₃ : s₃ ∈ h
hs : image3 m s₁ s₂ s₃ ⊆ x✝
t₁ : Set α
t₂ : Set β
t₃ : Set γ
ht₁ : t₁ ∈ f
ht₂ : t₂ ∈ g
ht₃ : t₃ ∈ h
ht : image3 m t₁ t₂ t₃ ⊆ y✝
⊢ ∃ u v w, u ∈ f ∧ v ∈ g ∧ w ∈ h ∧ image3 m u v w ⊆ x✝ ∧ image3 m u v w ⊆ y✝
[PROOFSTEP]
exact
  ⟨s₁ ∩ t₁, s₂ ∩ t₂, s₃ ∩ t₃, inter_mem hs₁ ht₁, inter_mem hs₂ ht₂, inter_mem hs₃ ht₃,
    (image3_mono (inter_subset_left _ _) (inter_subset_left _ _) <| inter_subset_left _ _).trans hs,
    (image3_mono (inter_subset_right _ _) (inter_subset_right _ _) <| inter_subset_right _ _).trans ht⟩
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : δ → γ → ε
n : α → β → δ
⊢ map₂ m (map₂ n f g) h = map₃ (fun a b c => m (n a b) c) f g h
[PROOFSTEP]
ext w
[GOAL]
case a
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : δ → γ → ε
n : α → β → δ
w : Set ε
⊢ w ∈ map₂ m (map₂ n f g) h ↔ w ∈ map₃ (fun a b c => m (n a b) c) f g h
[PROOFSTEP]
constructor
[GOAL]
case a.mp
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : δ → γ → ε
n : α → β → δ
w : Set ε
⊢ w ∈ map₂ m (map₂ n f g) h → w ∈ map₃ (fun a b c => m (n a b) c) f g h
[PROOFSTEP]
rintro ⟨s, t, ⟨u, v, hu, hv, hs⟩, ht, hw⟩
[GOAL]
case a.mp.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s✝ s₁ s₂ : Set α
t✝ t₁ t₂ : Set β
u✝ : Set γ
v✝ : Set δ
a : α
b : β
c : γ
m : δ → γ → ε
n : α → β → δ
w : Set ε
s : Set δ
t : Set γ
u : Set α
v : Set β
hu : u ∈ f
hv : v ∈ g
hs : image2 n u v ⊆ s
ht : t ∈ h
hw : image2 m s t ⊆ w
⊢ w ∈ map₃ (fun a b c => m (n a b) c) f g h
[PROOFSTEP]
refine' ⟨u, v, t, hu, hv, ht, _⟩
[GOAL]
case a.mp.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s✝ s₁ s₂ : Set α
t✝ t₁ t₂ : Set β
u✝ : Set γ
v✝ : Set δ
a : α
b : β
c : γ
m : δ → γ → ε
n : α → β → δ
w : Set ε
s : Set δ
t : Set γ
u : Set α
v : Set β
hu : u ∈ f
hv : v ∈ g
hs : image2 n u v ⊆ s
ht : t ∈ h
hw : image2 m s t ⊆ w
⊢ image3 (fun a b c => m (n a b) c) u v t ⊆ w
[PROOFSTEP]
rw [← image2_image2_left]
[GOAL]
case a.mp.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s✝ s₁ s₂ : Set α
t✝ t₁ t₂ : Set β
u✝ : Set γ
v✝ : Set δ
a : α
b : β
c : γ
m : δ → γ → ε
n : α → β → δ
w : Set ε
s : Set δ
t : Set γ
u : Set α
v : Set β
hu : u ∈ f
hv : v ∈ g
hs : image2 n u v ⊆ s
ht : t ∈ h
hw : image2 m s t ⊆ w
⊢ image2 m (image2 (fun a b => n a b) u v) t ⊆ w
[PROOFSTEP]
exact (image2_subset_right hs).trans hw
[GOAL]
case a.mpr
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : δ → γ → ε
n : α → β → δ
w : Set ε
⊢ w ∈ map₃ (fun a b c => m (n a b) c) f g h → w ∈ map₂ m (map₂ n f g) h
[PROOFSTEP]
rintro ⟨s, t, u, hs, ht, hu, hw⟩
[GOAL]
case a.mpr.intro.intro.intro.intro.intro.intro
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s✝ s₁ s₂ : Set α
t✝ t₁ t₂ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
m : δ → γ → ε
n : α → β → δ
w : Set ε
s : Set α
t : Set β
u : Set γ
hs : s ∈ f
ht : t ∈ g
hu : u ∈ h
hw : image3 (fun a b c => m (n a b) c) s t u ⊆ w
⊢ w ∈ map₂ m (map₂ n f g) h
[PROOFSTEP]
exact ⟨_, u, image2_mem_map₂ hs ht, hu, by rwa [image2_image2_left]⟩
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s✝ s₁ s₂ : Set α
t✝ t₁ t₂ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
m : δ → γ → ε
n : α → β → δ
w : Set ε
s : Set α
t : Set β
u : Set γ
hs : s ∈ f
ht : t ∈ g
hu : u ∈ h
hw : image3 (fun a b c => m (n a b) c) s t u ⊆ w
⊢ image2 m (image2 n s t) u ⊆ w
[PROOFSTEP]
rwa [image2_image2_left]
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → δ → ε
n : β → γ → δ
⊢ map₂ m f (map₂ n g h) = map₃ (fun a b c => m a (n b c)) f g h
[PROOFSTEP]
ext w
[GOAL]
case a
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → δ → ε
n : β → γ → δ
w : Set ε
⊢ w ∈ map₂ m f (map₂ n g h) ↔ w ∈ map₃ (fun a b c => m a (n b c)) f g h
[PROOFSTEP]
constructor
[GOAL]
case a.mp
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → δ → ε
n : β → γ → δ
w : Set ε
⊢ w ∈ map₂ m f (map₂ n g h) → w ∈ map₃ (fun a b c => m a (n b c)) f g h
[PROOFSTEP]
rintro ⟨s, t, hs, ⟨u, v, hu, hv, ht⟩, hw⟩
[GOAL]
case a.mp.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s✝ s₁ s₂ : Set α
t✝ t₁ t₂ : Set β
u✝ : Set γ
v✝ : Set δ
a : α
b : β
c : γ
m : α → δ → ε
n : β → γ → δ
w : Set ε
s : Set α
t : Set δ
hs : s ∈ f
hw : image2 m s t ⊆ w
u : Set β
v : Set γ
hu : u ∈ g
hv : v ∈ h
ht : image2 n u v ⊆ t
⊢ w ∈ map₃ (fun a b c => m a (n b c)) f g h
[PROOFSTEP]
refine' ⟨s, u, v, hs, hu, hv, _⟩
[GOAL]
case a.mp.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s✝ s₁ s₂ : Set α
t✝ t₁ t₂ : Set β
u✝ : Set γ
v✝ : Set δ
a : α
b : β
c : γ
m : α → δ → ε
n : β → γ → δ
w : Set ε
s : Set α
t : Set δ
hs : s ∈ f
hw : image2 m s t ⊆ w
u : Set β
v : Set γ
hu : u ∈ g
hv : v ∈ h
ht : image2 n u v ⊆ t
⊢ image3 (fun a b c => m a (n b c)) s u v ⊆ w
[PROOFSTEP]
rw [← image2_image2_right]
[GOAL]
case a.mp.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s✝ s₁ s₂ : Set α
t✝ t₁ t₂ : Set β
u✝ : Set γ
v✝ : Set δ
a : α
b : β
c : γ
m : α → δ → ε
n : β → γ → δ
w : Set ε
s : Set α
t : Set δ
hs : s ∈ f
hw : image2 m s t ⊆ w
u : Set β
v : Set γ
hu : u ∈ g
hv : v ∈ h
ht : image2 n u v ⊆ t
⊢ image2 (fun a => m a) s (image2 (fun b c => n b c) u v) ⊆ w
[PROOFSTEP]
exact (image2_subset_left ht).trans hw
[GOAL]
case a.mpr
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → δ → ε
n : β → γ → δ
w : Set ε
⊢ w ∈ map₃ (fun a b c => m a (n b c)) f g h → w ∈ map₂ m f (map₂ n g h)
[PROOFSTEP]
rintro ⟨s, t, u, hs, ht, hu, hw⟩
[GOAL]
case a.mpr.intro.intro.intro.intro.intro.intro
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s✝ s₁ s₂ : Set α
t✝ t₁ t₂ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → δ → ε
n : β → γ → δ
w : Set ε
s : Set α
t : Set β
u : Set γ
hs : s ∈ f
ht : t ∈ g
hu : u ∈ h
hw : image3 (fun a b c => m a (n b c)) s t u ⊆ w
⊢ w ∈ map₂ m f (map₂ n g h)
[PROOFSTEP]
exact ⟨s, _, hs, image2_mem_map₂ ht hu, by rwa [image2_image2_right]⟩
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s✝ s₁ s₂ : Set α
t✝ t₁ t₂ : Set β
u✝ : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → δ → ε
n : β → γ → δ
w : Set ε
s : Set α
t : Set β
u : Set γ
hs : s ∈ f
ht : t ∈ g
hu : u ∈ h
hw : image3 (fun a b c => m a (n b c)) s t u ⊆ w
⊢ image2 m s (image2 n t u) ⊆ w
[PROOFSTEP]
rwa [image2_image2_right]
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → β → γ
n : γ → δ
⊢ map n (map₂ m f g) = map₂ (fun a b => n (m a b)) f g
[PROOFSTEP]
rw [← map_prod_eq_map₂, ← map_prod_eq_map₂, map_map]
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → β → γ
n : γ → δ
⊢ map (n ∘ fun p => m p.fst p.snd) (f ×ˢ g) = map (fun p => n (m p.fst p.snd)) (f ×ˢ g)
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : γ → β → δ
n : α → γ
⊢ map₂ m (map n f) g = map₂ (fun a b => m (n a) b) f g
[PROOFSTEP]
rw [← map_prod_eq_map₂, ← map_prod_eq_map₂, ← @map_id _ g, prod_map_map_eq, map_map, map_id]
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : γ → β → δ
n : α → γ
⊢ map ((fun p => m p.fst p.snd) ∘ fun p => (n p.fst, id p.snd)) (f ×ˢ g) = map (fun p => m (n p.fst) p.snd) (f ×ˢ g)
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → γ → δ
n : β → γ
⊢ map₂ m f (map n g) = map₂ (fun a b => m a (n b)) f g
[PROOFSTEP]
rw [map₂_swap, map₂_map_left, map₂_swap]
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h✝ h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : δ → γ → ε
n : α → β → δ
m' : α → ε' → ε
n' : β → γ → ε'
h : Filter γ
h_assoc : ∀ (a : α) (b : β) (c : γ), m (n a b) c = m' a (n' b c)
⊢ map₂ m (map₂ n f g) h = map₂ m' f (map₂ n' g h)
[PROOFSTEP]
simp only [map₂_map₂_left, map₂_map₂_right, h_assoc]
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
n : β → α → γ
h_comm : ∀ (a : α) (b : β), m a b = n b a
⊢ map₂ (fun a b => m b a) g f = map₂ n g f
[PROOFSTEP]
simp_rw [h_comm]
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → δ → ε
n : β → γ → δ
m' : α → γ → δ'
n' : β → δ' → ε
h_left_comm : ∀ (a : α) (b : β) (c : γ), m a (n b c) = n' b (m' a c)
⊢ map₂ m f (map₂ n g h) = map₂ n' g (map₂ m' f h)
[PROOFSTEP]
rw [map₂_swap m', map₂_swap m]
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → δ → ε
n : β → γ → δ
m' : α → γ → δ'
n' : β → δ' → ε
h_left_comm : ∀ (a : α) (b : β) (c : γ), m a (n b c) = n' b (m' a c)
⊢ map₂ (fun a b => m b a) (map₂ n g h) f = map₂ n' g (map₂ (fun a b => m' b a) h f)
[PROOFSTEP]
exact map₂_assoc fun _ _ _ => h_left_comm _ _ _
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : δ → γ → ε
n : α → β → δ
m' : α → γ → δ'
n' : δ' → β → ε
h_right_comm : ∀ (a : α) (b : β) (c : γ), m (n a b) c = n' (m' a c) b
⊢ map₂ m (map₂ n f g) h = map₂ n' (map₂ m' f h) g
[PROOFSTEP]
rw [map₂_swap n, map₂_swap n']
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : δ → γ → ε
n : α → β → δ
m' : α → γ → δ'
n' : δ' → β → ε
h_right_comm : ∀ (a : α) (b : β) (c : γ), m (n a b) c = n' (m' a c) b
⊢ map₂ m (map₂ (fun a b => n b a) g f) h = map₂ (fun a b => n' b a) g (map₂ m' f h)
[PROOFSTEP]
exact map₂_assoc fun _ _ _ => h_right_comm _ _ _
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
n : γ → δ
m' : α' → β' → δ
n₁ : α → α'
n₂ : β → β'
h_distrib : ∀ (a : α) (b : β), n (m a b) = m' (n₁ a) (n₂ b)
⊢ map n (map₂ m f g) = map₂ m' (map n₁ f) (map n₂ g)
[PROOFSTEP]
simp_rw [map_map₂, map₂_map_left, map₂_map_right, h_distrib]
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : α → δ → ε
n : β → γ → δ
m₁ : α → β → β'
m₂ : α → γ → γ'
n' : β' → γ' → ε
h_distrib : ∀ (a : α) (b : β) (c : γ), m a (n b c) = n' (m₁ a b) (m₂ a c)
⊢ map₂ m f (map₂ n g h) ≤ map₂ n' (map₂ m₁ f g) (map₂ m₂ f h)
[PROOFSTEP]
rintro s ⟨t₁, t₂, ⟨u₁, v, hu₁, hv, ht₁⟩, ⟨u₂, w, hu₂, hw, ht₂⟩, hs⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s✝ s₁ s₂ : Set α
t t₁✝ t₂✝ : Set β
u : Set γ
v✝ : Set δ
a : α
b : β
c : γ
m : α → δ → ε
n : β → γ → δ
m₁ : α → β → β'
m₂ : α → γ → γ'
n' : β' → γ' → ε
h_distrib : ∀ (a : α) (b : β) (c : γ), m a (n b c) = n' (m₁ a b) (m₂ a c)
s : Set ε
t₁ : Set β'
t₂ : Set γ'
u₁ : Set α
v : Set β
hu₁ : u₁ ∈ f
hv : v ∈ g
ht₁ : image2 m₁ u₁ v ⊆ t₁
hs : image2 n' t₁ t₂ ⊆ s
u₂ : Set α
w : Set γ
hu₂ : u₂ ∈ f
hw : w ∈ h
ht₂ : image2 m₂ u₂ w ⊆ t₂
⊢ s ∈ map₂ m f (map₂ n g h)
[PROOFSTEP]
refine' ⟨u₁ ∩ u₂, _, inter_mem hu₁ hu₂, image2_mem_map₂ hv hw, _⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s✝ s₁ s₂ : Set α
t t₁✝ t₂✝ : Set β
u : Set γ
v✝ : Set δ
a : α
b : β
c : γ
m : α → δ → ε
n : β → γ → δ
m₁ : α → β → β'
m₂ : α → γ → γ'
n' : β' → γ' → ε
h_distrib : ∀ (a : α) (b : β) (c : γ), m a (n b c) = n' (m₁ a b) (m₂ a c)
s : Set ε
t₁ : Set β'
t₂ : Set γ'
u₁ : Set α
v : Set β
hu₁ : u₁ ∈ f
hv : v ∈ g
ht₁ : image2 m₁ u₁ v ⊆ t₁
hs : image2 n' t₁ t₂ ⊆ s
u₂ : Set α
w : Set γ
hu₂ : u₂ ∈ f
hw : w ∈ h
ht₂ : image2 m₂ u₂ w ⊆ t₂
⊢ image2 m (u₁ ∩ u₂) (image2 n v w) ⊆ s
[PROOFSTEP]
refine' (image2_distrib_subset_left h_distrib).trans ((image2_subset _ _).trans hs)
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_1
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s✝ s₁ s₂ : Set α
t t₁✝ t₂✝ : Set β
u : Set γ
v✝ : Set δ
a : α
b : β
c : γ
m : α → δ → ε
n : β → γ → δ
m₁ : α → β → β'
m₂ : α → γ → γ'
n' : β' → γ' → ε
h_distrib : ∀ (a : α) (b : β) (c : γ), m a (n b c) = n' (m₁ a b) (m₂ a c)
s : Set ε
t₁ : Set β'
t₂ : Set γ'
u₁ : Set α
v : Set β
hu₁ : u₁ ∈ f
hv : v ∈ g
ht₁ : image2 m₁ u₁ v ⊆ t₁
hs : image2 n' t₁ t₂ ⊆ s
u₂ : Set α
w : Set γ
hu₂ : u₂ ∈ f
hw : w ∈ h
ht₂ : image2 m₂ u₂ w ⊆ t₂
⊢ image2 (fun a b => m₁ a b) (u₁ ∩ u₂) v ⊆ t₁
[PROOFSTEP]
exact (image2_subset_right <| inter_subset_left _ _).trans ht₁
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_2
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s✝ s₁ s₂ : Set α
t t₁✝ t₂✝ : Set β
u : Set γ
v✝ : Set δ
a : α
b : β
c : γ
m : α → δ → ε
n : β → γ → δ
m₁ : α → β → β'
m₂ : α → γ → γ'
n' : β' → γ' → ε
h_distrib : ∀ (a : α) (b : β) (c : γ), m a (n b c) = n' (m₁ a b) (m₂ a c)
s : Set ε
t₁ : Set β'
t₂ : Set γ'
u₁ : Set α
v : Set β
hu₁ : u₁ ∈ f
hv : v ∈ g
ht₁ : image2 m₁ u₁ v ⊆ t₁
hs : image2 n' t₁ t₂ ⊆ s
u₂ : Set α
w : Set γ
hu₂ : u₂ ∈ f
hw : w ∈ h
ht₂ : image2 m₂ u₂ w ⊆ t₂
⊢ image2 (fun a c => m₂ a c) (u₁ ∩ u₂) w ⊆ t₂
[PROOFSTEP]
exact (image2_subset_right <| inter_subset_right _ _).trans ht₂
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
m : δ → γ → ε
n : α → β → δ
m₁ : α → γ → α'
m₂ : β → γ → β'
n' : α' → β' → ε
h_distrib : ∀ (a : α) (b : β) (c : γ), m (n a b) c = n' (m₁ a c) (m₂ b c)
⊢ map₂ m (map₂ n f g) h ≤ map₂ n' (map₂ m₁ f h) (map₂ m₂ g h)
[PROOFSTEP]
rintro s ⟨t₁, t₂, ⟨u, w₁, hu, hw₁, ht₁⟩, ⟨v, w₂, hv, hw₂, ht₂⟩, hs⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s✝ s₁ s₂ : Set α
t t₁✝ t₂✝ : Set β
u✝ : Set γ
v✝ : Set δ
a : α
b : β
c : γ
m : δ → γ → ε
n : α → β → δ
m₁ : α → γ → α'
m₂ : β → γ → β'
n' : α' → β' → ε
h_distrib : ∀ (a : α) (b : β) (c : γ), m (n a b) c = n' (m₁ a c) (m₂ b c)
s : Set ε
t₁ : Set α'
t₂ : Set β'
u : Set α
w₁ : Set γ
hu : u ∈ f
hw₁ : w₁ ∈ h
ht₁ : image2 m₁ u w₁ ⊆ t₁
hs : image2 n' t₁ t₂ ⊆ s
v : Set β
w₂ : Set γ
hv : v ∈ g
hw₂ : w₂ ∈ h
ht₂ : image2 m₂ v w₂ ⊆ t₂
⊢ s ∈ map₂ m (map₂ n f g) h
[PROOFSTEP]
refine' ⟨_, w₁ ∩ w₂, image2_mem_map₂ hu hv, inter_mem hw₁ hw₂, _⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s✝ s₁ s₂ : Set α
t t₁✝ t₂✝ : Set β
u✝ : Set γ
v✝ : Set δ
a : α
b : β
c : γ
m : δ → γ → ε
n : α → β → δ
m₁ : α → γ → α'
m₂ : β → γ → β'
n' : α' → β' → ε
h_distrib : ∀ (a : α) (b : β) (c : γ), m (n a b) c = n' (m₁ a c) (m₂ b c)
s : Set ε
t₁ : Set α'
t₂ : Set β'
u : Set α
w₁ : Set γ
hu : u ∈ f
hw₁ : w₁ ∈ h
ht₁ : image2 m₁ u w₁ ⊆ t₁
hs : image2 n' t₁ t₂ ⊆ s
v : Set β
w₂ : Set γ
hv : v ∈ g
hw₂ : w₂ ∈ h
ht₂ : image2 m₂ v w₂ ⊆ t₂
⊢ image2 m (image2 n u v) (w₁ ∩ w₂) ⊆ s
[PROOFSTEP]
refine' (image2_distrib_subset_right h_distrib).trans ((image2_subset _ _).trans hs)
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_1
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s✝ s₁ s₂ : Set α
t t₁✝ t₂✝ : Set β
u✝ : Set γ
v✝ : Set δ
a : α
b : β
c : γ
m : δ → γ → ε
n : α → β → δ
m₁ : α → γ → α'
m₂ : β → γ → β'
n' : α' → β' → ε
h_distrib : ∀ (a : α) (b : β) (c : γ), m (n a b) c = n' (m₁ a c) (m₂ b c)
s : Set ε
t₁ : Set α'
t₂ : Set β'
u : Set α
w₁ : Set γ
hu : u ∈ f
hw₁ : w₁ ∈ h
ht₁ : image2 m₁ u w₁ ⊆ t₁
hs : image2 n' t₁ t₂ ⊆ s
v : Set β
w₂ : Set γ
hv : v ∈ g
hw₂ : w₂ ∈ h
ht₂ : image2 m₂ v w₂ ⊆ t₂
⊢ image2 (fun a c => m₁ a c) u (w₁ ∩ w₂) ⊆ t₁
[PROOFSTEP]
exact (image2_subset_left <| inter_subset_left _ _).trans ht₁
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.refine'_2
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m✝ : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s✝ s₁ s₂ : Set α
t t₁✝ t₂✝ : Set β
u✝ : Set γ
v✝ : Set δ
a : α
b : β
c : γ
m : δ → γ → ε
n : α → β → δ
m₁ : α → γ → α'
m₂ : β → γ → β'
n' : α' → β' → ε
h_distrib : ∀ (a : α) (b : β) (c : γ), m (n a b) c = n' (m₁ a c) (m₂ b c)
s : Set ε
t₁ : Set α'
t₂ : Set β'
u : Set α
w₁ : Set γ
hu : u ∈ f
hw₁ : w₁ ∈ h
ht₁ : image2 m₁ u w₁ ⊆ t₁
hs : image2 n' t₁ t₂ ⊆ s
v : Set β
w₂ : Set γ
hv : v ∈ g
hw₂ : w₂ ∈ h
ht₂ : image2 m₂ v w₂ ⊆ t₂
⊢ image2 (fun b c => m₂ b c) v (w₁ ∩ w₂) ⊆ t₂
[PROOFSTEP]
exact (image2_subset_left <| inter_subset_right _ _).trans ht₂
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
n : γ → δ
m' : β' → α' → δ
n₁ : β → β'
n₂ : α → α'
h_antidistrib : ∀ (a : α) (b : β), n (m a b) = m' (n₁ b) (n₂ a)
⊢ map n (map₂ m f g) = map₂ m' (map n₁ g) (map n₂ f)
[PROOFSTEP]
rw [map₂_swap m]
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b : β
c : γ
n : γ → δ
m' : β' → α' → δ
n₁ : β → β'
n₂ : α → α'
h_antidistrib : ∀ (a : α) (b : β), n (m a b) = m' (n₁ b) (n₂ a)
⊢ map n (map₂ (fun a b => m b a) g f) = map₂ m' (map n₁ g) (map n₂ f)
[PROOFSTEP]
exact map_map₂_distrib fun _ _ => h_antidistrib _ _
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f✝ f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h✝ h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a✝ : α
b : β
c : γ
f : α → β → β
a : α
h : ∀ (b : β), f a b = b
l : Filter β
⊢ map₂ f (pure a) l = l
[PROOFSTEP]
rw [map₂_pure_left, show f a = id from funext h, map_id]
[GOAL]
α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
m : α → β → γ
f✝ f₁ f₂ : Filter α
g g₁ g₂ : Filter β
h✝ h₁ h₂ : Filter γ
s s₁ s₂ : Set α
t t₁ t₂ : Set β
u : Set γ
v : Set δ
a : α
b✝ : β
c : γ
f : α → β → α
b : β
h : ∀ (a : α), f a b = a
l : Filter α
⊢ map₂ f l (pure b) = l
[PROOFSTEP]
rw [map₂_pure_right, funext h, map_id']
