# Product and coproduct filters #

In this file we define Filter.prod f g (notation: f ×ˢ g) and Filter.coprod f g. The product of two filters is the largest filter l such that Filter.Tendsto Prod.fst l f and Filter.Tendsto Prod.snd l g.

## Implementation details #

The product filter cannot be defined using the monad structure on filters. For example:

F := do {x ← seq, y ← top, return (x, y)}
G := do {y ← top, x ← seq, return (x, y)}


hence:

s ∈ F  ↔  ∃ n, [n..∞] × univ ⊆ s
s ∈ G  ↔  ∀ i:ℕ, ∃ n, [n..∞] × {i} ⊆ s


Now ⋃ i, [i..∞] × {i} is in G but not in F. As product filter we want to have F as result.

## Notations #

• f ×ˢ g : Filter.prod f g, localized in Filter.
def Filter.prod {α : Type u_1} {β : Type u_2} (f : ) (g : ) :
Filter (α × β)

Product of filters. This is the filter generated by cartesian products of elements of the component filters.

Equations
Instances For
instance Filter.instSProd {α : Type u_1} {β : Type u_2} :
SProd (Filter α) (Filter β) (Filter (α × β))
Equations
• Filter.instSProd = { sprod := Filter.prod }
theorem Filter.prod_mem_prod {α : Type u_1} {β : Type u_2} {s : Set α} {t : Set β} {f : } {g : } (hs : s f) (ht : t g) :
s ×ˢ t f ×ˢ g
theorem Filter.mem_prod_iff {α : Type u_1} {β : Type u_2} {s : Set (α × β)} {f : } {g : } :
s f ×ˢ g t₁f, t₂g, t₁ ×ˢ t₂ s
@[simp]
theorem Filter.prod_mem_prod_iff {α : Type u_1} {β : Type u_2} {s : Set α} {t : Set β} {f : } {g : } [f.NeBot] [g.NeBot] :
s ×ˢ t f ×ˢ g s f t g
theorem Filter.mem_prod_principal {α : Type u_1} {β : Type u_2} {t : Set β} {f : } {s : Set (α × β)} :
s {a : α | bt, (a, b) s} f
theorem Filter.mem_prod_top {α : Type u_1} {β : Type u_2} {f : } {s : Set (α × β)} :
s f ×ˢ {a : α | ∀ (b : β), (a, b) s} f
theorem Filter.eventually_prod_principal_iff {α : Type u_1} {β : Type u_2} {f : } {p : α × βProp} {s : Set β} :
(∀ᶠ (x : α × β) in , p x) ∀ᶠ (x : α) in f, ys, p (x, y)
theorem Filter.comap_prod {α : Type u_1} {β : Type u_2} {γ : Type u_3} (f : αβ × γ) (b : ) (c : ) :
Filter.comap f (b ×ˢ c) = Filter.comap (Prod.fst f) b Filter.comap (Prod.snd f) c
theorem Filter.prod_top {α : Type u_1} {β : Type u_2} {f : } :
f ×ˢ = Filter.comap Prod.fst f
theorem Filter.top_prod {α : Type u_1} {β : Type u_2} {g : } :
×ˢ g = Filter.comap Prod.snd g
theorem Filter.sup_prod {α : Type u_1} {β : Type u_2} (f₁ : ) (f₂ : ) (g : ) :
(f₁ f₂) ×ˢ g = f₁ ×ˢ g f₂ ×ˢ g
theorem Filter.prod_sup {α : Type u_1} {β : Type u_2} (f : ) (g₁ : ) (g₂ : ) :
f ×ˢ (g₁ g₂) = f ×ˢ g₁ f ×ˢ g₂
theorem Filter.eventually_prod_iff {α : Type u_1} {β : Type u_2} {f : } {g : } {p : α × βProp} :
(∀ᶠ (x : α × β) in f ×ˢ g, p x) ∃ (pa : αProp), (∀ᶠ (x : α) in f, pa x) ∃ (pb : βProp), (∀ᶠ (y : β) in g, pb y) ∀ {x : α}, pa x∀ {y : β}, pb yp (x, y)
theorem Filter.tendsto_fst {α : Type u_1} {β : Type u_2} {f : } {g : } :
Filter.Tendsto Prod.fst (f ×ˢ g) f
theorem Filter.tendsto_snd {α : Type u_1} {β : Type u_2} {f : } {g : } :
Filter.Tendsto Prod.snd (f ×ˢ g) g
theorem Filter.Tendsto.fst {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : } {g : } {h : } {m : αβ × γ} (H : Filter.Tendsto m f (g ×ˢ h)) :
Filter.Tendsto (fun (a : α) => (m a).1) f g

