[GOAL]
M : Type u_1
inst✝¹ : Mul M
M' : Type u_2
inst✝ : Mul M'
⊢ commProb (M × M') = commProb M * commProb M'
[PROOFSTEP]
simp_rw [commProb_def, div_mul_div_comm, Nat.card_prod, Nat.cast_mul, mul_pow, ← Nat.cast_mul, ← Nat.card_prod, Commute,
  SemiconjBy, Prod.ext_iff]
[GOAL]
M : Type u_1
inst✝¹ : Mul M
M' : Type u_2
inst✝ : Mul M'
⊢ ↑(Nat.card { p // (p.fst * p.snd).fst = (p.snd * p.fst).fst ∧ (p.fst * p.snd).snd = (p.snd * p.fst).snd }) /
      (↑(Nat.card M) ^ 2 * ↑(Nat.card M') ^ 2) =
    ↑(Nat.card ({ p // p.fst * p.snd = p.snd * p.fst } × { p // p.fst * p.snd = p.snd * p.fst })) /
      (↑(Nat.card M) ^ 2 * ↑(Nat.card M') ^ 2)
[PROOFSTEP]
congr 2
[GOAL]
case e_a.e_a
M : Type u_1
inst✝¹ : Mul M
M' : Type u_2
inst✝ : Mul M'
⊢ Nat.card { p // (p.fst * p.snd).fst = (p.snd * p.fst).fst ∧ (p.fst * p.snd).snd = (p.snd * p.fst).snd } =
    Nat.card ({ p // p.fst * p.snd = p.snd * p.fst } × { p // p.fst * p.snd = p.snd * p.fst })
[PROOFSTEP]
exact
  Nat.card_congr
    ⟨fun x => ⟨⟨⟨x.1.1.1, x.1.2.1⟩, x.2.1⟩, ⟨⟨x.1.1.2, x.1.2.2⟩, x.2.2⟩⟩, fun x =>
      ⟨⟨⟨x.1.1.1, x.2.1.1⟩, ⟨x.1.1.2, x.2.1.2⟩⟩, ⟨x.1.2, x.2.2⟩⟩, fun x => rfl, fun x => rfl⟩
[GOAL]
M : Type u_1
inst✝² : Mul M
α : Type u_3
i : α → Type u_2
inst✝¹ : Fintype α
inst✝ : (a : α) → Mul (i a)
⊢ commProb ((a : α) → i a) = ∏ a : α, commProb (i a)
[PROOFSTEP]
simp_rw [commProb_def, Finset.prod_div_distrib, Finset.prod_pow, ← Nat.cast_prod, ← Nat.card_pi, Commute, SemiconjBy,
  Function.funext_iff]
[GOAL]
M : Type u_1
inst✝² : Mul M
α : Type u_3
i : α → Type u_2
inst✝¹ : Fintype α
inst✝ : (a : α) → Mul (i a)
⊢ ↑(Nat.card { p // ∀ (a : α), (p.fst * p.snd) a = (p.snd * p.fst) a }) / ↑(Nat.card ((a : α) → i a)) ^ 2 =
    ↑(Nat.card ((a : α) → { p // p.fst * p.snd = p.snd * p.fst })) / ↑(Nat.card ((a : α) → i a)) ^ 2
[PROOFSTEP]
congr 2
[GOAL]
case e_a.e_a
M : Type u_1
inst✝² : Mul M
α : Type u_3
i : α → Type u_2
inst✝¹ : Fintype α
inst✝ : (a : α) → Mul (i a)
⊢ Nat.card { p // ∀ (a : α), (p.fst * p.snd) a = (p.snd * p.fst) a } =
    Nat.card ((a : α) → { p // p.fst * p.snd = p.snd * p.fst })
[PROOFSTEP]
exact
  Nat.card_congr
    ⟨fun x a => ⟨⟨x.1.1 a, x.1.2 a⟩, x.2 a⟩, fun x => ⟨⟨fun a => (x a).1.1, fun a => (x a).1.2⟩, fun a => (x a).2⟩,
      fun x => rfl, fun x => rfl⟩
[GOAL]
M : Type u_1
inst✝² : Mul M
α : Type u_2
β : Type u_3
inst✝¹ : Fintype α
inst✝ : Mul β
⊢ commProb (α → β) = commProb β ^ card α
[PROOFSTEP]
rw [commProb_pi, Finset.prod_const, Finset.card_univ]
[GOAL]
M : Type u_1
inst✝¹ : Mul M
inst✝ : Finite M
⊢ commProb M ≤ 1
[PROOFSTEP]
refine' div_le_one_of_le _ (sq_nonneg (Nat.card M : ℚ))
[GOAL]
M : Type u_1
inst✝¹ : Mul M
inst✝ : Finite M
⊢ ↑(Nat.card { p // Commute p.fst p.snd }) ≤ ↑(Nat.card M) ^ 2
[PROOFSTEP]
rw [← Nat.cast_pow, Nat.cast_le, sq, ← Nat.card_prod]
[GOAL]
M : Type u_1
inst✝¹ : Mul M
inst✝ : Finite M
⊢ Nat.card { p // Commute p.fst p.snd } ≤ Nat.card (M × M)
[PROOFSTEP]
apply Finite.card_subtype_le
[GOAL]
M : Type u_1
inst✝¹ : Mul M
inst✝ : Finite M
h : Nonempty M
⊢ commProb M = 1 ↔ Commutative fun x x_1 => x * x_1
[PROOFSTEP]
haveI := Fintype.ofFinite M
[GOAL]
M : Type u_1
inst✝¹ : Mul M
inst✝ : Finite M
h : Nonempty M
this : Fintype M
⊢ commProb M = 1 ↔ Commutative fun x x_1 => x * x_1
[PROOFSTEP]
rw [commProb, ← Set.coe_setOf, Nat.card_eq_fintype_card, Nat.card_eq_fintype_card]
[GOAL]
M : Type u_1
inst✝¹ : Mul M
inst✝ : Finite M
h : Nonempty M
this : Fintype M
⊢ ↑(card ↑{x | Commute x.fst x.snd}) / ↑(card M) ^ 2 = 1 ↔ Commutative fun x x_1 => x * x_1
[PROOFSTEP]
rw [div_eq_one_iff_eq, ← Nat.cast_pow, Nat.cast_inj, sq, ← card_prod, set_fintype_card_eq_univ_iff,
  Set.eq_univ_iff_forall]
[GOAL]
M : Type u_1
inst✝¹ : Mul M
inst✝ : Finite M
h : Nonempty M
this : Fintype M
⊢ (∀ (x : M × M), x ∈ {x | Commute x.fst x.snd}) ↔ Commutative fun x x_1 => x * x_1
[PROOFSTEP]
exact ⟨fun h x y ↦ h (x, y), fun h x ↦ h x.1 x.2⟩
[GOAL]
M : Type u_1
inst✝¹ : Mul M
inst✝ : Finite M
h : Nonempty M
this : Fintype M
⊢ ↑(card M) ^ 2 ≠ 0
[PROOFSTEP]
exact pow_ne_zero 2 (Nat.cast_ne_zero.mpr card_ne_zero)
[GOAL]
M : Type u_1
inst✝² : Mul M
inst✝¹ : Finite M
G : Type u_2
inst✝ : Group G
⊢ commProb G = ↑(Nat.card (ConjClasses G)) / ↑(Nat.card G)
[PROOFSTEP]
rw [commProb, card_comm_eq_card_conjClasses_mul_card, Nat.cast_mul, sq]
[GOAL]
M : Type u_1
inst✝² : Mul M
inst✝¹ : Finite M
G : Type u_2
inst✝ : Group G
⊢ ↑(Nat.card (ConjClasses G)) * ↑(Nat.card G) / (↑(Nat.card G) * ↑(Nat.card G)) =
    ↑(Nat.card (ConjClasses G)) / ↑(Nat.card G)
[PROOFSTEP]
by_cases h : (Nat.card G : ℚ) = 0
[GOAL]
case pos
M : Type u_1
inst✝² : Mul M
inst✝¹ : Finite M
G : Type u_2
inst✝ : Group G
h : ↑(Nat.card G) = 0
⊢ ↑(Nat.card (ConjClasses G)) * ↑(Nat.card G) / (↑(Nat.card G) * ↑(Nat.card G)) =
    ↑(Nat.card (ConjClasses G)) / ↑(Nat.card G)
[PROOFSTEP]
rw [h, zero_mul, div_zero, div_zero]
[GOAL]
case neg
M : Type u_1
inst✝² : Mul M
inst✝¹ : Finite M
G : Type u_2
inst✝ : Group G
h : ¬↑(Nat.card G) = 0
⊢ ↑(Nat.card (ConjClasses G)) * ↑(Nat.card G) / (↑(Nat.card G) * ↑(Nat.card G)) =
    ↑(Nat.card (ConjClasses G)) / ↑(Nat.card G)
[PROOFSTEP]
exact mul_div_mul_right _ _ h
[GOAL]
M : Type u_1
inst✝³ : Mul M
inst✝² : Finite M
G : Type u_2
inst✝¹ : Group G
inst✝ : Finite G
H : Subgroup G
⊢ commProb { x // x ∈ H } ≤ commProb G * ↑(index H) ^ 2
[PROOFSTEP]
rw [commProb_def, commProb_def, div_le_iff, mul_assoc, ← mul_pow, ← Nat.cast_mul, mul_comm H.index, H.card_mul_index,
  div_mul_cancel, Nat.cast_le]
[GOAL]
M : Type u_1
inst✝³ : Mul M
inst✝² : Finite M
G : Type u_2
inst✝¹ : Group G
inst✝ : Finite G
H : Subgroup G
⊢ Nat.card { p // Commute p.fst p.snd } ≤ Nat.card { p // Commute p.fst p.snd }
[PROOFSTEP]
refine' Finite.card_le_of_injective (fun p ↦ ⟨⟨p.1.1, p.1.2⟩, Subtype.ext_iff.mp p.2⟩) _
[GOAL]
M : Type u_1
inst✝³ : Mul M
inst✝² : Finite M
G : Type u_2
inst✝¹ : Group G
inst✝ : Finite G
H : Subgroup G
⊢ Function.Injective fun p =>
    { val := (↑(↑p).fst, ↑(↑p).snd), property := (_ : ↑((↑p).fst * (↑p).snd) = ↑((↑p).snd * (↑p).fst)) }
[PROOFSTEP]
exact fun p q h ↦ by simpa only [Subtype.ext_iff, Prod.ext_iff] using h
[GOAL]
M : Type u_1
inst✝³ : Mul M
inst✝² : Finite M
G : Type u_2
inst✝¹ : Group G
inst✝ : Finite G
H : Subgroup G
p q : { p // Commute p.fst p.snd }
h :
  (fun p => { val := (↑(↑p).fst, ↑(↑p).snd), property := (_ : ↑((↑p).fst * (↑p).snd) = ↑((↑p).snd * (↑p).fst)) }) p =
    (fun p => { val := (↑(↑p).fst, ↑(↑p).snd), property := (_ : ↑((↑p).fst * (↑p).snd) = ↑((↑p).snd * (↑p).fst)) }) q
⊢ p = q
[PROOFSTEP]
simpa only [Subtype.ext_iff, Prod.ext_iff] using h
[GOAL]
case h
M : Type u_1
inst✝³ : Mul M
inst✝² : Finite M
G : Type u_2
inst✝¹ : Group G
inst✝ : Finite G
H : Subgroup G
⊢ ↑(Nat.card G) ^ 2 ≠ 0
[PROOFSTEP]
exact pow_ne_zero 2 (Nat.cast_ne_zero.mpr Finite.card_pos.ne')
[GOAL]
M : Type u_1
inst✝³ : Mul M
inst✝² : Finite M
G : Type u_2
inst✝¹ : Group G
inst✝ : Finite G
H : Subgroup G
⊢ 0 < ↑(Nat.card { x // x ∈ H }) ^ 2
[PROOFSTEP]
exact pow_pos (Nat.cast_pos.mpr Finite.card_pos) 2
[GOAL]
M : Type u_1
inst✝⁴ : Mul M
inst✝³ : Finite M
G : Type u_2
inst✝² : Group G
inst✝¹ : Finite G
H : Subgroup G
inst✝ : Normal H
⊢ commProb (G ⧸ H) ≤ commProb G * ↑(Nat.card { x // x ∈ H })
[PROOFSTEP]
rw [commProb_def', commProb_def', div_le_iff, mul_assoc, ← Nat.cast_mul, ← Subgroup.index, H.card_mul_index,
  div_mul_cancel, Nat.cast_le]
[GOAL]
M : Type u_1
inst✝⁴ : Mul M
inst✝³ : Finite M
G : Type u_2
inst✝² : Group G
inst✝¹ : Finite G
H : Subgroup G
inst✝ : Normal H
⊢ Nat.card (ConjClasses (G ⧸ H)) ≤ Nat.card (ConjClasses G)
[PROOFSTEP]
apply Finite.card_le_of_surjective
[GOAL]
case hf
M : Type u_1
inst✝⁴ : Mul M
inst✝³ : Finite M
G : Type u_2
inst✝² : Group G
inst✝¹ : Finite G
H : Subgroup G
inst✝ : Normal H
⊢ Function.Surjective ?f
case f
M : Type u_1
inst✝⁴ : Mul M
inst✝³ : Finite M
G : Type u_2
inst✝² : Group G
inst✝¹ : Finite G
H : Subgroup G
inst✝ : Normal H
⊢ ConjClasses G → ConjClasses (G ⧸ H)
[PROOFSTEP]
show Function.Surjective (ConjClasses.map (QuotientGroup.mk' H))
[GOAL]
case hf
M : Type u_1
inst✝⁴ : Mul M
inst✝³ : Finite M
G : Type u_2
inst✝² : Group G
inst✝¹ : Finite G
H : Subgroup G
inst✝ : Normal H
⊢ Function.Surjective (ConjClasses.map (QuotientGroup.mk' H))
[PROOFSTEP]
exact ConjClasses.map_surjective Quotient.surjective_Quotient_mk''
[GOAL]
case h
M : Type u_1
inst✝⁴ : Mul M
inst✝³ : Finite M
G : Type u_2
inst✝² : Group G
inst✝¹ : Finite G
H : Subgroup G
inst✝ : Normal H
⊢ ↑(Nat.card G) ≠ 0
[PROOFSTEP]
exact Nat.cast_ne_zero.mpr Finite.card_pos.ne'
[GOAL]
M : Type u_1
inst✝⁴ : Mul M
inst✝³ : Finite M
G : Type u_2
inst✝² : Group G
inst✝¹ : Finite G
H : Subgroup G
inst✝ : Normal H
⊢ 0 < ↑(Nat.card (G ⧸ H))
[PROOFSTEP]
exact Nat.cast_pos.mpr Finite.card_pos


[GOAL]
Ω : Type u_1
inst✝ : MeasurableSpace Ω
μ : FiniteMeasure Ω
s₁ s₂ : Set Ω
h : s₁ ⊆ s₂
⊢ (fun s => ENNReal.toNNReal (↑↑↑μ s)) s₁ ≤ (fun s => ENNReal.toNNReal (↑↑↑μ s)) s₂
[PROOFSTEP]
change ((μ : Measure Ω) s₁).toNNReal ≤ ((μ : Measure Ω) s₂).toNNReal
[GOAL]
Ω : Type u_1
inst✝ : MeasurableSpace Ω
μ : FiniteMeasure Ω
s₁ s₂ : Set Ω
h : s₁ ⊆ s₂
⊢ ENNReal.toNNReal (↑↑↑μ s₁) ≤ ENNReal.toNNReal (↑↑↑μ s₂)
[PROOFSTEP]
have key : (μ : Measure Ω) s₁ ≤ (μ : Measure Ω) s₂ := (μ : Measure Ω).mono h
[GOAL]
Ω : Type u_1
inst✝ : MeasurableSpace Ω
μ : FiniteMeasure Ω
s₁ s₂ : Set Ω
h : s₁ ⊆ s₂
key : ↑↑↑μ s₁ ≤ ↑↑↑μ s₂
⊢ ENNReal.toNNReal (↑↑↑μ s₁) ≤ ENNReal.toNNReal (↑↑↑μ s₂)
[PROOFSTEP]
apply (ENNReal.toNNReal_le_toNNReal (measure_ne_top _ s₁) (measure_ne_top _ s₂)).mpr key
[GOAL]
Ω : Type u_1
inst✝ : MeasurableSpace Ω
μ : FiniteMeasure Ω
⊢ mass μ = 0 ↔ μ = 0
[PROOFSTEP]
refine' ⟨fun μ_mass => _, fun hμ => by simp only [hμ, zero_mass]⟩
[GOAL]
Ω : Type u_1
inst✝ : MeasurableSpace Ω
μ : FiniteMeasure Ω
hμ : μ = 0
⊢ mass μ = 0
[PROOFSTEP]
simp only [hμ, zero_mass]
[GOAL]
Ω : Type u_1
inst✝ : MeasurableSpace Ω
μ : FiniteMeasure Ω
μ_mass : mass μ = 0
⊢ μ = 0
[PROOFSTEP]
apply toMeasure_injective
[GOAL]
case a
Ω : Type u_1
inst✝ : MeasurableSpace Ω
μ : FiniteMeasure Ω
μ_mass : mass μ = 0
⊢ ↑μ = ↑0
[PROOFSTEP]
apply Measure.measure_univ_eq_zero.mp
[GOAL]
case a
Ω : Type u_1
inst✝ : MeasurableSpace Ω
μ : FiniteMeasure Ω
μ_mass : mass μ = 0
⊢ ↑↑↑μ univ = 0
[PROOFSTEP]
rwa [← ennreal_mass, ENNReal.coe_eq_zero]
[GOAL]
Ω : Type u_1
inst✝ : MeasurableSpace Ω
μ : FiniteMeasure Ω
⊢ mass μ ≠ 0 ↔ μ ≠ 0
[PROOFSTEP]
rw [not_iff_not]
[GOAL]
Ω : Type u_1
inst✝ : MeasurableSpace Ω
μ : FiniteMeasure Ω
⊢ mass μ = 0 ↔ μ = 0
[PROOFSTEP]
exact FiniteMeasure.mass_zero_iff μ
[GOAL]
Ω : Type u_1
inst✝ : MeasurableSpace Ω
μ ν : FiniteMeasure Ω
h : ∀ (s : Set Ω), MeasurableSet s → ↑↑↑μ s = ↑↑↑ν s
⊢ μ = ν
[PROOFSTEP]
apply Subtype.ext
[GOAL]
case a
Ω : Type u_1
inst✝ : MeasurableSpace Ω
μ ν : FiniteMeasure Ω
h : ∀ (s : Set Ω), MeasurableSet s → ↑↑↑μ s = ↑↑↑ν s
⊢ ↑μ = ↑ν
[PROOFSTEP]
ext1 s s_mble
[GOAL]
case a.h
Ω : Type u_1
inst✝ : MeasurableSpace Ω
μ ν : FiniteMeasure Ω
h : ∀ (s : Set Ω), MeasurableSet s → ↑↑↑μ s = ↑↑↑ν s
s : Set Ω
s_mble : MeasurableSet s
⊢ ↑↑↑μ s = ↑↑↑ν s
[PROOFSTEP]
exact h s s_mble
[GOAL]
Ω : Type u_1
inst✝ : MeasurableSpace Ω
μ ν : FiniteMeasure Ω
h : ∀ (s : Set Ω), MeasurableSet s → (fun s => ENNReal.toNNReal (↑↑↑μ s)) s = (fun s => ENNReal.toNNReal (↑↑↑ν s)) s
⊢ μ = ν
[PROOFSTEP]
ext1 s s_mble
[GOAL]
case h
Ω : Type u_1
inst✝ : MeasurableSpace Ω
μ ν : FiniteMeasure Ω
h : ∀ (s : Set Ω), MeasurableSet s → (fun s => ENNReal.toNNReal (↑↑↑μ s)) s = (fun s => ENNReal.toNNReal (↑↑↑ν s)) s
s : Set Ω
s_mble : MeasurableSet s
⊢ ↑↑↑μ s = ↑↑↑ν s
[PROOFSTEP]
simpa [ennreal_coeFn_eq_coeFn_toMeasure] using congr_arg ((↑) : ℝ≥0 → ℝ≥0∞) (h s s_mble)
[GOAL]
Ω : Type u_1
inst✝⁴ : MeasurableSpace Ω
R : Type u_2
inst✝³ : SMul R ℝ≥0
inst✝² : SMul R ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
⊢ (fun s => ENNReal.toNNReal (↑↑↑0 s)) = 0
[PROOFSTEP]
funext
[GOAL]
case h
Ω : Type u_1
inst✝⁴ : MeasurableSpace Ω
R : Type u_2
inst✝³ : SMul R ℝ≥0
inst✝² : SMul R ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
x✝ : Set Ω
⊢ ENNReal.toNNReal (↑↑↑0 x✝) = OfNat.ofNat 0 x✝
[PROOFSTEP]
rfl
[GOAL]
Ω : Type u_1
inst✝⁴ : MeasurableSpace Ω
R : Type u_2
inst✝³ : SMul R ℝ≥0
inst✝² : SMul R ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
μ ν : FiniteMeasure Ω
⊢ (fun s => ENNReal.toNNReal (↑↑↑(μ + ν) s)) = (fun s => ENNReal.toNNReal (↑↑↑μ s)) + fun s => ENNReal.toNNReal (↑↑↑ν s)
[PROOFSTEP]
funext
[GOAL]
case h
Ω : Type u_1
inst✝⁴ : MeasurableSpace Ω
R : Type u_2
inst✝³ : SMul R ℝ≥0
inst✝² : SMul R ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
μ ν : FiniteMeasure Ω
x✝ : Set Ω
⊢ ENNReal.toNNReal (↑↑↑(μ + ν) x✝) = ((fun s => ENNReal.toNNReal (↑↑↑μ s)) + fun s => ENNReal.toNNReal (↑↑↑ν s)) x✝
[PROOFSTEP]
simp [← ENNReal.coe_eq_coe]
[GOAL]
case h
Ω : Type u_1
inst✝⁴ : MeasurableSpace Ω
R : Type u_2
inst✝³ : SMul R ℝ≥0
inst✝² : SMul R ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
μ ν : FiniteMeasure Ω
x✝ : Set Ω
⊢ ↑↑↑(μ + ν) x✝ = ↑↑↑μ x✝ + ↑↑↑ν x✝
[PROOFSTEP]
norm_cast
[GOAL]
Ω : Type u_1
inst✝⁵ : MeasurableSpace Ω
R : Type u_2
inst✝⁴ : SMul R ℝ≥0
inst✝³ : SMul R ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝ : IsScalarTower R ℝ≥0 ℝ≥0
c : R
μ : FiniteMeasure Ω
⊢ (fun s => ENNReal.toNNReal (↑↑↑(c • μ) s)) = c • fun s => ENNReal.toNNReal (↑↑↑μ s)
[PROOFSTEP]
funext
[GOAL]
case h
Ω : Type u_1
inst✝⁵ : MeasurableSpace Ω
R : Type u_2
inst✝⁴ : SMul R ℝ≥0
inst✝³ : SMul R ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝ : IsScalarTower R ℝ≥0 ℝ≥0
c : R
μ : FiniteMeasure Ω
x✝ : Set Ω
⊢ ENNReal.toNNReal (↑↑↑(c • μ) x✝) = (c • fun s => ENNReal.toNNReal (↑↑↑μ s)) x✝
[PROOFSTEP]
simp [← ENNReal.coe_eq_coe, ENNReal.coe_smul]
[GOAL]
case h
Ω : Type u_1
inst✝⁵ : MeasurableSpace Ω
R : Type u_2
inst✝⁴ : SMul R ℝ≥0
inst✝³ : SMul R ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝ : IsScalarTower R ℝ≥0 ℝ≥0
c : R
μ : FiniteMeasure Ω
x✝ : Set Ω
⊢ ↑↑↑(c • μ) x✝ = c • ↑↑↑μ x✝
[PROOFSTEP]
norm_cast
[GOAL]
Ω : Type u_1
inst✝⁵ : MeasurableSpace Ω
R : Type u_2
inst✝⁴ : SMul R ℝ≥0
inst✝³ : SMul R ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝ : IsScalarTower R ℝ≥0 ℝ≥0
c : R
μ : FiniteMeasure Ω
s : Set Ω
⊢ (fun s => ENNReal.toNNReal (↑↑↑(c • μ) s)) s = c • (fun s => ENNReal.toNNReal (↑↑↑μ s)) s
[PROOFSTEP]
rw [coeFn_smul, Pi.smul_apply]
  -- porting note: why doesn't `simp only` work in place of `rw` here?
[GOAL]
Ω : Type u_1
inst✝⁴ : MeasurableSpace Ω
R : Type u_2
inst✝³ : SMul R ℝ≥0
inst✝² : SMul R ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
μ : FiniteMeasure Ω
A s : Set Ω
s_mble : MeasurableSet s
⊢ (fun s => ENNReal.toNNReal (↑↑↑(restrict μ A) s)) s = (fun s => ENNReal.toNNReal (↑↑↑μ s)) (s ∩ A)
[PROOFSTEP]
apply congr_arg ENNReal.toNNReal
[GOAL]
Ω : Type u_1
inst✝⁴ : MeasurableSpace Ω
R : Type u_2
inst✝³ : SMul R ℝ≥0
inst✝² : SMul R ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
μ : FiniteMeasure Ω
A s : Set Ω
s_mble : MeasurableSet s
⊢ ↑↑↑(restrict μ A) s = ↑↑↑μ (s ∩ A)
[PROOFSTEP]
exact Measure.restrict_apply s_mble
[GOAL]
Ω : Type u_1
inst✝⁴ : MeasurableSpace Ω
R : Type u_2
inst✝³ : SMul R ℝ≥0
inst✝² : SMul R ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
μ : FiniteMeasure Ω
A : Set Ω
⊢ mass (restrict μ A) = (fun s => ENNReal.toNNReal (↑↑↑μ s)) A
[PROOFSTEP]
simp only [mass, restrict_apply μ A MeasurableSet.univ, univ_inter]
[GOAL]
Ω : Type u_1
inst✝⁴ : MeasurableSpace Ω
R : Type u_2
inst✝³ : SMul R ℝ≥0
inst✝² : SMul R ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
μ : FiniteMeasure Ω
A : Set Ω
⊢ restrict μ A = 0 ↔ (fun s => ENNReal.toNNReal (↑↑↑μ s)) A = 0
[PROOFSTEP]
rw [← mass_zero_iff, restrict_mass]
[GOAL]
Ω : Type u_1
inst✝⁴ : MeasurableSpace Ω
R : Type u_2
inst✝³ : SMul R ℝ≥0
inst✝² : SMul R ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
μ : FiniteMeasure Ω
A : Set Ω
⊢ restrict μ A ≠ 0 ↔ (fun s => ENNReal.toNNReal (↑↑↑μ s)) A ≠ 0
[PROOFSTEP]
rw [← mass_nonzero_iff, restrict_mass]
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
f : Ω →ᵇ ℝ≥0
⊢ ∫⁻ (ω : Ω), ↑(↑f ω) ∂μ < ⊤
[PROOFSTEP]
apply IsFiniteMeasure.lintegral_lt_top_of_bounded_to_eNNReal
[GOAL]
case f_bdd
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
f : Ω →ᵇ ℝ≥0
⊢ ∃ c, ∀ (x : Ω), ↑(↑f x) ≤ ↑c
[PROOFSTEP]
use nndist f 0
[GOAL]
case h
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
f : Ω →ᵇ ℝ≥0
⊢ ∀ (x : Ω), ↑(↑f x) ≤ ↑(nndist f 0)
[PROOFSTEP]
intro x
[GOAL]
case h
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
f : Ω →ᵇ ℝ≥0
x : Ω
⊢ ↑(↑f x) ≤ ↑(nndist f 0)
[PROOFSTEP]
have key := BoundedContinuousFunction.Nnreal.upper_bound f x
[GOAL]
case h
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
f : Ω →ᵇ ℝ≥0
x : Ω
key : ↑f x ≤ nndist f 0
⊢ ↑(↑f x) ≤ ↑(nndist f 0)
[PROOFSTEP]
rw [ENNReal.coe_le_coe]
[GOAL]
case h
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
f : Ω →ᵇ ℝ≥0
x : Ω
key : ↑f x ≤ nndist f 0
⊢ ↑f x ≤ nndist f 0
[PROOFSTEP]
have eq : nndist f 0 = ⟨dist f 0, dist_nonneg⟩ := by
  ext
  simp only [Real.coe_toNNReal', max_eq_left_iff, NNReal.coe_mk, coe_nndist]
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
f : Ω →ᵇ ℝ≥0
x : Ω
key : ↑f x ≤ nndist f 0
⊢ nndist f 0 = { val := dist f 0, property := (_ : 0 ≤ dist f 0) }
[PROOFSTEP]
ext
[GOAL]
case a
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
f : Ω →ᵇ ℝ≥0
x : Ω
key : ↑f x ≤ nndist f 0
⊢ ↑(nndist f 0) = ↑{ val := dist f 0, property := (_ : 0 ≤ dist f 0) }
[PROOFSTEP]
simp only [Real.coe_toNNReal', max_eq_left_iff, NNReal.coe_mk, coe_nndist]
[GOAL]
case h
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
f : Ω →ᵇ ℝ≥0
x : Ω
key : ↑f x ≤ nndist f 0
eq : nndist f 0 = { val := dist f 0, property := (_ : 0 ≤ dist f 0) }
⊢ ↑f x ≤ nndist f 0
[PROOFSTEP]
rwa [eq] at key
[GOAL]
Ω : Type u_1
inst✝⁵ : MeasurableSpace Ω
R : Type u_2
inst✝⁴ : SMul R ℝ≥0
inst✝³ : SMul R ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝ : TopologicalSpace Ω
μ : FiniteMeasure Ω
c : ℝ≥0
⊢ testAgainstNN μ (const Ω c) = c * mass μ
[PROOFSTEP]
simp [← ENNReal.coe_eq_coe]
[GOAL]
Ω : Type u_1
inst✝⁵ : MeasurableSpace Ω
R : Type u_2
inst✝⁴ : SMul R ℝ≥0
inst✝³ : SMul R ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝ : TopologicalSpace Ω
μ : FiniteMeasure Ω
f g : Ω →ᵇ ℝ≥0
f_le_g : ↑f ≤ ↑g
⊢ testAgainstNN μ f ≤ testAgainstNN μ g
[PROOFSTEP]
simp only [← ENNReal.coe_le_coe, testAgainstNN_coe_eq]
[GOAL]
Ω : Type u_1
inst✝⁵ : MeasurableSpace Ω
R : Type u_2
inst✝⁴ : SMul R ℝ≥0
inst✝³ : SMul R ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝ : TopologicalSpace Ω
μ : FiniteMeasure Ω
f g : Ω →ᵇ ℝ≥0
f_le_g : ↑f ≤ ↑g
⊢ ∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ ≤ ∫⁻ (ω : Ω), ↑(↑g ω) ∂↑μ
[PROOFSTEP]
exact lintegral_mono fun ω => ENNReal.coe_mono (f_le_g ω)
[GOAL]
Ω : Type u_1
inst✝⁵ : MeasurableSpace Ω
R : Type u_2
inst✝⁴ : SMul R ℝ≥0
inst✝³ : SMul R ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝ : TopologicalSpace Ω
μ : FiniteMeasure Ω
⊢ testAgainstNN μ 0 = 0
[PROOFSTEP]
simpa only [zero_mul] using μ.testAgainstNN_const 0
[GOAL]
Ω : Type u_1
inst✝⁵ : MeasurableSpace Ω
R : Type u_2
inst✝⁴ : SMul R ℝ≥0
inst✝³ : SMul R ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝ : TopologicalSpace Ω
μ : FiniteMeasure Ω
⊢ testAgainstNN μ 1 = mass μ
[PROOFSTEP]
simp only [testAgainstNN, coe_one, Pi.one_apply, ENNReal.coe_one, lintegral_one]
[GOAL]
Ω : Type u_1
inst✝⁵ : MeasurableSpace Ω
R : Type u_2
inst✝⁴ : SMul R ℝ≥0
inst✝³ : SMul R ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝ : TopologicalSpace Ω
μ : FiniteMeasure Ω
⊢ ENNReal.toNNReal (↑↑↑μ univ) = mass μ
[PROOFSTEP]
rfl
[GOAL]
Ω : Type u_1
inst✝⁵ : MeasurableSpace Ω
R : Type u_2
inst✝⁴ : SMul R ℝ≥0
inst✝³ : SMul R ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝ : TopologicalSpace Ω
f : Ω →ᵇ ℝ≥0
⊢ testAgainstNN 0 f = 0
[PROOFSTEP]
simp only [testAgainstNN, toMeasure_zero, lintegral_zero_measure, ENNReal.zero_toNNReal]
[GOAL]
Ω : Type u_1
inst✝⁵ : MeasurableSpace Ω
R : Type u_2
inst✝⁴ : SMul R ℝ≥0
inst✝³ : SMul R ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝ : TopologicalSpace Ω
⊢ testAgainstNN 0 = 0
[PROOFSTEP]
funext
[GOAL]
case h
Ω : Type u_1
inst✝⁵ : MeasurableSpace Ω
R : Type u_2
inst✝⁴ : SMul R ℝ≥0
inst✝³ : SMul R ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝ : TopologicalSpace Ω
x✝ : Ω →ᵇ ℝ≥0
⊢ testAgainstNN 0 x✝ = OfNat.ofNat 0 x✝
[PROOFSTEP]
simp only [zero_testAgainstNN_apply, Pi.zero_apply]
[GOAL]
Ω : Type u_1
inst✝⁵ : MeasurableSpace Ω
R : Type u_2
inst✝⁴ : SMul R ℝ≥0
inst✝³ : SMul R ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝¹ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝ : TopologicalSpace Ω
c : ℝ≥0
μ : FiniteMeasure Ω
f : Ω →ᵇ ℝ≥0
⊢ testAgainstNN (c • μ) f = c • testAgainstNN μ f
[PROOFSTEP]
simp only [testAgainstNN, toMeasure_smul, smul_eq_mul, ← ENNReal.smul_toNNReal, ENNReal.smul_def,
  lintegral_smul_measure]
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f₁ f₂ : Ω →ᵇ ℝ≥0
⊢ testAgainstNN μ (f₁ + f₂) = testAgainstNN μ f₁ + testAgainstNN μ f₂
[PROOFSTEP]
simp only [← ENNReal.coe_eq_coe, BoundedContinuousFunction.coe_add, ENNReal.coe_add, Pi.add_apply, testAgainstNN_coe_eq]
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f₁ f₂ : Ω →ᵇ ℝ≥0
⊢ ∫⁻ (ω : Ω), ↑(↑f₁ ω) + ↑(↑f₂ ω) ∂↑μ = ∫⁻ (ω : Ω), ↑(↑f₁ ω) ∂↑μ + ∫⁻ (ω : Ω), ↑(↑f₂ ω) ∂↑μ
[PROOFSTEP]
exact lintegral_add_left (BoundedContinuousFunction.NNReal.coe_ennreal_comp_measurable _) _
[GOAL]
Ω : Type u_1
inst✝¹⁰ : MeasurableSpace Ω
R : Type u_2
inst✝⁹ : SMul R ℝ≥0
inst✝⁸ : SMul R ℝ≥0∞
inst✝⁷ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝⁶ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : OpensMeasurableSpace Ω
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0
inst✝² : PseudoMetricSpace R
inst✝¹ : Zero R
inst✝ : BoundedSMul R ℝ≥0
μ : FiniteMeasure Ω
c : R
f : Ω →ᵇ ℝ≥0
⊢ testAgainstNN μ (c • f) = c • testAgainstNN μ f
[PROOFSTEP]
simp only [← ENNReal.coe_eq_coe, BoundedContinuousFunction.coe_smul, testAgainstNN_coe_eq, ENNReal.coe_smul]
[GOAL]
Ω : Type u_1
inst✝¹⁰ : MeasurableSpace Ω
R : Type u_2
inst✝⁹ : SMul R ℝ≥0
inst✝⁸ : SMul R ℝ≥0∞
inst✝⁷ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝⁶ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : OpensMeasurableSpace Ω
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0
inst✝² : PseudoMetricSpace R
inst✝¹ : Zero R
inst✝ : BoundedSMul R ℝ≥0
μ : FiniteMeasure Ω
c : R
f : Ω →ᵇ ℝ≥0
⊢ ∫⁻ (ω : Ω), c • ↑(↑f ω) ∂↑μ = c • ∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ
[PROOFSTEP]
simp_rw [← smul_one_smul ℝ≥0∞ c (f _ : ℝ≥0∞), ← smul_one_smul ℝ≥0∞ c (lintegral _ _ : ℝ≥0∞), smul_eq_mul]
[GOAL]
Ω : Type u_1
inst✝¹⁰ : MeasurableSpace Ω
R : Type u_2
inst✝⁹ : SMul R ℝ≥0
inst✝⁸ : SMul R ℝ≥0∞
inst✝⁷ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝⁶ : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝⁵ : TopologicalSpace Ω
inst✝⁴ : OpensMeasurableSpace Ω
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0
inst✝² : PseudoMetricSpace R
inst✝¹ : Zero R
inst✝ : BoundedSMul R ℝ≥0
μ : FiniteMeasure Ω
c : R
f : Ω →ᵇ ℝ≥0
⊢ ∫⁻ (ω : Ω), c • 1 * ↑(↑f ω) ∂↑μ = c • 1 * ∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ
[PROOFSTEP]
exact
  @lintegral_const_mul _ _ (μ : Measure Ω) (c • (1 : ℝ≥0∞)) _
    (BoundedContinuousFunction.NNReal.coe_ennreal_comp_measurable f)
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f g : Ω →ᵇ ℝ≥0
⊢ testAgainstNN μ f ≤ testAgainstNN μ g + nndist f g * mass μ
[PROOFSTEP]
simp only [← μ.testAgainstNN_const (nndist f g), ← testAgainstNN_add, ← ENNReal.coe_le_coe,
  BoundedContinuousFunction.coe_add, const_apply, ENNReal.coe_add, Pi.add_apply, coe_nnreal_ennreal_nndist,
  testAgainstNN_coe_eq]
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f g : Ω →ᵇ ℝ≥0
⊢ ∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ ≤ ∫⁻ (ω : Ω), ↑(↑g ω) + edist f g ∂↑μ
[PROOFSTEP]
apply lintegral_mono
[GOAL]
case hfg
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f g : Ω →ᵇ ℝ≥0
⊢ (fun a => ↑(↑f a)) ≤ fun a => ↑(↑g a) + edist f g
[PROOFSTEP]
have le_dist : ∀ ω, dist (f ω) (g ω) ≤ nndist f g := BoundedContinuousFunction.dist_coe_le_dist
[GOAL]
case hfg
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f g : Ω →ᵇ ℝ≥0
le_dist : ∀ (ω : Ω), dist (↑f ω) (↑g ω) ≤ ↑(nndist f g)
⊢ (fun a => ↑(↑f a)) ≤ fun a => ↑(↑g a) + edist f g
[PROOFSTEP]
intro ω
[GOAL]
case hfg
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f g : Ω →ᵇ ℝ≥0
le_dist : ∀ (ω : Ω), dist (↑f ω) (↑g ω) ≤ ↑(nndist f g)
ω : Ω
⊢ (fun a => ↑(↑f a)) ω ≤ (fun a => ↑(↑g a) + edist f g) ω
[PROOFSTEP]
have le' : f ω ≤ g ω + nndist f g :=
  by
  apply (NNReal.le_add_nndist (f ω) (g ω)).trans
  rw [add_le_add_iff_left]
  exact dist_le_coe.mp (le_dist ω)
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f g : Ω →ᵇ ℝ≥0
le_dist : ∀ (ω : Ω), dist (↑f ω) (↑g ω) ≤ ↑(nndist f g)
ω : Ω
⊢ ↑f ω ≤ ↑g ω + nndist f g
[PROOFSTEP]
apply (NNReal.le_add_nndist (f ω) (g ω)).trans
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f g : Ω →ᵇ ℝ≥0
le_dist : ∀ (ω : Ω), dist (↑f ω) (↑g ω) ≤ ↑(nndist f g)
ω : Ω
⊢ ↑g ω + nndist (↑f ω) (↑g ω) ≤ ↑g ω + nndist f g
[PROOFSTEP]
rw [add_le_add_iff_left]
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f g : Ω →ᵇ ℝ≥0
le_dist : ∀ (ω : Ω), dist (↑f ω) (↑g ω) ≤ ↑(nndist f g)
ω : Ω
⊢ nndist (↑f ω) (↑g ω) ≤ nndist f g
[PROOFSTEP]
exact dist_le_coe.mp (le_dist ω)
[GOAL]
case hfg
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f g : Ω →ᵇ ℝ≥0
le_dist : ∀ (ω : Ω), dist (↑f ω) (↑g ω) ≤ ↑(nndist f g)
ω : Ω
le' : ↑f ω ≤ ↑g ω + nndist f g
⊢ (fun a => ↑(↑f a)) ω ≤ (fun a => ↑(↑g a) + edist f g) ω
[PROOFSTEP]
have le : (f ω : ℝ≥0∞) ≤ (g ω : ℝ≥0∞) + nndist f g := by rw [← ENNReal.coe_add]; exact ENNReal.coe_mono le'
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f g : Ω →ᵇ ℝ≥0
le_dist : ∀ (ω : Ω), dist (↑f ω) (↑g ω) ≤ ↑(nndist f g)
ω : Ω
le' : ↑f ω ≤ ↑g ω + nndist f g
⊢ ↑(↑f ω) ≤ ↑(↑g ω) + ↑(nndist f g)
[PROOFSTEP]
rw [← ENNReal.coe_add]
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f g : Ω →ᵇ ℝ≥0
le_dist : ∀ (ω : Ω), dist (↑f ω) (↑g ω) ≤ ↑(nndist f g)
ω : Ω
le' : ↑f ω ≤ ↑g ω + nndist f g
⊢ ↑(↑f ω) ≤ ↑(↑g ω + nndist f g)
[PROOFSTEP]
exact ENNReal.coe_mono le'
[GOAL]
case hfg
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f g : Ω →ᵇ ℝ≥0
le_dist : ∀ (ω : Ω), dist (↑f ω) (↑g ω) ≤ ↑(nndist f g)
ω : Ω
le' : ↑f ω ≤ ↑g ω + nndist f g
le : ↑(↑f ω) ≤ ↑(↑g ω) + ↑(nndist f g)
⊢ (fun a => ↑(↑f a)) ω ≤ (fun a => ↑(↑g a) + edist f g) ω
[PROOFSTEP]
rwa [coe_nnreal_ennreal_nndist] at le
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
⊢ LipschitzWith (mass μ) fun f => testAgainstNN μ f
[PROOFSTEP]
rw [lipschitzWith_iff_dist_le_mul]
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
⊢ ∀ (x y : Ω →ᵇ ℝ≥0), dist (testAgainstNN μ x) (testAgainstNN μ y) ≤ ↑(mass μ) * dist x y
[PROOFSTEP]
intro f₁ f₂
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f₁ f₂ : Ω →ᵇ ℝ≥0
⊢ dist (testAgainstNN μ f₁) (testAgainstNN μ f₂) ≤ ↑(mass μ) * dist f₁ f₂
[PROOFSTEP]
suffices abs (μ.testAgainstNN f₁ - μ.testAgainstNN f₂ : ℝ) ≤ μ.mass * dist f₁ f₂ by rwa [NNReal.dist_eq]
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f₁ f₂ : Ω →ᵇ ℝ≥0
this : |↑(testAgainstNN μ f₁) - ↑(testAgainstNN μ f₂)| ≤ ↑(mass μ) * dist f₁ f₂
⊢ dist (testAgainstNN μ f₁) (testAgainstNN μ f₂) ≤ ↑(mass μ) * dist f₁ f₂
[PROOFSTEP]
rwa [NNReal.dist_eq]
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f₁ f₂ : Ω →ᵇ ℝ≥0
⊢ |↑(testAgainstNN μ f₁) - ↑(testAgainstNN μ f₂)| ≤ ↑(mass μ) * dist f₁ f₂
[PROOFSTEP]
apply abs_le.mpr
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f₁ f₂ : Ω →ᵇ ℝ≥0
⊢ -(↑(mass μ) * dist f₁ f₂) ≤ ↑(testAgainstNN μ f₁) - ↑(testAgainstNN μ f₂) ∧
    ↑(testAgainstNN μ f₁) - ↑(testAgainstNN μ f₂) ≤ ↑(mass μ) * dist f₁ f₂
[PROOFSTEP]
constructor
[GOAL]
case left
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f₁ f₂ : Ω →ᵇ ℝ≥0
⊢ -(↑(mass μ) * dist f₁ f₂) ≤ ↑(testAgainstNN μ f₁) - ↑(testAgainstNN μ f₂)
[PROOFSTEP]
have key' := μ.testAgainstNN_lipschitz_estimate f₂ f₁
[GOAL]
case left
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f₁ f₂ : Ω →ᵇ ℝ≥0
key' : testAgainstNN μ f₂ ≤ testAgainstNN μ f₁ + nndist f₂ f₁ * mass μ
⊢ -(↑(mass μ) * dist f₁ f₂) ≤ ↑(testAgainstNN μ f₁) - ↑(testAgainstNN μ f₂)
[PROOFSTEP]
rw [mul_comm] at key'
[GOAL]
case left
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f₁ f₂ : Ω →ᵇ ℝ≥0
key' : testAgainstNN μ f₂ ≤ testAgainstNN μ f₁ + mass μ * nndist f₂ f₁
⊢ -(↑(mass μ) * dist f₁ f₂) ≤ ↑(testAgainstNN μ f₁) - ↑(testAgainstNN μ f₂)
[PROOFSTEP]
suffices ↑(μ.testAgainstNN f₂) ≤ ↑(μ.testAgainstNN f₁) + ↑μ.mass * dist f₁ f₂ by linarith
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f₁ f₂ : Ω →ᵇ ℝ≥0
key' : testAgainstNN μ f₂ ≤ testAgainstNN μ f₁ + mass μ * nndist f₂ f₁
this : ↑(testAgainstNN μ f₂) ≤ ↑(testAgainstNN μ f₁) + ↑(mass μ) * dist f₁ f₂
⊢ -(↑(mass μ) * dist f₁ f₂) ≤ ↑(testAgainstNN μ f₁) - ↑(testAgainstNN μ f₂)
[PROOFSTEP]
linarith
[GOAL]
case left
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f₁ f₂ : Ω →ᵇ ℝ≥0
key' : testAgainstNN μ f₂ ≤ testAgainstNN μ f₁ + mass μ * nndist f₂ f₁
⊢ ↑(testAgainstNN μ f₂) ≤ ↑(testAgainstNN μ f₁) + ↑(mass μ) * dist f₁ f₂
[PROOFSTEP]
have key := NNReal.coe_mono key'
[GOAL]
case left
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f₁ f₂ : Ω →ᵇ ℝ≥0
key' : testAgainstNN μ f₂ ≤ testAgainstNN μ f₁ + mass μ * nndist f₂ f₁
key : ↑(testAgainstNN μ f₂) ≤ ↑(testAgainstNN μ f₁ + mass μ * nndist f₂ f₁)
⊢ ↑(testAgainstNN μ f₂) ≤ ↑(testAgainstNN μ f₁) + ↑(mass μ) * dist f₁ f₂
[PROOFSTEP]
rwa [NNReal.coe_add, NNReal.coe_mul, nndist_comm] at key
[GOAL]
case right
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f₁ f₂ : Ω →ᵇ ℝ≥0
⊢ ↑(testAgainstNN μ f₁) - ↑(testAgainstNN μ f₂) ≤ ↑(mass μ) * dist f₁ f₂
[PROOFSTEP]
have key' := μ.testAgainstNN_lipschitz_estimate f₁ f₂
[GOAL]
case right
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f₁ f₂ : Ω →ᵇ ℝ≥0
key' : testAgainstNN μ f₁ ≤ testAgainstNN μ f₂ + nndist f₁ f₂ * mass μ
⊢ ↑(testAgainstNN μ f₁) - ↑(testAgainstNN μ f₂) ≤ ↑(mass μ) * dist f₁ f₂
[PROOFSTEP]
rw [mul_comm] at key'
[GOAL]
case right
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f₁ f₂ : Ω →ᵇ ℝ≥0
key' : testAgainstNN μ f₁ ≤ testAgainstNN μ f₂ + mass μ * nndist f₁ f₂
⊢ ↑(testAgainstNN μ f₁) - ↑(testAgainstNN μ f₂) ≤ ↑(mass μ) * dist f₁ f₂
[PROOFSTEP]
suffices ↑(μ.testAgainstNN f₁) ≤ ↑(μ.testAgainstNN f₂) + ↑μ.mass * dist f₁ f₂ by linarith
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f₁ f₂ : Ω →ᵇ ℝ≥0
key' : testAgainstNN μ f₁ ≤ testAgainstNN μ f₂ + mass μ * nndist f₁ f₂
this : ↑(testAgainstNN μ f₁) ≤ ↑(testAgainstNN μ f₂) + ↑(mass μ) * dist f₁ f₂
⊢ ↑(testAgainstNN μ f₁) - ↑(testAgainstNN μ f₂) ≤ ↑(mass μ) * dist f₁ f₂
[PROOFSTEP]
linarith
[GOAL]
case right
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f₁ f₂ : Ω →ᵇ ℝ≥0
key' : testAgainstNN μ f₁ ≤ testAgainstNN μ f₂ + mass μ * nndist f₁ f₂
⊢ ↑(testAgainstNN μ f₁) ≤ ↑(testAgainstNN μ f₂) + ↑(mass μ) * dist f₁ f₂
[PROOFSTEP]
have key := NNReal.coe_mono key'
[GOAL]
case right
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
μ : FiniteMeasure Ω
f₁ f₂ : Ω →ᵇ ℝ≥0
key' : testAgainstNN μ f₁ ≤ testAgainstNN μ f₂ + mass μ * nndist f₁ f₂
key : ↑(testAgainstNN μ f₁) ≤ ↑(testAgainstNN μ f₂ + mass μ * nndist f₁ f₂)
⊢ ↑(testAgainstNN μ f₁) ≤ ↑(testAgainstNN μ f₂) + ↑(mass μ) * dist f₁ f₂
[PROOFSTEP]
rwa [NNReal.coe_add, NNReal.coe_mul] at key
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
f : Ω →ᵇ ℝ≥0
⊢ Continuous fun μ => testAgainstNN μ f
[PROOFSTEP]
show Continuous ((fun φ : WeakDual ℝ≥0 (Ω →ᵇ ℝ≥0) => φ f) ∘ toWeakDualBCNN)
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
f : Ω →ᵇ ℝ≥0
⊢ Continuous ((fun φ => ↑φ f) ∘ toWeakDualBCNN)
[PROOFSTEP]
refine Continuous.comp ?_ (toWeakDualBCNN_continuous (Ω := Ω))
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
f : Ω →ᵇ ℝ≥0
⊢ Continuous fun φ => ↑φ f
[PROOFSTEP]
exact
  @WeakBilin.eval_continuous _ _ _ _ _ _ ContinuousLinearMap.module _ _ _
    _
      /- porting note: without explicitly providing `ContinuousLinearMap.module`, TC synthesis times
        out trying to find `Module ℝ≥0 ((Ω →ᵇ ℝ≥0) →L[ℝ≥0] ℝ≥0)`, but it can find it with enough time:
        `set_option synthInstance.maxHeartbeats 47000` was sufficient. -/
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
⊢ Continuous fun μ => mass μ
[PROOFSTEP]
simp_rw [← testAgainstNN_one]
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
⊢ Continuous fun μ => testAgainstNN μ 1
[PROOFSTEP]
exact continuous_testAgainstNN_eval 1
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_3
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
⊢ Tendsto μs F (𝓝 μ) ↔ ∀ (f : Ω →ᵇ ℝ≥0), Tendsto (fun i => ↑(toWeakDualBCNN (μs i)) f) F (𝓝 (↑(toWeakDualBCNN μ) f))
[PROOFSTEP]
rw [tendsto_iff_weak_star_tendsto, tendsto_iff_forall_eval_tendsto_topDualPairing]
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_3
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
⊢ (∀ (y : Ω →ᵇ ℝ≥0),
      Tendsto (fun i => ↑(↑(topDualPairing ℝ≥0 (Ω →ᵇ ℝ≥0)) (toWeakDualBCNN (μs i))) y) F
        (𝓝 (↑(↑(topDualPairing ℝ≥0 (Ω →ᵇ ℝ≥0)) (toWeakDualBCNN μ)) y))) ↔
    ∀ (f : Ω →ᵇ ℝ≥0), Tendsto (fun i => ↑(toWeakDualBCNN (μs i)) f) F (𝓝 (↑(toWeakDualBCNN μ) f))
[PROOFSTEP]
rfl
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_3
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
⊢ Tendsto μs F (𝓝 μ) ↔ ∀ (f : Ω →ᵇ ℝ≥0), Tendsto (fun i => testAgainstNN (μs i) f) F (𝓝 (testAgainstNN μ f))
[PROOFSTEP]
rw [FiniteMeasure.tendsto_iff_forall_toWeakDualBCNN_tendsto]
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_3
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
⊢ (∀ (f : Ω →ᵇ ℝ≥0), Tendsto (fun i => ↑(toWeakDualBCNN (μs i)) f) F (𝓝 (↑(toWeakDualBCNN μ) f))) ↔
    ∀ (f : Ω →ᵇ ℝ≥0), Tendsto (fun i => testAgainstNN (μs i) f) F (𝓝 (testAgainstNN μ f))
[PROOFSTEP]
rfl
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_3
F : Filter γ
μs : γ → FiniteMeasure Ω
mass_lim : Tendsto (fun i => mass (μs i)) F (𝓝 0)
f : Ω →ᵇ ℝ≥0
⊢ Tendsto (fun i => testAgainstNN (μs i) f) F (𝓝 0)
[PROOFSTEP]
apply tendsto_iff_dist_tendsto_zero.mpr
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_3
F : Filter γ
μs : γ → FiniteMeasure Ω
mass_lim : Tendsto (fun i => mass (μs i)) F (𝓝 0)
f : Ω →ᵇ ℝ≥0
⊢ Tendsto (fun b => dist (testAgainstNN (μs b) f) 0) F (𝓝 0)
[PROOFSTEP]
have obs := fun i => (μs i).testAgainstNN_lipschitz_estimate f 0
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_3
F : Filter γ
μs : γ → FiniteMeasure Ω
mass_lim : Tendsto (fun i => mass (μs i)) F (𝓝 0)
f : Ω →ᵇ ℝ≥0
obs : ∀ (i : γ), testAgainstNN (μs i) f ≤ testAgainstNN (μs i) 0 + nndist f 0 * mass (μs i)
⊢ Tendsto (fun b => dist (testAgainstNN (μs b) f) 0) F (𝓝 0)
[PROOFSTEP]
simp_rw [testAgainstNN_zero, zero_add] at obs
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_3
F : Filter γ
μs : γ → FiniteMeasure Ω
mass_lim : Tendsto (fun i => mass (μs i)) F (𝓝 0)
f : Ω →ᵇ ℝ≥0
obs : ∀ (i : γ), testAgainstNN (μs i) f ≤ nndist f 0 * mass (μs i)
⊢ Tendsto (fun b => dist (testAgainstNN (μs b) f) 0) F (𝓝 0)
[PROOFSTEP]
simp_rw [show ∀ i, dist ((μs i).testAgainstNN f) 0 = (μs i).testAgainstNN f by
    simp only [dist_nndist, NNReal.nndist_zero_eq_val', eq_self_iff_true, imp_true_iff]]
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_3
F : Filter γ
μs : γ → FiniteMeasure Ω
mass_lim : Tendsto (fun i => mass (μs i)) F (𝓝 0)
f : Ω →ᵇ ℝ≥0
obs : ∀ (i : γ), testAgainstNN (μs i) f ≤ nndist f 0 * mass (μs i)
⊢ ∀ (i : γ), dist (testAgainstNN (μs i) f) 0 = ↑(testAgainstNN (μs i) f)
[PROOFSTEP]
simp only [dist_nndist, NNReal.nndist_zero_eq_val', eq_self_iff_true, imp_true_iff]
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_3
F : Filter γ
μs : γ → FiniteMeasure Ω
mass_lim : Tendsto (fun i => mass (μs i)) F (𝓝 0)
f : Ω →ᵇ ℝ≥0
obs : ∀ (i : γ), testAgainstNN (μs i) f ≤ nndist f 0 * mass (μs i)
⊢ Tendsto (fun b => ↑(testAgainstNN (μs b) f)) F (𝓝 0)
[PROOFSTEP]
refine' squeeze_zero (fun i => NNReal.coe_nonneg _) obs _
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_3
F : Filter γ
μs : γ → FiniteMeasure Ω
mass_lim : Tendsto (fun i => mass (μs i)) F (𝓝 0)
f : Ω →ᵇ ℝ≥0
obs : ∀ (i : γ), testAgainstNN (μs i) f ≤ nndist f 0 * mass (μs i)
⊢ Tendsto (fun t => (fun a => ↑a) (nndist f 0 * mass (μs t))) F (𝓝 0)
[PROOFSTEP]
have lim_pair : Tendsto (fun i => (⟨nndist f 0, (μs i).mass⟩ : ℝ × ℝ)) F (𝓝 ⟨nndist f 0, 0⟩) :=
  by
  refine' (Prod.tendsto_iff _ _).mpr ⟨tendsto_const_nhds, _⟩
  exact (NNReal.continuous_coe.tendsto 0).comp mass_lim
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_3
F : Filter γ
μs : γ → FiniteMeasure Ω
mass_lim : Tendsto (fun i => mass (μs i)) F (𝓝 0)
f : Ω →ᵇ ℝ≥0
obs : ∀ (i : γ), testAgainstNN (μs i) f ≤ nndist f 0 * mass (μs i)
⊢ Tendsto (fun i => (↑(nndist f 0), ↑(mass (μs i)))) F (𝓝 (↑(nndist f 0), 0))
[PROOFSTEP]
refine' (Prod.tendsto_iff _ _).mpr ⟨tendsto_const_nhds, _⟩
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_3
F : Filter γ
μs : γ → FiniteMeasure Ω
mass_lim : Tendsto (fun i => mass (μs i)) F (𝓝 0)
f : Ω →ᵇ ℝ≥0
obs : ∀ (i : γ), testAgainstNN (μs i) f ≤ nndist f 0 * mass (μs i)
⊢ Tendsto (fun n => (↑(nndist f 0), ↑(mass (μs n))).snd) F (𝓝 (↑(nndist f 0), 0).snd)
[PROOFSTEP]
exact (NNReal.continuous_coe.tendsto 0).comp mass_lim
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_3
F : Filter γ
μs : γ → FiniteMeasure Ω
mass_lim : Tendsto (fun i => mass (μs i)) F (𝓝 0)
f : Ω →ᵇ ℝ≥0
obs : ∀ (i : γ), testAgainstNN (μs i) f ≤ nndist f 0 * mass (μs i)
lim_pair : Tendsto (fun i => (↑(nndist f 0), ↑(mass (μs i)))) F (𝓝 (↑(nndist f 0), 0))
⊢ Tendsto (fun t => (fun a => ↑a) (nndist f 0 * mass (μs t))) F (𝓝 0)
[PROOFSTEP]
have key := tendsto_mul.comp lim_pair
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_3
F : Filter γ
μs : γ → FiniteMeasure Ω
mass_lim : Tendsto (fun i => mass (μs i)) F (𝓝 0)
f : Ω →ᵇ ℝ≥0
obs : ∀ (i : γ), testAgainstNN (μs i) f ≤ nndist f 0 * mass (μs i)
lim_pair : Tendsto (fun i => (↑(nndist f 0), ↑(mass (μs i)))) F (𝓝 (↑(nndist f 0), 0))
key : Tendsto ((fun p => p.fst * p.snd) ∘ fun i => (↑(nndist f 0), ↑(mass (μs i)))) F (𝓝 (↑(nndist f 0) * 0))
⊢ Tendsto (fun t => (fun a => ↑a) (nndist f 0 * mass (μs t))) F (𝓝 0)
[PROOFSTEP]
rwa [mul_zero] at key
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_3
F : Filter γ
μs : γ → FiniteMeasure Ω
mass_lim : Tendsto (fun i => mass (μs i)) F (𝓝 0)
⊢ Tendsto μs F (𝓝 0)
[PROOFSTEP]
rw [tendsto_iff_forall_testAgainstNN_tendsto]
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_3
F : Filter γ
μs : γ → FiniteMeasure Ω
mass_lim : Tendsto (fun i => mass (μs i)) F (𝓝 0)
⊢ ∀ (f : Ω →ᵇ ℝ≥0), Tendsto (fun i => testAgainstNN (μs i) f) F (𝓝 (testAgainstNN 0 f))
[PROOFSTEP]
intro f
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_3
F : Filter γ
μs : γ → FiniteMeasure Ω
mass_lim : Tendsto (fun i => mass (μs i)) F (𝓝 0)
f : Ω →ᵇ ℝ≥0
⊢ Tendsto (fun i => testAgainstNN (μs i) f) F (𝓝 (testAgainstNN 0 f))
[PROOFSTEP]
convert tendsto_zero_testAgainstNN_of_tendsto_zero_mass mass_lim f
[GOAL]
case h.e'_5.h.e'_3
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_3
F : Filter γ
μs : γ → FiniteMeasure Ω
mass_lim : Tendsto (fun i => mass (μs i)) F (𝓝 0)
f : Ω →ᵇ ℝ≥0
⊢ testAgainstNN 0 f = 0
[PROOFSTEP]
rw [zero_testAgainstNN_apply]
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_3
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
⊢ Tendsto μs F (𝓝 μ) ↔ ∀ (f : Ω →ᵇ ℝ≥0), Tendsto (fun i => ∫⁻ (x : Ω), ↑(↑f x) ∂↑(μs i)) F (𝓝 (∫⁻ (x : Ω), ↑(↑f x) ∂↑μ))
[PROOFSTEP]
rw [tendsto_iff_forall_toWeakDualBCNN_tendsto]
[GOAL]
Ω : Type u_1
inst✝⁶ : MeasurableSpace Ω
R : Type u_2
inst✝⁵ : SMul R ℝ≥0
inst✝⁴ : SMul R ℝ≥0∞
inst✝³ : IsScalarTower R ℝ≥0 ℝ≥0∞
inst✝² : IsScalarTower R ℝ≥0∞ ℝ≥0∞
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_3
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
⊢ (∀ (f : Ω →ᵇ ℝ≥0), Tendsto (fun i => ↑(toWeakDualBCNN (μs i)) f) F (𝓝 (↑(toWeakDualBCNN μ) f))) ↔
    ∀ (f : Ω →ᵇ ℝ≥0), Tendsto (fun i => ∫⁻ (x : Ω), ↑(↑f x) ∂↑(μs i)) F (𝓝 (∫⁻ (x : Ω), ↑(↑f x) ∂↑μ))
[PROOFSTEP]
simp_rw [toWeakDualBCNN_apply _ _, ← testAgainstNN_coe_eq, ENNReal.tendsto_coe, ENNReal.toNNReal_coe]
[GOAL]
Ω : Type u_1
inst✝⁴ : MeasurableSpace Ω
inst✝³ : TopologicalSpace Ω
inst✝² : OpensMeasurableSpace Ω
ι : Type u_2
L : Filter ι
inst✝¹ : IsCountablyGenerated L
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
fs : ι → Ω →ᵇ ℝ≥0
c : ℝ≥0
fs_le_const : ∀ᶠ (i : ι) in L, ∀ᵐ (ω : Ω) ∂μ, ↑(fs i) ω ≤ c
f : Ω → ℝ≥0
fs_lim : ∀ᵐ (ω : Ω) ∂μ, Tendsto (fun i => ↑(fs i) ω) L (𝓝 (f ω))
⊢ Tendsto (fun i => ∫⁻ (ω : Ω), ↑(↑(fs i) ω) ∂μ) L (𝓝 (∫⁻ (ω : Ω), ↑(f ω) ∂μ))
[PROOFSTEP]
refine
  tendsto_lintegral_filter_of_dominated_convergence (fun _ => c)
    (eventually_of_forall fun i => (ENNReal.continuous_coe.comp (fs i).continuous).measurable) ?_
    (@lintegral_const_lt_top _ _ μ _ _ (@ENNReal.coe_ne_top c)).ne ?_
[GOAL]
case refine_1
Ω : Type u_1
inst✝⁴ : MeasurableSpace Ω
inst✝³ : TopologicalSpace Ω
inst✝² : OpensMeasurableSpace Ω
ι : Type u_2
L : Filter ι
inst✝¹ : IsCountablyGenerated L
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
fs : ι → Ω →ᵇ ℝ≥0
c : ℝ≥0
fs_le_const : ∀ᶠ (i : ι) in L, ∀ᵐ (ω : Ω) ∂μ, ↑(fs i) ω ≤ c
f : Ω → ℝ≥0
fs_lim : ∀ᵐ (ω : Ω) ∂μ, Tendsto (fun i => ↑(fs i) ω) L (𝓝 (f ω))
⊢ ∀ᶠ (n : ι) in L, ∀ᵐ (a : Ω) ∂μ, ↑(↑(fs n) a) ≤ (fun x => ↑c) a
[PROOFSTEP]
simpa only [Function.comp_apply, ENNReal.coe_le_coe] using fs_le_const
[GOAL]
case refine_2
Ω : Type u_1
inst✝⁴ : MeasurableSpace Ω
inst✝³ : TopologicalSpace Ω
inst✝² : OpensMeasurableSpace Ω
ι : Type u_2
L : Filter ι
inst✝¹ : IsCountablyGenerated L
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
fs : ι → Ω →ᵇ ℝ≥0
c : ℝ≥0
fs_le_const : ∀ᶠ (i : ι) in L, ∀ᵐ (ω : Ω) ∂μ, ↑(fs i) ω ≤ c
f : Ω → ℝ≥0
fs_lim : ∀ᵐ (ω : Ω) ∂μ, Tendsto (fun i => ↑(fs i) ω) L (𝓝 (f ω))
⊢ ∀ᵐ (a : Ω) ∂μ, Tendsto (fun n => ↑(↑(fs n) a)) L (𝓝 ↑(f a))
[PROOFSTEP]
simpa only [Function.comp_apply, ENNReal.tendsto_coe] using fs_lim
[GOAL]
Ω : Type u_1
inst✝³ : MeasurableSpace Ω
inst✝² : TopologicalSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
ι : Type u_2
L : Filter ι
inst✝ : IsCountablyGenerated L
μ : FiniteMeasure Ω
fs : ι → Ω →ᵇ ℝ≥0
c : ℝ≥0
fs_le_const : ∀ᶠ (i : ι) in L, ∀ᵐ (ω : Ω) ∂↑μ, ↑(fs i) ω ≤ c
f : Ω →ᵇ ℝ≥0
fs_lim : ∀ᵐ (ω : Ω) ∂↑μ, Tendsto (fun i => ↑(fs i) ω) L (𝓝 (↑f ω))
⊢ Tendsto (fun i => testAgainstNN μ (fs i)) L (𝓝 (testAgainstNN μ f))
[PROOFSTEP]
apply (ENNReal.tendsto_toNNReal (lintegral_lt_top_of_boundedContinuous_to_nnreal (μ : Measure Ω) f).ne).comp
[GOAL]
Ω : Type u_1
inst✝³ : MeasurableSpace Ω
inst✝² : TopologicalSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
ι : Type u_2
L : Filter ι
inst✝ : IsCountablyGenerated L
μ : FiniteMeasure Ω
fs : ι → Ω →ᵇ ℝ≥0
c : ℝ≥0
fs_le_const : ∀ᶠ (i : ι) in L, ∀ᵐ (ω : Ω) ∂↑μ, ↑(fs i) ω ≤ c
f : Ω →ᵇ ℝ≥0
fs_lim : ∀ᵐ (ω : Ω) ∂↑μ, Tendsto (fun i => ↑(fs i) ω) L (𝓝 (↑f ω))
⊢ Tendsto (fun i => ∫⁻ (ω : Ω), ↑(↑(fs i) ω) ∂↑μ) L (𝓝 (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))
[PROOFSTEP]
exact tendsto_lintegral_nn_filter_of_le_const μ fs_le_const fs_lim
[GOAL]
Ω : Type u_1
inst✝³ : MeasurableSpace Ω
inst✝² : TopologicalSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
f : Ω →ᵇ ℝ≥0
⊢ Integrable (NNReal.toReal ∘ ↑f)
[PROOFSTEP]
refine' ⟨(NNReal.continuous_coe.comp f.continuous).measurable.aestronglyMeasurable, _⟩
[GOAL]
Ω : Type u_1
inst✝³ : MeasurableSpace Ω
inst✝² : TopologicalSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
f : Ω →ᵇ ℝ≥0
⊢ HasFiniteIntegral (NNReal.toReal ∘ ↑f)
[PROOFSTEP]
simp only [HasFiniteIntegral, Function.comp_apply, NNReal.nnnorm_eq]
[GOAL]
Ω : Type u_1
inst✝³ : MeasurableSpace Ω
inst✝² : TopologicalSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
f : Ω →ᵇ ℝ≥0
⊢ ∫⁻ (a : Ω), ↑(↑f a) ∂μ < ⊤
[PROOFSTEP]
exact lintegral_lt_top_of_boundedContinuous_to_nnreal _ f
[GOAL]
Ω : Type u_1
inst✝³ : MeasurableSpace Ω
inst✝² : TopologicalSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
f : Ω →ᵇ ℝ
⊢ Integrable ↑f
[PROOFSTEP]
refine' ⟨f.continuous.measurable.aestronglyMeasurable, _⟩
[GOAL]
Ω : Type u_1
inst✝³ : MeasurableSpace Ω
inst✝² : TopologicalSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
f : Ω →ᵇ ℝ
⊢ HasFiniteIntegral ↑f
[PROOFSTEP]
have aux : ((↑) : ℝ≥0 → ℝ) ∘ ⇑f.nnnorm = fun x => ‖f x‖ :=
  by
  ext ω
  simp only [Function.comp_apply, BoundedContinuousFunction.nnnorm_coeFn_eq, coe_nnnorm]
[GOAL]
Ω : Type u_1
inst✝³ : MeasurableSpace Ω
inst✝² : TopologicalSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
f : Ω →ᵇ ℝ
⊢ NNReal.toReal ∘ ↑(BoundedContinuousFunction.nnnorm f) = fun x => ‖↑f x‖
[PROOFSTEP]
ext ω
[GOAL]
case h
Ω : Type u_1
inst✝³ : MeasurableSpace Ω
inst✝² : TopologicalSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
f : Ω →ᵇ ℝ
ω : Ω
⊢ (NNReal.toReal ∘ ↑(BoundedContinuousFunction.nnnorm f)) ω = ‖↑f ω‖
[PROOFSTEP]
simp only [Function.comp_apply, BoundedContinuousFunction.nnnorm_coeFn_eq, coe_nnnorm]
[GOAL]
Ω : Type u_1
inst✝³ : MeasurableSpace Ω
inst✝² : TopologicalSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
f : Ω →ᵇ ℝ
aux : NNReal.toReal ∘ ↑(BoundedContinuousFunction.nnnorm f) = fun x => ‖↑f x‖
⊢ HasFiniteIntegral ↑f
[PROOFSTEP]
apply (hasFiniteIntegral_iff_norm f).mpr
[GOAL]
Ω : Type u_1
inst✝³ : MeasurableSpace Ω
inst✝² : TopologicalSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
f : Ω →ᵇ ℝ
aux : NNReal.toReal ∘ ↑(BoundedContinuousFunction.nnnorm f) = fun x => ‖↑f x‖
⊢ ∫⁻ (a : Ω), ENNReal.ofReal ‖↑f a‖ ∂μ < ⊤
[PROOFSTEP]
rw [← ofReal_integral_eq_lintegral_ofReal]
[GOAL]
Ω : Type u_1
inst✝³ : MeasurableSpace Ω
inst✝² : TopologicalSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
f : Ω →ᵇ ℝ
aux : NNReal.toReal ∘ ↑(BoundedContinuousFunction.nnnorm f) = fun x => ‖↑f x‖
⊢ ENNReal.ofReal (∫ (x : Ω), ‖↑f x‖ ∂μ) < ⊤
[PROOFSTEP]
exact ENNReal.ofReal_lt_top
[GOAL]
case hfi
Ω : Type u_1
inst✝³ : MeasurableSpace Ω
inst✝² : TopologicalSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
f : Ω →ᵇ ℝ
aux : NNReal.toReal ∘ ↑(BoundedContinuousFunction.nnnorm f) = fun x => ‖↑f x‖
⊢ Integrable fun a => ‖↑f a‖
[PROOFSTEP]
exact aux ▸ integrable_of_boundedContinuous_to_nnreal μ f.nnnorm
[GOAL]
case f_nn
Ω : Type u_1
inst✝³ : MeasurableSpace Ω
inst✝² : TopologicalSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
f : Ω →ᵇ ℝ
aux : NNReal.toReal ∘ ↑(BoundedContinuousFunction.nnnorm f) = fun x => ‖↑f x‖
⊢ 0 ≤ᵐ[μ] fun a => ‖↑f a‖
[PROOFSTEP]
exact eventually_of_forall fun ω => norm_nonneg (f ω)
[GOAL]
Ω : Type u_1
inst✝³ : MeasurableSpace Ω
inst✝² : TopologicalSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
f : Ω →ᵇ ℝ
⊢ ∫ (ω : Ω), ↑f ω ∂μ = ∫ (ω : Ω), ↑(↑(nnrealPart f) ω) ∂μ - ∫ (ω : Ω), ↑(↑(nnrealPart (-f)) ω) ∂μ
[PROOFSTEP]
simp only [f.self_eq_nnrealPart_sub_nnrealPart_neg, Pi.sub_apply, integral_sub,
  integrable_of_boundedContinuous_to_nnreal]
[GOAL]
Ω : Type u_1
inst✝³ : MeasurableSpace Ω
inst✝² : TopologicalSpace Ω
inst✝¹ : OpensMeasurableSpace Ω
μ : Measure Ω
inst✝ : IsFiniteMeasure μ
f : Ω →ᵇ ℝ
⊢ ∫ (a : Ω), (NNReal.toReal ∘ ↑(nnrealPart f)) a ∂μ - ∫ (a : Ω), (NNReal.toReal ∘ ↑(nnrealPart (-f))) a ∂μ =
    ∫ (ω : Ω), ↑(↑(nnrealPart f) ω) ∂μ - ∫ (ω : Ω), ↑(↑(nnrealPart (-f)) ω) ∂μ
[PROOFSTEP]
rfl
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
h : ∀ (f : Ω →ᵇ ℝ), Tendsto (fun i => ∫ (x : Ω), ↑f x ∂↑(μs i)) F (𝓝 (∫ (x : Ω), ↑f x ∂↑μ))
⊢ Tendsto μs F (𝓝 μ)
[PROOFSTEP]
apply (@tendsto_iff_forall_lintegral_tendsto Ω _ _ _ γ F μs μ).mpr
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
h : ∀ (f : Ω →ᵇ ℝ), Tendsto (fun i => ∫ (x : Ω), ↑f x ∂↑(μs i)) F (𝓝 (∫ (x : Ω), ↑f x ∂↑μ))
⊢ ∀ (f : Ω →ᵇ ℝ≥0), Tendsto (fun i => ∫⁻ (x : Ω), ↑(↑f x) ∂↑(μs i)) F (𝓝 (∫⁻ (x : Ω), ↑(↑f x) ∂↑μ))
[PROOFSTEP]
intro f
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
h : ∀ (f : Ω →ᵇ ℝ), Tendsto (fun i => ∫ (x : Ω), ↑f x ∂↑(μs i)) F (𝓝 (∫ (x : Ω), ↑f x ∂↑μ))
f : Ω →ᵇ ℝ≥0
⊢ Tendsto (fun i => ∫⁻ (x : Ω), ↑(↑f x) ∂↑(μs i)) F (𝓝 (∫⁻ (x : Ω), ↑(↑f x) ∂↑μ))
[PROOFSTEP]
have key :=
  @ENNReal.tendsto_toReal_iff _ F _ (fun i => (lintegral_lt_top_of_boundedContinuous_to_nnreal (μs i : Measure Ω) f).ne)
    _ (lintegral_lt_top_of_boundedContinuous_to_nnreal (μ : Measure Ω) f).ne
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
h : ∀ (f : Ω →ᵇ ℝ), Tendsto (fun i => ∫ (x : Ω), ↑f x ∂↑(μs i)) F (𝓝 (∫ (x : Ω), ↑f x ∂↑μ))
f : Ω →ᵇ ℝ≥0
key :
  Tendsto (fun n => ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs n))) F (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))) ↔
    Tendsto (fun i => ∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs i)) F (𝓝 (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))
⊢ Tendsto (fun i => ∫⁻ (x : Ω), ↑(↑f x) ∂↑(μs i)) F (𝓝 (∫⁻ (x : Ω), ↑(↑f x) ∂↑μ))
[PROOFSTEP]
simp only [ENNReal.ofReal_coe_nnreal] at key
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
h : ∀ (f : Ω →ᵇ ℝ), Tendsto (fun i => ∫ (x : Ω), ↑f x ∂↑(μs i)) F (𝓝 (∫ (x : Ω), ↑f x ∂↑μ))
f : Ω →ᵇ ℝ≥0
key :
  Tendsto (fun n => ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs n))) F (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))) ↔
    Tendsto (fun i => ∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs i)) F (𝓝 (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))
⊢ Tendsto (fun i => ∫⁻ (x : Ω), ↑(↑f x) ∂↑(μs i)) F (𝓝 (∫⁻ (x : Ω), ↑(↑f x) ∂↑μ))
[PROOFSTEP]
apply key.mp
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
h : ∀ (f : Ω →ᵇ ℝ), Tendsto (fun i => ∫ (x : Ω), ↑f x ∂↑(μs i)) F (𝓝 (∫ (x : Ω), ↑f x ∂↑μ))
f : Ω →ᵇ ℝ≥0
key :
  Tendsto (fun n => ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs n))) F (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))) ↔
    Tendsto (fun i => ∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs i)) F (𝓝 (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))
⊢ Tendsto (fun n => ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs n))) F (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ)))
[PROOFSTEP]
have lip : LipschitzWith 1 ((↑) : ℝ≥0 → ℝ) := isometry_subtype_coe.lipschitz
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
h : ∀ (f : Ω →ᵇ ℝ), Tendsto (fun i => ∫ (x : Ω), ↑f x ∂↑(μs i)) F (𝓝 (∫ (x : Ω), ↑f x ∂↑μ))
f : Ω →ᵇ ℝ≥0
key :
  Tendsto (fun n => ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs n))) F (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))) ↔
    Tendsto (fun i => ∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs i)) F (𝓝 (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))
lip : LipschitzWith 1 NNReal.toReal
⊢ Tendsto (fun n => ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs n))) F (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ)))
[PROOFSTEP]
set f₀ := BoundedContinuousFunction.comp _ lip f with _def_f₀
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
h : ∀ (f : Ω →ᵇ ℝ), Tendsto (fun i => ∫ (x : Ω), ↑f x ∂↑(μs i)) F (𝓝 (∫ (x : Ω), ↑f x ∂↑μ))
f : Ω →ᵇ ℝ≥0
key :
  Tendsto (fun n => ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs n))) F (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))) ↔
    Tendsto (fun i => ∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs i)) F (𝓝 (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))
lip : LipschitzWith 1 NNReal.toReal
f₀ : Ω →ᵇ ℝ := comp NNReal.toReal lip f
_def_f₀ : f₀ = comp NNReal.toReal lip f
⊢ Tendsto (fun n => ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs n))) F (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ)))
[PROOFSTEP]
have f₀_eq : ⇑f₀ = ((↑) : ℝ≥0 → ℝ) ∘ ⇑f := by rfl
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
h : ∀ (f : Ω →ᵇ ℝ), Tendsto (fun i => ∫ (x : Ω), ↑f x ∂↑(μs i)) F (𝓝 (∫ (x : Ω), ↑f x ∂↑μ))
f : Ω →ᵇ ℝ≥0
key :
  Tendsto (fun n => ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs n))) F (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))) ↔
    Tendsto (fun i => ∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs i)) F (𝓝 (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))
