Theorem: generateFrom_pi_eq
File: Mathlib/MeasureTheory/Constructions/Pi.lean

tactic: cases nonempty_encodable ι
state_before: ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
hC : ∀ (i : ι), IsCountablySpanning (C i)
⊢ MeasurableSpace.pi = generateFrom (Set.pi univ '' Set.pi univ C)

tactic: apply le_antisymm
state_before: case intro
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
hC : ∀ (i : ι), IsCountablySpanning (C i)
val✝ : Encodable ι
⊢ MeasurableSpace.pi = generateFrom (Set.pi univ '' Set.pi univ C)

tactic: refine' iSup_le _
state_before: case intro.a
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
hC : ∀ (i : ι), IsCountablySpanning (C i)
val✝ : Encodable ι
⊢ MeasurableSpace.pi ≤ generateFrom (Set.pi univ '' Set.pi univ C)

tactic: intro i
state_before: case intro.a
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
hC : ∀ (i : ι), IsCountablySpanning (C i)
val✝ : Encodable ι
⊢ ∀ (i : ι),
    MeasurableSpace.comap (fun b => b i) ((fun i => generateFrom (C i)) i) ≤ generateFrom (Set.pi univ '' Set.pi univ C)

tactic: rw [comap_generateFrom]
state_before: case intro.a
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
hC : ∀ (i : ι), IsCountablySpanning (C i)
val✝ : Encodable ι
i : ι
⊢ MeasurableSpace.comap (fun b => b i) ((fun i => generateFrom (C i)) i) ≤ generateFrom (Set.pi univ '' Set.pi univ C)

tactic: apply generateFrom_le
state_before: case intro.a
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
hC : ∀ (i : ι), IsCountablySpanning (C i)
val✝ : Encodable ι
i : ι
⊢ generateFrom ((preimage fun b => b i) '' C i) ≤ generateFrom (Set.pi univ '' Set.pi univ C)

tactic: rintro _ ⟨s, hs, rfl⟩
state_before: case intro.a.h
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
hC : ∀ (i : ι), IsCountablySpanning (C i)
val✝ : Encodable ι
i : ι
⊢ ∀ (t : Set ((a : ι) → (fun i => α i) a)), t ∈ (preimage fun b => b i) '' C i → MeasurableSet t