If a function tends to a product g ×ˢ h of filters, then its first component tends to g. See also Filter.Tendsto.fst_nhds for the special case of converging to a point in a product of two topological spaces.

theorem Filter.Tendsto.snd {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : } {g : } {h : } {m : αβ × γ} (H : Filter.Tendsto m f (g ×ˢ h)) :
Filter.Tendsto (fun (a : α) => (m a).2) f h

If a function tends to a product g ×ˢ h of filters, then its second component tends to h. See also Filter.Tendsto.snd_nhds for the special case of converging to a point in a product of two topological spaces.

theorem Filter.Tendsto.prod_mk {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : } {g : } {h : } {m₁ : αβ} {m₂ : αγ} (h₁ : Filter.Tendsto m₁ f g) (h₂ : Filter.Tendsto m₂ f h) :
Filter.Tendsto (fun (x : α) => (m₁ x, m₂ x)) f (g ×ˢ h)
theorem Filter.tendsto_prod_swap {α : Type u_1} {β : Type u_2} {f : } {g : } :
Filter.Tendsto Prod.swap (f ×ˢ g) (g ×ˢ f)
theorem Filter.Eventually.prod_inl {α : Type u_1} {β : Type u_2} {la : } {p : αProp} (h : ∀ᶠ (x : α) in la, p x) (lb : ) :
∀ᶠ (x : α × β) in la ×ˢ lb, p x.1
theorem Filter.Eventually.prod_inr {α : Type u_1} {β : Type u_2} {lb : } {p : βProp} (h : ∀ᶠ (x : β) in lb, p x) (la : ) :
∀ᶠ (x : α × β) in la ×ˢ lb, p x.2
theorem Filter.Eventually.prod_mk {α : Type u_1} {β : Type u_2} {la : } {pa : αProp} (ha : ∀ᶠ (x : α) in la, pa x) {lb : } {pb : βProp} (hb : ∀ᶠ (y : β) in lb, pb y) :
∀ᶠ (p : α × β) in la ×ˢ lb, pa p.1 pb p.2
theorem Filter.EventuallyEq.prod_map {α : Type u_1} {β : Type u_2} {γ : Type u_3} {δ : Type u_6} {la : } {fa : αγ} {ga : αγ} (ha : fa =ᶠ[la] ga) {lb : } {fb : βδ} {gb : βδ} (hb : fb =ᶠ[lb] gb) :
Prod.map fa fb =ᶠ[la ×ˢ lb] Prod.map ga gb
theorem Filter.EventuallyLE.prod_map {α : Type u_1} {β : Type u_2} {γ : Type u_3} {δ : Type u_6} [LE γ] [LE δ] {la : } {fa : αγ} {ga : αγ} (ha : fa ≤ᶠ[la] ga) {lb : } {fb : βδ} {gb : βδ} (hb : fb ≤ᶠ[lb] gb) :
Prod.map fa fb ≤ᶠ[la ×ˢ lb] Prod.map ga gb
theorem Filter.Eventually.curry {α : Type u_1} {β : Type u_2} {la : } {lb : } {p : α × βProp} (h : ∀ᶠ (x : α × β) in la ×ˢ lb, p x) :
∀ᶠ (x : α) in la, ∀ᶠ (y : β) in lb, p (x, y)
theorem Filter.Frequently.uncurry {α : Type u_1} {β : Type u_2} {la : } {lb : } {p : αβProp} (h : ∃ᶠ (x : α) in la, ∃ᶠ (y : β) in lb, p x y) :
∃ᶠ (xy : α × β) in la ×ˢ lb, p xy.1 xy.2
theorem Filter.Eventually.diag_of_prod {α : Type u_1} {f : } {p : α × αProp} (h : ∀ᶠ (i : α × α) in f ×ˢ f, p i) :
∀ᶠ (i : α) in f, p (i, i)

A fact that is eventually true about all pairs l ×ˢ l is eventually true about all diagonal pairs (i, i)