lip : LipschitzWith 1 NNReal.toReal
f₀ : Ω →ᵇ ℝ := comp NNReal.toReal lip f
_def_f₀ : f₀ = comp NNReal.toReal lip f
⊢ ↑f₀ = NNReal.toReal ∘ ↑f
[PROOFSTEP]
rfl
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
h : ∀ (f : Ω →ᵇ ℝ), Tendsto (fun i => ∫ (x : Ω), ↑f x ∂↑(μs i)) F (𝓝 (∫ (x : Ω), ↑f x ∂↑μ))
f : Ω →ᵇ ℝ≥0
key :
  Tendsto (fun n => ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs n))) F (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))) ↔
    Tendsto (fun i => ∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs i)) F (𝓝 (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))
lip : LipschitzWith 1 NNReal.toReal
f₀ : Ω →ᵇ ℝ := comp NNReal.toReal lip f
_def_f₀ : f₀ = comp NNReal.toReal lip f
f₀_eq : ↑f₀ = NNReal.toReal ∘ ↑f
⊢ Tendsto (fun n => ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs n))) F (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ)))
[PROOFSTEP]
have f₀_nn : 0 ≤ ⇑f₀ := fun _ => by simp only [f₀_eq, Pi.zero_apply, Function.comp_apply, NNReal.zero_le_coe]
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
h : ∀ (f : Ω →ᵇ ℝ), Tendsto (fun i => ∫ (x : Ω), ↑f x ∂↑(μs i)) F (𝓝 (∫ (x : Ω), ↑f x ∂↑μ))
f : Ω →ᵇ ℝ≥0
key :
  Tendsto (fun n => ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs n))) F (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))) ↔
    Tendsto (fun i => ∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs i)) F (𝓝 (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))
