-- File: FoML/FoML/BoundedDifference.lean
Theorem statement:
theorem extracted_formal_statement_54.{w, v, u} {Ω : Type u} [inst : MeasurableSpace Ω] {Z : Type w} {n : ℕ} {ι : Type v}
  {f : ι → Z → ℝ} {μ : Measure Ω} [inst_1 : Nonempty ι] [inst_2 : IsProbabilityMeasure μ] (hn : 0 < n) (X : Ω → Z)
  (hf : ∀ (i : ι), Measurable (f i ∘ X)) {b : ℝ} (hb : 0 ≤ b) (hf' : ∀ (i : ι) (z : Z), |f i z| ≤ b) (i : Fin n)
  (x : Fin n → Z) (x' : Z) :
  let g := fun i => (↑n)⁻¹ * ∑ k, f i (x k) - ∫ (x : Ω), f i (X x) ∂μ;
  let h := fun i_1 => (↑n)⁻¹ * ∑ k, f i_1 (Function.update x i x' k) - ∫ (x : Ω), f i_1 (X x) ∂μ;
  (∀ (a : ι), |∫ (x : Ω), f a (X x) ∂μ| ≤ b) →
    (∀ (j : ι), |g j - h j| ≤ (↑n)⁻¹ * 2 * b) →
      (⨆ i, |g i|) - ⨆ i_1, |h i_1| = ⨆ i, |g i| - ⨆ i_1, |h i_1| → 0 < (↑n)⁻¹ * 2 := sorry

Tactic state before:
Ω : Type u
inst✝² : MeasurableSpace Ω
Z : Type w
n : ℕ
ι : Type v
f : ι → Z → ℝ
μ : Measure Ω
inst✝¹ : Nonempty ι
inst✝ : IsProbabilityMeasure μ
hn : 0 < n
X : Ω → Z
hf : ∀ (i : ι), Measurable (f i ∘ X)
b : ℝ
hb : 0 ≤ b
hf' : ∀ (i : ι) (z : Z), |f i z| ≤ b
i : Fin n
x : Fin n → Z
x' : Z
g : ι → ℝ := fun i => (↑n)⁻¹ * ∑ k, f i (x k) - ∫ (x : Ω), f i (X x) ∂μ
h : ι → ℝ := fun i_1 => (↑n)⁻¹ * ∑ k, f i_1 (Function.update x i x' k) - ∫ (x : Ω), f i_1 (X x) ∂μ
s' : ∀ (a : ι), |∫ (x : Ω), f a (X x) ∂μ| ≤ b
p''' : ∀ (j : ι), |g j - h j| ≤ (↑n)⁻¹ * 2 * b
p0 : (⨆ i, |g i|) - ⨆ i_1, |h i_1| = ⨆ i, |g i| - ⨆ i_1, |h i_1|
⊢ 0 < (↑n)⁻¹ * 2

Tactic: apply Left.mul_pos (inv_pos_of_pos (Nat.cast_pos.mpr hn)) (by linarith)

Tactic state after:

Premises used:
inv_pos_of_pos : ∀ {G₀ : Type u_2} [inst : GroupWithZero G₀] [inst_3 : PartialOrder G₀] [inst_4 : ZeroLEOneClass G₀]
  [inst_5 : PosMulReflectLT G₀] {a : G₀}, 0 < a → 0 < a⁻¹
Left.mul_pos : ∀ {α : Type u_3} {a b : α} [inst : MulZeroClass α] [inst_3 : Preorder α] [inst_4 : PosMulStrictMono α],
  0 < a → 0 < b → 0 < a * b