theorem Filter.Eventually.diag_of_prod_left {α : Type u_1} {γ : Type u_3} {f : } {g : } {p : (α × α) × γProp} :
(∀ᶠ (x : (α × α) × γ) in (f ×ˢ f) ×ˢ g, p x)∀ᶠ (x : α × γ) in f ×ˢ g, p ((x.1, x.1), x.2)
theorem Filter.Eventually.diag_of_prod_right {α : Type u_1} {γ : Type u_3} {f : } {g : } {p : α × γ × γProp} :
(∀ᶠ (x : α × γ × γ) in f ×ˢ g ×ˢ g, p x)∀ᶠ (x : α × γ) in f ×ˢ g, p (x.1, x.2, x.2)
theorem Filter.tendsto_diag {α : Type u_1} {f : } :
Filter.Tendsto (fun (i : α) => (i, i)) f (f ×ˢ f)
theorem Filter.prod_iInf_left {α : Type u_1} {β : Type u_2} {ι : Sort u_5} [] {f : ι} {g : } :
(⨅ (i : ι), f i) ×ˢ g = ⨅ (i : ι), f i ×ˢ g
theorem Filter.prod_iInf_right {α : Type u_1} {β : Type u_2} {ι : Sort u_5} [] {f : } {g : ι} :
f ×ˢ ⨅ (i : ι), g i = ⨅ (i : ι), f ×ˢ g i
theorem Filter.prod_mono {α : Type u_1} {β : Type u_2} {f₁ : } {f₂ : } {g₁ : } {g₂ : } (hf : f₁ f₂) (hg : g₁ g₂) :
f₁ ×ˢ g₁ f₂ ×ˢ g₂
theorem Filter.prod_mono_left {α : Type u_1} {β : Type u_2} (g : ) {f₁ : } {f₂ : } (hf : f₁ f₂) :
f₁ ×ˢ g f₂ ×ˢ g
theorem Filter.prod_mono_right {α : Type u_1} {β : Type u_2} (f : ) {g₁ : } {g₂ : } (hf : g₁ g₂) :
f ×ˢ g₁ f ×ˢ g₂
theorem Filter.prod_comap_comap_eq {α₁ : Type u} {α₂ : Type v} {β₁ : Type w} {β₂ : Type x} {f₁ : Filter α₁} {f₂ : Filter α₂} {m₁ : β₁α₁} {m₂ : β₂α₂} :
Filter.comap m₁ f₁ ×ˢ Filter.comap m₂ f₂ = Filter.comap (fun (p : β₁ × β₂) => (m₁ p.1, m₂ p.2)) (f₁ ×ˢ f₂)
theorem Filter.prod_comm' {α : Type u_1} {β : Type u_2} {f : } {g : } :
f ×ˢ g = Filter.comap Prod.swap (g ×ˢ f)
theorem Filter.prod_comm {α : Type u_1} {β : Type u_2} {f : } {g : } :
f ×ˢ g = Filter.map (fun (p : β × α) => (p.2, p.1)) (g ×ˢ f)
theorem Filter.mem_prod_iff_left {α : Type u_1} {β : Type u_2} {f : } {g : } {s : Set (α × β)} :
s f ×ˢ g tf, ∀ᶠ (y : β) in g, xt, (x, y) s
theorem Filter.mem_prod_iff_right {α : Type u_1} {β : Type u_2} {f : } {g : } {s : Set (α × β)} :
s f ×ˢ g tg, ∀ᶠ (x : α) in f, yt, (x, y) s
@[simp]
theorem Filter.map_fst_prod {α : Type u_1} {β : Type u_2} (f : ) (g : ) [g.NeBot] :
Filter.map Prod.fst (f ×ˢ g) = f
@[simp]
theorem Filter.map_snd_prod {α : Type u_1} {β : Type u_2} (f : ) (g : ) [f.NeBot] :
Filter.map Prod.snd (f ×ˢ g) = g
@[simp]
theorem Filter.prod_le_prod {α : Type u_1} {β : Type u_2} {f₁ : } {f₂ : } {g₁ : } {g₂ : } [f₁.NeBot] [g₁.NeBot] :
f₁ ×ˢ g₁ f₂ ×ˢ g₂ f₁ f₂ g₁ g₂
@[simp]
theorem Filter.prod_inj {α : Type u_1} {β : Type u_2} {f₁ : } {f₂ : } {g₁ : } {g₂ : } [f₁.NeBot] [g₁.NeBot] :
f₁ ×ˢ g₁ = f₂ ×ˢ g₂ f₁ = f₂ g₁ = g₂
theorem Filter.eventually_swap_iff {α : Type u_1} {β : Type u_2} {f : } {g : } {p : α × βProp} :
(∀ᶠ (x : α × β) in f ×ˢ g, p x) ∀ᶠ (y : β × α) in g ×ˢ f, p y.swap
theorem Filter.prod_assoc {α : Type u_1} {β : Type u_2} {γ : Type u_3} (f : ) (g : ) (h : ) :
Filter.map (⇑(Equiv.prodAssoc α β γ)) ((f ×ˢ g) ×ˢ h) = f ×ˢ g ×ˢ h
theorem Filter.prod_assoc_symm {α : Type u_1} {β : Type u_2} {γ : Type u_3} (f : ) (g : ) (h : ) :
Filter.map (⇑(Equiv.prodAssoc α β γ).symm) (f ×ˢ g ×ˢ h) = (f ×ˢ g) ×ˢ h
theorem Filter.tendsto_prodAssoc {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : } {g : } {h : } :
Filter.Tendsto (⇑(Equiv.prodAssoc α β γ)) ((f ×ˢ g) ×ˢ h) (f ×ˢ g ×ˢ h)
theorem Filter.tendsto_prodAssoc_symm {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : } {g : } {h : } :
Filter.Tendsto (⇑(Equiv.prodAssoc α β γ).symm) (f ×ˢ g ×ˢ h) ((f ×ˢ g) ×ˢ h)
theorem Filter.map_swap4_prod {α : Type u_1} {β : Type u_2} {γ : Type u_3} {δ : Type u_4} {f : } {g : } {h : } {k : } :
Filter.map (fun (p : (α × β) × γ × δ) => ((p.1.1, p.2.1), p.1.2, p.2.2)) ((f ×ˢ g) ×ˢ h ×ˢ k) = (f ×ˢ h) ×ˢ g ×ˢ k