lip : LipschitzWith 1 NNReal.toReal
f₀ : Ω →ᵇ ℝ := comp NNReal.toReal lip f
_def_f₀ : f₀ = comp NNReal.toReal lip f
f₀_eq : ↑f₀ = NNReal.toReal ∘ ↑f
x✝ : Ω
⊢ OfNat.ofNat 0 x✝ ≤ ↑f₀ x✝
[PROOFSTEP]
simp only [f₀_eq, Pi.zero_apply, Function.comp_apply, NNReal.zero_le_coe]
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
h : ∀ (f : Ω →ᵇ ℝ), Tendsto (fun i => ∫ (x : Ω), ↑f x ∂↑(μs i)) F (𝓝 (∫ (x : Ω), ↑f x ∂↑μ))
f : Ω →ᵇ ℝ≥0
key :
  Tendsto (fun n => ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs n))) F (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))) ↔
    Tendsto (fun i => ∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs i)) F (𝓝 (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))
lip : LipschitzWith 1 NNReal.toReal
f₀ : Ω →ᵇ ℝ := comp NNReal.toReal lip f
_def_f₀ : f₀ = comp NNReal.toReal lip f
f₀_eq : ↑f₀ = NNReal.toReal ∘ ↑f
f₀_nn : 0 ≤ ↑f₀
⊢ Tendsto (fun n => ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs n))) F (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ)))
[PROOFSTEP]
have f₀_ae_nn : 0 ≤ᵐ[(μ : Measure Ω)] ⇑f₀ := eventually_of_forall f₀_nn
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
h : ∀ (f : Ω →ᵇ ℝ), Tendsto (fun i => ∫ (x : Ω), ↑f x ∂↑(μs i)) F (𝓝 (∫ (x : Ω), ↑f x ∂↑μ))
f : Ω →ᵇ ℝ≥0
key :
  Tendsto (fun n => ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs n))) F (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))) ↔
    Tendsto (fun i => ∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs i)) F (𝓝 (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))