tactic: dsimp
state_before: case intro.a.h.intro.intro
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
hC : ∀ (i : ι), IsCountablySpanning (C i)
val✝ : Encodable ι
i : ι
s : Set ((fun i => α i) i)
hs : s ∈ C i
⊢ MeasurableSet ((fun b => b i) ⁻¹' s)

tactic: choose t h1t h2t using hC
state_before: case intro.a.h.intro.intro
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
hC : ∀ (i : ι), IsCountablySpanning (C i)
val✝ : Encodable ι
i : ι
s : Set ((fun i => α i) i)
hs : s ∈ C i
⊢ MeasurableSet ((fun b => b i) ⁻¹' s)

tactic: simp_rw [eval_preimage, ← h2t]
state_before: case intro.a.h.intro.intro
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
val✝ : Encodable ι
i : ι
s : Set ((fun i => α i) i)
hs : s ∈ C i
t : (i : ι) → ℕ → Set (α i)
h1t : ∀ (i : ι) (n : ℕ), t i n ∈ C i
h2t : ∀ (i : ι), (⋃ (n : ℕ), t i n) = univ
⊢ MeasurableSet ((fun b => b i) ⁻¹' s)

tactic: rw [← @iUnion_const _ ℕ _ s]
state_before: case intro.a.h.intro.intro
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
val✝ : Encodable ι
i : ι
s : Set ((fun i => α i) i)
hs : s ∈ C i
t : (i : ι) → ℕ → Set (α i)
h1t : ∀ (i : ι) (n : ℕ), t i n ∈ C i
h2t : ∀ (i : ι), (⋃ (n : ℕ), t i n) = univ
⊢ MeasurableSet (Set.pi univ (update (fun i => ⋃ (n : ℕ), t i n) i s))

tactic: rw [this, ← iUnion_univ_pi]
state_before: case intro.a.h.intro.intro
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
val✝ : Encodable ι
i : ι
s : Set ((fun i => α i) i)
hs : s ∈ C i
t : (i : ι) → ℕ → Set (α i)
h1t : ∀ (i : ι) (n : ℕ), t i n ∈ C i
h2t : ∀ (i : ι), (⋃ (n : ℕ), t i n) = univ
this :
  Set.pi univ (update (fun i' => iUnion (t i')) i (⋃ (x : ℕ), s)) =
    Set.pi univ fun k => ⋃ (j : ℕ), update (fun i' => t i' j) i s k
⊢ MeasurableSet (Set.pi univ (update (fun i => ⋃ (n : ℕ), t i n) i (⋃ (x : ℕ), s)))

tactic: apply MeasurableSet.iUnion
state_before: case intro.a.h.intro.intro
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
val✝ : Encodable ι
i : ι
s : Set ((fun i => α i) i)
hs : s ∈ C i
t : (i : ι) → ℕ → Set (α i)
h1t : ∀ (i : ι) (n : ℕ), t i n ∈ C i
h2t : ∀ (i : ι), (⋃ (n : ℕ), t i n) = univ
this :
  Set.pi univ (update (fun i' => iUnion (t i')) i (⋃ (x : ℕ), s)) =
    Set.pi univ fun k => ⋃ (j : ℕ), update (fun i' => t i' j) i s k
⊢ MeasurableSet (⋃ (x : ι → ℕ), Set.pi univ fun i_1 => update (fun i' => t i' (x i_1)) i s i_1)

tactic: intro n
state_before: case intro.a.h.intro.intro.h
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
val✝ : Encodable ι
i : ι
s : Set ((fun i => α i) i)
hs : s ∈ C i
t : (i : ι) → ℕ → Set (α i)
h1t : ∀ (i : ι) (n : ℕ), t i n ∈ C i
h2t : ∀ (i : ι), (⋃ (n : ℕ), t i n) = univ
this :
  Set.pi univ (update (fun i' => iUnion (t i')) i (⋃ (x : ℕ), s)) =
    Set.pi univ fun k => ⋃ (j : ℕ), update (fun i' => t i' j) i s k
⊢ ∀ (b : ι → ℕ), MeasurableSet (Set.pi univ fun i_1 => update (fun i' => t i' (b i_1)) i s i_1)

tactic: apply measurableSet_generateFrom
state_before: case intro.a.h.intro.intro.h
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
val✝ : Encodable ι
i : ι
s : Set ((fun i => α i) i)
hs : s ∈ C i
t : (i : ι) → ℕ → Set (α i)
h1t : ∀ (i : ι) (n : ℕ), t i n ∈ C i
h2t : ∀ (i : ι), (⋃ (n : ℕ), t i n) = univ
this :
  Set.pi univ (update (fun i' => iUnion (t i')) i (⋃ (x : ℕ), s)) =
    Set.pi univ fun k => ⋃ (j : ℕ), update (fun i' => t i' j) i s k
n : ι → ℕ
⊢ MeasurableSet (Set.pi univ fun i_1 => update (fun i' => t i' (n i_1)) i s i_1)

tactic: apply mem_image_of_mem
state_before: case intro.a.h.intro.intro.h.ht
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
val✝ : Encodable ι
i : ι
s : Set ((fun i => α i) i)
hs : s ∈ C i
t : (i : ι) → ℕ → Set (α i)
h1t : ∀ (i : ι) (n : ℕ), t i n ∈ C i
h2t : ∀ (i : ι), (⋃ (n : ℕ), t i n) = univ
this :
  Set.pi univ (update (fun i' => iUnion (t i')) i (⋃ (x : ℕ), s)) =
    Set.pi univ fun k => ⋃ (j : ℕ), update (fun i' => t i' j) i s k
