[GOAL]
α : Type u
inst✝ : DecidableEq α
f : α →₀ ℕ
p : (α →₀ ℕ) × (α →₀ ℕ)
⊢ p ∈ antidiagonal f ↔ p.fst + p.snd = f
[PROOFSTEP]
rcases p with ⟨p₁, p₂⟩
[GOAL]
case mk
α : Type u
inst✝ : DecidableEq α
f p₁ p₂ : α →₀ ℕ
⊢ (p₁, p₂) ∈ antidiagonal f ↔ (p₁, p₂).fst + (p₁, p₂).snd = f
[PROOFSTEP]
simp [antidiagonal, antidiagonal', ← and_assoc, Multiset.toFinsupp_eq_iff, ← Multiset.toFinsupp_eq_iff (f := f)]
[GOAL]
α : Type u
inst✝ : DecidableEq α
n : α →₀ ℕ
f : (α →₀ ℕ) × (α →₀ ℕ)
⊢ Prod.swap f ∈ antidiagonal n ↔ f ∈ antidiagonal n
[PROOFSTEP]
simp only [mem_antidiagonal, add_comm, Prod.swap]
[GOAL]
α : Type u
inst✝ : DecidableEq α
f g : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.fst = g)
⊢ Finset.filter (fun p => p.fst = g) (antidiagonal f) = if g ≤ f then {(g, f - g)} else ∅
[PROOFSTEP]
ext ⟨a, b⟩
[GOAL]
case a.mk
α : Type u
inst✝ : DecidableEq α
f g : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.fst = g)
a b : α →₀ ℕ
⊢ (a, b) ∈ Finset.filter (fun p => p.fst = g) (antidiagonal f) ↔ (a, b) ∈ if g ≤ f then {(g, f - g)} else ∅
[PROOFSTEP]
suffices a = g → (a + b = f ↔ g ≤ f ∧ b = f - g) by
  simpa [apply_ite (fun f ↦ (a, b) ∈ f), mem_filter, mem_antidiagonal, mem_singleton, Prod.mk.inj_iff, ← and_assoc,
    @and_right_comm _ (a = _), and_congr_left_iff]
[GOAL]
α : Type u
inst✝ : DecidableEq α
f g : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.fst = g)
a b : α →₀ ℕ
this : a = g → (a + b = f ↔ g ≤ f ∧ b = f - g)
⊢ (a, b) ∈ Finset.filter (fun p => p.fst = g) (antidiagonal f) ↔ (a, b) ∈ if g ≤ f then {(g, f - g)} else ∅
[PROOFSTEP]
simpa [apply_ite (fun f ↦ (a, b) ∈ f), mem_filter, mem_antidiagonal, mem_singleton, Prod.mk.inj_iff, ← and_assoc,
  @and_right_comm _ (a = _), and_congr_left_iff]
[GOAL]
case a.mk
α : Type u
inst✝ : DecidableEq α
f g : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.fst = g)
a b : α →₀ ℕ
⊢ a = g → (a + b = f ↔ g ≤ f ∧ b = f - g)
[PROOFSTEP]
rintro rfl
[GOAL]
case a.mk
α : Type u
inst✝ : DecidableEq α
f a b : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.fst = a)
⊢ a + b = f ↔ a ≤ f ∧ b = f - a
[PROOFSTEP]
constructor
[GOAL]
case a.mk.mp
α : Type u
inst✝ : DecidableEq α
f a b : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.fst = a)
⊢ a + b = f → a ≤ f ∧ b = f - a
[PROOFSTEP]
rintro rfl
[GOAL]
case a.mk.mp
α : Type u
inst✝ : DecidableEq α
a b : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.fst = a)
⊢ a ≤ a + b ∧ b = a + b - a
[PROOFSTEP]
exact ⟨le_add_right le_rfl, (add_tsub_cancel_left _ _).symm⟩
[GOAL]
case a.mk.mpr
α : Type u
inst✝ : DecidableEq α
f a b : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.fst = a)
⊢ a ≤ f ∧ b = f - a → a + b = f
[PROOFSTEP]
rintro ⟨h, rfl⟩
[GOAL]
case a.mk.mpr.intro
α : Type u
inst✝ : DecidableEq α
f a : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.fst = a)
h : a ≤ f
⊢ a + (f - a) = f
[PROOFSTEP]
exact add_tsub_cancel_of_le h
[GOAL]
α : Type u
inst✝ : DecidableEq α
f g : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.snd = g)
⊢ Finset.filter (fun p => p.snd = g) (antidiagonal f) = if g ≤ f then {(f - g, g)} else ∅
[PROOFSTEP]
ext ⟨a, b⟩
[GOAL]
case a.mk
α : Type u
inst✝ : DecidableEq α
f g : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.snd = g)
a b : α →₀ ℕ
⊢ (a, b) ∈ Finset.filter (fun p => p.snd = g) (antidiagonal f) ↔ (a, b) ∈ if g ≤ f then {(f - g, g)} else ∅
[PROOFSTEP]
suffices b = g → (a + b = f ↔ g ≤ f ∧ a = f - g) by
  simpa [apply_ite (fun f ↦ (a, b) ∈ f), mem_filter, mem_antidiagonal, mem_singleton, Prod.mk.inj_iff, ← and_assoc,
    and_congr_left_iff]
[GOAL]
α : Type u
inst✝ : DecidableEq α
f g : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.snd = g)
a b : α →₀ ℕ
this : b = g → (a + b = f ↔ g ≤ f ∧ a = f - g)
⊢ (a, b) ∈ Finset.filter (fun p => p.snd = g) (antidiagonal f) ↔ (a, b) ∈ if g ≤ f then {(f - g, g)} else ∅
[PROOFSTEP]
simpa [apply_ite (fun f ↦ (a, b) ∈ f), mem_filter, mem_antidiagonal, mem_singleton, Prod.mk.inj_iff, ← and_assoc,
  and_congr_left_iff]