lip : LipschitzWith 1 NNReal.toReal
f₀ : Ω →ᵇ ℝ := comp NNReal.toReal lip f
_def_f₀ : f₀ = comp NNReal.toReal lip f
f₀_eq : ↑f₀ = NNReal.toReal ∘ ↑f
f₀_nn : 0 ≤ ↑f₀
f₀_ae_nn : 0 ≤ᵐ[↑μ] ↑f₀
⊢ Tendsto (fun n => ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs n))) F (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ)))
[PROOFSTEP]
have f₀_ae_nns : ∀ i, 0 ≤ᵐ[(μs i : Measure Ω)] ⇑f₀ := fun i => eventually_of_forall f₀_nn
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
h : ∀ (f : Ω →ᵇ ℝ), Tendsto (fun i => ∫ (x : Ω), ↑f x ∂↑(μs i)) F (𝓝 (∫ (x : Ω), ↑f x ∂↑μ))
f : Ω →ᵇ ℝ≥0
key :
  Tendsto (fun n => ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs n))) F (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))) ↔
    Tendsto (fun i => ∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs i)) F (𝓝 (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))
lip : LipschitzWith 1 NNReal.toReal
f₀ : Ω →ᵇ ℝ := comp NNReal.toReal lip f
_def_f₀ : f₀ = comp NNReal.toReal lip f
f₀_eq : ↑f₀ = NNReal.toReal ∘ ↑f
f₀_nn : 0 ≤ ↑f₀
f₀_ae_nn : 0 ≤ᵐ[↑μ] ↑f₀
f₀_ae_nns : ∀ (i : γ), 0 ≤ᵐ[↑(μs i)] ↑f₀
⊢ Tendsto (fun n => ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs n))) F (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ)))
[PROOFSTEP]
have aux := integral_eq_lintegral_of_nonneg_ae f₀_ae_nn f₀.continuous.measurable.aestronglyMeasurable
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
h : ∀ (f : Ω →ᵇ ℝ), Tendsto (fun i => ∫ (x : Ω), ↑f x ∂↑(μs i)) F (𝓝 (∫ (x : Ω), ↑f x ∂↑μ))
f : Ω →ᵇ ℝ≥0
key :
  Tendsto (fun n => ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs n))) F (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))) ↔
    Tendsto (fun i => ∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs i)) F (𝓝 (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))