n : ι → ℕ
⊢ (Set.pi univ fun i_1 => update (fun i' => t i' (n i_1)) i s i_1) ∈ Set.pi univ '' Set.pi univ C

tactic: intro j _
state_before: case intro.a.h.intro.intro.h.ht.h
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
val✝ : Encodable ι
i : ι
s : Set ((fun i => α i) i)
hs : s ∈ C i
t : (i : ι) → ℕ → Set (α i)
h1t : ∀ (i : ι) (n : ℕ), t i n ∈ C i
h2t : ∀ (i : ι), (⋃ (n : ℕ), t i n) = univ
this :
  Set.pi univ (update (fun i' => iUnion (t i')) i (⋃ (x : ℕ), s)) =
    Set.pi univ fun k => ⋃ (j : ℕ), update (fun i' => t i' j) i s k
n : ι → ℕ
⊢ (fun i_1 => update (fun i' => t i' (n i_1)) i s i_1) ∈ Set.pi univ C

tactic: dsimp only
state_before: case intro.a.h.intro.intro.h.ht.h
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
val✝ : Encodable ι
i : ι
s : Set ((fun i => α i) i)
hs : s ∈ C i
t : (i : ι) → ℕ → Set (α i)
h1t : ∀ (i : ι) (n : ℕ), t i n ∈ C i
h2t : ∀ (i : ι), (⋃ (n : ℕ), t i n) = univ
this :
  Set.pi univ (update (fun i' => iUnion (t i')) i (⋃ (x : ℕ), s)) =
    Set.pi univ fun k => ⋃ (j : ℕ), update (fun i' => t i' j) i s k
n : ι → ℕ
j : ι
a✝ : j ∈ univ
⊢ (fun i_1 => update (fun i' => t i' (n i_1)) i s i_1) j ∈ C j

tactic: by_cases h : j = i
state_before: case intro.a.h.intro.intro.h.ht.h
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
val✝ : Encodable ι
i : ι
s : Set ((fun i => α i) i)
hs : s ∈ C i
t : (i : ι) → ℕ → Set (α i)
h1t : ∀ (i : ι) (n : ℕ), t i n ∈ C i
h2t : ∀ (i : ι), (⋃ (n : ℕ), t i n) = univ
this :
  Set.pi univ (update (fun i' => iUnion (t i')) i (⋃ (x : ℕ), s)) =
    Set.pi univ fun k => ⋃ (j : ℕ), update (fun i' => t i' j) i s k
n : ι → ℕ
j : ι
a✝ : j ∈ univ
⊢ update (fun i' => t i' (n j)) i s j ∈ C j

tactic: subst h
state_before: case pos
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
val✝ : Encodable ι
i : ι
s : Set ((fun i => α i) i)
hs : s ∈ C i
t : (i : ι) → ℕ → Set (α i)
h1t : ∀ (i : ι) (n : ℕ), t i n ∈ C i
h2t : ∀ (i : ι), (⋃ (n : ℕ), t i n) = univ
this :
  Set.pi univ (update (fun i' => iUnion (t i')) i (⋃ (x : ℕ), s)) =
    Set.pi univ fun k => ⋃ (j : ℕ), update (fun i' => t i' j) i s k
n : ι → ℕ
j : ι
a✝ : j ∈ univ
h : j = i
⊢ update (fun i' => t i' (n j)) i s j ∈ C j

case neg
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
val✝ : Encodable ι
i : ι
s : Set ((fun i => α i) i)
hs : s ∈ C i
t : (i : ι) → ℕ → Set (α i)
h1t : ∀ (i : ι) (n : ℕ), t i n ∈ C i
h2t : ∀ (i : ι), (⋃ (n : ℕ), t i n) = univ
this :
  Set.pi univ (update (fun i' => iUnion (t i')) i (⋃ (x : ℕ), s)) =
    Set.pi univ fun k => ⋃ (j : ℕ), update (fun i' => t i' j) i s k
