Theorem: generateFrom_prod_eq
File: Mathlib/MeasureTheory/Constructions/Prod/Basic.lean

tactic: apply le_antisymm
state_before: α✝ : Type ?u.538256
α' : Type ?u.538259
β✝ : Type ?u.538262
β' : Type ?u.538265
γ : Type ?u.538268
E : Type ?u.538271
inst✝⁵ : MeasurableSpace α✝
inst✝⁴ : MeasurableSpace α'
inst✝³ : MeasurableSpace β✝
inst✝² : MeasurableSpace β'
inst✝¹ : MeasurableSpace γ
μ μ' : MeasureTheory.Measure α✝
ν ν' : MeasureTheory.Measure β✝
τ : MeasureTheory.Measure γ
inst✝ : NormedAddCommGroup E
α : Type u_1
β : Type u_2
C : Set (Set α)
D : Set (Set β)
hC : IsCountablySpanning C
hD : IsCountablySpanning D
⊢ Prod.instMeasurableSpace = generateFrom (image2 (fun x x_1 => x ×ˢ x_1) C D)

tactic: refine' sup_le _ _ <;> rw [comap_generateFrom] <;> apply generateFrom_le <;>
  rintro _ ⟨s, hs, rfl⟩
state_before: case a
α✝ : Type ?u.538256
α' : Type ?u.538259
β✝ : Type ?u.538262
β' : Type ?u.538265
γ : Type ?u.538268
E : Type ?u.538271
inst✝⁵ : MeasurableSpace α✝
inst✝⁴ : MeasurableSpace α'
inst✝³ : MeasurableSpace β✝
inst✝² : MeasurableSpace β'
inst✝¹ : MeasurableSpace γ
μ μ' : MeasureTheory.Measure α✝
ν ν' : MeasureTheory.Measure β✝
τ : MeasureTheory.Measure γ
inst✝ : NormedAddCommGroup E
α : Type u_1
β : Type u_2
C : Set (Set α)
D : Set (Set β)
hC : IsCountablySpanning C
hD : IsCountablySpanning D
⊢ Prod.instMeasurableSpace ≤ generateFrom (image2 (fun x x_1 => x ×ˢ x_1) C D)