lip : LipschitzWith 1 NNReal.toReal
f₀ : Ω →ᵇ ℝ := comp NNReal.toReal lip f
_def_f₀ : f₀ = comp NNReal.toReal lip f
f₀_eq : ↑f₀ = NNReal.toReal ∘ ↑f
f₀_nn : 0 ≤ ↑f₀
f₀_ae_nn : 0 ≤ᵐ[↑μ] ↑f₀
f₀_ae_nns : ∀ (i : γ), 0 ≤ᵐ[↑(μs i)] ↑f₀
aux : ∫ (a : Ω), ↑f₀ a ∂↑μ = ENNReal.toReal (∫⁻ (a : Ω), ENNReal.ofReal (↑f₀ a) ∂↑μ)
⊢ Tendsto (fun n => ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs n))) F (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ)))
[PROOFSTEP]
have auxs := fun i => integral_eq_lintegral_of_nonneg_ae (f₀_ae_nns i) f₀.continuous.measurable.aestronglyMeasurable
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
h : ∀ (f : Ω →ᵇ ℝ), Tendsto (fun i => ∫ (x : Ω), ↑f x ∂↑(μs i)) F (𝓝 (∫ (x : Ω), ↑f x ∂↑μ))
f : Ω →ᵇ ℝ≥0
key :
  Tendsto (fun n => ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs n))) F (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))) ↔
    Tendsto (fun i => ∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs i)) F (𝓝 (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))