n : ι → ℕ
j : ι
a✝ : j ∈ univ
h : ¬j = i
⊢ update (fun i' => t i' (n j)) i s j ∈ C j

tactic: rwa [update_same]
state_before: case pos
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
val✝ : Encodable ι
t : (i : ι) → ℕ → Set (α i)
h1t : ∀ (i : ι) (n : ℕ), t i n ∈ C i
h2t : ∀ (i : ι), (⋃ (n : ℕ), t i n) = univ
n : ι → ℕ
j : ι
a✝ : j ∈ univ
s : Set ((fun i => α i) j)
hs : s ∈ C j
this :
  Set.pi univ (update (fun i' => iUnion (t i')) j (⋃ (x : ℕ), s)) =
    Set.pi univ fun k => ⋃ (j_1 : ℕ), update (fun i' => t i' j_1) j s k
⊢ update (fun i' => t i' (n j)) j s j ∈ C j

case neg
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
val✝ : Encodable ι
i : ι
s : Set ((fun i => α i) i)
hs : s ∈ C i
t : (i : ι) → ℕ → Set (α i)
h1t : ∀ (i : ι) (n : ℕ), t i n ∈ C i
h2t : ∀ (i : ι), (⋃ (n : ℕ), t i n) = univ
this :
  Set.pi univ (update (fun i' => iUnion (t i')) i (⋃ (x : ℕ), s)) =
    Set.pi univ fun k => ⋃ (j : ℕ), update (fun i' => t i' j) i s k
n : ι → ℕ
j : ι
a✝ : j ∈ univ
h : ¬j = i
⊢ update (fun i' => t i' (n j)) i s j ∈ C j

tactic: rw [update_noteq h]
state_before: case neg
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
val✝ : Encodable ι
i : ι
s : Set ((fun i => α i) i)
hs : s ∈ C i
t : (i : ι) → ℕ → Set (α i)
h1t : ∀ (i : ι) (n : ℕ), t i n ∈ C i
h2t : ∀ (i : ι), (⋃ (n : ℕ), t i n) = univ
this :
  Set.pi univ (update (fun i' => iUnion (t i')) i (⋃ (x : ℕ), s)) =
    Set.pi univ fun k => ⋃ (j : ℕ), update (fun i' => t i' j) i s k
n : ι → ℕ
j : ι
a✝ : j ∈ univ
h : ¬j = i
⊢ update (fun i' => t i' (n j)) i s j ∈ C j

tactic: apply h1t
state_before: case neg
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
val✝ : Encodable ι
i : ι
s : Set ((fun i => α i) i)
hs : s ∈ C i
t : (i : ι) → ℕ → Set (α i)
h1t : ∀ (i : ι) (n : ℕ), t i n ∈ C i
h2t : ∀ (i : ι), (⋃ (n : ℕ), t i n) = univ
this :
  Set.pi univ (update (fun i' => iUnion (t i')) i (⋃ (x : ℕ), s)) =
    Set.pi univ fun k => ⋃ (j : ℕ), update (fun i' => t i' j) i s k
n : ι → ℕ
j : ι
a✝ : j ∈ univ
h : ¬j = i
⊢ t j (n j) ∈ C j

tactic: ext
state_before: ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
val✝ : Encodable ι
i : ι
s : Set ((fun i => α i) i)
hs : s ∈ C i
t : (i : ι) → ℕ → Set (α i)
h1t : ∀ (i : ι) (n : ℕ), t i n ∈ C i
h2t : ∀ (i : ι), (⋃ (n : ℕ), t i n) = univ
⊢ Set.pi univ (update (fun i' => iUnion (t i')) i (⋃ (x : ℕ), s)) =
    Set.pi univ fun k => ⋃ (j : ℕ), update (fun i' => t i' j) i s k