tactic: rcases hD with ⟨t, h1t, h2t⟩
state_before: case a.refine'_1.h.intro.intro
α✝ : Type ?u.538256
α' : Type ?u.538259
β✝ : Type ?u.538262
β' : Type ?u.538265
γ : Type ?u.538268
E : Type ?u.538271
inst✝⁵ : MeasurableSpace α✝
inst✝⁴ : MeasurableSpace α'
inst✝³ : MeasurableSpace β✝
inst✝² : MeasurableSpace β'
inst✝¹ : MeasurableSpace γ
μ μ' : MeasureTheory.Measure α✝
ν ν' : MeasureTheory.Measure β✝
τ : MeasureTheory.Measure γ
inst✝ : NormedAddCommGroup E
α : Type u_1
β : Type u_2
C : Set (Set α)
D : Set (Set β)
hC : IsCountablySpanning C
hD : IsCountablySpanning D
s : Set α
hs : s ∈ C
⊢ MeasurableSet (Prod.fst ⁻¹' s)

tactic: rw [← prod_univ, ← h2t, prod_iUnion]
state_before: case a.refine'_1.h.intro.intro.intro.intro
α✝ : Type ?u.538256
α' : Type ?u.538259
β✝ : Type ?u.538262
β' : Type ?u.538265
γ : Type ?u.538268
E : Type ?u.538271
inst✝⁵ : MeasurableSpace α✝
inst✝⁴ : MeasurableSpace α'
inst✝³ : MeasurableSpace β✝
inst✝² : MeasurableSpace β'
inst✝¹ : MeasurableSpace γ
μ μ' : MeasureTheory.Measure α✝
ν ν' : MeasureTheory.Measure β✝
τ : MeasureTheory.Measure γ
inst✝ : NormedAddCommGroup E
α : Type u_1
β : Type u_2
C : Set (Set α)
D : Set (Set β)
hC : IsCountablySpanning C
s : Set α
hs : s ∈ C
t : ℕ → Set β
h1t : ∀ (n : ℕ), t n ∈ D
h2t : (⋃ (n : ℕ), t n) = univ
⊢ MeasurableSet (Prod.fst ⁻¹' s)

tactic: apply MeasurableSet.iUnion
state_before: case a.refine'_1.h.intro.intro.intro.intro
α✝ : Type ?u.538256
α' : Type ?u.538259
β✝ : Type ?u.538262
β' : Type ?u.538265
γ : Type ?u.538268
E : Type ?u.538271
inst✝⁵ : MeasurableSpace α✝
inst✝⁴ : MeasurableSpace α'
inst✝³ : MeasurableSpace β✝
inst✝² : MeasurableSpace β'
inst✝¹ : MeasurableSpace γ
μ μ' : MeasureTheory.Measure α✝
ν ν' : MeasureTheory.Measure β✝
τ : MeasureTheory.Measure γ
inst✝ : NormedAddCommGroup E
α : Type u_1
β : Type u_2
C : Set (Set α)
D : Set (Set β)
hC : IsCountablySpanning C
s : Set α
hs : s ∈ C
t : ℕ → Set β
h1t : ∀ (n : ℕ), t n ∈ D
h2t : (⋃ (n : ℕ), t n) = univ
⊢ MeasurableSet (⋃ (i : ℕ), s ×ˢ t i)

tactic: intro n
state_before: case a.refine'_1.h.intro.intro.intro.intro.h
α✝ : Type ?u.538256
α' : Type ?u.538259
β✝ : Type ?u.538262
β' : Type ?u.538265
γ : Type ?u.538268
E : Type ?u.538271
inst✝⁵ : MeasurableSpace α✝
inst✝⁴ : MeasurableSpace α'
inst✝³ : MeasurableSpace β✝
inst✝² : MeasurableSpace β'
inst✝¹ : MeasurableSpace γ
μ μ' : MeasureTheory.Measure α✝
ν ν' : MeasureTheory.Measure β✝
τ : MeasureTheory.Measure γ
inst✝ : NormedAddCommGroup E
α : Type u_1
β : Type u_2
C : Set (Set α)
D : Set (Set β)
hC : IsCountablySpanning C
s : Set α
hs : s ∈ C
t : ℕ → Set β
h1t : ∀ (n : ℕ), t n ∈ D
h2t : (⋃ (n : ℕ), t n) = univ
⊢ ∀ (b : ℕ), MeasurableSet (s ×ˢ t b)

tactic: apply measurableSet_generateFrom
state_before: case a.refine'_1.h.intro.intro.intro.intro.h
α✝ : Type ?u.538256
α' : Type ?u.538259
β✝ : Type ?u.538262
β' : Type ?u.538265
γ : Type ?u.538268
E : Type ?u.538271
inst✝⁵ : MeasurableSpace α✝
inst✝⁴ : MeasurableSpace α'
inst✝³ : MeasurableSpace β✝
inst✝² : MeasurableSpace β'
inst✝¹ : MeasurableSpace γ
μ μ' : MeasureTheory.Measure α✝
ν ν' : MeasureTheory.Measure β✝
τ : MeasureTheory.Measure γ
inst✝ : NormedAddCommGroup E
α : Type u_1
β : Type u_2
C : Set (Set α)
D : Set (Set β)
hC : IsCountablySpanning C
s : Set α
hs : s ∈ C
t : ℕ → Set β
h1t : ∀ (n : ℕ), t n ∈ D
h2t : (⋃ (n : ℕ), t n) = univ
n : ℕ
⊢ MeasurableSet (s ×ˢ t n)

tactic: exact ⟨s, t n, hs, h1t n, rfl⟩
state_before: case a.refine'_1.h.intro.intro.intro.intro.h.ht
α✝ : Type ?u.538256
α' : Type ?u.538259
β✝ : Type ?u.538262
β' : Type ?u.538265
γ : Type ?u.538268
E : Type ?u.538271
inst✝⁵ : MeasurableSpace α✝
inst✝⁴ : MeasurableSpace α'
inst✝³ : MeasurableSpace β✝
inst✝² : MeasurableSpace β'
inst✝¹ : MeasurableSpace γ
μ μ' : MeasureTheory.Measure α✝
ν ν' : MeasureTheory.Measure β✝
τ : MeasureTheory.Measure γ
inst✝ : NormedAddCommGroup E
α : Type u_1
β : Type u_2
C : Set (Set α)
D : Set (Set β)
hC : IsCountablySpanning C
s : Set α
hs : s ∈ C
t : ℕ → Set β
h1t : ∀ (n : ℕ), t n ∈ D
h2t : (⋃ (n : ℕ), t n) = univ
n : ℕ
⊢ s ×ˢ t n ∈ image2 (fun x x_1 => x ×ˢ x_1) C D

tactic: rcases hC with ⟨t, h1t, h2t⟩
state_before: case a.refine'_2.h.intro.intro
α✝ : Type ?u.538256
α' : Type ?u.538259
β✝ : Type ?u.538262
β' : Type ?u.538265
γ : Type ?u.538268
E : Type ?u.538271
inst✝⁵ : MeasurableSpace α✝
inst✝⁴ : MeasurableSpace α'
inst✝³ : MeasurableSpace β✝
inst✝² : MeasurableSpace β'
inst✝¹ : MeasurableSpace γ
μ μ' : MeasureTheory.Measure α✝
ν ν' : MeasureTheory.Measure β✝
τ : MeasureTheory.Measure γ
inst✝ : NormedAddCommGroup E
α : Type u_1
β : Type u_2
C : Set (Set α)
D : Set (Set β)
hC : IsCountablySpanning C
hD : IsCountablySpanning D
s : Set β
hs : s ∈ D
⊢ MeasurableSet (Prod.snd ⁻¹' s)

tactic: rw [← univ_prod, ← h2t, iUnion_prod_const]
state_before: case a.refine'_2.h.intro.intro.intro.intro
α✝ : Type ?u.538256
α' : Type ?u.538259
β✝ : Type ?u.538262
β' : Type ?u.538265
γ : Type ?u.538268
E : Type ?u.538271
inst✝⁵ : MeasurableSpace α✝
inst✝⁴ : MeasurableSpace α'
inst✝³ : MeasurableSpace β✝
inst✝² : MeasurableSpace β'
inst✝¹ : MeasurableSpace γ
μ μ' : MeasureTheory.Measure α✝
ν ν' : MeasureTheory.Measure β✝
τ : MeasureTheory.Measure γ
inst✝ : NormedAddCommGroup E
α : Type u_1
β : Type u_2
C : Set (Set α)
D : Set (Set β)
hD : IsCountablySpanning D
s : Set β
hs : s ∈ D
t : ℕ → Set α
h1t : ∀ (n : ℕ), t n ∈ C
h2t : (⋃ (n : ℕ), t n) = univ
⊢ MeasurableSet (Prod.snd ⁻¹' s)

tactic: apply MeasurableSet.iUnion
state_before: case a.refine'_2.h.intro.intro.intro.intro
α✝ : Type ?u.538256
α' : Type ?u.538259
β✝ : Type ?u.538262
β' : Type ?u.538265
γ : Type ?u.538268
E : Type ?u.538271
inst✝⁵ : MeasurableSpace α✝
inst✝⁴ : MeasurableSpace α'
inst✝³ : MeasurableSpace β✝
inst✝² : MeasurableSpace β'
inst✝¹ : MeasurableSpace γ
μ μ' : MeasureTheory.Measure α✝
ν ν' : MeasureTheory.Measure β✝
τ : MeasureTheory.Measure γ
inst✝ : NormedAddCommGroup E
α : Type u_1
β : Type u_2
C : Set (Set α)
D : Set (Set β)
hD : IsCountablySpanning D
s : Set β
hs : s ∈ D
t : ℕ → Set α
h1t : ∀ (n : ℕ), t n ∈ C
h2t : (⋃ (n : ℕ), t n) = univ
⊢ MeasurableSet (⋃ (i : ℕ), t i ×ˢ s)

tactic: rintro n
state_before: case a.refine'_2.h.intro.intro.intro.intro.h
α✝ : Type ?u.538256
α' : Type ?u.538259
β✝ : Type ?u.538262
β' : Type ?u.538265
γ : Type ?u.538268
E : Type ?u.538271
inst✝⁵ : MeasurableSpace α✝
inst✝⁴ : MeasurableSpace α'
inst✝³ : MeasurableSpace β✝
inst✝² : MeasurableSpace β'
inst✝¹ : MeasurableSpace γ
μ μ' : MeasureTheory.Measure α✝
ν ν' : MeasureTheory.Measure β✝
τ : MeasureTheory.Measure γ
inst✝ : NormedAddCommGroup E
α : Type u_1
β : Type u_2
C : Set (Set α)
D : Set (Set β)
hD : IsCountablySpanning D
s : Set β
hs : s ∈ D
t : ℕ → Set α
h1t : ∀ (n : ℕ), t n ∈ C
h2t : (⋃ (n : ℕ), t n) = univ
⊢ ∀ (b : ℕ), MeasurableSet (t b ×ˢ s)

tactic: apply measurableSet_generateFrom
state_before: case a.refine'_2.h.intro.intro.intro.intro.h
α✝ : Type ?u.538256
α' : Type ?u.538259
β✝ : Type ?u.538262
β' : Type ?u.538265
γ : Type ?u.538268
E : Type ?u.538271
inst✝⁵ : MeasurableSpace α✝
inst✝⁴ : MeasurableSpace α'
inst✝³ : MeasurableSpace β✝
inst✝² : MeasurableSpace β'
inst✝¹ : MeasurableSpace γ
μ μ' : MeasureTheory.Measure α✝
ν ν' : MeasureTheory.Measure β✝
τ : MeasureTheory.Measure γ
inst✝ : NormedAddCommGroup E
α : Type u_1
β : Type u_2
C : Set (Set α)
D : Set (Set β)
hD : IsCountablySpanning D
s : Set β
hs : s ∈ D
t : ℕ → Set α
h1t : ∀ (n : ℕ), t n ∈ C
h2t : (⋃ (n : ℕ), t n) = univ
n : ℕ
⊢ MeasurableSet (t n ×ˢ s)

tactic: exact mem_image2_of_mem (h1t n) hs
state_before: case a.refine'_2.h.intro.intro.intro.intro.h.ht
α✝ : Type ?u.538256
α' : Type ?u.538259
β✝ : Type ?u.538262
β' : Type ?u.538265
γ : Type ?u.538268
E : Type ?u.538271
inst✝⁵ : MeasurableSpace α✝
inst✝⁴ : MeasurableSpace α'
inst✝³ : MeasurableSpace β✝
inst✝² : MeasurableSpace β'
inst✝¹ : MeasurableSpace γ
μ μ' : MeasureTheory.Measure α✝
ν ν' : MeasureTheory.Measure β✝
τ : MeasureTheory.Measure γ
inst✝ : NormedAddCommGroup E
α : Type u_1
β : Type u_2
C : Set (Set α)
D : Set (Set β)
hD : IsCountablySpanning D
s : Set β
hs : s ∈ D
t : ℕ → Set α
h1t : ∀ (n : ℕ), t n ∈ C
h2t : (⋃ (n : ℕ), t n) = univ
n : ℕ
⊢ t n ×ˢ s ∈ image2 (fun x x_1 => x ×ˢ x_1) C D

tactic: apply generateFrom_le
state_before: case a
α✝ : Type ?u.538256
α' : Type ?u.538259
β✝ : Type ?u.538262
β' : Type ?u.538265
γ : Type ?u.538268
E : Type ?u.538271
inst✝⁵ : MeasurableSpace α✝
inst✝⁴ : MeasurableSpace α'
inst✝³ : MeasurableSpace β✝
inst✝² : MeasurableSpace β'
inst✝¹ : MeasurableSpace γ
μ μ' : MeasureTheory.Measure α✝
ν ν' : MeasureTheory.Measure β✝
τ : MeasureTheory.Measure γ
inst✝ : NormedAddCommGroup E
α : Type u_1
β : Type u_2
C : Set (Set α)
D : Set (Set β)
hC : IsCountablySpanning C
hD : IsCountablySpanning D
⊢ generateFrom (image2 (fun x x_1 => x ×ˢ x_1) C D) ≤ Prod.instMeasurableSpace

tactic: rintro _ ⟨s, t, hs, ht, rfl⟩
state_before: case a.h
α✝ : Type ?u.538256
α' : Type ?u.538259
β✝ : Type ?u.538262
β' : Type ?u.538265
γ : Type ?u.538268
E : Type ?u.538271
inst✝⁵ : MeasurableSpace α✝
inst✝⁴ : MeasurableSpace α'
inst✝³ : MeasurableSpace β✝
inst✝² : MeasurableSpace β'
inst✝¹ : MeasurableSpace γ
μ μ' : MeasureTheory.Measure α✝
ν ν' : MeasureTheory.Measure β✝
τ : MeasureTheory.Measure γ
inst✝ : NormedAddCommGroup E
α : Type u_1
β : Type u_2
C : Set (Set α)
D : Set (Set β)
hC : IsCountablySpanning C
hD : IsCountablySpanning D
⊢ ∀ (t : Set (α × β)), t ∈ image2 (fun x x_1 => x ×ˢ x_1) C D → MeasurableSet t

tactic: dsimp only
state_before: case a.h.intro.intro.intro.intro
α✝ : Type ?u.538256
α' : Type ?u.538259
β✝ : Type ?u.538262
β' : Type ?u.538265
γ : Type ?u.538268
E : Type ?u.538271
inst✝⁵ : MeasurableSpace α✝
inst✝⁴ : MeasurableSpace α'
inst✝³ : MeasurableSpace β✝
inst✝² : MeasurableSpace β'
inst✝¹ : MeasurableSpace γ
μ μ' : MeasureTheory.Measure α✝
ν ν' : MeasureTheory.Measure β✝
τ : MeasureTheory.Measure γ
inst✝ : NormedAddCommGroup E
α : Type u_1
β : Type u_2
C : Set (Set α)
D : Set (Set β)
hC : IsCountablySpanning C
hD : IsCountablySpanning D
s : Set α
t : Set β
hs : s ∈ C
ht : t ∈ D
⊢ MeasurableSet ((fun x x_1 => x ×ˢ x_1) s t)

tactic: rw [prod_eq]
state_before: case a.h.intro.intro.intro.intro
α✝ : Type ?u.538256
α' : Type ?u.538259
β✝ : Type ?u.538262
β' : Type ?u.538265
γ : Type ?u.538268
E : Type ?u.538271
inst✝⁵ : MeasurableSpace α✝
inst✝⁴ : MeasurableSpace α'
inst✝³ : MeasurableSpace β✝
inst✝² : MeasurableSpace β'
inst✝¹ : MeasurableSpace γ
μ μ' : MeasureTheory.Measure α✝
ν ν' : MeasureTheory.Measure β✝
τ : MeasureTheory.Measure γ
inst✝ : NormedAddCommGroup E
α : Type u_1
β : Type u_2
C : Set (Set α)
D : Set (Set β)
hC : IsCountablySpanning C
hD : IsCountablySpanning D
s : Set α
t : Set β
hs : s ∈ C
ht : t ∈ D
⊢ MeasurableSet (s ×ˢ t)

tactic: apply (measurable_fst _).inter (measurable_snd _)
state_before: case a.h.intro.intro.intro.intro
α✝ : Type ?u.538256
α' : Type ?u.538259
β✝ : Type ?u.538262
β' : Type ?u.538265
γ : Type ?u.538268
E : Type ?u.538271
inst✝⁵ : MeasurableSpace α✝
inst✝⁴ : MeasurableSpace α'
inst✝³ : MeasurableSpace β✝
inst✝² : MeasurableSpace β'
inst✝¹ : MeasurableSpace γ
μ μ' : MeasureTheory.Measure α✝
ν ν' : MeasureTheory.Measure β✝
τ : MeasureTheory.Measure γ
inst✝ : NormedAddCommGroup E
α : Type u_1
β : Type u_2
C : Set (Set α)
D : Set (Set β)
hC : IsCountablySpanning C
hD : IsCountablySpanning D
s : Set α
t : Set β
hs : s ∈ C
ht : t ∈ D
⊢ MeasurableSet (Prod.fst ⁻¹' s ∩ Prod.snd ⁻¹' t)

tactic: exact measurableSet_generateFrom hs
state_before: α✝ : Type ?u.538256
α' : Type ?u.538259
β✝ : Type ?u.538262
β' : Type ?u.538265
γ : Type ?u.538268
E : Type ?u.538271
inst✝⁵ : MeasurableSpace α✝
inst✝⁴ : MeasurableSpace α'
inst✝³ : MeasurableSpace β✝
inst✝² : MeasurableSpace β'
inst✝¹ : MeasurableSpace γ
μ μ' : MeasureTheory.Measure α✝
ν ν' : MeasureTheory.Measure β✝
τ : MeasureTheory.Measure γ
inst✝ : NormedAddCommGroup E
α : Type u_1
β : Type u_2
C : Set (Set α)
D : Set (Set β)
hC : IsCountablySpanning C
hD : IsCountablySpanning D
s : Set α
t : Set β
hs : s ∈ C
ht : t ∈ D
⊢ MeasurableSet s

tactic: exact measurableSet_generateFrom ht
state_before: α✝ : Type ?u.538256
α' : Type ?u.538259
β✝ : Type ?u.538262
β' : Type ?u.538265
γ : Type ?u.538268
E : Type ?u.538271
inst✝⁵ : MeasurableSpace α✝
inst✝⁴ : MeasurableSpace α'
inst✝³ : MeasurableSpace β✝
inst✝² : MeasurableSpace β'
inst✝¹ : MeasurableSpace γ
μ μ' : MeasureTheory.Measure α✝
ν ν' : MeasureTheory.Measure β✝
τ : MeasureTheory.Measure γ
inst✝ : NormedAddCommGroup E
α : Type u_1
β : Type u_2
C : Set (Set α)
D : Set (Set β)
hC : IsCountablySpanning C
hD : IsCountablySpanning D
s : Set α
t : Set β
hs : s ∈ C
ht : t ∈ D
⊢ MeasurableSet t