A useful lemma when dealing with uniformities.

theorem Filter.tendsto_swap4_prod {α : Type u_1} {β : Type u_2} {γ : Type u_3} {δ : Type u_4} {f : } {g : } {h : } {k : } :
Filter.Tendsto (fun (p : (α × β) × γ × δ) => ((p.1.1, p.2.1), p.1.2, p.2.2)) ((f ×ˢ g) ×ˢ h ×ˢ k) ((f ×ˢ h) ×ˢ g ×ˢ k)
theorem Filter.prod_map_map_eq {α₁ : Type u} {α₂ : Type v} {β₁ : Type w} {β₂ : Type x} {f₁ : Filter α₁} {f₂ : Filter α₂} {m₁ : α₁β₁} {m₂ : α₂β₂} :
Filter.map m₁ f₁ ×ˢ Filter.map m₂ f₂ = Filter.map (fun (p : α₁ × α₂) => (m₁ p.1, m₂ p.2)) (f₁ ×ˢ f₂)
theorem Filter.prod_map_map_eq' {α₁ : Type u_6} {α₂ : Type u_7} {β₁ : Type u_8} {β₂ : Type u_9} (f : α₁α₂) (g : β₁β₂) (F : Filter α₁) (G : Filter β₁) :
theorem Filter.prod_map_left {α : Type u_1} {β : Type u_2} {γ : Type u_3} (f : αβ) (F : ) (G : ) :
×ˢ G = Filter.map (Prod.map f id) (F ×ˢ G)
theorem Filter.prod_map_right {α : Type u_1} {β : Type u_2} {γ : Type u_3} (f : βγ) (F : ) (G : ) :
F ×ˢ = Filter.map (Prod.map id f) (F ×ˢ G)
theorem Filter.le_prod_map_fst_snd {α : Type u_1} {β : Type u_2} {f : Filter (α × β)} :
f Filter.map Prod.fst f ×ˢ Filter.map Prod.snd f
theorem Filter.Tendsto.prod_map {α : Type u_1} {β : Type u_2} {γ : Type u_3} {δ : Type u_6} {f : αγ} {g : βδ} {a : } {b : } {c : } {d : } (hf : ) (hg : ) :
Filter.Tendsto (Prod.map f g) (a ×ˢ b) (c ×ˢ d)
theorem Filter.map_prod {α : Type u_1} {β : Type u_2} {γ : Type u_3} (m : α × βγ) (f : ) (g : ) :
Filter.map m (f ×ˢ g) = (Filter.map (fun (a : α) (b : β) => m (a, b)) f).seq g
theorem Filter.prod_eq {α : Type u_1} {β : Type u_2} {f : } {g : } :
f ×ˢ g = (Filter.map Prod.mk f).seq g
theorem Filter.prod_inf_prod {α : Type u_1} {β : Type u_2} {f₁ : } {f₂ : } {g₁ : } {g₂ : } :
f₁ ×ˢ g₁ f₂ ×ˢ g₂ = (f₁ f₂) ×ˢ (g₁ g₂)
theorem Filter.inf_prod {α : Type u_1} {β : Type u_2} {g : } {f₁ : } {f₂ : } :
(f₁ f₂) ×ˢ g = f₁ ×ˢ g f₂ ×ˢ g
theorem Filter.prod_inf {α : Type u_1} {β : Type u_2} {f : } {g₁ : } {g₂ : } :
f ×ˢ (g₁ g₂) = f ×ˢ g₁ f ×ˢ g₂
@[simp]
theorem Filter.prod_principal_principal {α : Type u_1} {β : Type u_2} {s : Set α} {t : Set β} :
@[simp]
theorem Filter.pure_prod {α : Type u_1} {β : Type u_2} {a : α} {f : } :
theorem Filter.map_pure_prod {α : Type u_1} {β : Type u_2} {γ : Type u_3} (f : αβγ) (a : α) (B : ) :
@[simp]
theorem Filter.prod_pure {α : Type u_1} {β : Type u_2} {f : } {b : β} :
f ×ˢ pure b = Filter.map (fun (a : α) => (a, b)) f
theorem Filter.prod_pure_pure {α : Type u_1} {β : Type u_2} {a : α} {b : β} :
pure a ×ˢ pure b = pure (a, b)
@[simp]
theorem Filter.prod_eq_bot {α : Type u_1} {β : Type u_2} {f : } {g : } :
f ×ˢ g = f = g =
@[simp]
theorem Filter.prod_bot {α : Type u_1} {β : Type u_2} {f : } :
@[simp]
theorem Filter.bot_prod {α : Type u_1} {β : Type u_2} {g : } :
theorem Filter.prod_neBot {α : Type u_1} {β : Type u_2} {f : } {g : } :
(f ×ˢ g).NeBot f.NeBot g.NeBot
theorem Filter.NeBot.prod {α : Type u_1} {β : Type u_2} {f : } {g : } (hf : f.NeBot) (hg : g.NeBot) :
(f ×ˢ g).NeBot
instance Filter.prod.instNeBot {α : Type u_1} {β : Type u_2} {f : } {g : } [hf : f.NeBot] [hg : g.NeBot] :
(f ×ˢ g).NeBot
Equations
• =
@[simp]
theorem Filter.disjoint_prod {α : Type u_1} {β : Type u_2} {f : } {g : } {f' : } {g' : } :
Disjoint (f ×ˢ g) (f' ×ˢ g') Disjoint f f' Disjoint g g'
theorem Filter.frequently_prod_and {α : Type u_1} {β : Type u_2} {f : } {g : } {p : αProp} {q : βProp} :
(∃ᶠ (x : α × β) in f ×ˢ g, p x.1 q x.2) (∃ᶠ (a : α) in f, p a) ∃ᶠ (b : β) in g, q b