lip : LipschitzWith 1 NNReal.toReal
f₀ : Ω →ᵇ ℝ := comp NNReal.toReal lip f
_def_f₀ : f₀ = comp NNReal.toReal lip f
f₀_eq : ↑f₀ = NNReal.toReal ∘ ↑f
f₀_nn : 0 ≤ ↑f₀
f₀_ae_nn : 0 ≤ᵐ[↑μ] ↑f₀
f₀_ae_nns : ∀ (i : γ), 0 ≤ᵐ[↑(μs i)] ↑f₀
aux : ∫ (a : Ω), ↑f₀ a ∂↑μ = ENNReal.toReal (∫⁻ (a : Ω), ENNReal.ofReal (↑f₀ a) ∂↑μ)
auxs : ∀ (i : γ), ∫ (a : Ω), ↑f₀ a ∂↑(μs i) = ENNReal.toReal (∫⁻ (a : Ω), ENNReal.ofReal (↑f₀ a) ∂↑(μs i))
⊢ Tendsto (fun n => ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs n))) F (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ)))
[PROOFSTEP]
simp_rw [f₀_eq, Function.comp_apply, ENNReal.ofReal_coe_nnreal] at aux auxs
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
h : ∀ (f : Ω →ᵇ ℝ), Tendsto (fun i => ∫ (x : Ω), ↑f x ∂↑(μs i)) F (𝓝 (∫ (x : Ω), ↑f x ∂↑μ))
f : Ω →ᵇ ℝ≥0
key :
  Tendsto (fun n => ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs n))) F (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))) ↔
    Tendsto (fun i => ∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs i)) F (𝓝 (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ))