[GOAL]
case a.mk
α : Type u
inst✝ : DecidableEq α
f g : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.snd = g)
a b : α →₀ ℕ
⊢ b = g → (a + b = f ↔ g ≤ f ∧ a = f - g)
[PROOFSTEP]
rintro rfl
[GOAL]
case a.mk
α : Type u
inst✝ : DecidableEq α
f a b : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.snd = b)
⊢ a + b = f ↔ b ≤ f ∧ a = f - b
[PROOFSTEP]
constructor
[GOAL]
case a.mk.mp
α : Type u
inst✝ : DecidableEq α
f a b : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.snd = b)
⊢ a + b = f → b ≤ f ∧ a = f - b
[PROOFSTEP]
rintro rfl
[GOAL]
case a.mk.mp
α : Type u
inst✝ : DecidableEq α
a b : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.snd = b)
⊢ b ≤ a + b ∧ a = a + b - b
[PROOFSTEP]
exact ⟨le_add_left le_rfl, (add_tsub_cancel_right _ _).symm⟩
[GOAL]
case a.mk.mpr
α : Type u
inst✝ : DecidableEq α
f a b : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.snd = b)
⊢ b ≤ f ∧ a = f - b → a + b = f
[PROOFSTEP]
rintro ⟨h, rfl⟩
[GOAL]
case a.mk.mpr.intro
α : Type u
inst✝ : DecidableEq α
f b : α →₀ ℕ
D : (p : (α →₀ ℕ) × (α →₀ ℕ)) → Decidable (p.snd = b)
h : b ≤ f
⊢ f - b + b = f
[PROOFSTEP]
exact tsub_add_cancel_of_le h
[GOAL]
α : Type u
inst✝ : DecidableEq α
a : α
n : ℕ
⊢ antidiagonal (single a n) =
    map
      (Function.Embedding.prodMap { toFun := single a, inj' := (_ : Function.Injective (single a)) }
        { toFun := single a, inj' := (_ : Function.Injective (single a)) })
      (Nat.antidiagonal n)
[PROOFSTEP]
ext ⟨x, y⟩
[GOAL]
case a.mk
α : Type u
inst✝ : DecidableEq α
a : α
n : ℕ
x y : α →₀ ℕ
⊢ (x, y) ∈ antidiagonal (single a n) ↔
    (x, y) ∈
      map
        (Function.Embedding.prodMap { toFun := single a, inj' := (_ : Function.Injective (single a)) }
          { toFun := single a, inj' := (_ : Function.Injective (single a)) })
        (Nat.antidiagonal n)
[PROOFSTEP]
simp only [mem_antidiagonal, mem_map, Nat.mem_antidiagonal, Function.Embedding.coe_prodMap, Function.Embedding.coeFn_mk,
  Prod_map, Prod.mk.injEq, Prod.exists]
[GOAL]
case a.mk
α : Type u
inst✝ : DecidableEq α
a : α
n : ℕ
x y : α →₀ ℕ
⊢ x + y = single a n ↔ ∃ a_1 b, a_1 + b = n ∧ single a a_1 = x ∧ single a b = y
[PROOFSTEP]
constructor
[GOAL]
case a.mk.mp
α : Type u
inst✝ : DecidableEq α
a : α
n : ℕ
x y : α →₀ ℕ
⊢ x + y = single a n → ∃ a_2 b, a_2 + b = n ∧ single a a_2 = x ∧ single a b = y
[PROOFSTEP]
intro h
[GOAL]
case a.mk.mp
α : Type u
inst✝ : DecidableEq α
a : α
n : ℕ
x y : α →₀ ℕ
h : x + y = single a n
⊢ ∃ a_1 b, a_1 + b = n ∧ single a a_1 = x ∧ single a b = y
[PROOFSTEP]
refine ⟨x a, y a, FunLike.congr_fun h a |>.trans single_eq_same, ?_⟩
[GOAL]
case a.mk.mp
α : Type u
inst✝ : DecidableEq α
a : α
n : ℕ
x y : α →₀ ℕ
h : x + y = single a n
⊢ single a (↑x a) = x ∧ single a (↑y a) = y
[PROOFSTEP]
simp_rw [FunLike.ext_iff, ← forall_and]
[GOAL]
case a.mk.mp
α : Type u
inst✝ : DecidableEq α
a : α
n : ℕ
x y : α →₀ ℕ
h : x + y = single a n
⊢ ∀ (x_1 : α), ↑(single a (↑x a)) x_1 = ↑x x_1 ∧ ↑(single a (↑y a)) x_1 = ↑y x_1
[PROOFSTEP]
intro i
[GOAL]
case a.mk.mp
α : Type u
inst✝ : DecidableEq α
a : α
n : ℕ
x y : α →₀ ℕ
h : x + y = single a n
i : α
⊢ ↑(single a (↑x a)) i = ↑x i ∧ ↑(single a (↑y a)) i = ↑y i
[PROOFSTEP]
replace h := FunLike.congr_fun h i
[GOAL]
case a.mk.mp
α : Type u
inst✝ : DecidableEq α
a : α
n : ℕ
x y : α →₀ ℕ
i : α
h : ↑(x + y) i = ↑(single a n) i
⊢ ↑(single a (↑x a)) i = ↑x i ∧ ↑(single a (↑y a)) i = ↑y i
[PROOFSTEP]
simp_rw [single_apply, Finsupp.add_apply] at h ⊢
[GOAL]
case a.mk.mp
α : Type u
inst✝ : DecidableEq α
a : α
n : ℕ
x y : α →₀ ℕ
i : α
h : ↑x i + ↑y i = if a = i then n else 0
⊢ (if a = i then ↑x a else 0) = ↑x i ∧ (if a = i then ↑y a else 0) = ↑y i
[PROOFSTEP]
obtain rfl | hai := Decidable.eq_or_ne a i
[GOAL]
case a.mk.mp.inl
α : Type u
inst✝ : DecidableEq α
a : α
n : ℕ
x y : α →₀ ℕ
h : ↑x a + ↑y a = if a = a then n else 0
⊢ (if a = a then ↑x a else 0) = ↑x a ∧ (if a = a then ↑y a else 0) = ↑y a
[PROOFSTEP]
exact ⟨if_pos rfl, if_pos rfl⟩
[GOAL]
case a.mk.mp.inr
α : Type u
inst✝ : DecidableEq α
a : α
n : ℕ
x y : α →₀ ℕ
i : α
h : ↑x i + ↑y i = if a = i then n else 0
hai : a ≠ i
⊢ (if a = i then ↑x a else 0) = ↑x i ∧ (if a = i then ↑y a else 0) = ↑y i
[PROOFSTEP]
simp_rw [if_neg hai, _root_.add_eq_zero_iff] at h ⊢
[GOAL]
case a.mk.mp.inr
α : Type u
inst✝ : DecidableEq α
a : α
n : ℕ
x y : α →₀ ℕ
i : α
hai : a ≠ i
h : ↑x i = 0 ∧ ↑y i = 0
⊢ 0 = ↑x i ∧ 0 = ↑y i
[PROOFSTEP]
exact h.imp Eq.symm Eq.symm
[GOAL]
case a.mk.mpr
α : Type u
inst✝ : DecidableEq α
a : α
n : ℕ
x y : α →₀ ℕ
⊢ (∃ a_1 b, a_1 + b = n ∧ single a a_1 = x ∧ single a b = y) → x + y = single a n
[PROOFSTEP]
rintro ⟨a, b, rfl, rfl, rfl⟩
[GOAL]
case a.mk.mpr.intro.intro.intro.intro
α : Type u
inst✝ : DecidableEq α
a✝ : α
a b : ℕ
⊢ single a✝ a + single a✝ b = single a✝ (a + b)
[PROOFSTEP]
exact (single_add _ _ _).symm


[GOAL]
α : Type u_1
⊢ Tendsto Real.toNNReal atTop atTop
[PROOFSTEP]
rw [← tendsto_coe_atTop]
[GOAL]
α : Type u_1
⊢ Tendsto (fun a => ↑(Real.toNNReal a)) atTop atTop
[PROOFSTEP]
exact tendsto_atTop_mono Real.le_coe_toNNReal tendsto_id
[GOAL]
α : Type u_1
⊢ ⨅ (l : ℝ≥0) (_ : ⊥ < l), 𝓟 (Set.Iio l) = ⨅ (a : ℝ≥0) (_ : a ≠ 0), 𝓟 (Set.Iio a)
[PROOFSTEP]
simp only [bot_lt_iff_ne_bot]
[GOAL]
α : Type u_1
⊢ ⨅ (l : ℝ≥0) (_ : l ≠ ⊥), 𝓟 (Set.Iio l) = ⨅ (a : ℝ≥0) (_ : a ≠ 0), 𝓟 (Set.Iio a)
[PROOFSTEP]
rfl
[GOAL]
α : Type u_1
f : α → ℝ≥0
r : ℝ≥0
⊢ HasSum (fun a => ↑(f a)) ↑r ↔ HasSum f r
[PROOFSTEP]
simp only [HasSum, ← coe_sum, tendsto_coe]
[GOAL]
α : Type u_1
f : α → ℝ
y : ℝ
hf₀ : ∀ (n : α), 0 ≤ f n
hy : HasSum f y
⊢ HasSum (fun x => Real.toNNReal (f x)) (Real.toNNReal y)
[PROOFSTEP]
lift y to ℝ≥0 using hy.nonneg hf₀
[GOAL]
case intro
α : Type u_1
f : α → ℝ
hf₀ : ∀ (n : α), 0 ≤ f n
y : ℝ≥0
hy : HasSum f ↑y
⊢ HasSum (fun x => Real.toNNReal (f x)) (Real.toNNReal ↑y)
[PROOFSTEP]
lift f to α → ℝ≥0 using hf₀
[GOAL]
case intro.intro
α : Type u_1
y : ℝ≥0
f : α → ℝ≥0
hy : HasSum (fun i => ↑(f i)) ↑y
⊢ HasSum (fun x => Real.toNNReal ((fun i => ↑(f i)) x)) (Real.toNNReal ↑y)
[PROOFSTEP]
simpa [hasSum_coe] using hy
[GOAL]
α : Type u_1
f : α → ℝ≥0
⊢ (Summable fun a => ↑(f a)) ↔ Summable f
[PROOFSTEP]
constructor
[GOAL]
case mp
α : Type u_1
f : α → ℝ≥0
⊢ (Summable fun a => ↑(f a)) → Summable f
case mpr α : Type u_1 f : α → ℝ≥0 ⊢ Summable f → Summable fun a => ↑(f a)
[PROOFSTEP]
exact fun ⟨a, ha⟩ => ⟨⟨a, ha.nonneg fun x => (f x).2⟩, hasSum_coe.1 ha⟩
[GOAL]
case mpr
α : Type u_1
f : α → ℝ≥0
⊢ Summable f → Summable fun a => ↑(f a)
[PROOFSTEP]
exact fun ⟨a, ha⟩ => ⟨a.1, hasSum_coe.2 ha⟩
[GOAL]
α : Type u_1
f : α → ℝ≥0
hf : ¬Summable f
⊢ ↑(∑' (a : α), f a) = ∑' (a : α), ↑(f a)
[PROOFSTEP]
simp [tsum_def, hf, mt summable_coe.1 hf]
[GOAL]
α : Type u_1
a : ℝ≥0
f : α → ℝ≥0
⊢ ↑(∑' (x : α), a * f x) = ↑(a * ∑' (x : α), f x)
[PROOFSTEP]
simp only [coe_tsum, NNReal.coe_mul, tsum_mul_left]
[GOAL]
α : Type u_1
f : α → ℝ≥0
a : ℝ≥0
⊢ ↑(∑' (x : α), f x * a) = ↑((∑' (x : α), f x) * a)
[PROOFSTEP]
simp only [coe_tsum, NNReal.coe_mul, tsum_mul_right]
[GOAL]
α : Type u_1
β : Type u_2
f : α → ℝ≥0
hf : Summable f
i : β → α
hi : Function.Injective i
⊢ Summable (f ∘ i)
[PROOFSTEP]
rw [← summable_coe] at hf ⊢
[GOAL]
α : Type u_1
β : Type u_2
f : α → ℝ≥0
hf : Summable fun a => ↑(f a)
i : β → α
hi : Function.Injective i
⊢ Summable fun a => ↑((f ∘ i) a)
[PROOFSTEP]
exact hf.comp_injective hi
[GOAL]
α : Type u_1
f : ℕ → ℝ≥0
k : ℕ
⊢ (Summable fun i => f (i + k)) ↔ Summable f
[PROOFSTEP]
rw [← summable_coe, ← summable_coe]
[GOAL]
α : Type u_1
f : ℕ → ℝ≥0
k : ℕ
⊢ (Summable fun a => ↑(f (a + k))) ↔ Summable fun a => ↑(f a)
[PROOFSTEP]
exact @summable_nat_add_iff ℝ _ _ _ (fun i => (f i : ℝ)) k
[GOAL]
α : Type u_1
f : ℕ → ℝ≥0
k : ℕ
a : ℝ≥0
⊢ HasSum (fun n => f (n + k)) a ↔ HasSum f (a + ∑ i in Finset.range k, f i)
[PROOFSTEP]
rw [← hasSum_coe, hasSum_nat_add_iff (f := fun n => toReal (f n)) k]
[GOAL]
α : Type u_1
f : ℕ → ℝ≥0
k : ℕ
a : ℝ≥0
⊢ HasSum (fun n => ↑(f n)) (↑a + ∑ i in Finset.range k, ↑(f i)) ↔ HasSum f (a + ∑ i in Finset.range k, f i)
[PROOFSTEP]
norm_cast
[GOAL]
α : Type u_1
f : α → ℝ≥0
hf : Summable f
⊢ Tendsto f cofinite (𝓝 0)
[PROOFSTEP]
simp only [← summable_coe, ← tendsto_coe] at hf ⊢
[GOAL]
α : Type u_1
f : α → ℝ≥0
hf : Summable fun a => ↑(f a)
⊢ Tendsto (fun a => ↑(f a)) cofinite (𝓝 ↑0)
[PROOFSTEP]
exact hf.tendsto_cofinite_zero
[GOAL]
f : ℕ → ℝ≥0
hf : Summable f
⊢ Tendsto f atTop (𝓝 0)
[PROOFSTEP]
rw [← Nat.cofinite_eq_atTop]
[GOAL]
f : ℕ → ℝ≥0
hf : Summable f
⊢ Tendsto f cofinite (𝓝 0)
[PROOFSTEP]
exact tendsto_cofinite_zero_of_summable hf
[GOAL]
α : Type u_1
f : α → ℝ≥0
⊢ Tendsto (fun s => ∑' (b : { x // ¬x ∈ s }), f ↑b) atTop (𝓝 0)
[PROOFSTEP]
simp_rw [← tendsto_coe, coe_tsum, NNReal.coe_zero]
[GOAL]
α : Type u_1
f : α → ℝ≥0
⊢ Tendsto (fun a => ∑' (a_1 : { x // ¬x ∈ a }), ↑(f ↑a_1)) atTop (𝓝 0)
[PROOFSTEP]
exact tendsto_tsum_compl_atTop_zero fun a : α => (f a : ℝ)
[GOAL]
n : ℕ
hn : n ≠ 0
⊢ Tendsto (fun b => id b ^ n) atBot atBot
[PROOFSTEP]
simpa [OrderBot.atBot_eq, pos_iff_ne_zero]


[GOAL]
α : Type u_1
f : Filter α
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a ≠ ⊤
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
by_cases ha_zero : a = 0
[GOAL]
case pos
α : Type u_1
f : Filter α
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a ≠ ⊤
ha_zero : a = 0
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
simp_rw [ha_zero, zero_mul, ← ENNReal.bot_eq_zero]
[GOAL]
case pos
α : Type u_1
f : Filter α
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a ≠ ⊤
ha_zero : a = 0
⊢ limsup (fun x => ⊥) f = ⊥
[PROOFSTEP]
exact limsup_const_bot
[GOAL]
case neg
α : Type u_1
f : Filter α
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a ≠ ⊤
ha_zero : ¬a = 0
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
let g := fun x : ℝ≥0∞ => a * x
[GOAL]
case neg
α : Type u_1
f : Filter α
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a ≠ ⊤
ha_zero : ¬a = 0
g : ℝ≥0∞ → ℝ≥0∞ := fun x => a * x
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
have hg_bij : Function.Bijective g :=
  Function.bijective_iff_has_inverse.mpr
    ⟨fun x => a⁻¹ * x,
      ⟨fun x => by simp [← mul_assoc, ENNReal.inv_mul_cancel ha_zero ha_top], fun x => by
        simp [← mul_assoc, ENNReal.mul_inv_cancel ha_zero ha_top]⟩⟩
[GOAL]
α : Type u_1
f : Filter α
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a ≠ ⊤
ha_zero : ¬a = 0
g : ℝ≥0∞ → ℝ≥0∞ := fun x => a * x
x : ℝ≥0∞
⊢ (fun x => a⁻¹ * x) (g x) = x
[PROOFSTEP]
simp [← mul_assoc, ENNReal.inv_mul_cancel ha_zero ha_top]
[GOAL]
α : Type u_1
f : Filter α
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a ≠ ⊤
ha_zero : ¬a = 0
g : ℝ≥0∞ → ℝ≥0∞ := fun x => a * x
x : ℝ≥0∞
⊢ g ((fun x => a⁻¹ * x) x) = x
[PROOFSTEP]
simp [← mul_assoc, ENNReal.mul_inv_cancel ha_zero ha_top]
[GOAL]
case neg
α : Type u_1
f : Filter α
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a ≠ ⊤
ha_zero : ¬a = 0
g : ℝ≥0∞ → ℝ≥0∞ := fun x => a * x
hg_bij : Function.Bijective g
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
have hg_mono : StrictMono g :=
  Monotone.strictMono_of_injective (fun _ _ _ => by rwa [mul_le_mul_left ha_zero ha_top]) hg_bij.1
[GOAL]
α : Type u_1
f : Filter α
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a ≠ ⊤
ha_zero : ¬a = 0
g : ℝ≥0∞ → ℝ≥0∞ := fun x => a * x
hg_bij : Function.Bijective g
x✝² x✝¹ : ℝ≥0∞
x✝ : x✝² ≤ x✝¹
⊢ g x✝² ≤ g x✝¹
[PROOFSTEP]
rwa [mul_le_mul_left ha_zero ha_top]
[GOAL]
case neg
α : Type u_1
f : Filter α
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a ≠ ⊤
ha_zero : ¬a = 0
g : ℝ≥0∞ → ℝ≥0∞ := fun x => a * x
hg_bij : Function.Bijective g
hg_mono : StrictMono g
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
let g_iso := StrictMono.orderIsoOfSurjective g hg_mono hg_bij.2
[GOAL]
case neg
α : Type u_1
f : Filter α
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a ≠ ⊤
ha_zero : ¬a = 0
g : ℝ≥0∞ → ℝ≥0∞ := fun x => a * x
hg_bij : Function.Bijective g
hg_mono : StrictMono g
g_iso : ℝ≥0∞ ≃o ℝ≥0∞ := StrictMono.orderIsoOfSurjective g hg_mono (_ : Function.Surjective g)
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
exact (OrderIso.limsup_apply g_iso).symm
[GOAL]
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
by_cases ha_top : a ≠ ⊤
[GOAL]
case pos
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a ≠ ⊤
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
exact limsup_const_mul_of_ne_top ha_top
[GOAL]
case neg
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : ¬a ≠ ⊤
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
push_neg at ha_top
[GOAL]
case neg
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a = ⊤
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
by_cases hu : u =ᶠ[f] 0
[GOAL]
case pos
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a = ⊤
hu : u =ᶠ[f] 0
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
have hau : (a * u ·) =ᶠ[f] 0 := hu.mono fun x hx => by simp [hx]
[GOAL]
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a = ⊤
hu : u =ᶠ[f] 0
x : α
hx : u x = OfNat.ofNat 0 x
⊢ (fun x => a * u x) x = OfNat.ofNat 0 x
[PROOFSTEP]
simp [hx]
[GOAL]
case pos
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a = ⊤
hu : u =ᶠ[f] 0
hau : (fun x => a * u x) =ᶠ[f] 0
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
simp only [limsup_congr hu, limsup_congr hau, Pi.zero_apply, ← ENNReal.bot_eq_zero, limsup_const_bot]
[GOAL]
case pos
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a = ⊤
hu : u =ᶠ[f] 0
hau : (fun x => a * u x) =ᶠ[f] 0
⊢ ⊥ = a * ⊥
[PROOFSTEP]
simp
[GOAL]
case neg
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a = ⊤
hu : ¬u =ᶠ[f] 0
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
have hu_mul : ∃ᶠ x : α in f, ⊤ ≤ ite (u x = 0) (0 : ℝ≥0∞) ⊤ :=
  by
  rw [EventuallyEq, not_eventually] at hu
  refine' hu.mono fun x hx => _
  rw [Pi.zero_apply] at hx
  simp [hx]
[GOAL]
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a = ⊤
hu : ¬u =ᶠ[f] 0
⊢ ∃ᶠ (x : α) in f, ⊤ ≤ if u x = 0 then 0 else ⊤
[PROOFSTEP]
rw [EventuallyEq, not_eventually] at hu
[GOAL]
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a = ⊤
hu : ∃ᶠ (x : α) in f, ¬u x = OfNat.ofNat 0 x
⊢ ∃ᶠ (x : α) in f, ⊤ ≤ if u x = 0 then 0 else ⊤
[PROOFSTEP]
refine' hu.mono fun x hx => _
[GOAL]
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a = ⊤
hu : ∃ᶠ (x : α) in f, ¬u x = OfNat.ofNat 0 x
x : α
hx : ¬u x = OfNat.ofNat 0 x
⊢ ⊤ ≤ if u x = 0 then 0 else ⊤
[PROOFSTEP]
rw [Pi.zero_apply] at hx
[GOAL]
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a = ⊤
hu : ∃ᶠ (x : α) in f, ¬u x = OfNat.ofNat 0 x
x : α
hx : ¬u x = 0
⊢ ⊤ ≤ if u x = 0 then 0 else ⊤
[PROOFSTEP]
simp [hx]
[GOAL]
case neg
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a = ⊤
hu : ¬u =ᶠ[f] 0
hu_mul : ∃ᶠ (x : α) in f, ⊤ ≤ if u x = 0 then 0 else ⊤
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
have h_top_le : (f.limsup fun x : α => ite (u x = 0) (0 : ℝ≥0∞) ⊤) = ⊤ :=
  eq_top_iff.mpr (le_limsup_of_frequently_le hu_mul)
[GOAL]
case neg
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a = ⊤
hu : ¬u =ᶠ[f] 0
hu_mul : ∃ᶠ (x : α) in f, ⊤ ≤ if u x = 0 then 0 else ⊤
h_top_le : limsup (fun x => if u x = 0 then 0 else ⊤) f = ⊤
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
have hfu : f.limsup u ≠ 0 := mt limsup_eq_zero_iff.1 hu
[GOAL]
case neg
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u : α → ℝ≥0∞
a : ℝ≥0∞
ha_top : a = ⊤
hu : ¬u =ᶠ[f] 0
hu_mul : ∃ᶠ (x : α) in f, ⊤ ≤ if u x = 0 then 0 else ⊤
h_top_le : limsup (fun x => if u x = 0 then 0 else ⊤) f = ⊤
hfu : limsup u f ≠ 0
⊢ limsup (fun x => a * u x) f = a * limsup u f
[PROOFSTEP]
simp only [ha_top, top_mul', hfu, h_top_le]
[GOAL]
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u v : α → ℝ≥0∞
⊢ limsup (u * v) f ≤ limsup (fun x => limsup u f * v x) f
[PROOFSTEP]
refine limsup_le_limsup ?_
[GOAL]
α : Type u_1
f : Filter α
inst✝ : CountableInterFilter f
u v : α → ℝ≥0∞
⊢ u * v ≤ᶠ[f] fun x => limsup u f * v x
[PROOFSTEP]
filter_upwards [@eventually_le_limsup _ f _ u] with x hx using mul_le_mul' hx le_rfl
[GOAL]
α : Type u_1
f✝ : Filter α
β : Type u_2
inst✝¹ : Countable β
f : Filter α
inst✝ : CountableInterFilter f
g : Filter β
u : α → β → ℝ≥0∞
⊢ ∀ᶠ (a : α) in f, ∀ (b : β), u a b ≤ limsup (fun a' => u a' b) f
[PROOFSTEP]
rw [eventually_countable_forall]
[GOAL]
α : Type u_1
f✝ : Filter α
β : Type u_2
inst✝¹ : Countable β
f : Filter α
inst✝ : CountableInterFilter f
g : Filter β
u : α → β → ℝ≥0∞
⊢ ∀ (i : β), ∀ᶠ (x : α) in f, u x i ≤ limsup (fun a' => u a' i) f
[PROOFSTEP]
exact fun b => ENNReal.eventually_le_limsup fun a => u a b


[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → LE (α i)
a b : (i : ι) × α i
⊢ a ≤ b ↔ ∃ h, h ▸ a.snd ≤ b.snd
[PROOFSTEP]
constructor
[GOAL]
case mp
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → LE (α i)
a b : (i : ι) × α i
⊢ a ≤ b → ∃ h, h ▸ a.snd ≤ b.snd
[PROOFSTEP]
rintro ⟨i, a, b, h⟩
[GOAL]
case mp.fiber
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → LE (α i)
i : ι
a b : α i
h : a ≤ b
⊢ ∃ h, h ▸ { fst := i, snd := a }.snd ≤ { fst := i, snd := b }.snd
[PROOFSTEP]
exact ⟨rfl, h⟩
[GOAL]
case mpr
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → LE (α i)
a b : (i : ι) × α i
⊢ (∃ h, h ▸ a.snd ≤ b.snd) → a ≤ b
[PROOFSTEP]
obtain ⟨i, a⟩ := a
[GOAL]
case mpr.mk
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → LE (α i)
b : (i : ι) × α i
i : ι
a : α i
⊢ (∃ h, h ▸ { fst := i, snd := a }.snd ≤ b.snd) → { fst := i, snd := a } ≤ b
[PROOFSTEP]
obtain ⟨j, b⟩ := b
[GOAL]
case mpr.mk.mk
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → LE (α i)
i : ι
a : α i
j : ι
b : α j
⊢ (∃ h, h ▸ { fst := i, snd := a }.snd ≤ { fst := j, snd := b }.snd) → { fst := i, snd := a } ≤ { fst := j, snd := b }
[PROOFSTEP]
rintro ⟨rfl : i = j, h⟩
[GOAL]
case mpr.mk.mk.intro
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → LE (α i)
i : ι
a b : α i
h : (_ : i = i) ▸ { fst := i, snd := a }.snd ≤ { fst := i, snd := b }.snd
⊢ { fst := i, snd := a } ≤ { fst := i, snd := b }
[PROOFSTEP]
exact le.fiber _ _ _ h
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → LT (α i)
a b : (i : ι) × α i
⊢ a < b ↔ ∃ h, h ▸ a.snd < b.snd
[PROOFSTEP]
constructor
[GOAL]
case mp
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → LT (α i)
a b : (i : ι) × α i
⊢ a < b → ∃ h, h ▸ a.snd < b.snd
[PROOFSTEP]
rintro ⟨i, a, b, h⟩
[GOAL]
case mp.fiber
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → LT (α i)
i : ι
a b : α i
h : a < b
⊢ ∃ h, h ▸ { fst := i, snd := a }.snd < { fst := i, snd := b }.snd
[PROOFSTEP]
exact ⟨rfl, h⟩
[GOAL]
case mpr
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → LT (α i)
a b : (i : ι) × α i
⊢ (∃ h, h ▸ a.snd < b.snd) → a < b
[PROOFSTEP]
obtain ⟨i, a⟩ := a
[GOAL]
case mpr.mk
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → LT (α i)
b : (i : ι) × α i
i : ι
a : α i
⊢ (∃ h, h ▸ { fst := i, snd := a }.snd < b.snd) → { fst := i, snd := a } < b
[PROOFSTEP]
obtain ⟨j, b⟩ := b
[GOAL]
case mpr.mk.mk
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → LT (α i)
i : ι
a : α i
j : ι
b : α j
⊢ (∃ h, h ▸ { fst := i, snd := a }.snd < { fst := j, snd := b }.snd) → { fst := i, snd := a } < { fst := j, snd := b }
[PROOFSTEP]
rintro ⟨rfl : i = j, h⟩
[GOAL]
case mpr.mk.mk.intro
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → LT (α i)
i : ι
a b : α i
h : (_ : i = i) ▸ { fst := i, snd := a }.snd < { fst := i, snd := b }.snd
⊢ { fst := i, snd := a } < { fst := i, snd := b }
[PROOFSTEP]
exact lt.fiber _ _ _ h
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → Preorder (α i)
src✝¹ : LE ((i : ι) × α i) := Sigma.LE
src✝ : LT ((i : ι) × α i) := Sigma.LT
⊢ ∀ (a b c : (i : ι) × α i), a ≤ b → b ≤ c → a ≤ c
[PROOFSTEP]
rintro _ _ _ ⟨i, a, b, hab⟩ ⟨_, _, c, hbc⟩
[GOAL]
case fiber.fiber
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → Preorder (α i)
src✝¹ : LE ((i : ι) × α i) := Sigma.LE
src✝ : LT ((i : ι) × α i) := Sigma.LT
i : ι
a b : α i
hab : a ≤ b
c : α i
hbc : b ≤ c
⊢ { fst := i, snd := a } ≤ { fst := i, snd := c }
[PROOFSTEP]
exact le.fiber i a c (hab.trans hbc)
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → Preorder (α i)
src✝¹ : LE ((i : ι) × α i) := Sigma.LE
src✝ : LT ((i : ι) × α i) := Sigma.LT
x✝¹ x✝ : (i : ι) × α i
⊢ x✝¹ < x✝ ↔ x✝¹ ≤ x✝ ∧ ¬x✝ ≤ x✝¹
[PROOFSTEP]
constructor
[GOAL]
case mp
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → Preorder (α i)
src✝¹ : LE ((i : ι) × α i) := Sigma.LE
src✝ : LT ((i : ι) × α i) := Sigma.LT
x✝¹ x✝ : (i : ι) × α i
⊢ x✝¹ < x✝ → x✝¹ ≤ x✝ ∧ ¬x✝ ≤ x✝¹
[PROOFSTEP]
rintro ⟨i, a, b, hab⟩
[GOAL]
case mp.fiber
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → Preorder (α i)
src✝¹ : LE ((i : ι) × α i) := Sigma.LE
src✝ : LT ((i : ι) × α i) := Sigma.LT
i : ι
a b : α i
hab : a < b
⊢ { fst := i, snd := a } ≤ { fst := i, snd := b } ∧ ¬{ fst := i, snd := b } ≤ { fst := i, snd := a }
[PROOFSTEP]
rwa [mk_le_mk_iff, mk_le_mk_iff, ← lt_iff_le_not_le]
[GOAL]
case mpr
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → Preorder (α i)
src✝¹ : LE ((i : ι) × α i) := Sigma.LE
src✝ : LT ((i : ι) × α i) := Sigma.LT
x✝¹ x✝ : (i : ι) × α i
⊢ x✝¹ ≤ x✝ ∧ ¬x✝ ≤ x✝¹ → x✝¹ < x✝
[PROOFSTEP]
rintro ⟨⟨i, a, b, hab⟩, h⟩
[GOAL]
case mpr.intro.fiber
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → Preorder (α i)
src✝¹ : LE ((i : ι) × α i) := Sigma.LE
src✝ : LT ((i : ι) × α i) := Sigma.LT
i : ι
a b : α i
hab : a ≤ b
h : ¬{ fst := i, snd := b } ≤ { fst := i, snd := a }
⊢ { fst := i, snd := a } < { fst := i, snd := b }
[PROOFSTEP]
rw [mk_le_mk_iff] at h
[GOAL]
case mpr.intro.fiber
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → Preorder (α i)
src✝¹ : LE ((i : ι) × α i) := Sigma.LE
src✝ : LT ((i : ι) × α i) := Sigma.LT
i : ι
a b : α i
hab : a ≤ b
h : ¬b ≤ a
⊢ { fst := i, snd := a } < { fst := i, snd := b }
[PROOFSTEP]
exact mk_lt_mk_iff.2 (hab.lt_of_not_le h)
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → PartialOrder (α i)
src✝ : Preorder ((i : ι) × α i) := Sigma.preorder
⊢ ∀ (a b : (i : ι) × α i), a ≤ b → b ≤ a → a = b
[PROOFSTEP]
rintro _ _ ⟨i, a, b, hab⟩ ⟨_, _, _, hba⟩
[GOAL]
case fiber.fiber
ι : Type u_1
α : ι → Type u_2
inst✝ : (i : ι) → PartialOrder (α i)
src✝ : Preorder ((i : ι) × α i) := Sigma.preorder
i : ι
a b : (fun i => α i) i
hab : a ≤ b
hba : b ≤ a
⊢ { fst := i, snd := a } = { fst := i, snd := b }
[PROOFSTEP]
exact ext rfl (heq_of_eq <| hab.antisymm hba)
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : ∀ (i : ι), DenselyOrdered (α i)
⊢ ∀ (a₁ a₂ : (i : ι) × α i), a₁ < a₂ → ∃ a, a₁ < a ∧ a < a₂
[PROOFSTEP]
rintro ⟨i, a⟩ ⟨_, _⟩ ⟨_, _, b, h⟩
[GOAL]
case mk.mk.fiber
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : ∀ (i : ι), DenselyOrdered (α i)
i : ι
a b : α i
h : a < b
⊢ ∃ a_1, { fst := i, snd := a } < a_1 ∧ a_1 < { fst := i, snd := b }
[PROOFSTEP]
obtain ⟨c, ha, hb⟩ := exists_between h
[GOAL]
case mk.mk.fiber.intro.intro
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : ∀ (i : ι), DenselyOrdered (α i)
i : ι
a b : α i
h : a < b
c : α i
ha : a < c
hb : c < b
⊢ ∃ a_1, { fst := i, snd := a } < a_1 ∧ a_1 < { fst := i, snd := b }
[PROOFSTEP]
exact ⟨⟨i, c⟩, lt.fiber i a c ha, lt.fiber i c b hb⟩
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝¹ : Preorder ι
inst✝ : (i : ι) → Preorder (α i)
src✝¹ : LE (Σₗ (i : ι), α i) := Lex.LE
src✝ : LT (Σₗ (i : ι), α i) := Lex.LT
⊢ ∀ (a b : Σₗ (i : ι), α i), a < b ↔ a ≤ b ∧ ¬b ≤ a
[PROOFSTEP]
refine' fun a b => ⟨fun hab => ⟨hab.mono_right fun i a b => le_of_lt, _⟩, _⟩
[GOAL]
case refine'_1
ι : Type u_1
α : ι → Type u_2
inst✝¹ : Preorder ι
inst✝ : (i : ι) → Preorder (α i)
src✝¹ : LE (Σₗ (i : ι), α i) := Lex.LE
src✝ : LT (Σₗ (i : ι), α i) := Lex.LT
a b : Σₗ (i : ι), α i
hab : a < b
⊢ ¬b ≤ a
[PROOFSTEP]
rintro (⟨b, a, hji⟩ | ⟨b, a, hba⟩)
[GOAL]
case refine'_1.left
ι : Type u_1
α : ι → Type u_2
inst✝¹ : Preorder ι
inst✝ : (i : ι) → Preorder (α i)
src✝¹ : LE (Σₗ (i : ι), α i) := Lex.LE
src✝ : LT (Σₗ (i : ι), α i) := Lex.LT
i✝ j✝ : ι
b : α i✝
a : α j✝
hji : i✝ < j✝
hab : { fst := j✝, snd := a } < { fst := i✝, snd := b }
⊢ False
[PROOFSTEP]
obtain ⟨_, _, hij⟩ | ⟨_, _, hab⟩ := hab
[GOAL]
case refine'_1.right
ι : Type u_1
α : ι → Type u_2
inst✝¹ : Preorder ι
inst✝ : (i : ι) → Preorder (α i)
src✝¹ : LE (Σₗ (i : ι), α i) := Lex.LE
src✝ : LT (Σₗ (i : ι), α i) := Lex.LT
i✝ : ι
b a : α i✝
hba : b ≤ a
hab : { fst := i✝, snd := a } < { fst := i✝, snd := b }
⊢ False
[PROOFSTEP]
obtain ⟨_, _, hij⟩ | ⟨_, _, hab⟩ := hab
[GOAL]
case refine'_1.left.left
ι : Type u_1
α : ι → Type u_2
inst✝¹ : Preorder ι
inst✝ : (i : ι) → Preorder (α i)
src✝¹ : LE (Σₗ (i : ι), α i) := Lex.LE
src✝ : LT (Σₗ (i : ι), α i) := Lex.LT
i✝ j✝ : ι
b : α i✝
a : α j✝
hji : i✝ < j✝
hij : j✝ < i✝
⊢ False
[PROOFSTEP]
exact hij.not_lt hji
[GOAL]
case refine'_1.left.right
ι : Type u_1
α : ι → Type u_2
inst✝¹ : Preorder ι
inst✝ : (i : ι) → Preorder (α i)
src✝¹ : LE (Σₗ (i : ι), α i) := Lex.LE
src✝ : LT (Σₗ (i : ι), α i) := Lex.LT
i✝ : ι
b a : α i✝
hji : i✝ < i✝
hab : a < b
⊢ False
[PROOFSTEP]
exact lt_irrefl _ hji
[GOAL]
case refine'_1.right.left
ι : Type u_1
α : ι → Type u_2
inst✝¹ : Preorder ι
inst✝ : (i : ι) → Preorder (α i)
src✝¹ : LE (Σₗ (i : ι), α i) := Lex.LE
src✝ : LT (Σₗ (i : ι), α i) := Lex.LT
i✝ : ι
b a : α i✝
hba : b ≤ a
hij : i✝ < i✝
⊢ False
[PROOFSTEP]
exact lt_irrefl _ hij
[GOAL]
case refine'_1.right.right
ι : Type u_1
α : ι → Type u_2
inst✝¹ : Preorder ι
inst✝ : (i : ι) → Preorder (α i)
src✝¹ : LE (Σₗ (i : ι), α i) := Lex.LE
src✝ : LT (Σₗ (i : ι), α i) := Lex.LT
i✝ : ι
b a : α i✝
hba : b ≤ a
hab : a < b
⊢ False
[PROOFSTEP]
exact hab.not_le hba
[GOAL]
case refine'_2
ι : Type u_1
α : ι → Type u_2
inst✝¹ : Preorder ι
inst✝ : (i : ι) → Preorder (α i)
src✝¹ : LE (Σₗ (i : ι), α i) := Lex.LE
src✝ : LT (Σₗ (i : ι), α i) := Lex.LT
a b : Σₗ (i : ι), α i
⊢ a ≤ b ∧ ¬b ≤ a → a < b
[PROOFSTEP]
rintro ⟨⟨a, b, hij⟩ | ⟨a, b, hab⟩, hba⟩
[GOAL]
case refine'_2.intro.left
ι : Type u_1
α : ι → Type u_2
inst✝¹ : Preorder ι
inst✝ : (i : ι) → Preorder (α i)
src✝¹ : LE (Σₗ (i : ι), α i) := Lex.LE
src✝ : LT (Σₗ (i : ι), α i) := Lex.LT
i✝ j✝ : ι
a : α i✝
b : α j✝
hij : i✝ < j✝
hba : ¬{ fst := j✝, snd := b } ≤ { fst := i✝, snd := a }
⊢ { fst := i✝, snd := a } < { fst := j✝, snd := b }
[PROOFSTEP]
exact Sigma.Lex.left _ _ hij
[GOAL]
case refine'_2.intro.right
ι : Type u_1
α : ι → Type u_2
inst✝¹ : Preorder ι
inst✝ : (i : ι) → Preorder (α i)
src✝¹ : LE (Σₗ (i : ι), α i) := Lex.LE
src✝ : LT (Σₗ (i : ι), α i) := Lex.LT
i✝ : ι
a b : α i✝
hab : a ≤ b
hba : ¬{ fst := i✝, snd := b } ≤ { fst := i✝, snd := a }
⊢ { fst := i✝, snd := a } < { fst := i✝, snd := b }
[PROOFSTEP]
exact Sigma.Lex.right _ _ (hab.lt_of_not_le fun h => hba <| Sigma.Lex.right _ _ h)
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝³ : PartialOrder ι
inst✝² : OrderBot ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : OrderBot (α ⊥)
x✝ : Σₗ (i : ι), α i
a : ι
b : α a
⊢ ⊥ ≤ { fst := a, snd := b }
[PROOFSTEP]
obtain rfl | ha := eq_bot_or_bot_lt a
[GOAL]
case inl
ι : Type u_1
α : ι → Type u_2
inst✝³ : PartialOrder ι
inst✝² : OrderBot ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : OrderBot (α ⊥)
x✝ : Σₗ (i : ι), α i
b : α ⊥
⊢ ⊥ ≤ { fst := ⊥, snd := b }
[PROOFSTEP]
exact Lex.right _ _ bot_le
[GOAL]
case inr
ι : Type u_1
α : ι → Type u_2
inst✝³ : PartialOrder ι
inst✝² : OrderBot ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : OrderBot (α ⊥)
x✝ : Σₗ (i : ι), α i
a : ι
b : α a
ha : ⊥ < a
⊢ ⊥ ≤ { fst := a, snd := b }
[PROOFSTEP]
exact Lex.left _ _ ha
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝³ : PartialOrder ι
inst✝² : OrderTop ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : OrderTop (α ⊤)
x✝ : Σₗ (i : ι), α i
a : ι
b : α a
⊢ { fst := a, snd := b } ≤ ⊤
[PROOFSTEP]
obtain rfl | ha := eq_top_or_lt_top a
[GOAL]
case inl
ι : Type u_1
α : ι → Type u_2
inst✝³ : PartialOrder ι
inst✝² : OrderTop ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : OrderTop (α ⊤)
x✝ : Σₗ (i : ι), α i
b : α ⊤
⊢ { fst := ⊤, snd := b } ≤ ⊤
[PROOFSTEP]
exact Lex.right _ _ le_top
[GOAL]
case inr
ι : Type u_1
α : ι → Type u_2
inst✝³ : PartialOrder ι
inst✝² : OrderTop ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : OrderTop (α ⊤)
x✝ : Σₗ (i : ι), α i
a : ι
b : α a
ha : a < ⊤
⊢ { fst := a, snd := b } ≤ ⊤
[PROOFSTEP]
exact Lex.left _ _ ha
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝⁴ : Preorder ι
inst✝³ : DenselyOrdered ι
inst✝² : ∀ (i : ι), Nonempty (α i)
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : ∀ (i : ι), DenselyOrdered (α i)
⊢ ∀ (a₁ a₂ : Σₗ (i : ι), α i), a₁ < a₂ → ∃ a, a₁ < a ∧ a < a₂
[PROOFSTEP]
rintro ⟨i, a⟩ ⟨j, b⟩ (⟨_, _, h⟩ | ⟨_, b, h⟩)
[GOAL]
case mk.mk.left
ι : Type u_1
α : ι → Type u_2
inst✝⁴ : Preorder ι
inst✝³ : DenselyOrdered ι
inst✝² : ∀ (i : ι), Nonempty (α i)
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : ∀ (i : ι), DenselyOrdered (α i)
i : ι
a : α i
j : ι
b : α j
h : i < j
⊢ ∃ a_1, { fst := i, snd := a } < a_1 ∧ a_1 < { fst := j, snd := b }
[PROOFSTEP]
obtain ⟨k, hi, hj⟩ := exists_between h
[GOAL]
case mk.mk.left.intro.intro
ι : Type u_1
α : ι → Type u_2
inst✝⁴ : Preorder ι
inst✝³ : DenselyOrdered ι
inst✝² : ∀ (i : ι), Nonempty (α i)
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : ∀ (i : ι), DenselyOrdered (α i)
i : ι
a : α i
j : ι
b : α j
h : i < j
k : ι
hi : i < k
hj : k < j
⊢ ∃ a_1, { fst := i, snd := a } < a_1 ∧ a_1 < { fst := j, snd := b }
[PROOFSTEP]
obtain ⟨c⟩ : Nonempty (α k) := inferInstance
[GOAL]
case mk.mk.left.intro.intro.intro
ι : Type u_1
α : ι → Type u_2
inst✝⁴ : Preorder ι
inst✝³ : DenselyOrdered ι
inst✝² : ∀ (i : ι), Nonempty (α i)
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : ∀ (i : ι), DenselyOrdered (α i)
i : ι
a : α i
j : ι
b : α j
h : i < j
k : ι
hi : i < k
hj : k < j
c : α k
⊢ ∃ a_1, { fst := i, snd := a } < a_1 ∧ a_1 < { fst := j, snd := b }
[PROOFSTEP]
exact ⟨⟨k, c⟩, left _ _ hi, left _ _ hj⟩
[GOAL]
case mk.mk.right
ι : Type u_1
α : ι → Type u_2
inst✝⁴ : Preorder ι
inst✝³ : DenselyOrdered ι
inst✝² : ∀ (i : ι), Nonempty (α i)
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : ∀ (i : ι), DenselyOrdered (α i)
i : ι
a b : α i
h : a < b
⊢ ∃ a_1, { fst := i, snd := a } < a_1 ∧ a_1 < { fst := i, snd := b }
[PROOFSTEP]
obtain ⟨c, ha, hb⟩ := exists_between h
[GOAL]
case mk.mk.right.intro.intro
ι : Type u_1
α : ι → Type u_2
inst✝⁴ : Preorder ι
inst✝³ : DenselyOrdered ι
inst✝² : ∀ (i : ι), Nonempty (α i)
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : ∀ (i : ι), DenselyOrdered (α i)
i : ι
a b : α i
h : a < b
c : α i
ha : a < c
hb : c < b
⊢ ∃ a_1, { fst := i, snd := a } < a_1 ∧ a_1 < { fst := i, snd := b }
[PROOFSTEP]
exact ⟨⟨i, c⟩, right _ _ ha, right _ _ hb⟩
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝³ : Preorder ι
inst✝² : (i : ι) → Preorder (α i)
inst✝¹ : ∀ (i : ι), DenselyOrdered (α i)
inst✝ : ∀ (i : ι), NoMaxOrder (α i)
⊢ ∀ (a₁ a₂ : Σₗ (i : ι), α i), a₁ < a₂ → ∃ a, a₁ < a ∧ a < a₂
[PROOFSTEP]
rintro ⟨i, a⟩ ⟨j, b⟩ (⟨_, _, h⟩ | ⟨_, b, h⟩)
[GOAL]
case mk.mk.left
ι : Type u_1
α : ι → Type u_2
inst✝³ : Preorder ι
inst✝² : (i : ι) → Preorder (α i)
inst✝¹ : ∀ (i : ι), DenselyOrdered (α i)
inst✝ : ∀ (i : ι), NoMaxOrder (α i)
i : ι
a : α i
j : ι
b : α j
h : i < j
⊢ ∃ a_1, { fst := i, snd := a } < a_1 ∧ a_1 < { fst := j, snd := b }
[PROOFSTEP]
obtain ⟨c, ha⟩ := exists_gt a
[GOAL]
case mk.mk.left.intro
ι : Type u_1
α : ι → Type u_2
inst✝³ : Preorder ι
inst✝² : (i : ι) → Preorder (α i)
inst✝¹ : ∀ (i : ι), DenselyOrdered (α i)
inst✝ : ∀ (i : ι), NoMaxOrder (α i)
i : ι
a : α i
j : ι
b : α j
h : i < j
c : α i
ha : a < c
⊢ ∃ a_1, { fst := i, snd := a } < a_1 ∧ a_1 < { fst := j, snd := b }
[PROOFSTEP]
exact ⟨⟨i, c⟩, right _ _ ha, left _ _ h⟩
[GOAL]
case mk.mk.right
ι : Type u_1
α : ι → Type u_2
inst✝³ : Preorder ι
inst✝² : (i : ι) → Preorder (α i)
inst✝¹ : ∀ (i : ι), DenselyOrdered (α i)
inst✝ : ∀ (i : ι), NoMaxOrder (α i)
i : ι
a b : α i
h : a < b
⊢ ∃ a_1, { fst := i, snd := a } < a_1 ∧ a_1 < { fst := i, snd := b }
[PROOFSTEP]
obtain ⟨c, ha, hb⟩ := exists_between h
[GOAL]
case mk.mk.right.intro.intro
ι : Type u_1
α : ι → Type u_2
inst✝³ : Preorder ι
inst✝² : (i : ι) → Preorder (α i)
inst✝¹ : ∀ (i : ι), DenselyOrdered (α i)
inst✝ : ∀ (i : ι), NoMaxOrder (α i)
i : ι
a b : α i
h : a < b
c : α i
ha : a < c
hb : c < b
⊢ ∃ a_1, { fst := i, snd := a } < a_1 ∧ a_1 < { fst := i, snd := b }
[PROOFSTEP]
exact ⟨⟨i, c⟩, right _ _ ha, right _ _ hb⟩
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝³ : Preorder ι
inst✝² : (i : ι) → Preorder (α i)
inst✝¹ : ∀ (i : ι), DenselyOrdered (α i)
inst✝ : ∀ (i : ι), NoMinOrder (α i)
⊢ ∀ (a₁ a₂ : Σₗ (i : ι), α i), a₁ < a₂ → ∃ a, a₁ < a ∧ a < a₂
[PROOFSTEP]
rintro ⟨i, a⟩ ⟨j, b⟩ (⟨_, _, h⟩ | ⟨_, b, h⟩)
[GOAL]
case mk.mk.left
ι : Type u_1
α : ι → Type u_2
inst✝³ : Preorder ι
inst✝² : (i : ι) → Preorder (α i)
inst✝¹ : ∀ (i : ι), DenselyOrdered (α i)
inst✝ : ∀ (i : ι), NoMinOrder (α i)
i : ι
a : α i
j : ι
b : α j
h : i < j
⊢ ∃ a_1, { fst := i, snd := a } < a_1 ∧ a_1 < { fst := j, snd := b }
[PROOFSTEP]
obtain ⟨c, hb⟩ := exists_lt b
[GOAL]
case mk.mk.left.intro
ι : Type u_1
α : ι → Type u_2
inst✝³ : Preorder ι
inst✝² : (i : ι) → Preorder (α i)
inst✝¹ : ∀ (i : ι), DenselyOrdered (α i)
inst✝ : ∀ (i : ι), NoMinOrder (α i)
i : ι
a : α i
j : ι
b : α j
h : i < j
c : α j
hb : c < b
⊢ ∃ a_1, { fst := i, snd := a } < a_1 ∧ a_1 < { fst := j, snd := b }
[PROOFSTEP]
exact ⟨⟨j, c⟩, left _ _ h, right _ _ hb⟩
[GOAL]
case mk.mk.right
ι : Type u_1
α : ι → Type u_2
inst✝³ : Preorder ι
inst✝² : (i : ι) → Preorder (α i)
inst✝¹ : ∀ (i : ι), DenselyOrdered (α i)
inst✝ : ∀ (i : ι), NoMinOrder (α i)
i : ι
a b : α i
h : a < b
⊢ ∃ a_1, { fst := i, snd := a } < a_1 ∧ a_1 < { fst := i, snd := b }
[PROOFSTEP]
obtain ⟨c, ha, hb⟩ := exists_between h
[GOAL]
case mk.mk.right.intro.intro
ι : Type u_1
α : ι → Type u_2
inst✝³ : Preorder ι
inst✝² : (i : ι) → Preorder (α i)
inst✝¹ : ∀ (i : ι), DenselyOrdered (α i)
inst✝ : ∀ (i : ι), NoMinOrder (α i)
i : ι
a b : α i
h : a < b
c : α i
ha : a < c
hb : c < b
⊢ ∃ a_1, { fst := i, snd := a } < a_1 ∧ a_1 < { fst := i, snd := b }
[PROOFSTEP]
exact ⟨⟨i, c⟩, right _ _ ha, right _ _ hb⟩
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝³ : Preorder ι
inst✝² : (i : ι) → Preorder (α i)
inst✝¹ : NoMaxOrder ι
inst✝ : ∀ (i : ι), Nonempty (α i)
⊢ ∀ (a : Σₗ (i : ι), α i), ∃ b, a < b
[PROOFSTEP]
rintro ⟨i, a⟩
[GOAL]
case mk
ι : Type u_1
α : ι → Type u_2
inst✝³ : Preorder ι
inst✝² : (i : ι) → Preorder (α i)
inst✝¹ : NoMaxOrder ι
inst✝ : ∀ (i : ι), Nonempty (α i)
i : ι
a : α i
⊢ ∃ b, { fst := i, snd := a } < b
[PROOFSTEP]
obtain ⟨j, h⟩ := exists_gt i
[GOAL]
case mk.intro
ι : Type u_1
α : ι → Type u_2
inst✝³ : Preorder ι
inst✝² : (i : ι) → Preorder (α i)
inst✝¹ : NoMaxOrder ι
inst✝ : ∀ (i : ι), Nonempty (α i)
i : ι
a : α i
j : ι
h : i < j
⊢ ∃ b, { fst := i, snd := a } < b
[PROOFSTEP]
obtain ⟨b⟩ : Nonempty (α j) := inferInstance
[GOAL]
case mk.intro.intro
ι : Type u_1
α : ι → Type u_2
inst✝³ : Preorder ι
inst✝² : (i : ι) → Preorder (α i)
inst✝¹ : NoMaxOrder ι
inst✝ : ∀ (i : ι), Nonempty (α i)
i : ι
a : α i
j : ι
h : i < j
b : α j
⊢ ∃ b, { fst := i, snd := a } < b
[PROOFSTEP]
exact ⟨⟨j, b⟩, left _ _ h⟩
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝³ : Preorder ι
inst✝² : (i : ι) → Preorder (α i)
inst✝¹ : NoMinOrder ι
inst✝ : ∀ (i : ι), Nonempty (α i)
⊢ ∀ (a : Σₗ (i : ι), α i), ∃ b, b < a
[PROOFSTEP]
rintro ⟨i, a⟩
[GOAL]
case mk
ι : Type u_1
α : ι → Type u_2
inst✝³ : Preorder ι
inst✝² : (i : ι) → Preorder (α i)
inst✝¹ : NoMinOrder ι
inst✝ : ∀ (i : ι), Nonempty (α i)
i : ι
a : α i
⊢ ∃ b, b < { fst := i, snd := a }
[PROOFSTEP]
obtain ⟨j, h⟩ := exists_lt i
[GOAL]
case mk.intro
ι : Type u_1
α : ι → Type u_2
inst✝³ : Preorder ι
inst✝² : (i : ι) → Preorder (α i)
inst✝¹ : NoMinOrder ι
inst✝ : ∀ (i : ι), Nonempty (α i)
i : ι
a : α i
j : ι
h : j < i
⊢ ∃ b, b < { fst := i, snd := a }
[PROOFSTEP]
obtain ⟨b⟩ : Nonempty (α j) := inferInstance
[GOAL]
case mk.intro.intro
ι : Type u_1
α : ι → Type u_2
inst✝³ : Preorder ι
inst✝² : (i : ι) → Preorder (α i)
inst✝¹ : NoMinOrder ι
inst✝ : ∀ (i : ι), Nonempty (α i)
i : ι
a : α i
j : ι
h : j < i
b : α j
⊢ ∃ b, b < { fst := i, snd := a }
[PROOFSTEP]
exact ⟨⟨j, b⟩, left _ _ h⟩
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝² : Preorder ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : ∀ (i : ι), NoMaxOrder (α i)
⊢ ∀ (a : Σₗ (i : ι), α i), ∃ b, a < b
[PROOFSTEP]
rintro ⟨i, a⟩
[GOAL]
case mk
ι : Type u_1
α : ι → Type u_2
inst✝² : Preorder ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : ∀ (i : ι), NoMaxOrder (α i)
i : ι
a : α i
⊢ ∃ b, { fst := i, snd := a } < b
[PROOFSTEP]
obtain ⟨b, h⟩ := exists_gt a
[GOAL]
case mk.intro
ι : Type u_1
α : ι → Type u_2
inst✝² : Preorder ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : ∀ (i : ι), NoMaxOrder (α i)
i : ι
a b : α i
h : a < b
⊢ ∃ b, { fst := i, snd := a } < b
[PROOFSTEP]
exact ⟨⟨i, b⟩, right _ _ h⟩
[GOAL]
ι : Type u_1
α : ι → Type u_2
inst✝² : Preorder ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : ∀ (i : ι), NoMinOrder (α i)
⊢ ∀ (a : Σₗ (i : ι), α i), ∃ b, b < a
[PROOFSTEP]
rintro ⟨i, a⟩
[GOAL]
case mk
ι : Type u_1
α : ι → Type u_2
inst✝² : Preorder ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : ∀ (i : ι), NoMinOrder (α i)
i : ι
a : α i
⊢ ∃ b, b < { fst := i, snd := a }
[PROOFSTEP]
obtain ⟨b, h⟩ := exists_lt a
[GOAL]
case mk.intro
ι : Type u_1
α : ι → Type u_2
inst✝² : Preorder ι
inst✝¹ : (i : ι) → Preorder (α i)
inst✝ : ∀ (i : ι), NoMinOrder (α i)
i : ι
a b : α i
h : b < a
⊢ ∃ b, b < { fst := i, snd := a }
[PROOFSTEP]
exact ⟨⟨i, b⟩, right _ _ h⟩


[GOAL]
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
f g : Filtration ι m
h : ↑f = ↑g
⊢ f = g
[PROOFSTEP]
cases f
[GOAL]
case mk
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
g : Filtration ι m
seq✝ : ι → MeasurableSpace Ω
mono'✝ : Monotone seq✝
le'✝ : ∀ (i : ι), seq✝ i ≤ m
h : ↑{ seq := seq✝, mono' := mono'✝, le' := le'✝ } = ↑g
⊢ { seq := seq✝, mono' := mono'✝, le' := le'✝ } = g
[PROOFSTEP]
cases g
[GOAL]
case mk.mk
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
seq✝¹ : ι → MeasurableSpace Ω
mono'✝¹ : Monotone seq✝¹
le'✝¹ : ∀ (i : ι), seq✝¹ i ≤ m
seq✝ : ι → MeasurableSpace Ω
mono'✝ : Monotone seq✝
le'✝ : ∀ (i : ι), seq✝ i ≤ m
h : ↑{ seq := seq✝¹, mono' := mono'✝¹, le' := le'✝¹ } = ↑{ seq := seq✝, mono' := mono'✝, le' := le'✝ }
⊢ { seq := seq✝¹, mono' := mono'✝¹, le' := le'✝¹ } = { seq := seq✝, mono' := mono'✝, le' := le'✝ }
[PROOFSTEP]
congr
[GOAL]
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i j : ι
hij : i ≤ j
⊢ (fun i => sSup ((fun f => ↑f i) '' s)) i ≤ (fun i => sSup ((fun f => ↑f i) '' s)) j
[PROOFSTEP]
refine' sSup_le fun m' hm' => _
[GOAL]
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i j : ι
hij : i ≤ j
m' : MeasurableSpace Ω
hm' : m' ∈ (fun f => ↑f i) '' s
⊢ m' ≤ (fun i => sSup ((fun f => ↑f i) '' s)) j
[PROOFSTEP]
rw [Set.mem_image] at hm'
[GOAL]
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i j : ι
hij : i ≤ j
m' : MeasurableSpace Ω
hm' : ∃ x, x ∈ s ∧ ↑x i = m'
⊢ m' ≤ (fun i => sSup ((fun f => ↑f i) '' s)) j
[PROOFSTEP]
obtain ⟨f, hf_mem, hfm'⟩ := hm'
[GOAL]
case intro.intro
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i j : ι
hij : i ≤ j
m' : MeasurableSpace Ω
f : Filtration ι m
hf_mem : f ∈ s
hfm' : ↑f i = m'
⊢ m' ≤ (fun i => sSup ((fun f => ↑f i) '' s)) j
[PROOFSTEP]
rw [← hfm']
[GOAL]
case intro.intro
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i j : ι
hij : i ≤ j
m' : MeasurableSpace Ω
f : Filtration ι m
hf_mem : f ∈ s
hfm' : ↑f i = m'
⊢ ↑f i ≤ (fun i => sSup ((fun f => ↑f i) '' s)) j
[PROOFSTEP]
refine' (f.mono hij).trans _
[GOAL]
case intro.intro
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i j : ι
hij : i ≤ j
m' : MeasurableSpace Ω
f : Filtration ι m
hf_mem : f ∈ s
hfm' : ↑f i = m'
⊢ ↑f j ≤ (fun i => sSup ((fun f => ↑f i) '' s)) j
[PROOFSTEP]
have hfj_mem : f j ∈ (fun g : Filtration ι m => g j) '' s := ⟨f, hf_mem, rfl⟩
[GOAL]
case intro.intro
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i j : ι
hij : i ≤ j
m' : MeasurableSpace Ω
f : Filtration ι m
hf_mem : f ∈ s
hfm' : ↑f i = m'
hfj_mem : ↑f j ∈ (fun g => ↑g j) '' s
⊢ ↑f j ≤ (fun i => sSup ((fun f => ↑f i) '' s)) j
[PROOFSTEP]
exact le_sSup hfj_mem
[GOAL]
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i : ι
⊢ (fun i => sSup ((fun f => ↑f i) '' s)) i ≤ m
[PROOFSTEP]
refine' sSup_le fun m' hm' => _
[GOAL]
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i : ι
m' : MeasurableSpace Ω
hm' : m' ∈ (fun f => ↑f i) '' s
⊢ m' ≤ m
[PROOFSTEP]
rw [Set.mem_image] at hm'
[GOAL]
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i : ι
m' : MeasurableSpace Ω
hm' : ∃ x, x ∈ s ∧ ↑x i = m'
⊢ m' ≤ m
[PROOFSTEP]
obtain ⟨f, _, hfm'⟩ := hm'
[GOAL]
case intro.intro
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i : ι
m' : MeasurableSpace Ω
f : Filtration ι m
left✝ : f ∈ s
hfm' : ↑f i = m'
⊢ m' ≤ m
[PROOFSTEP]
rw [← hfm']
[GOAL]
case intro.intro
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i : ι
m' : MeasurableSpace Ω
f : Filtration ι m
left✝ : f ∈ s
hfm' : ↑f i = m'
⊢ ↑f i ≤ m
[PROOFSTEP]
exact f.le i
[GOAL]
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i j : ι
hij : i ≤ j
⊢ (fun i => if Set.Nonempty s then sInf ((fun f => ↑f i) '' s) else m) i ≤
    (fun i => if Set.Nonempty s then sInf ((fun f => ↑f i) '' s) else m) j
[PROOFSTEP]
by_cases h_nonempty : Set.Nonempty s
[GOAL]
case pos
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i j : ι
hij : i ≤ j
h_nonempty : Set.Nonempty s
⊢ (fun i => if Set.Nonempty s then sInf ((fun f => ↑f i) '' s) else m) i ≤
    (fun i => if Set.Nonempty s then sInf ((fun f => ↑f i) '' s) else m) j
case neg
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i j : ι
hij : i ≤ j
h_nonempty : ¬Set.Nonempty s
⊢ (fun i => if Set.Nonempty s then sInf ((fun f => ↑f i) '' s) else m) i ≤
    (fun i => if Set.Nonempty s then sInf ((fun f => ↑f i) '' s) else m) j
[PROOFSTEP]
swap
[GOAL]
case neg
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i j : ι
hij : i ≤ j
h_nonempty : ¬Set.Nonempty s
⊢ (fun i => if Set.Nonempty s then sInf ((fun f => ↑f i) '' s) else m) i ≤
    (fun i => if Set.Nonempty s then sInf ((fun f => ↑f i) '' s) else m) j
[PROOFSTEP]
simp only [h_nonempty, Set.nonempty_image_iff, if_false, le_refl]
[GOAL]
case pos
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i j : ι
hij : i ≤ j
h_nonempty : Set.Nonempty s
⊢ (fun i => if Set.Nonempty s then sInf ((fun f => ↑f i) '' s) else m) i ≤
    (fun i => if Set.Nonempty s then sInf ((fun f => ↑f i) '' s) else m) j
[PROOFSTEP]
simp only [h_nonempty, if_true, le_sInf_iff, Set.mem_image, forall_exists_index, and_imp, forall_apply_eq_imp_iff₂]
[GOAL]
case pos
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i j : ι
hij : i ≤ j
h_nonempty : Set.Nonempty s
⊢ ∀ (a : Filtration ι m), a ∈ s → sInf ((fun f => ↑f i) '' s) ≤ ↑a j
[PROOFSTEP]
refine' fun f hf_mem => le_trans _ (f.mono hij)
[GOAL]
case pos
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i j : ι
hij : i ≤ j
h_nonempty : Set.Nonempty s
f : Filtration ι m
hf_mem : f ∈ s
⊢ sInf ((fun f => ↑f i) '' s) ≤ ↑f i
[PROOFSTEP]
have hfi_mem : f i ∈ (fun g : Filtration ι m => g i) '' s := ⟨f, hf_mem, rfl⟩
[GOAL]
case pos
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i j : ι
hij : i ≤ j
h_nonempty : Set.Nonempty s
f : Filtration ι m
hf_mem : f ∈ s
hfi_mem : ↑f i ∈ (fun g => ↑g i) '' s
⊢ sInf ((fun f => ↑f i) '' s) ≤ ↑f i
[PROOFSTEP]
exact sInf_le hfi_mem
[GOAL]
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i : ι
⊢ (fun i => if Set.Nonempty s then sInf ((fun f => ↑f i) '' s) else m) i ≤ m
[PROOFSTEP]
by_cases h_nonempty : Set.Nonempty s
[GOAL]
case pos
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i : ι
h_nonempty : Set.Nonempty s
⊢ (fun i => if Set.Nonempty s then sInf ((fun f => ↑f i) '' s) else m) i ≤ m
case neg
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i : ι
h_nonempty : ¬Set.Nonempty s
⊢ (fun i => if Set.Nonempty s then sInf ((fun f => ↑f i) '' s) else m) i ≤ m
[PROOFSTEP]
swap
[GOAL]
case neg
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i : ι
h_nonempty : ¬Set.Nonempty s
⊢ (fun i => if Set.Nonempty s then sInf ((fun f => ↑f i) '' s) else m) i ≤ m
[PROOFSTEP]
simp only [h_nonempty, if_false, le_refl]
[GOAL]
case pos
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i : ι
h_nonempty : Set.Nonempty s
⊢ (fun i => if Set.Nonempty s then sInf ((fun f => ↑f i) '' s) else m) i ≤ m
[PROOFSTEP]
simp only [h_nonempty, if_true]
[GOAL]
case pos
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i : ι
h_nonempty : Set.Nonempty s
⊢ sInf ((fun f => ↑f i) '' s) ≤ m
[PROOFSTEP]
obtain ⟨f, hf_mem⟩ := h_nonempty
[GOAL]
case pos.intro
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
i : ι
f : Filtration ι m
hf_mem : f ∈ s
⊢ sInf ((fun f => ↑f i) '' s) ≤ m
[PROOFSTEP]
exact le_trans (sInf_le ⟨f, hf_mem, rfl⟩) (f.le i)
[GOAL]
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
f : Filtration ι m
h_forall : ∀ (b : Filtration ι m), b ∈ s → b ≤ f
i : ι
m' : MeasurableSpace Ω
hm' : m' ∈ (fun f => ↑f i) '' s
⊢ m' ≤ ↑f i
[PROOFSTEP]
obtain ⟨g, hg_mem, hfm'⟩ := hm'
[GOAL]
case intro.intro
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
f : Filtration ι m
h_forall : ∀ (b : Filtration ι m), b ∈ s → b ≤ f
i : ι
m' : MeasurableSpace Ω
g : Filtration ι m
hg_mem : g ∈ s
hfm' : (fun f => ↑f i) g = m'
⊢ m' ≤ ↑f i
[PROOFSTEP]
rw [← hfm']
[GOAL]
case intro.intro
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
f : Filtration ι m
h_forall : ∀ (b : Filtration ι m), b ∈ s → b ≤ f
i : ι
m' : MeasurableSpace Ω
g : Filtration ι m
hg_mem : g ∈ s
hfm' : (fun f => ↑f i) g = m'
⊢ (fun f => ↑f i) g ≤ ↑f i
[PROOFSTEP]
exact h_forall g hg_mem i
[GOAL]
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
f : Filtration ι m
hf_mem : f ∈ s
i : ι
⊢ ↑(sInf s) i ≤ ↑f i
[PROOFSTEP]
have hs : s.Nonempty := ⟨f, hf_mem⟩
[GOAL]
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
f : Filtration ι m
hf_mem : f ∈ s
i : ι
hs : Set.Nonempty s
⊢ ↑(sInf s) i ≤ ↑f i
[PROOFSTEP]
simp only [sInf_def, hs, if_true]
[GOAL]
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
f : Filtration ι m
hf_mem : f ∈ s
i : ι
hs : Set.Nonempty s
⊢ sInf ((fun f => ↑f i) '' s) ≤ ↑f i
[PROOFSTEP]
exact sInf_le ⟨f, hf_mem, rfl⟩
[GOAL]
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
f : Filtration ι m
h_forall : ∀ (b : Filtration ι m), b ∈ s → f ≤ b
i : ι
⊢ ↑f i ≤ ↑(sInf s) i
[PROOFSTEP]
by_cases hs : s.Nonempty
[GOAL]
case pos
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
f : Filtration ι m
h_forall : ∀ (b : Filtration ι m), b ∈ s → f ≤ b
i : ι
hs : Set.Nonempty s
⊢ ↑f i ≤ ↑(sInf s) i
case neg
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
f : Filtration ι m
h_forall : ∀ (b : Filtration ι m), b ∈ s → f ≤ b
i : ι
hs : ¬Set.Nonempty s
⊢ ↑f i ≤ ↑(sInf s) i
[PROOFSTEP]
swap
[GOAL]
case neg
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
f : Filtration ι m
h_forall : ∀ (b : Filtration ι m), b ∈ s → f ≤ b
i : ι
hs : ¬Set.Nonempty s
⊢ ↑f i ≤ ↑(sInf s) i
[PROOFSTEP]
simp only [sInf_def, hs, if_false]
[GOAL]
case neg
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
f : Filtration ι m
h_forall : ∀ (b : Filtration ι m), b ∈ s → f ≤ b
i : ι
hs : ¬Set.Nonempty s
⊢ ↑f i ≤ m
[PROOFSTEP]
exact f.le i
[GOAL]
case pos
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
f : Filtration ι m
h_forall : ∀ (b : Filtration ι m), b ∈ s → f ≤ b
i : ι
hs : Set.Nonempty s
⊢ ↑f i ≤ ↑(sInf s) i
[PROOFSTEP]
simp only [sInf_def, hs, if_true, le_sInf_iff, Set.mem_image, forall_exists_index, and_imp, forall_apply_eq_imp_iff₂]
[GOAL]
case pos
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : Preorder ι
s : Set (Filtration ι m)
f : Filtration ι m
h_forall : ∀ (b : Filtration ι m), b ∈ s → f ≤ b
i : ι
hs : Set.Nonempty s
⊢ ∀ (a : Filtration ι m), a ∈ s → ↑f i ≤ ↑a i
[PROOFSTEP]
exact fun g hg_mem => h_forall g hg_mem i
[GOAL]
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝¹ : Preorder ι
μ : Measure Ω
f : Filtration ι m
inst✝ : IsFiniteMeasure μ
n : ι
⊢ SigmaFinite (Measure.trim μ (_ : ↑f n ≤ m))
[PROOFSTEP]
infer_instance
[GOAL]
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝³ : TopologicalSpace β
inst✝² : MetrizableSpace β
mβ : MeasurableSpace β
inst✝¹ : BorelSpace β
inst✝ : Preorder ι
u : ι → Ω → β
hum : ∀ (i : ι), StronglyMeasurable (u i)
i : ι
⊢ (fun i => ⨆ (j : ι) (_ : j ≤ i), MeasurableSpace.comap (u j) mβ) i ≤ m
[PROOFSTEP]
refine' iSup₂_le _
[GOAL]
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝³ : TopologicalSpace β
inst✝² : MetrizableSpace β
mβ : MeasurableSpace β
inst✝¹ : BorelSpace β
inst✝ : Preorder ι
u : ι → Ω → β
hum : ∀ (i : ι), StronglyMeasurable (u i)
i : ι
⊢ ∀ (i_1 : ι), i_1 ≤ i → MeasurableSpace.comap (u i_1) mβ ≤ m
[PROOFSTEP]
rintro j _ s ⟨t, ht, rfl⟩
[GOAL]
case intro.intro
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝³ : TopologicalSpace β
inst✝² : MetrizableSpace β
mβ : MeasurableSpace β
inst✝¹ : BorelSpace β
inst✝ : Preorder ι
u : ι → Ω → β
hum : ∀ (i : ι), StronglyMeasurable (u i)
i j : ι
j✝ : j ≤ i
t : Set β
ht : MeasurableSet t
⊢ MeasurableSet (u j ⁻¹' t)
[PROOFSTEP]
exact (hum j).measurable ht
[GOAL]
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
⊢ filtrationOfSet hsm =
    natural (fun i => Set.indicator (s i) fun x => 1) (_ : ∀ (i : ι), StronglyMeasurable (Set.indicator (s i) 1))
[PROOFSTEP]
simp [natural, filtrationOfSet, measurableSpace_iSup_eq]
[GOAL]
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
⊢ (fun i => MeasurableSpace.generateFrom {t | ∃ j, j ≤ i ∧ s j = t}) = fun i =>
    MeasurableSpace.generateFrom {s_1 | ∃ n, MeasurableSet s_1}
[PROOFSTEP]
ext1 i
[GOAL]
case h
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
⊢ MeasurableSpace.generateFrom {t | ∃ j, j ≤ i ∧ s j = t} = MeasurableSpace.generateFrom {s_1 | ∃ n, MeasurableSet s_1}
[PROOFSTEP]
refine' le_antisymm (generateFrom_le _) (generateFrom_le _)
[GOAL]
case h.refine'_1
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
⊢ ∀ (t : Set Ω), t ∈ {t | ∃ j, j ≤ i ∧ s j = t} → MeasurableSet t
[PROOFSTEP]
rintro _ ⟨j, hij, rfl⟩
[GOAL]
case h.refine'_1.intro.intro
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i j : ι
hij : j ≤ i
⊢ MeasurableSet (s j)
[PROOFSTEP]
refine' measurableSet_generateFrom ⟨j, measurableSet_generateFrom ⟨hij, _⟩⟩
[GOAL]
case h.refine'_1.intro.intro
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i j : ι
hij : j ≤ i
⊢ MeasurableSet (s j)
[PROOFSTEP]
rw [comap_eq_generateFrom]
[GOAL]
case h.refine'_1.intro.intro
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i j : ι
hij : j ≤ i
⊢ MeasurableSet (s j)
[PROOFSTEP]
refine' measurableSet_generateFrom ⟨{1}, measurableSet_singleton 1, _⟩
[GOAL]
case h.refine'_1.intro.intro
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i j : ι
hij : j ≤ i
⊢ (Set.indicator (s j) fun x => 1) ⁻¹' {1} = s j
[PROOFSTEP]
ext x
[GOAL]
case h.refine'_1.intro.intro.h
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i j : ι
hij : j ≤ i
x : Ω
⊢ x ∈ (Set.indicator (s j) fun x => 1) ⁻¹' {1} ↔ x ∈ s j
[PROOFSTEP]
simp [Set.indicator_const_preimage_eq_union]
[GOAL]
case h.refine'_2
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
⊢ ∀ (t : Set Ω), t ∈ {s_1 | ∃ n, MeasurableSet s_1} → MeasurableSet t
[PROOFSTEP]
rintro t ⟨n, ht⟩
[GOAL]
case h.refine'_2.intro
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t : Set Ω
n : ι
ht : MeasurableSet t
⊢ MeasurableSet t
[PROOFSTEP]
suffices
  MeasurableSpace.generateFrom
      {t | n ≤ i ∧ MeasurableSet[MeasurableSpace.comap ((s n).indicator (fun _ => 1 : Ω → β)) mβ] t} ≤
    MeasurableSpace.generateFrom {t | ∃ (j : ι), j ≤ i ∧ s j = t}
  by exact this _ ht
[GOAL]
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t : Set Ω
n : ι
ht : MeasurableSet t
this :
  MeasurableSpace.generateFrom {t | n ≤ i ∧ MeasurableSet t} ≤ MeasurableSpace.generateFrom {t | ∃ j, j ≤ i ∧ s j = t}
⊢ MeasurableSet t
[PROOFSTEP]
exact this _ ht
[GOAL]
case h.refine'_2.intro
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t : Set Ω
n : ι
ht : MeasurableSet t
⊢ MeasurableSpace.generateFrom {t | n ≤ i ∧ MeasurableSet t} ≤ MeasurableSpace.generateFrom {t | ∃ j, j ≤ i ∧ s j = t}
[PROOFSTEP]
refine' generateFrom_le _
[GOAL]
case h.refine'_2.intro
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t : Set Ω
n : ι
ht : MeasurableSet t
⊢ ∀ (t : Set Ω), t ∈ {t | n ≤ i ∧ MeasurableSet t} → MeasurableSet t
[PROOFSTEP]
rintro t ⟨hn, u, _, hu'⟩
[GOAL]
case h.refine'_2.intro.intro.intro.intro
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t✝ : Set Ω
n : ι
ht : MeasurableSet t✝
t : Set Ω
hn : n ≤ i
u : Set β
left✝ : MeasurableSet u
hu' : (Set.indicator (s n) fun x => 1) ⁻¹' u = t
⊢ MeasurableSet t
[PROOFSTEP]
obtain heq | heq | heq | heq := Set.indicator_const_preimage (s n) u (1 : β)
[GOAL]
case h.refine'_2.intro.intro.intro.intro.inl
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t✝ : Set Ω
n : ι
ht : MeasurableSet t✝
t : Set Ω
hn : n ≤ i
u : Set β
left✝ : MeasurableSet u
hu' : (Set.indicator (s n) fun x => 1) ⁻¹' u = t
heq : (Set.indicator (s n) fun x => 1) ⁻¹' u = Set.univ
⊢ MeasurableSet t
case h.refine'_2.intro.intro.intro.intro.inr.inl
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t✝ : Set Ω
n : ι
ht : MeasurableSet t✝
t : Set Ω
hn : n ≤ i
u : Set β
left✝ : MeasurableSet u
hu' : (Set.indicator (s n) fun x => 1) ⁻¹' u = t
heq : (Set.indicator (s n) fun x => 1) ⁻¹' u = s n
⊢ MeasurableSet t
case h.refine'_2.intro.intro.intro.intro.inr.inr.inl
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t✝ : Set Ω
n : ι
ht : MeasurableSet t✝
t : Set Ω
hn : n ≤ i
u : Set β
left✝ : MeasurableSet u
hu' : (Set.indicator (s n) fun x => 1) ⁻¹' u = t
heq : (Set.indicator (s n) fun x => 1) ⁻¹' u = (s n)ᶜ
⊢ MeasurableSet t
case h.refine'_2.intro.intro.intro.intro.inr.inr.inr
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t✝ : Set Ω
n : ι
ht : MeasurableSet t✝
t : Set Ω
hn : n ≤ i
u : Set β
left✝ : MeasurableSet u
hu' : (Set.indicator (s n) fun x => 1) ⁻¹' u = t
heq : (Set.indicator (s n) fun x => 1) ⁻¹' u ∈ {∅}
⊢ MeasurableSet t
[PROOFSTEP]
pick_goal 4
[GOAL]
case h.refine'_2.intro.intro.intro.intro.inr.inr.inr
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t✝ : Set Ω
n : ι
ht : MeasurableSet t✝
t : Set Ω
hn : n ≤ i
u : Set β
left✝ : MeasurableSet u
hu' : (Set.indicator (s n) fun x => 1) ⁻¹' u = t
heq : (Set.indicator (s n) fun x => 1) ⁻¹' u ∈ {∅}
⊢ MeasurableSet t
case h.refine'_2.intro.intro.intro.intro.inl
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t✝ : Set Ω
n : ι
ht : MeasurableSet t✝
t : Set Ω
hn : n ≤ i
u : Set β
left✝ : MeasurableSet u
hu' : (Set.indicator (s n) fun x => 1) ⁻¹' u = t
heq : (Set.indicator (s n) fun x => 1) ⁻¹' u = Set.univ
⊢ MeasurableSet t
case h.refine'_2.intro.intro.intro.intro.inr.inl
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t✝ : Set Ω
n : ι
ht : MeasurableSet t✝
t : Set Ω
hn : n ≤ i
u : Set β
left✝ : MeasurableSet u
hu' : (Set.indicator (s n) fun x => 1) ⁻¹' u = t
heq : (Set.indicator (s n) fun x => 1) ⁻¹' u = s n
⊢ MeasurableSet t
case h.refine'_2.intro.intro.intro.intro.inr.inr.inl
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t✝ : Set Ω
n : ι
ht : MeasurableSet t✝
t : Set Ω
hn : n ≤ i
u : Set β
left✝ : MeasurableSet u
hu' : (Set.indicator (s n) fun x => 1) ⁻¹' u = t
heq : (Set.indicator (s n) fun x => 1) ⁻¹' u = (s n)ᶜ
⊢ MeasurableSet t
[PROOFSTEP]
rw [Set.mem_singleton_iff] at heq
[GOAL]
case h.refine'_2.intro.intro.intro.intro.inr.inr.inr
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t✝ : Set Ω
n : ι
ht : MeasurableSet t✝
t : Set Ω
hn : n ≤ i
u : Set β
left✝ : MeasurableSet u
hu' : (Set.indicator (s n) fun x => 1) ⁻¹' u = t
heq : (Set.indicator (s n) fun x => 1) ⁻¹' u = ∅
⊢ MeasurableSet t
case h.refine'_2.intro.intro.intro.intro.inl
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t✝ : Set Ω
n : ι
ht : MeasurableSet t✝
t : Set Ω
hn : n ≤ i
u : Set β
left✝ : MeasurableSet u
hu' : (Set.indicator (s n) fun x => 1) ⁻¹' u = t
heq : (Set.indicator (s n) fun x => 1) ⁻¹' u = Set.univ
⊢ MeasurableSet t
case h.refine'_2.intro.intro.intro.intro.inr.inl
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t✝ : Set Ω
n : ι
ht : MeasurableSet t✝
t : Set Ω
hn : n ≤ i
u : Set β
left✝ : MeasurableSet u
hu' : (Set.indicator (s n) fun x => 1) ⁻¹' u = t
heq : (Set.indicator (s n) fun x => 1) ⁻¹' u = s n
⊢ MeasurableSet t
case h.refine'_2.intro.intro.intro.intro.inr.inr.inl
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t✝ : Set Ω
n : ι
ht : MeasurableSet t✝
t : Set Ω
hn : n ≤ i
u : Set β
left✝ : MeasurableSet u
hu' : (Set.indicator (s n) fun x => 1) ⁻¹' u = t
heq : (Set.indicator (s n) fun x => 1) ⁻¹' u = (s n)ᶜ
⊢ MeasurableSet t
[PROOFSTEP]
all_goals rw [heq] at hu' ; rw [← hu']
[GOAL]
case h.refine'_2.intro.intro.intro.intro.inr.inr.inr
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t✝ : Set Ω
n : ι
ht : MeasurableSet t✝
t : Set Ω
hn : n ≤ i
u : Set β
left✝ : MeasurableSet u
hu' : (Set.indicator (s n) fun x => 1) ⁻¹' u = t
heq : (Set.indicator (s n) fun x => 1) ⁻¹' u = ∅
⊢ MeasurableSet t
[PROOFSTEP]
rw [heq] at hu'
[GOAL]
case h.refine'_2.intro.intro.intro.intro.inr.inr.inr
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t✝ : Set Ω
n : ι
ht : MeasurableSet t✝
t : Set Ω
hn : n ≤ i
u : Set β
left✝ : MeasurableSet u
hu' : ∅ = t
heq : (Set.indicator (s n) fun x => 1) ⁻¹' u = ∅
⊢ MeasurableSet t
[PROOFSTEP]
rw [← hu']
[GOAL]
case h.refine'_2.intro.intro.intro.intro.inl
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t✝ : Set Ω
n : ι
ht : MeasurableSet t✝
t : Set Ω
hn : n ≤ i
u : Set β
left✝ : MeasurableSet u
hu' : (Set.indicator (s n) fun x => 1) ⁻¹' u = t
heq : (Set.indicator (s n) fun x => 1) ⁻¹' u = Set.univ
⊢ MeasurableSet t
[PROOFSTEP]
rw [heq] at hu'
[GOAL]
case h.refine'_2.intro.intro.intro.intro.inl
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t✝ : Set Ω
n : ι
ht : MeasurableSet t✝
t : Set Ω
hn : n ≤ i
u : Set β
left✝ : MeasurableSet u
hu' : Set.univ = t
heq : (Set.indicator (s n) fun x => 1) ⁻¹' u = Set.univ
⊢ MeasurableSet t
[PROOFSTEP]
rw [← hu']
[GOAL]
case h.refine'_2.intro.intro.intro.intro.inr.inl
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t✝ : Set Ω
n : ι
ht : MeasurableSet t✝
t : Set Ω
hn : n ≤ i
u : Set β
left✝ : MeasurableSet u
hu' : (Set.indicator (s n) fun x => 1) ⁻¹' u = t
heq : (Set.indicator (s n) fun x => 1) ⁻¹' u = s n
⊢ MeasurableSet t
[PROOFSTEP]
rw [heq] at hu'
[GOAL]
case h.refine'_2.intro.intro.intro.intro.inr.inl
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t✝ : Set Ω
n : ι
ht : MeasurableSet t✝
t : Set Ω
hn : n ≤ i
u : Set β
left✝ : MeasurableSet u
hu' : s n = t
heq : (Set.indicator (s n) fun x => 1) ⁻¹' u = s n
⊢ MeasurableSet t
[PROOFSTEP]
rw [← hu']
[GOAL]
case h.refine'_2.intro.intro.intro.intro.inr.inr.inl
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t✝ : Set Ω
n : ι
ht : MeasurableSet t✝
t : Set Ω
hn : n ≤ i
u : Set β
left✝ : MeasurableSet u
hu' : (Set.indicator (s n) fun x => 1) ⁻¹' u = t
heq : (Set.indicator (s n) fun x => 1) ⁻¹' u = (s n)ᶜ
⊢ MeasurableSet t
[PROOFSTEP]
rw [heq] at hu'
[GOAL]
case h.refine'_2.intro.intro.intro.intro.inr.inr.inl
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t✝ : Set Ω
n : ι
ht : MeasurableSet t✝
t : Set Ω
hn : n ≤ i
u : Set β
left✝ : MeasurableSet u
hu' : (s n)ᶜ = t
heq : (Set.indicator (s n) fun x => 1) ⁻¹' u = (s n)ᶜ
⊢ MeasurableSet t
[PROOFSTEP]
rw [← hu']
[GOAL]
case h.refine'_2.intro.intro.intro.intro.inr.inr.inr
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t✝ : Set Ω
n : ι
ht : MeasurableSet t✝
t : Set Ω
hn : n ≤ i
u : Set β
left✝ : MeasurableSet u
hu' : ∅ = t
heq : (Set.indicator (s n) fun x => 1) ⁻¹' u = ∅
⊢ MeasurableSet ∅
case h.refine'_2.intro.intro.intro.intro.inl
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t✝ : Set Ω
n : ι
ht : MeasurableSet t✝
t : Set Ω
hn : n ≤ i
u : Set β
left✝ : MeasurableSet u
hu' : Set.univ = t
heq : (Set.indicator (s n) fun x => 1) ⁻¹' u = Set.univ
⊢ MeasurableSet Set.univ
case h.refine'_2.intro.intro.intro.intro.inr.inl
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t✝ : Set Ω
n : ι
ht : MeasurableSet t✝
t : Set Ω
hn : n ≤ i
u : Set β
left✝ : MeasurableSet u
hu' : s n = t
heq : (Set.indicator (s n) fun x => 1) ⁻¹' u = s n
⊢ MeasurableSet (s n)
case h.refine'_2.intro.intro.intro.intro.inr.inr.inl
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
inst✝¹ : MulZeroOneClass β
inst✝ : Nontrivial β
s : ι → Set Ω
hsm : ∀ (i : ι), MeasurableSet (s i)
i : ι
t✝ : Set Ω
n : ι
ht : MeasurableSet t✝
t : Set Ω
hn : n ≤ i
u : Set β
left✝ : MeasurableSet u
hu' : (s n)ᶜ = t
heq : (Set.indicator (s n) fun x => 1) ⁻¹' u = (s n)ᶜ
⊢ MeasurableSet (s n)ᶜ
[PROOFSTEP]
exacts [measurableSet_empty _, MeasurableSet.univ, measurableSet_generateFrom ⟨n, hn, rfl⟩,
  MeasurableSet.compl (measurableSet_generateFrom ⟨n, hn, rfl⟩)]
[GOAL]
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
E : Type u_4
inst✝¹ : Zero E
inst✝ : TopologicalSpace E
ℱ : Filtration ι m
f : ι → Ω → E
μ : Measure Ω
⊢ StronglyMeasurable (limitProcess f ℱ μ)
[PROOFSTEP]
rw [limitProcess]
[GOAL]
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
E : Type u_4
inst✝¹ : Zero E
inst✝ : TopologicalSpace E
ℱ : Filtration ι m
f : ι → Ω → E
μ : Measure Ω
⊢ StronglyMeasurable
    (if h : ∃ g, StronglyMeasurable g ∧ ∀ᵐ (ω : Ω) ∂μ, Tendsto (fun n => f n ω) atTop (𝓝 (g ω)) then Classical.choose h
    else 0)
[PROOFSTEP]
split_ifs with h
[GOAL]
case pos
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
E : Type u_4
inst✝¹ : Zero E
inst✝ : TopologicalSpace E
ℱ : Filtration ι m
f : ι → Ω → E
μ : Measure Ω
h : ∃ g, StronglyMeasurable g ∧ ∀ᵐ (ω : Ω) ∂μ, Tendsto (fun n => f n ω) atTop (𝓝 (g ω))
⊢ StronglyMeasurable (Classical.choose h)
case neg
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁵ : TopologicalSpace β
inst✝⁴ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝³ : BorelSpace β
inst✝² : Preorder ι
E : Type u_4
inst✝¹ : Zero E
inst✝ : TopologicalSpace E
ℱ : Filtration ι m
f : ι → Ω → E
μ : Measure Ω
h : ¬∃ g, StronglyMeasurable g ∧ ∀ᵐ (ω : Ω) ∂μ, Tendsto (fun n => f n ω) atTop (𝓝 (g ω))
⊢ StronglyMeasurable 0
[PROOFSTEP]
exacts [(Classical.choose_spec h).1, stronglyMeasurable_zero]
[GOAL]
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁶ : TopologicalSpace β
inst✝⁵ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝⁴ : BorelSpace β
inst✝³ : Preorder ι
E : Type u_4
inst✝² : Zero E
inst✝¹ : TopologicalSpace E
ℱ✝ : Filtration ι m
f✝ : ι → Ω → E
μ : Measure Ω
R : ℝ≥0
p : ℝ≥0∞
F : Type u_5
inst✝ : NormedAddCommGroup F
ℱ : Filtration ℕ m
f : ℕ → Ω → F
hfm : ∀ (n : ℕ), AEStronglyMeasurable (f n) μ
hbdd : ∀ (n : ℕ), snorm (f n) p μ ≤ ↑R
⊢ Memℒp (limitProcess f ℱ μ) p
[PROOFSTEP]
rw [limitProcess]
[GOAL]
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁶ : TopologicalSpace β
inst✝⁵ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝⁴ : BorelSpace β
inst✝³ : Preorder ι
E : Type u_4
inst✝² : Zero E
inst✝¹ : TopologicalSpace E
ℱ✝ : Filtration ι m
f✝ : ι → Ω → E
μ : Measure Ω
R : ℝ≥0
p : ℝ≥0∞
F : Type u_5
inst✝ : NormedAddCommGroup F
ℱ : Filtration ℕ m
f : ℕ → Ω → F
hfm : ∀ (n : ℕ), AEStronglyMeasurable (f n) μ
hbdd : ∀ (n : ℕ), snorm (f n) p μ ≤ ↑R
⊢ Memℒp
    (if h : ∃ g, StronglyMeasurable g ∧ ∀ᵐ (ω : Ω) ∂μ, Tendsto (fun n => f n ω) atTop (𝓝 (g ω)) then Classical.choose h
    else 0)
    p
[PROOFSTEP]
split_ifs with h
[GOAL]
case pos
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁶ : TopologicalSpace β
inst✝⁵ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝⁴ : BorelSpace β
inst✝³ : Preorder ι
E : Type u_4
inst✝² : Zero E
inst✝¹ : TopologicalSpace E
ℱ✝ : Filtration ι m
f✝ : ι → Ω → E
μ : Measure Ω
R : ℝ≥0
p : ℝ≥0∞
F : Type u_5
inst✝ : NormedAddCommGroup F
ℱ : Filtration ℕ m
f : ℕ → Ω → F
hfm : ∀ (n : ℕ), AEStronglyMeasurable (f n) μ
hbdd : ∀ (n : ℕ), snorm (f n) p μ ≤ ↑R
h : ∃ g, StronglyMeasurable g ∧ ∀ᵐ (ω : Ω) ∂μ, Tendsto (fun n => f n ω) atTop (𝓝 (g ω))
⊢ Memℒp (Classical.choose h) p
[PROOFSTEP]
refine'
  ⟨StronglyMeasurable.aestronglyMeasurable ((Classical.choose_spec h).1.mono (sSup_le fun m ⟨n, hn⟩ => hn ▸ ℱ.le _)),
    lt_of_le_of_lt (Lp.snorm_lim_le_liminf_snorm hfm _ (Classical.choose_spec h).2)
      (lt_of_le_of_lt _ (ENNReal.coe_lt_top : ↑R < ∞))⟩
[GOAL]
case pos
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁶ : TopologicalSpace β
inst✝⁵ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝⁴ : BorelSpace β
inst✝³ : Preorder ι
E : Type u_4
inst✝² : Zero E
inst✝¹ : TopologicalSpace E
ℱ✝ : Filtration ι m
f✝ : ι → Ω → E
μ : Measure Ω
R : ℝ≥0
p : ℝ≥0∞
F : Type u_5
inst✝ : NormedAddCommGroup F
ℱ : Filtration ℕ m
f : ℕ → Ω → F
hfm : ∀ (n : ℕ), AEStronglyMeasurable (f n) μ
hbdd : ∀ (n : ℕ), snorm (f n) p μ ≤ ↑R
h : ∃ g, StronglyMeasurable g ∧ ∀ᵐ (ω : Ω) ∂μ, Tendsto (fun n => f n ω) atTop (𝓝 (g ω))
⊢ liminf (fun n => snorm (f n) p μ) atTop ≤ ↑R
[PROOFSTEP]
simp_rw [liminf_eq, eventually_atTop]
[GOAL]
case pos
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁶ : TopologicalSpace β
inst✝⁵ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝⁴ : BorelSpace β
inst✝³ : Preorder ι
E : Type u_4
inst✝² : Zero E
inst✝¹ : TopologicalSpace E
ℱ✝ : Filtration ι m
f✝ : ι → Ω → E
μ : Measure Ω
R : ℝ≥0
p : ℝ≥0∞
F : Type u_5
inst✝ : NormedAddCommGroup F
ℱ : Filtration ℕ m
f : ℕ → Ω → F
hfm : ∀ (n : ℕ), AEStronglyMeasurable (f n) μ
hbdd : ∀ (n : ℕ), snorm (f n) p μ ≤ ↑R
h : ∃ g, StronglyMeasurable g ∧ ∀ᵐ (ω : Ω) ∂μ, Tendsto (fun n => f n ω) atTop (𝓝 (g ω))
⊢ sSup {a | ∃ a_1, ∀ (b : ℕ), b ≥ a_1 → a ≤ snorm (f b) p μ} ≤ ↑R
[PROOFSTEP]
exact sSup_le fun b ⟨a, ha⟩ => (ha a le_rfl).trans (hbdd _)
[GOAL]
case neg
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝⁶ : TopologicalSpace β
inst✝⁵ : MetrizableSpace β
mβ : MeasurableSpace β
inst✝⁴ : BorelSpace β
inst✝³ : Preorder ι
E : Type u_4
inst✝² : Zero E
inst✝¹ : TopologicalSpace E
ℱ✝ : Filtration ι m
f✝ : ι → Ω → E
μ : Measure Ω
R : ℝ≥0
p : ℝ≥0∞
F : Type u_5
inst✝ : NormedAddCommGroup F
ℱ : Filtration ℕ m
f : ℕ → Ω → F
hfm : ∀ (n : ℕ), AEStronglyMeasurable (f n) μ
hbdd : ∀ (n : ℕ), snorm (f n) p μ ≤ ↑R
h : ¬∃ g, StronglyMeasurable g ∧ ∀ᵐ (ω : Ω) ∂μ, Tendsto (fun n => f n ω) atTop (𝓝 (g ω))
⊢ Memℒp 0 p
[PROOFSTEP]
exact zero_memℒp


[GOAL]
α : Type u_1
p : Set α → Prop
s₀ : Set α
hp : p s₀
t : Set α
inst✝ : HasCountableSeparatingOn α p t
⊢ ∃ S, (∀ (n : ℕ), p (S n)) ∧ ∀ (x : α), x ∈ t → ∀ (y : α), y ∈ t → (∀ (n : ℕ), x ∈ S n ↔ y ∈ S n) → x = y
[PROOFSTEP]
rcases exists_nonempty_countable_separating α hp t with ⟨S, hSne, hSc, hS⟩
[GOAL]
case intro.intro.intro
α : Type u_1
p : Set α → Prop
s₀ : Set α
hp : p s₀
t : Set α
inst✝ : HasCountableSeparatingOn α p t
S : Set (Set α)
hSne : Set.Nonempty S
hSc : Set.Countable S
hS :
  (∀ (s : Set α), s ∈ S → p s) ∧ ∀ (x : α), x ∈ t → ∀ (y : α), y ∈ t → (∀ (s : Set α), s ∈ S → (x ∈ s ↔ y ∈ s)) → x = y
⊢ ∃ S, (∀ (n : ℕ), p (S n)) ∧ ∀ (x : α), x ∈ t → ∀ (y : α), y ∈ t → (∀ (n : ℕ), x ∈ S n ↔ y ∈ S n) → x = y
[PROOFSTEP]
rcases hSc.exists_eq_range hSne with ⟨S, rfl⟩
[GOAL]
case intro.intro.intro.intro
α : Type u_1
p : Set α → Prop
s₀ : Set α
hp : p s₀
t : Set α
inst✝ : HasCountableSeparatingOn α p t
S : ℕ → Set α
hSne : Set.Nonempty (range S)
hSc : Set.Countable (range S)
hS :
  (∀ (s : Set α), s ∈ range S → p s) ∧
    ∀ (x : α), x ∈ t → ∀ (y : α), y ∈ t → (∀ (s : Set α), s ∈ range S → (x ∈ s ↔ y ∈ s)) → x = y
⊢ ∃ S, (∀ (n : ℕ), p (S n)) ∧ ∀ (x : α), x ∈ t → ∀ (y : α), y ∈ t → (∀ (n : ℕ), x ∈ S n ↔ y ∈ S n) → x = y
[PROOFSTEP]
use S
[GOAL]
case h
α : Type u_1
p : Set α → Prop
s₀ : Set α
hp : p s₀
t : Set α
inst✝ : HasCountableSeparatingOn α p t
S : ℕ → Set α
hSne : Set.Nonempty (range S)
hSc : Set.Countable (range S)
hS :
  (∀ (s : Set α), s ∈ range S → p s) ∧
    ∀ (x : α), x ∈ t → ∀ (y : α), y ∈ t → (∀ (s : Set α), s ∈ range S → (x ∈ s ↔ y ∈ s)) → x = y
⊢ (∀ (n : ℕ), p (S n)) ∧ ∀ (x : α), x ∈ t → ∀ (y : α), y ∈ t → (∀ (n : ℕ), x ∈ S n ↔ y ∈ S n) → x = y
[PROOFSTEP]
simpa only [forall_range_iff] using hS
[GOAL]
α : Type u_1
p : Set α → Prop
t : Set α
q : Set ↑t → Prop
h : HasCountableSeparatingOn (↑t) q univ
hpq : ∀ (U : Set ↑t), q U → ∃ V, p V ∧ Subtype.val ⁻¹' V = U
⊢ HasCountableSeparatingOn α p t
[PROOFSTEP]
rcases h.1 with ⟨S, hSc, hSq, hS⟩
[GOAL]
case intro.intro.intro
α : Type u_1
p : Set α → Prop
t : Set α
q : Set ↑t → Prop
h : HasCountableSeparatingOn (↑t) q univ
hpq : ∀ (U : Set ↑t), q U → ∃ V, p V ∧ Subtype.val ⁻¹' V = U
S : Set (Set ↑t)
hSc : Set.Countable S
hSq : ∀ (s : Set ↑t), s ∈ S → q s
hS : ∀ (x : ↑t), x ∈ univ → ∀ (y : ↑t), y ∈ univ → (∀ (s : Set ↑t), s ∈ S → (x ∈ s ↔ y ∈ s)) → x = y
⊢ HasCountableSeparatingOn α p t
[PROOFSTEP]
choose! V hpV hV using fun s hs ↦ hpq s (hSq s hs)
[GOAL]
case intro.intro.intro
α : Type u_1
p : Set α → Prop
t : Set α
q : Set ↑t → Prop
h : HasCountableSeparatingOn (↑t) q univ
hpq : ∀ (U : Set ↑t), q U → ∃ V, p V ∧ Subtype.val ⁻¹' V = U
S : Set (Set ↑t)
hSc : Set.Countable S
hSq : ∀ (s : Set ↑t), s ∈ S → q s
hS : ∀ (x : ↑t), x ∈ univ → ∀ (y : ↑t), y ∈ univ → (∀ (s : Set ↑t), s ∈ S → (x ∈ s ↔ y ∈ s)) → x = y
V : Set ↑t → Set α
hpV : ∀ (s : Set ↑t), s ∈ S → p (V s)
hV : ∀ (s : Set ↑t), s ∈ S → Subtype.val ⁻¹' V s = s
⊢ HasCountableSeparatingOn α p t
[PROOFSTEP]
refine ⟨⟨V '' S, hSc.image _, ball_image_iff.2 hpV, fun x hx y hy h ↦ ?_⟩⟩
[GOAL]
case intro.intro.intro
α : Type u_1
p : Set α → Prop
t : Set α
q : Set ↑t → Prop
h✝ : HasCountableSeparatingOn (↑t) q univ
hpq : ∀ (U : Set ↑t), q U → ∃ V, p V ∧ Subtype.val ⁻¹' V = U
S : Set (Set ↑t)
hSc : Set.Countable S
hSq : ∀ (s : Set ↑t), s ∈ S → q s
hS : ∀ (x : ↑t), x ∈ univ → ∀ (y : ↑t), y ∈ univ → (∀ (s : Set ↑t), s ∈ S → (x ∈ s ↔ y ∈ s)) → x = y
V : Set ↑t → Set α
hpV : ∀ (s : Set ↑t), s ∈ S → p (V s)
hV : ∀ (s : Set ↑t), s ∈ S → Subtype.val ⁻¹' V s = s
x : α
hx : x ∈ t
y : α
hy : y ∈ t
h : ∀ (s : Set α), s ∈ V '' S → (x ∈ s ↔ y ∈ s)
⊢ x = y
[PROOFSTEP]
refine congr_arg Subtype.val (hS ⟨x, hx⟩ trivial ⟨y, hy⟩ trivial fun U hU ↦ ?_)
[GOAL]
case intro.intro.intro
α : Type u_1
p : Set α → Prop
t : Set α
q : Set ↑t → Prop
h✝ : HasCountableSeparatingOn (↑t) q univ
hpq : ∀ (U : Set ↑t), q U → ∃ V, p V ∧ Subtype.val ⁻¹' V = U
S : Set (Set ↑t)
hSc : Set.Countable S
hSq : ∀ (s : Set ↑t), s ∈ S → q s
hS : ∀ (x : ↑t), x ∈ univ → ∀ (y : ↑t), y ∈ univ → (∀ (s : Set ↑t), s ∈ S → (x ∈ s ↔ y ∈ s)) → x = y
V : Set ↑t → Set α
hpV : ∀ (s : Set ↑t), s ∈ S → p (V s)
hV : ∀ (s : Set ↑t), s ∈ S → Subtype.val ⁻¹' V s = s
x : α
hx : x ∈ t
y : α
hy : y ∈ t
h : ∀ (s : Set α), s ∈ V '' S → (x ∈ s ↔ y ∈ s)
U : Set ↑t
hU : U ∈ S
⊢ { val := x, property := hx } ∈ U ↔ { val := y, property := hy } ∈ U
[PROOFSTEP]
rw [← hV U hU]
[GOAL]
case intro.intro.intro
α : Type u_1
p : Set α → Prop
t : Set α
q : Set ↑t → Prop
h✝ : HasCountableSeparatingOn (↑t) q univ
hpq : ∀ (U : Set ↑t), q U → ∃ V, p V ∧ Subtype.val ⁻¹' V = U
S : Set (Set ↑t)
hSc : Set.Countable S
hSq : ∀ (s : Set ↑t), s ∈ S → q s
hS : ∀ (x : ↑t), x ∈ univ → ∀ (y : ↑t), y ∈ univ → (∀ (s : Set ↑t), s ∈ S → (x ∈ s ↔ y ∈ s)) → x = y
V : Set ↑t → Set α
hpV : ∀ (s : Set ↑t), s ∈ S → p (V s)
hV : ∀ (s : Set ↑t), s ∈ S → Subtype.val ⁻¹' V s = s
x : α
hx : x ∈ t
y : α
hy : y ∈ t
h : ∀ (s : Set α), s ∈ V '' S → (x ∈ s ↔ y ∈ s)
U : Set ↑t
hU : U ∈ S
⊢ { val := x, property := hx } ∈ Subtype.val ⁻¹' V U ↔ { val := y, property := hy } ∈ Subtype.val ⁻¹' V U
[PROOFSTEP]
exact h _ (mem_image_of_mem _ hU)
[GOAL]
α : Type u_1
β : Sort ?u.5043
l : Filter α
inst✝ : CountableInterFilter l
f g : α → β
p : Set α → Prop
s : Set α
h : HasCountableSeparatingOn α p s
hs : s ∈ l
hl : ∀ (U : Set α), p U → U ∈ l ∨ Uᶜ ∈ l
⊢ ∃ t, t ⊆ s ∧ Set.Subsingleton t ∧ t ∈ l
[PROOFSTEP]
rcases h.1 with ⟨S, hSc, hSp, hS⟩
[GOAL]
case intro.intro.intro
α : Type u_1
β : Sort ?u.5043
l : Filter α
inst✝ : CountableInterFilter l
f g : α → β
p : Set α → Prop
s : Set α
h : HasCountableSeparatingOn α p s
hs : s ∈ l
hl : ∀ (U : Set α), p U → U ∈ l ∨ Uᶜ ∈ l
S : Set (Set α)
hSc : Set.Countable S
hSp : ∀ (s : Set α), s ∈ S → p s
hS : ∀ (x : α), x ∈ s → ∀ (y : α), y ∈ s → (∀ (s : Set α), s ∈ S → (x ∈ s ↔ y ∈ s)) → x = y
⊢ ∃ t, t ⊆ s ∧ Set.Subsingleton t ∧ t ∈ l
[PROOFSTEP]
refine ⟨s ∩ ⋂₀ (S ∩ l.sets) ∩ ⋂ (U ∈ S) (_ : Uᶜ ∈ l), Uᶜ, ?_, ?_, ?_⟩
[GOAL]
case intro.intro.intro.refine_1
α : Type u_1
β : Sort ?u.5043
l : Filter α
inst✝ : CountableInterFilter l
f g : α → β
p : Set α → Prop
s : Set α
h : HasCountableSeparatingOn α p s
hs : s ∈ l
hl : ∀ (U : Set α), p U → U ∈ l ∨ Uᶜ ∈ l
S : Set (Set α)
hSc : Set.Countable S
hSp : ∀ (s : Set α), s ∈ S → p s
hS : ∀ (x : α), x ∈ s → ∀ (y : α), y ∈ s → (∀ (s : Set α), s ∈ S → (x ∈ s ↔ y ∈ s)) → x = y
⊢ s ∩ ⋂₀ (S ∩ l.sets) ∩ ⋂ (U : Set α) (_ : U ∈ S) (_ : Uᶜ ∈ l), Uᶜ ⊆ s
[PROOFSTEP]
exact fun _ h ↦ h.1.1
[GOAL]
case intro.intro.intro.refine_2
α : Type u_1
β : Sort ?u.5043
l : Filter α
inst✝ : CountableInterFilter l
f g : α → β
p : Set α → Prop
s : Set α
h : HasCountableSeparatingOn α p s
hs : s ∈ l
hl : ∀ (U : Set α), p U → U ∈ l ∨ Uᶜ ∈ l
S : Set (Set α)
hSc : Set.Countable S
hSp : ∀ (s : Set α), s ∈ S → p s
hS : ∀ (x : α), x ∈ s → ∀ (y : α), y ∈ s → (∀ (s : Set α), s ∈ S → (x ∈ s ↔ y ∈ s)) → x = y
⊢ Set.Subsingleton (s ∩ ⋂₀ (S ∩ l.sets) ∩ ⋂ (U : Set α) (_ : U ∈ S) (_ : Uᶜ ∈ l), Uᶜ)
[PROOFSTEP]
intro x hx y hy
[GOAL]
case intro.intro.intro.refine_2
α : Type u_1
β : Sort ?u.5043
l : Filter α
inst✝ : CountableInterFilter l
f g : α → β
p : Set α → Prop
s : Set α
h : HasCountableSeparatingOn α p s
hs : s ∈ l
hl : ∀ (U : Set α), p U → U ∈ l ∨ Uᶜ ∈ l
S : Set (Set α)
hSc : Set.Countable S
hSp : ∀ (s : Set α), s ∈ S → p s
hS : ∀ (x : α), x ∈ s → ∀ (y : α), y ∈ s → (∀ (s : Set α), s ∈ S → (x ∈ s ↔ y ∈ s)) → x = y
x : α
hx : x ∈ s ∩ ⋂₀ (S ∩ l.sets) ∩ ⋂ (U : Set α) (_ : U ∈ S) (_ : Uᶜ ∈ l), Uᶜ
y : α
hy : y ∈ s ∩ ⋂₀ (S ∩ l.sets) ∩ ⋂ (U : Set α) (_ : U ∈ S) (_ : Uᶜ ∈ l), Uᶜ
⊢ x = y
[PROOFSTEP]
simp only [mem_sInter, mem_inter_iff, mem_iInter, mem_compl_iff] at hx hy
[GOAL]
case intro.intro.intro.refine_2
α : Type u_1
β : Sort ?u.5043
l : Filter α
inst✝ : CountableInterFilter l
f g : α → β
p : Set α → Prop
s : Set α
h : HasCountableSeparatingOn α p s
hs : s ∈ l
hl : ∀ (U : Set α), p U → U ∈ l ∨ Uᶜ ∈ l
S : Set (Set α)
hSc : Set.Countable S
hSp : ∀ (s : Set α), s ∈ S → p s
hS : ∀ (x : α), x ∈ s → ∀ (y : α), y ∈ s → (∀ (s : Set α), s ∈ S → (x ∈ s ↔ y ∈ s)) → x = y
x y : α
hx : (x ∈ s ∧ ∀ (t : Set α), t ∈ S ∧ t ∈ l.sets → x ∈ t) ∧ ∀ (i : Set α), i ∈ S → iᶜ ∈ l → ¬x ∈ i
hy : (y ∈ s ∧ ∀ (t : Set α), t ∈ S ∧ t ∈ l.sets → y ∈ t) ∧ ∀ (i : Set α), i ∈ S → iᶜ ∈ l → ¬y ∈ i
⊢ x = y
[PROOFSTEP]
refine hS x hx.1.1 y hy.1.1 (fun s hsS ↦ ?_)
[GOAL]
case intro.intro.intro.refine_2
α : Type u_1
β : Sort ?u.5043
l : Filter α
inst✝ : CountableInterFilter l
f g : α → β
p : Set α → Prop
s✝ : Set α
h : HasCountableSeparatingOn α p s✝
hs : s✝ ∈ l
hl : ∀ (U : Set α), p U → U ∈ l ∨ Uᶜ ∈ l
S : Set (Set α)
hSc : Set.Countable S
hSp : ∀ (s : Set α), s ∈ S → p s
hS : ∀ (x : α), x ∈ s✝ → ∀ (y : α), y ∈ s✝ → (∀ (s : Set α), s ∈ S → (x ∈ s ↔ y ∈ s)) → x = y
x y : α
hx : (x ∈ s✝ ∧ ∀ (t : Set α), t ∈ S ∧ t ∈ l.sets → x ∈ t) ∧ ∀ (i : Set α), i ∈ S → iᶜ ∈ l → ¬x ∈ i
hy : (y ∈ s✝ ∧ ∀ (t : Set α), t ∈ S ∧ t ∈ l.sets → y ∈ t) ∧ ∀ (i : Set α), i ∈ S → iᶜ ∈ l → ¬y ∈ i
s : Set α
hsS : s ∈ S
⊢ x ∈ s ↔ y ∈ s
[PROOFSTEP]
cases hl s (hSp s hsS) with
| inl hsl => simp only [hx.1.2 s ⟨hsS, hsl⟩, hy.1.2 s ⟨hsS, hsl⟩]
| inr hsl => simp only [hx.2 s hsS hsl, hy.2 s hsS hsl]
[GOAL]
case intro.intro.intro.refine_2
α : Type u_1
β : Sort ?u.5043
l : Filter α
inst✝ : CountableInterFilter l
f g : α → β
p : Set α → Prop
s✝ : Set α
h : HasCountableSeparatingOn α p s✝
hs : s✝ ∈ l
hl : ∀ (U : Set α), p U → U ∈ l ∨ Uᶜ ∈ l
S : Set (Set α)
hSc : Set.Countable S
hSp : ∀ (s : Set α), s ∈ S → p s
hS : ∀ (x : α), x ∈ s✝ → ∀ (y : α), y ∈ s✝ → (∀ (s : Set α), s ∈ S → (x ∈ s ↔ y ∈ s)) → x = y
x y : α
hx : (x ∈ s✝ ∧ ∀ (t : Set α), t ∈ S ∧ t ∈ l.sets → x ∈ t) ∧ ∀ (i : Set α), i ∈ S → iᶜ ∈ l → ¬x ∈ i
hy : (y ∈ s✝ ∧ ∀ (t : Set α), t ∈ S ∧ t ∈ l.sets → y ∈ t) ∧ ∀ (i : Set α), i ∈ S → iᶜ ∈ l → ¬y ∈ i
s : Set α
hsS : s ∈ S
x✝ : s ∈ l ∨ sᶜ ∈ l
⊢ x ∈ s ↔ y ∈ s
[PROOFSTEP]
cases hl s (hSp s hsS) with
| inl hsl => simp only [hx.1.2 s ⟨hsS, hsl⟩, hy.1.2 s ⟨hsS, hsl⟩]
| inr hsl => simp only [hx.2 s hsS hsl, hy.2 s hsS hsl]
[GOAL]
case intro.intro.intro.refine_2.inl
α : Type u_1
β : Sort ?u.5043
l : Filter α
inst✝ : CountableInterFilter l
f g : α → β
p : Set α → Prop
s✝ : Set α
h : HasCountableSeparatingOn α p s✝
hs : s✝ ∈ l
hl : ∀ (U : Set α), p U → U ∈ l ∨ Uᶜ ∈ l
S : Set (Set α)
hSc : Set.Countable S
hSp : ∀ (s : Set α), s ∈ S → p s
hS : ∀ (x : α), x ∈ s✝ → ∀ (y : α), y ∈ s✝ → (∀ (s : Set α), s ∈ S → (x ∈ s ↔ y ∈ s)) → x = y
x y : α
hx : (x ∈ s✝ ∧ ∀ (t : Set α), t ∈ S ∧ t ∈ l.sets → x ∈ t) ∧ ∀ (i : Set α), i ∈ S → iᶜ ∈ l → ¬x ∈ i
hy : (y ∈ s✝ ∧ ∀ (t : Set α), t ∈ S ∧ t ∈ l.sets → y ∈ t) ∧ ∀ (i : Set α), i ∈ S → iᶜ ∈ l → ¬y ∈ i
s : Set α
hsS : s ∈ S
hsl : s ∈ l
⊢ x ∈ s ↔ y ∈ s
[PROOFSTEP]

| inl hsl => simp only [hx.1.2 s ⟨hsS, hsl⟩, hy.1.2 s ⟨hsS, hsl⟩]
[GOAL]
case intro.intro.intro.refine_2.inl
α : Type u_1
β : Sort ?u.5043
l : Filter α
inst✝ : CountableInterFilter l
f g : α → β
p : Set α → Prop
s✝ : Set α
h : HasCountableSeparatingOn α p s✝
hs : s✝ ∈ l
hl : ∀ (U : Set α), p U → U ∈ l ∨ Uᶜ ∈ l
S : Set (Set α)
hSc : Set.Countable S
hSp : ∀ (s : Set α), s ∈ S → p s
hS : ∀ (x : α), x ∈ s✝ → ∀ (y : α), y ∈ s✝ → (∀ (s : Set α), s ∈ S → (x ∈ s ↔ y ∈ s)) → x = y
x y : α
hx : (x ∈ s✝ ∧ ∀ (t : Set α), t ∈ S ∧ t ∈ l.sets → x ∈ t) ∧ ∀ (i : Set α), i ∈ S → iᶜ ∈ l → ¬x ∈ i
hy : (y ∈ s✝ ∧ ∀ (t : Set α), t ∈ S ∧ t ∈ l.sets → y ∈ t) ∧ ∀ (i : Set α), i ∈ S → iᶜ ∈ l → ¬y ∈ i
s : Set α
hsS : s ∈ S
hsl : s ∈ l
⊢ x ∈ s ↔ y ∈ s
[PROOFSTEP]
simp only [hx.1.2 s ⟨hsS, hsl⟩, hy.1.2 s ⟨hsS, hsl⟩]
[GOAL]
case intro.intro.intro.refine_2.inr
α : Type u_1
β : Sort ?u.5043
l : Filter α
inst✝ : CountableInterFilter l
f g : α → β
p : Set α → Prop
s✝ : Set α
h : HasCountableSeparatingOn α p s✝
hs : s✝ ∈ l
hl : ∀ (U : Set α), p U → U ∈ l ∨ Uᶜ ∈ l
S : Set (Set α)
hSc : Set.Countable S
hSp : ∀ (s : Set α), s ∈ S → p s
hS : ∀ (x : α), x ∈ s✝ → ∀ (y : α), y ∈ s✝ → (∀ (s : Set α), s ∈ S → (x ∈ s ↔ y ∈ s)) → x = y
x y : α
hx : (x ∈ s✝ ∧ ∀ (t : Set α), t ∈ S ∧ t ∈ l.sets → x ∈ t) ∧ ∀ (i : Set α), i ∈ S → iᶜ ∈ l → ¬x ∈ i
hy : (y ∈ s✝ ∧ ∀ (t : Set α), t ∈ S ∧ t ∈ l.sets → y ∈ t) ∧ ∀ (i : Set α), i ∈ S → iᶜ ∈ l → ¬y ∈ i
s : Set α
hsS : s ∈ S
hsl : sᶜ ∈ l
⊢ x ∈ s ↔ y ∈ s
[PROOFSTEP]

| inr hsl => simp only [hx.2 s hsS hsl, hy.2 s hsS hsl]
[GOAL]
case intro.intro.intro.refine_2.inr
α : Type u_1
β : Sort ?u.5043
l : Filter α
inst✝ : CountableInterFilter l
f g : α → β
p : Set α → Prop
s✝ : Set α
h : HasCountableSeparatingOn α p s✝
hs : s✝ ∈ l
hl : ∀ (U : Set α), p U → U ∈ l ∨ Uᶜ ∈ l
S : Set (Set α)
hSc : Set.Countable S
hSp : ∀ (s : Set α), s ∈ S → p s
hS : ∀ (x : α), x ∈ s✝ → ∀ (y : α), y ∈ s✝ → (∀ (s : Set α), s ∈ S → (x ∈ s ↔ y ∈ s)) → x = y
x y : α
hx : (x ∈ s✝ ∧ ∀ (t : Set α), t ∈ S ∧ t ∈ l.sets → x ∈ t) ∧ ∀ (i : Set α), i ∈ S → iᶜ ∈ l → ¬x ∈ i
hy : (y ∈ s✝ ∧ ∀ (t : Set α), t ∈ S ∧ t ∈ l.sets → y ∈ t) ∧ ∀ (i : Set α), i ∈ S → iᶜ ∈ l → ¬y ∈ i
s : Set α
hsS : s ∈ S
hsl : sᶜ ∈ l
⊢ x ∈ s ↔ y ∈ s
[PROOFSTEP]
simp only [hx.2 s hsS hsl, hy.2 s hsS hsl]
[GOAL]
case intro.intro.intro.refine_3
α : Type u_1
β : Sort ?u.5043
l : Filter α
inst✝ : CountableInterFilter l
f g : α → β
p : Set α → Prop
s : Set α
h : HasCountableSeparatingOn α p s
hs : s ∈ l
hl : ∀ (U : Set α), p U → U ∈ l ∨ Uᶜ ∈ l
S : Set (Set α)
hSc : Set.Countable S
hSp : ∀ (s : Set α), s ∈ S → p s
hS : ∀ (x : α), x ∈ s → ∀ (y : α), y ∈ s → (∀ (s : Set α), s ∈ S → (x ∈ s ↔ y ∈ s)) → x = y
⊢ s ∩ ⋂₀ (S ∩ l.sets) ∩ ⋂ (U : Set α) (_ : U ∈ S) (_ : Uᶜ ∈ l), Uᶜ ∈ l
[PROOFSTEP]
exact
  inter_mem (inter_mem hs ((countable_sInter_mem (hSc.mono (inter_subset_left _ _))).2 fun _ h ↦ h.2))
    ((countable_bInter_mem hSc).2 fun U hU ↦ iInter_mem.2 id)
[GOAL]
α : Type u_1
β : Sort ?u.6801
l : Filter α
inst✝¹ : CountableInterFilter l
f g : α → β
p : Set α → Prop
s : Set α
inst✝ : HasCountableSeparatingOn α p s
hs : s ∈ l
hne : Set.Nonempty s
hl : ∀ (U : Set α), p U → U ∈ l ∨ Uᶜ ∈ l
⊢ ∃ a, a ∈ s ∧ {a} ∈ l
[PROOFSTEP]
rcases exists_subset_subsingleton_mem_of_forall_separating p hs hl with ⟨t, hts, ht, htl⟩
[GOAL]
case intro.intro.intro
α : Type u_1
β : Sort ?u.6801
l : Filter α
inst✝¹ : CountableInterFilter l
f g : α → β
p : Set α → Prop
s : Set α
inst✝ : HasCountableSeparatingOn α p s
hs : s ∈ l
hne : Set.Nonempty s
hl : ∀ (U : Set α), p U → U ∈ l ∨ Uᶜ ∈ l
t : Set α
hts : t ⊆ s
ht : Set.Subsingleton t
htl : t ∈ l
⊢ ∃ a, a ∈ s ∧ {a} ∈ l
[PROOFSTEP]
rcases ht.eq_empty_or_singleton with rfl | ⟨x, rfl⟩
[GOAL]
case intro.intro.intro.inl
α : Type u_1
β : Sort ?u.6801
l : Filter α
inst✝¹ : CountableInterFilter l
f g : α → β
p : Set α → Prop
s : Set α
inst✝ : HasCountableSeparatingOn α p s
hs : s ∈ l
hne : Set.Nonempty s
hl : ∀ (U : Set α), p U → U ∈ l ∨ Uᶜ ∈ l
hts : ∅ ⊆ s
ht : Set.Subsingleton ∅
htl : ∅ ∈ l
⊢ ∃ a, a ∈ s ∧ {a} ∈ l
[PROOFSTEP]
exact hne.imp fun a ha ↦ ⟨ha, mem_of_superset htl (empty_subset _)⟩
[GOAL]
case intro.intro.intro.inr.intro
α : Type u_1
β : Sort ?u.6801
l : Filter α
inst✝¹ : CountableInterFilter l
f g : α → β
p : Set α → Prop
s : Set α
inst✝ : HasCountableSeparatingOn α p s
hs : s ∈ l
hne : Set.Nonempty s
hl : ∀ (U : Set α), p U → U ∈ l ∨ Uᶜ ∈ l
x : α
hts : {x} ⊆ s
ht : Set.Subsingleton {x}
htl : {x} ∈ l
⊢ ∃ a, a ∈ s ∧ {a} ∈ l
[PROOFSTEP]
exact ⟨x, hts rfl, htl⟩
[GOAL]
α : Type u_1
β : Sort ?u.7319
l : Filter α
inst✝² : CountableInterFilter l
f g : α → β
inst✝¹ : Nonempty α
p : Set α → Prop
s : Set α
inst✝ : HasCountableSeparatingOn α p s
hs : s ∈ l
hl : ∀ (U : Set α), p U → U ∈ l ∨ Uᶜ ∈ l
⊢ ∃ a, {a} ∈ l
[PROOFSTEP]
rcases s.eq_empty_or_nonempty with rfl | hne
[GOAL]
case inl
α : Type u_1
β : Sort ?u.7319
l : Filter α
inst✝² : CountableInterFilter l
f g : α → β
inst✝¹ : Nonempty α
p : Set α → Prop
hl : ∀ (U : Set α), p U → U ∈ l ∨ Uᶜ ∈ l
inst✝ : HasCountableSeparatingOn α p ∅
hs : ∅ ∈ l
⊢ ∃ a, {a} ∈ l
[PROOFSTEP]
exact ‹Nonempty α›.elim fun a ↦ ⟨a, mem_of_superset hs (empty_subset _)⟩
[GOAL]
case inr
α : Type u_1
β : Sort ?u.7319
l : Filter α
inst✝² : CountableInterFilter l
f g : α → β
inst✝¹ : Nonempty α
p : Set α → Prop
s : Set α
inst✝ : HasCountableSeparatingOn α p s
hs : s ∈ l
hl : ∀ (U : Set α), p U → U ∈ l ∨ Uᶜ ∈ l
hne : Set.Nonempty s
⊢ ∃ a, {a} ∈ l
[PROOFSTEP]
exact (exists_mem_singleton_mem_of_mem_of_nonempty_of_forall_separating p hs hne hl).imp fun _ ↦ And.right
[GOAL]
α : Type u_2
β : Type u_1
l : Filter α
inst✝ : CountableInterFilter l
f g : α → β
p : Set β → Prop
s : Set β
h' : HasCountableSeparatingOn β p s
hf : ∀ᶠ (x : α) in l, f x ∈ s
hg : ∀ᶠ (x : α) in l, g x ∈ s
h : ∀ (U : Set β), p U → ∀ᶠ (x : α) in l, f x ∈ U ↔ g x ∈ U
⊢ f =ᶠ[l] g
[PROOFSTEP]
rcases h'.1 with ⟨S, hSc, hSp, hS⟩
[GOAL]
case intro.intro.intro
α : Type u_2
β : Type u_1
l : Filter α
inst✝ : CountableInterFilter l
f g : α → β
p : Set β → Prop
s : Set β
h' : HasCountableSeparatingOn β p s
hf : ∀ᶠ (x : α) in l, f x ∈ s
hg : ∀ᶠ (x : α) in l, g x ∈ s
h : ∀ (U : Set β), p U → ∀ᶠ (x : α) in l, f x ∈ U ↔ g x ∈ U
S : Set (Set β)
hSc : Set.Countable S
hSp : ∀ (s : Set β), s ∈ S → p s
hS : ∀ (x : β), x ∈ s → ∀ (y : β), y ∈ s → (∀ (s : Set β), s ∈ S → (x ∈ s ↔ y ∈ s)) → x = y
⊢ f =ᶠ[l] g
[PROOFSTEP]
have H : ∀ᶠ x in l, ∀ s ∈ S, f x ∈ s ↔ g x ∈ s := (eventually_countable_ball hSc).2 fun s hs ↦ (h _ (hSp _ hs))
[GOAL]
case intro.intro.intro
α : Type u_2
β : Type u_1
l : Filter α
inst✝ : CountableInterFilter l
f g : α → β
p : Set β → Prop
s : Set β
h' : HasCountableSeparatingOn β p s
hf : ∀ᶠ (x : α) in l, f x ∈ s
hg : ∀ᶠ (x : α) in l, g x ∈ s
h : ∀ (U : Set β), p U → ∀ᶠ (x : α) in l, f x ∈ U ↔ g x ∈ U
S : Set (Set β)
hSc : Set.Countable S
hSp : ∀ (s : Set β), s ∈ S → p s
hS : ∀ (x : β), x ∈ s → ∀ (y : β), y ∈ s → (∀ (s : Set β), s ∈ S → (x ∈ s ↔ y ∈ s)) → x = y
H : ∀ᶠ (x : α) in l, ∀ (s : Set β), s ∈ S → (f x ∈ s ↔ g x ∈ s)
⊢ f =ᶠ[l] g
[PROOFSTEP]
filter_upwards [H, hf, hg] with x hx hxf hxg using hS _ hxf _ hxg hx