p ∧ q occurs frequently along the product of two filters iff both p and q occur frequently along the corresponding filters.

theorem Filter.tendsto_prod_iff {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : α × βγ} {x : } {y : } {z : } :
Filter.Tendsto f (x ×ˢ y) z Wz, Ux, Vy, ∀ (x : α) (y : β), x Uy Vf (x, y) W
theorem Filter.tendsto_prod_iff' {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : } {g : } {g' : } {s : αβ × γ} :
Filter.Tendsto s f (g ×ˢ g') Filter.Tendsto (fun (n : α) => (s n).1) f g Filter.Tendsto (fun (n : α) => (s n).2) f g'
theorem Filter.le_prod {α : Type u_1} {β : Type u_2} {f : Filter (α × β)} {g : } {g' : } :
f g ×ˢ g' Filter.Tendsto Prod.fst f g Filter.Tendsto Prod.snd f g'

### Coproducts of filters #

def Filter.coprod {α : Type u_1} {β : Type u_2} (f : ) (g : ) :
Filter (α × β)

Coproduct of filters.

Equations
Instances For
theorem Filter.coprod_eq_prod_top_sup_top_prod {α : Type u_1} {β : Type u_2} (f : ) (g : ) :
f.coprod g = f ×ˢ ×ˢ g
theorem Filter.mem_coprod_iff {α : Type u_1} {β : Type u_2} {s : Set (α × β)} {f : } {g : } :
s f.coprod g (∃ t₁f, Prod.fst ⁻¹' t₁ s) t₂g, Prod.snd ⁻¹' t₂ s
@[simp]
theorem Filter.bot_coprod {α : Type u_1} {β : Type u_2} (l : ) :
.coprod l = Filter.comap Prod.snd l
@[simp]
theorem Filter.coprod_bot {α : Type u_1} {β : Type u_2} (l : ) :
l.coprod = Filter.comap Prod.fst l
theorem Filter.bot_coprod_bot {α : Type u_1} {β : Type u_2} :
.coprod =
theorem Filter.compl_mem_coprod {α : Type u_1} {β : Type u_2} {s : Set (α × β)} {la : } {lb : } :
s la.coprod lb (Prod.fst '' s) la (Prod.snd '' s) lb
theorem Filter.coprod_mono {α : Type u_1} {β : Type u_2} {f₁ : } {f₂ : } {g₁ : } {g₂ : } (hf : f₁ f₂) (hg : g₁ g₂) :
f₁.coprod g₁ f₂.coprod g₂
theorem Filter.coprod_neBot_iff {α : Type u_1} {β : Type u_2} {f : } {g : } :
(f.coprod g).NeBot f.NeBot g.NeBot
theorem Filter.coprod_neBot_left {α : Type u_1} {β : Type u_2} {f : } {g : } [f.NeBot] [] :
(f.coprod g).NeBot
theorem Filter.coprod_neBot_right {α : Type u_1} {β : Type u_2} {f : } {g : } [g.NeBot] [] :
(f.coprod g).NeBot
theorem Filter.principal_coprod_principal {α : Type u_1} {β : Type u_2} (s : Set α) (t : Set β) :
theorem Filter.map_prod_map_coprod_le {α₁ : Type u} {α₂ : Type v} {β₁ : Type w} {β₂ : Type x} {f₁ : Filter α₁} {f₂ : Filter α₂} {m₁ : α₁β₁} {m₂ : α₂β₂} :
Filter.map (Prod.map m₁ m₂) (f₁.coprod f₂) (Filter.map m₁ f₁).coprod (Filter.map m₂ f₂)
theorem Filter.map_const_principal_coprod_map_id_principal {α : Type u_6} {β : Type u_7} {ι : Type u_8} (a : α) (b : β) (i : ι) :
(Filter.map (fun (x : α) => b) (Filter.principal {a})).coprod (Filter.map id (Filter.principal {i})) = Filter.principal ({b} ×ˢ Set.univ Set.univ ×ˢ {i})

Characterization of the coproduct of the Filter.maps of two principal filters 𝓟 {a} and 𝓟 {i}, the first under the constant function fun a => b and the second under the identity function. Together with the next lemma, map_prod_map_const_id_principal_coprod_principal, this provides an example showing that the inequality in the lemma map_prod_map_coprod_le can be strict.

theorem Filter.map_prod_map_const_id_principal_coprod_principal {α : Type u_6} {β : Type u_7} {ι : Type u_8} (a : α) (b : β) (i : ι) :
Filter.map (Prod.map (fun (x : α) => b) id) ((Filter.principal {a}).coprod (Filter.principal {i})) = Filter.principal ({b} ×ˢ Set.univ)

Characterization of the Filter.map of the coproduct of two principal filters 𝓟 {a} and 𝓟 {i}, under the Prod.map of two functions, respectively the constant function fun a => b and the identity function. Together with the previous lemma, map_const_principal_coprod_map_id_principal, this provides an example showing that the inequality in the lemma map_prod_map_coprod_le can be strict.

theorem Filter.Tendsto.prod_map_coprod {α : Type u_1} {β : Type u_2} {γ : Type u_3} {δ : Type u_6} {f : αγ} {g : βδ} {a : } {b : } {c : } {d : } (hf : ) (hg : ) :
Filter.Tendsto (Prod.map f g) (a.coprod b) (c.coprod d)