lip : LipschitzWith 1 NNReal.toReal
f₀ : Ω →ᵇ ℝ := comp NNReal.toReal lip f
_def_f₀ : f₀ = comp NNReal.toReal lip f
f₀_eq : ↑f₀ = NNReal.toReal ∘ ↑f
f₀_nn : 0 ≤ ↑f₀
f₀_ae_nn : 0 ≤ᵐ[↑μ] ↑f₀
f₀_ae_nns : ∀ (i : γ), 0 ≤ᵐ[↑(μs i)] ↑f₀
aux : ∫ (a : Ω), ↑(↑f a) ∂↑μ = ENNReal.toReal (∫⁻ (a : Ω), ↑(↑f a) ∂↑μ)
auxs : ∀ (i : γ), ∫ (a : Ω), ↑(↑f a) ∂↑(μs i) = ENNReal.toReal (∫⁻ (a : Ω), ↑(↑f a) ∂↑(μs i))
⊢ Tendsto (fun n => ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑(μs n))) F (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f ω) ∂↑μ)))
[PROOFSTEP]
simpa only [← aux, ← auxs] using h f₀
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
f : Ω →ᵇ ℝ≥0
μ : Measure Ω
⊢ ENNReal.toReal (∫⁻ (x : Ω), ↑(↑f x) ∂μ) = ∫ (x : Ω), ↑(↑f x) ∂μ
[PROOFSTEP]
rw [integral_eq_lintegral_of_nonneg_ae _
    (by simpa [Function.comp_apply] using (NNReal.continuous_coe.comp f.continuous).measurable.aestronglyMeasurable)]
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
f : Ω →ᵇ ℝ≥0
μ : Measure Ω
⊢ AEStronglyMeasurable (fun x => ↑(↑f x)) μ
[PROOFSTEP]
simpa [Function.comp_apply] using (NNReal.continuous_coe.comp f.continuous).measurable.aestronglyMeasurable
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
f : Ω →ᵇ ℝ≥0
μ : Measure Ω
⊢ ENNReal.toReal (∫⁻ (x : Ω), ↑(↑f x) ∂μ) = ENNReal.toReal (∫⁻ (a : Ω), ENNReal.ofReal ↑(↑f a) ∂μ)
[PROOFSTEP]
simp only [ENNReal.ofReal_coe_nnreal]
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
f : Ω →ᵇ ℝ≥0
μ : Measure Ω
⊢ 0 ≤ᵐ[μ] fun x => ↑(↑f x)
[PROOFSTEP]
apply eventually_of_forall
[GOAL]
case hp
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
f : Ω →ᵇ ℝ≥0
μ : Measure Ω
⊢ ∀ (x : Ω), OfNat.ofNat 0 x ≤ (fun x => ↑(↑f x)) x
[PROOFSTEP]
simp only [Pi.zero_apply, NNReal.zero_le_coe, imp_true_iff]
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
⊢ Tendsto μs F (𝓝 μ) ↔ ∀ (f : Ω →ᵇ ℝ), Tendsto (fun i => ∫ (x : Ω), ↑f x ∂↑(μs i)) F (𝓝 (∫ (x : Ω), ↑f x ∂↑μ))
[PROOFSTEP]
refine' ⟨_, tendsto_of_forall_integral_tendsto⟩
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
⊢ Tendsto μs F (𝓝 μ) → ∀ (f : Ω →ᵇ ℝ), Tendsto (fun i => ∫ (x : Ω), ↑f x ∂↑(μs i)) F (𝓝 (∫ (x : Ω), ↑f x ∂↑μ))
[PROOFSTEP]
rw [tendsto_iff_forall_lintegral_tendsto]
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
⊢ (∀ (f : Ω →ᵇ ℝ≥0), Tendsto (fun i => ∫⁻ (x : Ω), ↑(↑f x) ∂↑(μs i)) F (𝓝 (∫⁻ (x : Ω), ↑(↑f x) ∂↑μ))) →
    ∀ (f : Ω →ᵇ ℝ), Tendsto (fun i => ∫ (x : Ω), ↑f x ∂↑(μs i)) F (𝓝 (∫ (x : Ω), ↑f x ∂↑μ))