tactic: simp_rw [mem_univ_pi]
state_before: case h
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
val✝ : Encodable ι
i : ι
s : Set ((fun i => α i) i)
hs : s ∈ C i
t : (i : ι) → ℕ → Set (α i)
h1t : ∀ (i : ι) (n : ℕ), t i n ∈ C i
h2t : ∀ (i : ι), (⋃ (n : ℕ), t i n) = univ
x✝ : (i : ι) → α i
⊢ x✝ ∈ Set.pi univ (update (fun i' => iUnion (t i')) i (⋃ (x : ℕ), s)) ↔
    x✝ ∈ Set.pi univ fun k => ⋃ (j : ℕ), update (fun i' => t i' j) i s k

tactic: apply forall_congr'
state_before: case h
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
val✝ : Encodable ι
i : ι
s : Set ((fun i => α i) i)
hs : s ∈ C i
t : (i : ι) → ℕ → Set (α i)
h1t : ∀ (i : ι) (n : ℕ), t i n ∈ C i
h2t : ∀ (i : ι), (⋃ (n : ℕ), t i n) = univ
x✝ : (i : ι) → α i
⊢ (∀ (i_1 : ι), x✝ i_1 ∈ update (fun i' => iUnion (t i')) i (⋃ (x : ℕ), s) i_1) ↔
    ∀ (i_1 : ι), x✝ i_1 ∈ ⋃ (j : ℕ), update (fun i' => t i' j) i s i_1

tactic: intro i'
state_before: case h.h
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
val✝ : Encodable ι
i : ι
s : Set ((fun i => α i) i)
hs : s ∈ C i
t : (i : ι) → ℕ → Set (α i)
h1t : ∀ (i : ι) (n : ℕ), t i n ∈ C i
h2t : ∀ (i : ι), (⋃ (n : ℕ), t i n) = univ
x✝ : (i : ι) → α i
⊢ ∀ (a : ι),
    x✝ a ∈ update (fun i' => iUnion (t i')) i (⋃ (x : ℕ), s) a ↔ x✝ a ∈ ⋃ (j : ℕ), update (fun i' => t i' j) i s a