[PROOFSTEP]
intro h f
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
h : ∀ (f : Ω →ᵇ ℝ≥0), Tendsto (fun i => ∫⁻ (x : Ω), ↑(↑f x) ∂↑(μs i)) F (𝓝 (∫⁻ (x : Ω), ↑(↑f x) ∂↑μ))
f : Ω →ᵇ ℝ
⊢ Tendsto (fun i => ∫ (x : Ω), ↑f x ∂↑(μs i)) F (𝓝 (∫ (x : Ω), ↑f x ∂↑μ))
[PROOFSTEP]
simp_rw [BoundedContinuousFunction.integral_eq_integral_nnrealPart_sub]
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
h : ∀ (f : Ω →ᵇ ℝ≥0), Tendsto (fun i => ∫⁻ (x : Ω), ↑(↑f x) ∂↑(μs i)) F (𝓝 (∫⁻ (x : Ω), ↑(↑f x) ∂↑μ))
f : Ω →ᵇ ℝ
⊢ Tendsto (fun i => ∫ (ω : Ω), ↑(↑(nnrealPart f) ω) ∂↑(μs i) - ∫ (ω : Ω), ↑(↑(nnrealPart (-f)) ω) ∂↑(μs i)) F
    (𝓝 (∫ (ω : Ω), ↑(↑(nnrealPart f) ω) ∂↑μ - ∫ (ω : Ω), ↑(↑(nnrealPart (-f)) ω) ∂↑μ))
[PROOFSTEP]
set f_pos := f.nnrealPart with _def_f_pos
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
h : ∀ (f : Ω →ᵇ ℝ≥0), Tendsto (fun i => ∫⁻ (x : Ω), ↑(↑f x) ∂↑(μs i)) F (𝓝 (∫⁻ (x : Ω), ↑(↑f x) ∂↑μ))
f : Ω →ᵇ ℝ
f_pos : Ω →ᵇ ℝ≥0 := nnrealPart f
_def_f_pos : f_pos = nnrealPart f
⊢ Tendsto (fun i => ∫ (ω : Ω), ↑(↑f_pos ω) ∂↑(μs i) - ∫ (ω : Ω), ↑(↑(nnrealPart (-f)) ω) ∂↑(μs i)) F
    (𝓝 (∫ (ω : Ω), ↑(↑f_pos ω) ∂↑μ - ∫ (ω : Ω), ↑(↑(nnrealPart (-f)) ω) ∂↑μ))
[PROOFSTEP]
set f_neg := (-f).nnrealPart with _def_f_neg
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
h : ∀ (f : Ω →ᵇ ℝ≥0), Tendsto (fun i => ∫⁻ (x : Ω), ↑(↑f x) ∂↑(μs i)) F (𝓝 (∫⁻ (x : Ω), ↑(↑f x) ∂↑μ))
f : Ω →ᵇ ℝ
f_pos : Ω →ᵇ ℝ≥0 := nnrealPart f
_def_f_pos : f_pos = nnrealPart f
f_neg : Ω →ᵇ ℝ≥0 := nnrealPart (-f)
_def_f_neg : f_neg = nnrealPart (-f)
⊢ Tendsto (fun i => ∫ (ω : Ω), ↑(↑f_pos ω) ∂↑(μs i) - ∫ (ω : Ω), ↑(↑f_neg ω) ∂↑(μs i)) F
    (𝓝 (∫ (ω : Ω), ↑(↑f_pos ω) ∂↑μ - ∫ (ω : Ω), ↑(↑f_neg ω) ∂↑μ))
[PROOFSTEP]
have tends_pos :=
  (ENNReal.tendsto_toReal (lintegral_lt_top_of_boundedContinuous_to_nnreal (μ : Measure Ω) f_pos).ne).comp (h f_pos)
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
h : ∀ (f : Ω →ᵇ ℝ≥0), Tendsto (fun i => ∫⁻ (x : Ω), ↑(↑f x) ∂↑(μs i)) F (𝓝 (∫⁻ (x : Ω), ↑(↑f x) ∂↑μ))
f : Ω →ᵇ ℝ
f_pos : Ω →ᵇ ℝ≥0 := nnrealPart f
_def_f_pos : f_pos = nnrealPart f
f_neg : Ω →ᵇ ℝ≥0 := nnrealPart (-f)
_def_f_neg : f_neg = nnrealPart (-f)
tends_pos :
  Tendsto (ENNReal.toReal ∘ fun i => ∫⁻ (x : Ω), ↑(↑f_pos x) ∂↑(μs i)) F
    (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f_pos ω) ∂↑μ)))
⊢ Tendsto (fun i => ∫ (ω : Ω), ↑(↑f_pos ω) ∂↑(μs i) - ∫ (ω : Ω), ↑(↑f_neg ω) ∂↑(μs i)) F
    (𝓝 (∫ (ω : Ω), ↑(↑f_pos ω) ∂↑μ - ∫ (ω : Ω), ↑(↑f_neg ω) ∂↑μ))
[PROOFSTEP]
have tends_neg :=
  (ENNReal.tendsto_toReal (lintegral_lt_top_of_boundedContinuous_to_nnreal (μ : Measure Ω) f_neg).ne).comp (h f_neg)
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
h : ∀ (f : Ω →ᵇ ℝ≥0), Tendsto (fun i => ∫⁻ (x : Ω), ↑(↑f x) ∂↑(μs i)) F (𝓝 (∫⁻ (x : Ω), ↑(↑f x) ∂↑μ))
f : Ω →ᵇ ℝ
f_pos : Ω →ᵇ ℝ≥0 := nnrealPart f
_def_f_pos : f_pos = nnrealPart f
f_neg : Ω →ᵇ ℝ≥0 := nnrealPart (-f)
_def_f_neg : f_neg = nnrealPart (-f)
tends_pos :
  Tendsto (ENNReal.toReal ∘ fun i => ∫⁻ (x : Ω), ↑(↑f_pos x) ∂↑(μs i)) F
    (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f_pos ω) ∂↑μ)))
tends_neg :
  Tendsto (ENNReal.toReal ∘ fun i => ∫⁻ (x : Ω), ↑(↑f_neg x) ∂↑(μs i)) F
    (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f_neg ω) ∂↑μ)))
⊢ Tendsto (fun i => ∫ (ω : Ω), ↑(↑f_pos ω) ∂↑(μs i) - ∫ (ω : Ω), ↑(↑f_neg ω) ∂↑(μs i)) F
    (𝓝 (∫ (ω : Ω), ↑(↑f_pos ω) ∂↑μ - ∫ (ω : Ω), ↑(↑f_neg ω) ∂↑μ))
[PROOFSTEP]
have aux :
  ∀ g : Ω →ᵇ ℝ≥0,
    (ENNReal.toReal ∘ fun i : γ => ∫⁻ x : Ω, ↑(g x) ∂(μs i : Measure Ω)) = fun i : γ =>
      (∫⁻ x : Ω, ↑(g x) ∂(μs i : Measure Ω)).toReal :=
  fun _ => rfl
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
h : ∀ (f : Ω →ᵇ ℝ≥0), Tendsto (fun i => ∫⁻ (x : Ω), ↑(↑f x) ∂↑(μs i)) F (𝓝 (∫⁻ (x : Ω), ↑(↑f x) ∂↑μ))
f : Ω →ᵇ ℝ
f_pos : Ω →ᵇ ℝ≥0 := nnrealPart f
_def_f_pos : f_pos = nnrealPart f
f_neg : Ω →ᵇ ℝ≥0 := nnrealPart (-f)
_def_f_neg : f_neg = nnrealPart (-f)
tends_pos :
  Tendsto (ENNReal.toReal ∘ fun i => ∫⁻ (x : Ω), ↑(↑f_pos x) ∂↑(μs i)) F
    (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f_pos ω) ∂↑μ)))
tends_neg :
  Tendsto (ENNReal.toReal ∘ fun i => ∫⁻ (x : Ω), ↑(↑f_neg x) ∂↑(μs i)) F
    (𝓝 (ENNReal.toReal (∫⁻ (ω : Ω), ↑(↑f_neg ω) ∂↑μ)))
aux :
  ∀ (g : Ω →ᵇ ℝ≥0),
    (ENNReal.toReal ∘ fun i => ∫⁻ (x : Ω), ↑(↑g x) ∂↑(μs i)) = fun i => ENNReal.toReal (∫⁻ (x : Ω), ↑(↑g x) ∂↑(μs i))
⊢ Tendsto (fun i => ∫ (ω : Ω), ↑(↑f_pos ω) ∂↑(μs i) - ∫ (ω : Ω), ↑(↑f_neg ω) ∂↑(μs i)) F
    (𝓝 (∫ (ω : Ω), ↑(↑f_pos ω) ∂↑μ - ∫ (ω : Ω), ↑(↑f_neg ω) ∂↑μ))
[PROOFSTEP]
simp_rw [aux, BoundedContinuousFunction.NNReal.toReal_lintegral_eq_integral] at tends_pos tends_neg
[GOAL]
Ω : Type u_1
inst✝² : MeasurableSpace Ω
inst✝¹ : TopologicalSpace Ω
inst✝ : OpensMeasurableSpace Ω
γ : Type u_2
F : Filter γ
μs : γ → FiniteMeasure Ω
μ : FiniteMeasure Ω
h : ∀ (f : Ω →ᵇ ℝ≥0), Tendsto (fun i => ∫⁻ (x : Ω), ↑(↑f x) ∂↑(μs i)) F (𝓝 (∫⁻ (x : Ω), ↑(↑f x) ∂↑μ))
f : Ω →ᵇ ℝ
f_pos : Ω →ᵇ ℝ≥0 := nnrealPart f
_def_f_pos : f_pos = nnrealPart f
f_neg : Ω →ᵇ ℝ≥0 := nnrealPart (-f)
_def_f_neg : f_neg = nnrealPart (-f)
aux :
  ∀ (g : Ω →ᵇ ℝ≥0),
    (ENNReal.toReal ∘ fun i => ∫⁻ (x : Ω), ↑(↑g x) ∂↑(μs i)) = fun i => ENNReal.toReal (∫⁻ (x : Ω), ↑(↑g x) ∂↑(μs i))
tends_pos : Tendsto (fun i => ∫ (x : Ω), ↑(↑(nnrealPart f) x) ∂↑(μs i)) F (𝓝 (∫ (x : Ω), ↑(↑(nnrealPart f) x) ∂↑μ))
tends_neg :
  Tendsto (fun i => ∫ (x : Ω), ↑(↑(nnrealPart (-f)) x) ∂↑(μs i)) F (𝓝 (∫ (x : Ω), ↑(↑(nnrealPart (-f)) x) ∂↑μ))
⊢ Tendsto (fun i => ∫ (ω : Ω), ↑(↑f_pos ω) ∂↑(μs i) - ∫ (ω : Ω), ↑(↑f_neg ω) ∂↑(μs i)) F
    (𝓝 (∫ (ω : Ω), ↑(↑f_pos ω) ∂↑μ - ∫ (ω : Ω), ↑(↑f_neg ω) ∂↑μ))
[PROOFSTEP]
exact Tendsto.sub tends_pos tends_neg