tactic: by_cases i' = i
state_before: case h.h
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
val✝ : Encodable ι
i : ι
s : Set ((fun i => α i) i)
hs : s ∈ C i
t : (i : ι) → ℕ → Set (α i)
h1t : ∀ (i : ι) (n : ℕ), t i n ∈ C i
h2t : ∀ (i : ι), (⋃ (n : ℕ), t i n) = univ
x✝ : (i : ι) → α i
i' : ι
⊢ x✝ i' ∈ update (fun i' => iUnion (t i')) i (⋃ (x : ℕ), s) i' ↔ x✝ i' ∈ ⋃ (j : ℕ), update (fun i' => t i' j) i s i'

tactic: subst h
state_before: case pos
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
val✝ : Encodable ι
i : ι
s : Set ((fun i => α i) i)
hs : s ∈ C i
t : (i : ι) → ℕ → Set (α i)
h1t : ∀ (i : ι) (n : ℕ), t i n ∈ C i
h2t : ∀ (i : ι), (⋃ (n : ℕ), t i n) = univ
x✝ : (i : ι) → α i
i' : ι
h : i' = i
⊢ x✝ i' ∈ update (fun i' => iUnion (t i')) i (⋃ (x : ℕ), s) i' ↔ x✝ i' ∈ ⋃ (j : ℕ), update (fun i' => t i' j) i s i'

tactic: simp
state_before: case pos
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
val✝ : Encodable ι
t : (i : ι) → ℕ → Set (α i)
h1t : ∀ (i : ι) (n : ℕ), t i n ∈ C i
h2t : ∀ (i : ι), (⋃ (n : ℕ), t i n) = univ
x✝ : (i : ι) → α i
i' : ι
s : Set ((fun i => α i) i')
hs : s ∈ C i'
⊢ x✝ i' ∈ update (fun i' => iUnion (t i')) i' (⋃ (x : ℕ), s) i' ↔ x✝ i' ∈ ⋃ (j : ℕ), update (fun i' => t i' j) i' s i'

tactic: rw [← Ne.def] at h
state_before: case neg
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
val✝ : Encodable ι
i : ι
s : Set ((fun i => α i) i)
hs : s ∈ C i
t : (i : ι) → ℕ → Set (α i)
h1t : ∀ (i : ι) (n : ℕ), t i n ∈ C i
h2t : ∀ (i : ι), (⋃ (n : ℕ), t i n) = univ
x✝ : (i : ι) → α i
i' : ι
h : ¬i' = i
⊢ x✝ i' ∈ update (fun i' => iUnion (t i')) i (⋃ (x : ℕ), s) i' ↔ x✝ i' ∈ ⋃ (j : ℕ), update (fun i' => t i' j) i s i'

tactic: simp [h]
state_before: case neg
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
val✝ : Encodable ι
i : ι
s : Set ((fun i => α i) i)
hs : s ∈ C i
t : (i : ι) → ℕ → Set (α i)
h1t : ∀ (i : ι) (n : ℕ), t i n ∈ C i
h2t : ∀ (i : ι), (⋃ (n : ℕ), t i n) = univ
x✝ : (i : ι) → α i
i' : ι
h : i' ≠ i
⊢ x✝ i' ∈ update (fun i' => iUnion (t i')) i (⋃ (x : ℕ), s) i' ↔ x✝ i' ∈ ⋃ (j : ℕ), update (fun i' => t i' j) i s i'

tactic: apply generateFrom_le
state_before: case intro.a
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
hC : ∀ (i : ι), IsCountablySpanning (C i)
val✝ : Encodable ι
⊢ generateFrom (Set.pi univ '' Set.pi univ C) ≤ MeasurableSpace.pi

tactic: rintro _ ⟨s, hs, rfl⟩
state_before: case intro.a.h
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
hC : ∀ (i : ι), IsCountablySpanning (C i)
val✝ : Encodable ι
⊢ ∀ (t : Set ((i : ι) → α i)), t ∈ Set.pi univ '' Set.pi univ C → MeasurableSet t

tactic: rw [univ_pi_eq_iInter]
state_before: case intro.a.h.intro.intro
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
hC : ∀ (i : ι), IsCountablySpanning (C i)
val✝ : Encodable ι
s : (i : ι) → Set (α i)
hs : s ∈ Set.pi univ C
⊢ MeasurableSet (Set.pi univ s)

tactic: apply MeasurableSet.iInter
state_before: case intro.a.h.intro.intro
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
hC : ∀ (i : ι), IsCountablySpanning (C i)
val✝ : Encodable ι
s : (i : ι) → Set (α i)
hs : s ∈ Set.pi univ C
⊢ MeasurableSet (⋂ (i : ι), eval i ⁻¹' s i)

tactic: intro i
state_before: case intro.a.h.intro.intro.h
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
hC : ∀ (i : ι), IsCountablySpanning (C i)
val✝ : Encodable ι
s : (i : ι) → Set (α i)
hs : s ∈ Set.pi univ C
⊢ ∀ (b : ι), MeasurableSet (eval b ⁻¹' s b)

tactic: apply @measurable_pi_apply _ _ (fun i => generateFrom (C i))
state_before: case intro.a.h.intro.intro.h
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
hC : ∀ (i : ι), IsCountablySpanning (C i)
val✝ : Encodable ι
s : (i : ι) → Set (α i)
hs : s ∈ Set.pi univ C
i : ι
⊢ MeasurableSet (eval i ⁻¹' s i)

tactic: exact measurableSet_generateFrom (hs i (mem_univ i))
state_before: case intro.a.h.intro.intro.h.a
ι : Type u_2
ι' : Type ?u.642179
α : ι → Type u_1
inst✝¹ : Finite ι
inst✝ : Finite ι'
C : (i : ι) → Set (Set (α i))
hC : ∀ (i : ι), IsCountablySpanning (C i)
val✝ : Encodable ι
s : (i : ι) → Set (α i)
hs : s ∈ Set.pi univ C
i : ι
⊢ MeasurableSet (s i)