[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
f : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
π : Prepartition I
πi : (J : Box ι) → TaggedPrepartition J
⊢ integralSum f vol (Prepartition.biUnionTagged π πi) = ∑ J in π.boxes, integralSum f vol (πi J)
[PROOFSTEP]
refine (π.sum_biUnion_boxes _ _).trans <| sum_congr rfl fun J hJ => sum_congr rfl fun J' hJ' => ?_
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
I J✝ : Box ι
π✝ : TaggedPrepartition I
f : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
π : Prepartition I
πi : (J : Box ι) → TaggedPrepartition J
J : Box ι
hJ : J ∈ π.boxes
J' : Box ι
hJ' : J' ∈ (πi J).boxes
⊢ ↑(↑vol J') (f (tag (Prepartition.biUnionTagged π πi) J')) = ↑(↑vol J') (f (tag (πi J) J'))
[PROOFSTEP]
rw [π.tag_biUnionTagged hJ hJ']
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
f : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
π : TaggedPrepartition I
πi : (J : Box ι) → Prepartition J
hπi : ∀ (J : Box ι), J ∈ π → Prepartition.IsPartition (πi J)
⊢ integralSum f vol (biUnionPrepartition π πi) = integralSum f vol π
[PROOFSTEP]
refine' (π.sum_biUnion_boxes _ _).trans (sum_congr rfl fun J hJ => _)
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
I J✝ : Box ι
π✝ : TaggedPrepartition I
f : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
π : TaggedPrepartition I
πi : (J : Box ι) → Prepartition J
hπi : ∀ (J : Box ι), J ∈ π → Prepartition.IsPartition (πi J)
J : Box ι
hJ : J ∈ π.boxes
⊢ ∑ J' in (πi J).boxes, ↑(↑vol J') (f (tag (biUnionPrepartition π πi) J')) = ↑(↑vol J) (f (tag π J))
[PROOFSTEP]
calc
  (∑ J' in (πi J).boxes, vol J' (f (π.tag <| π.toPrepartition.biUnionIndex πi J'))) =
      ∑ J' in (πi J).boxes, vol J' (f (π.tag J)) :=
    sum_congr rfl fun J' hJ' => by rw [Prepartition.biUnionIndex_of_mem _ hJ hJ']
  _ = vol J (f (π.tag J)) :=
    (vol.map ⟨⟨fun g : E →L[ℝ] F => g (f (π.tag J)), rfl⟩, fun _ _ => rfl⟩).sum_partition_boxes le_top (hπi J hJ)
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
I J✝ : Box ι
π✝ : TaggedPrepartition I
f : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
π : TaggedPrepartition I
πi : (J : Box ι) → Prepartition J
hπi : ∀ (J : Box ι), J ∈ π → Prepartition.IsPartition (πi J)
J : Box ι
hJ : J ∈ π.boxes
J' : Box ι
hJ' : J' ∈ (πi J).boxes
⊢ ↑(↑vol J') (f (tag π (Prepartition.biUnionIndex π.toPrepartition πi J'))) = ↑(↑vol J') (f (tag π J))
[PROOFSTEP]
rw [Prepartition.biUnionIndex_of_mem _ hJ hJ']
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
f : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
π₁ π₂ : TaggedPrepartition I
h₁ : IsPartition π₁
h₂ : IsPartition π₂
⊢ integralSum f vol π₁ - integralSum f vol π₂ =
    ∑ J in (π₁.toPrepartition ⊓ π₂.toPrepartition).boxes,
      (↑(↑vol J) (f (tag (infPrepartition π₁ π₂.toPrepartition) J)) -
        ↑(↑vol J) (f (tag (infPrepartition π₂ π₁.toPrepartition) J)))
[PROOFSTEP]
rw [← integralSum_inf_partition f vol π₁ h₂, ← integralSum_inf_partition f vol π₂ h₁, integralSum, integralSum,
  Finset.sum_sub_distrib]
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
f : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
π₁ π₂ : TaggedPrepartition I
h₁ : IsPartition π₁
h₂ : IsPartition π₂
⊢ ∑ J in (infPrepartition π₁ π₂.toPrepartition).toPrepartition.boxes,
        ↑(↑vol J) (f (tag (infPrepartition π₁ π₂.toPrepartition) J)) -
      ∑ J in (infPrepartition π₂ π₁.toPrepartition).toPrepartition.boxes,
        ↑(↑vol J) (f (tag (infPrepartition π₂ π₁.toPrepartition) J)) =
    ∑ x in (π₁.toPrepartition ⊓ π₂.toPrepartition).boxes, ↑(↑vol x) (f (tag (infPrepartition π₁ π₂.toPrepartition) x)) -
      ∑ x in (π₁.toPrepartition ⊓ π₂.toPrepartition).boxes, ↑(↑vol x) (f (tag (infPrepartition π₂ π₁.toPrepartition) x))
[PROOFSTEP]
simp only [infPrepartition_toPrepartition, inf_comm]
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
f : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
π₁ π₂ : TaggedPrepartition I
h : Disjoint (TaggedPrepartition.iUnion π₁) (TaggedPrepartition.iUnion π₂)
⊢ integralSum f vol (TaggedPrepartition.disjUnion π₁ π₂ h) = integralSum f vol π₁ + integralSum f vol π₂
[PROOFSTEP]
refine'
  (Prepartition.sum_disj_union_boxes h _).trans
    (congr_arg₂ (· + ·) (sum_congr rfl fun J hJ => _) (sum_congr rfl fun J hJ => _))
[GOAL]
case refine'_1
ι : Type u
E : Type v
F : Type w
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
I J✝ : Box ι
π : TaggedPrepartition I
f : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
π₁ π₂ : TaggedPrepartition I
h : Disjoint (TaggedPrepartition.iUnion π₁) (TaggedPrepartition.iUnion π₂)
J : Box ι
hJ : J ∈ π₁.boxes
⊢ ↑(↑vol J) (f (tag (TaggedPrepartition.disjUnion π₁ π₂ h) J)) = ↑(↑vol J) (f (tag π₁ J))
[PROOFSTEP]
rw [disjUnion_tag_of_mem_left _ hJ]
[GOAL]
case refine'_2
ι : Type u
E : Type v
F : Type w
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
I J✝ : Box ι
π : TaggedPrepartition I
f : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
π₁ π₂ : TaggedPrepartition I
h : Disjoint (TaggedPrepartition.iUnion π₁) (TaggedPrepartition.iUnion π₂)
J : Box ι
hJ : J ∈ π₂.boxes
⊢ ↑(↑vol J) (f (tag (TaggedPrepartition.disjUnion π₁ π₂ h) J)) = ↑(↑vol J) (f (tag π₂ J))
[PROOFSTEP]
rw [disjUnion_tag_of_mem_right _ hJ]
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
π : TaggedPrepartition I
⊢ integralSum (f + g) vol π = integralSum f vol π + integralSum g vol π
[PROOFSTEP]
simp only [integralSum, Pi.add_apply, (vol _).map_add, Finset.sum_add_distrib]
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
f : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
π : TaggedPrepartition I
⊢ integralSum (-f) vol π = -integralSum f vol π
[PROOFSTEP]
simp only [integralSum, Pi.neg_apply, (vol _).map_neg, Finset.sum_neg_distrib]
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
c : ℝ
f : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
π : TaggedPrepartition I
⊢ integralSum (c • f) vol π = c • integralSum f vol π
[PROOFSTEP]
simp only [integralSum, Finset.smul_sum, Pi.smul_apply, ContinuousLinearMap.map_smul]
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
⊢ (∀ (ib : ℝ),
      0 < ib →
        ∃ ia,
          (∀ (c : ℝ≥0), RCond l (ia c)) ∧
            ∀ (x : TaggedPrepartition I),
              x ∈ {π | ∃ c, MemBaseSet l I c (ia c) π ∧ IsPartition π} → integralSum f vol x ∈ closedBall y ib) ↔
    ∀ (ε : ℝ),
      ε > 0 →
        ∃ r,
          (∀ (c : ℝ≥0), RCond l (r c)) ∧
            ∀ (c : ℝ≥0) (π : TaggedPrepartition I),
              MemBaseSet l I c (r c) π → IsPartition π → dist (integralSum f vol π) y ≤ ε
[PROOFSTEP]
simp [@forall_swap ℝ≥0 (TaggedPrepartition I)]
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
a : ℝ
h :
  ∀ (ε : ℝ),
    0 < ε →
      ∃ r,
        (∀ (c : ℝ≥0), RCond l (r c)) ∧
          ∀ (c : ℝ≥0) (π : TaggedPrepartition I),
            MemBaseSet l I c (r c) π → IsPartition π → dist (integralSum f vol π) y ≤ a * ε
⊢ HasIntegral I l f vol y
[PROOFSTEP]
refine' hasIntegral_iff.2 fun ε hε => _
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
a : ℝ
h :
  ∀ (ε : ℝ),
    0 < ε →
      ∃ r,
        (∀ (c : ℝ≥0), RCond l (r c)) ∧
          ∀ (c : ℝ≥0) (π : TaggedPrepartition I),
            MemBaseSet l I c (r c) π → IsPartition π → dist (integralSum f vol π) y ≤ a * ε
ε : ℝ
hε : ε > 0
⊢ ∃ r,
    (∀ (c : ℝ≥0), RCond l (r c)) ∧
      ∀ (c : ℝ≥0) (π : TaggedPrepartition I),
        MemBaseSet l I c (r c) π → IsPartition π → dist (integralSum f vol π) y ≤ ε
[PROOFSTEP]
rcases exists_pos_mul_lt hε a with ⟨ε', hε', ha⟩
[GOAL]
case intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
a : ℝ
h :
  ∀ (ε : ℝ),
    0 < ε →
      ∃ r,
        (∀ (c : ℝ≥0), RCond l (r c)) ∧
          ∀ (c : ℝ≥0) (π : TaggedPrepartition I),
            MemBaseSet l I c (r c) π → IsPartition π → dist (integralSum f vol π) y ≤ a * ε
ε : ℝ
hε : ε > 0
ε' : ℝ
hε' : 0 < ε'
ha : a * ε' < ε
⊢ ∃ r,
    (∀ (c : ℝ≥0), RCond l (r c)) ∧
      ∀ (c : ℝ≥0) (π : TaggedPrepartition I),
        MemBaseSet l I c (r c) π → IsPartition π → dist (integralSum f vol π) y ≤ ε
[PROOFSTEP]
rcases h ε' hε' with ⟨r, hr, H⟩
[GOAL]
case intro.intro.intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
a : ℝ
h :
  ∀ (ε : ℝ),
    0 < ε →
      ∃ r,
        (∀ (c : ℝ≥0), RCond l (r c)) ∧
          ∀ (c : ℝ≥0) (π : TaggedPrepartition I),
            MemBaseSet l I c (r c) π → IsPartition π → dist (integralSum f vol π) y ≤ a * ε
ε : ℝ
hε : ε > 0
ε' : ℝ
hε' : 0 < ε'
ha : a * ε' < ε
r : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0)
hr : ∀ (c : ℝ≥0), RCond l (r c)
H :
  ∀ (c : ℝ≥0) (π : TaggedPrepartition I),
    MemBaseSet l I c (r c) π → IsPartition π → dist (integralSum f vol π) y ≤ a * ε'
⊢ ∃ r,
    (∀ (c : ℝ≥0), RCond l (r c)) ∧
      ∀ (c : ℝ≥0) (π : TaggedPrepartition I),
        MemBaseSet l I c (r c) π → IsPartition π → dist (integralSum f vol π) y ≤ ε
[PROOFSTEP]
exact ⟨r, hr, fun c π hπ hπp => (H c π hπ hπp).trans ha.le⟩
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝ : CompleteSpace F
⊢ Integrable I l f vol ↔
    ∀ (ε : ℝ),
      ε > 0 →
        ∃ r,
          (∀ (c : ℝ≥0), RCond l (r c)) ∧
            ∀ (c₁ c₂ : ℝ≥0) (π₁ π₂ : TaggedPrepartition I),
              MemBaseSet l I c₁ (r c₁) π₁ →
                IsPartition π₁ →
                  MemBaseSet l I c₂ (r c₂) π₂ → IsPartition π₂ → dist (integralSum f vol π₁) (integralSum f vol π₂) ≤ ε
[PROOFSTEP]
rw [integrable_iff_cauchy, cauchy_map_iff',
  (l.hasBasis_toFilteriUnion_top _).prod_self.tendsto_iff uniformity_basis_dist_le]
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝ : CompleteSpace F
⊢ (∀ (ib : ℝ),
      0 < ib →
        ∃ ia,
          (∀ (c : ℝ≥0), RCond l (ia c)) ∧
            ∀ (x : TaggedPrepartition I × TaggedPrepartition I),
              x ∈
                  {π | ∃ c, MemBaseSet l I c (ia c) π ∧ IsPartition π} ×ˢ
                    {π | ∃ c, MemBaseSet l I c (ia c) π ∧ IsPartition π} →
                (integralSum f vol x.fst, integralSum f vol x.snd) ∈ {p | dist p.fst p.snd ≤ ib}) ↔
    ∀ (ε : ℝ),
      ε > 0 →
        ∃ r,
          (∀ (c : ℝ≥0), RCond l (r c)) ∧
            ∀ (c₁ c₂ : ℝ≥0) (π₁ π₂ : TaggedPrepartition I),
              MemBaseSet l I c₁ (r c₁) π₁ →
                IsPartition π₁ →
                  MemBaseSet l I c₂ (r c₂) π₂ → IsPartition π₂ → dist (integralSum f vol π₁) (integralSum f vol π₂) ≤ ε
[PROOFSTEP]
refine' forall₂_congr fun ε _ => exists_congr fun r => _
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝ : CompleteSpace F
ε : ℝ
x✝ : 0 < ε
r : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0)
⊢ ((∀ (c : ℝ≥0), RCond l (r c)) ∧
      ∀ (x : TaggedPrepartition I × TaggedPrepartition I),
        x ∈ {π | ∃ c, MemBaseSet l I c (r c) π ∧ IsPartition π} ×ˢ {π | ∃ c, MemBaseSet l I c (r c) π ∧ IsPartition π} →
          (integralSum f vol x.fst, integralSum f vol x.snd) ∈ {p | dist p.fst p.snd ≤ ε}) ↔
    (∀ (c : ℝ≥0), RCond l (r c)) ∧
      ∀ (c₁ c₂ : ℝ≥0) (π₁ π₂ : TaggedPrepartition I),
        MemBaseSet l I c₁ (r c₁) π₁ →
          IsPartition π₁ →
            MemBaseSet l I c₂ (r c₂) π₂ → IsPartition π₂ → dist (integralSum f vol π₁) (integralSum f vol π₂) ≤ ε
[PROOFSTEP]
simp only [exists_prop, Prod.forall, Set.mem_iUnion, exists_imp, prod_mk_mem_set_prod_eq, and_imp, mem_inter_iff,
  mem_setOf_eq]
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝ : CompleteSpace F
ε : ℝ
x✝ : 0 < ε
r : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0)
⊢ ((∀ (c : ℝ≥0), RCond l (r c)) ∧
      ∀ (a b : TaggedPrepartition I) (x : ℝ≥0),
        MemBaseSet l I x (r x) a →
          IsPartition a →
            ∀ (x : ℝ≥0),
              MemBaseSet l I x (r x) b → IsPartition b → dist (integralSum f vol a) (integralSum f vol b) ≤ ε) ↔
    (∀ (c : ℝ≥0), RCond l (r c)) ∧
      ∀ (c₁ c₂ : ℝ≥0) (π₁ π₂ : TaggedPrepartition I),
        MemBaseSet l I c₁ (r c₁) π₁ →
          IsPartition π₁ →
            MemBaseSet l I c₂ (r c₂) π₂ → IsPartition π₂ → dist (integralSum f vol π₁) (integralSum f vol π₂) ≤ ε
[PROOFSTEP]
exact
  and_congr Iff.rfl
    ⟨fun H c₁ c₂ π₁ π₂ h₁ hU₁ h₂ hU₂ => H π₁ π₂ c₁ h₁ hU₁ c₂ h₂ hU₂, fun H π₁ π₂ c₁ h₁ hU₁ c₂ h₂ hU₂ =>
      H c₁ c₂ π₁ π₂ h₁ hU₁ h₂ hU₂⟩
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
h : Integrable I l f vol
⊢ HasIntegral I l f vol (integral I l f vol)
[PROOFSTEP]
rw [integral, dif_pos h]
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
h : Integrable I l f vol
⊢ HasIntegral I l f vol (Exists.choose h)
[PROOFSTEP]
exact Classical.choose_spec h
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
h : HasIntegral I l f vol y
h' : HasIntegral I l g vol y'
⊢ HasIntegral I l (f + g) vol (y + y')
[PROOFSTEP]
simpa only [HasIntegral, ← integralSum_add] using h.add h'
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hf : HasIntegral I l f vol y
⊢ HasIntegral I l (-f) vol (-y)
[PROOFSTEP]
simpa only [HasIntegral, ← integralSum_neg] using hf.neg
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
h : ¬Integrable I l f vol
⊢ integral I l (-f) vol = -integral I l f vol
[PROOFSTEP]
rw [integral, integral, dif_neg h, dif_neg (mt Integrable.of_neg h), neg_zero]
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
h : HasIntegral I l f vol y
h' : HasIntegral I l g vol y'
⊢ HasIntegral I l (f - g) vol (y - y')
[PROOFSTEP]
simpa only [sub_eq_add_neg] using h.add h'.neg
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
⊢ HasIntegral I l (fun x => 0) vol 0
[PROOFSTEP]
simpa only [← (vol I).map_zero] using hasIntegral_const (0 : E)
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f✝ g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
α : Type u_1
s : Finset α
f : α → (ι → ℝ) → E
g : α → F
h : ∀ (i : α), i ∈ s → HasIntegral I l (f i) vol (g i)
⊢ HasIntegral I l (fun x => ∑ i in s, f i x) vol (∑ i in s, g i)
[PROOFSTEP]
induction' s using Finset.induction_on with a s ha ihs
[GOAL]
case empty
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f✝ g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
α : Type u_1
s : Finset α
f : α → (ι → ℝ) → E
g : α → F
h✝ : ∀ (i : α), i ∈ s → HasIntegral I l (f i) vol (g i)
h : ∀ (i : α), i ∈ ∅ → HasIntegral I l (f i) vol (g i)
⊢ HasIntegral I l (fun x => ∑ i in ∅, f i x) vol (∑ i in ∅, g i)
[PROOFSTEP]
simp [hasIntegral_zero]
[GOAL]
case insert
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f✝ g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
α : Type u_1
s✝ : Finset α
f : α → (ι → ℝ) → E
g : α → F
h✝ : ∀ (i : α), i ∈ s✝ → HasIntegral I l (f i) vol (g i)
a : α
s : Finset α
ha : ¬a ∈ s
ihs :
  (∀ (i : α), i ∈ s → HasIntegral I l (f i) vol (g i)) → HasIntegral I l (fun x => ∑ i in s, f i x) vol (∑ i in s, g i)
h : ∀ (i : α), i ∈ insert a s → HasIntegral I l (f i) vol (g i)
⊢ HasIntegral I l (fun x => ∑ i in insert a s, f i x) vol (∑ i in insert a s, g i)
[PROOFSTEP]
simp only [Finset.sum_insert ha]
[GOAL]
case insert
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f✝ g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
α : Type u_1
s✝ : Finset α
f : α → (ι → ℝ) → E
g : α → F
h✝ : ∀ (i : α), i ∈ s✝ → HasIntegral I l (f i) vol (g i)
a : α
s : Finset α
ha : ¬a ∈ s
ihs :
  (∀ (i : α), i ∈ s → HasIntegral I l (f i) vol (g i)) → HasIntegral I l (fun x => ∑ i in s, f i x) vol (∑ i in s, g i)
h : ∀ (i : α), i ∈ insert a s → HasIntegral I l (f i) vol (g i)
⊢ HasIntegral I l (fun x => f a x + ∑ i in s, f i x) vol (g a + ∑ i in s, g i)
[PROOFSTEP]
rw [Finset.forall_mem_insert] at h 
[GOAL]
case insert
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f✝ g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
α : Type u_1
s✝ : Finset α
f : α → (ι → ℝ) → E
g : α → F
h✝ : ∀ (i : α), i ∈ s✝ → HasIntegral I l (f i) vol (g i)
a : α
s : Finset α
ha : ¬a ∈ s
ihs :
  (∀ (i : α), i ∈ s → HasIntegral I l (f i) vol (g i)) → HasIntegral I l (fun x => ∑ i in s, f i x) vol (∑ i in s, g i)
h : HasIntegral I l (f a) vol (g a) ∧ ∀ (x : α), x ∈ s → HasIntegral I l (f x) vol (g x)
⊢ HasIntegral I l (fun x => f a x + ∑ i in s, f i x) vol (g a + ∑ i in s, g i)
[PROOFSTEP]
exact h.1.add (ihs h.2)
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hf : HasIntegral I l f vol y
c : ℝ
⊢ HasIntegral I l (c • f) vol (c • y)
[PROOFSTEP]
simpa only [HasIntegral, ← integralSum_smul] using (tendsto_const_nhds : Tendsto _ _ (𝓝 c)).smul hf
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c : ℝ
hf : Integrable I l (c • f) vol
hc : c ≠ 0
⊢ Integrable I l f vol
[PROOFSTEP]
simpa [inv_smul_smul₀ hc] using hf.smul c⁻¹
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c : ℝ
⊢ integral I l (fun x => c • f x) vol = c • integral I l f vol
[PROOFSTEP]
rcases eq_or_ne c 0 with (rfl | hc)
[GOAL]
case inl
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
⊢ integral I l (fun x => 0 • f x) vol = 0 • integral I l f vol
[PROOFSTEP]
simp only [zero_smul, integral_zero]
[GOAL]
case inr
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c : ℝ
hc : c ≠ 0
⊢ integral I l (fun x => c • f x) vol = c • integral I l f vol
[PROOFSTEP]
by_cases hf : Integrable I l f vol
[GOAL]
case pos
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c : ℝ
hc : c ≠ 0
hf : Integrable I l f vol
⊢ integral I l (fun x => c • f x) vol = c • integral I l f vol
[PROOFSTEP]
exact (hf.hasIntegral.smul c).integral_eq
[GOAL]
case neg
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c : ℝ
hc : c ≠ 0
hf : ¬Integrable I l f vol
⊢ integral I l (fun x => c • f x) vol = c • integral I l f vol
[PROOFSTEP]
have : ¬Integrable I l (fun x => c • f x) vol := mt (fun h => h.of_smul hc) hf
[GOAL]
case neg
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c : ℝ
hc : c ≠ 0
hf : ¬Integrable I l f vol
this : ¬Integrable I l (fun x => c • f x) vol
⊢ integral I l (fun x => c • f x) vol = c • integral I l f vol
[PROOFSTEP]
rw [integral, integral, dif_neg hf, dif_neg this, smul_zero]
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
g : (ι → ℝ) → ℝ
hg : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → 0 ≤ g x
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
⊢ 0 ≤ integral I l g (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))
[PROOFSTEP]
by_cases hgi : Integrable I l g μ.toBoxAdditive.toSMul
[GOAL]
case pos
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
g : (ι → ℝ) → ℝ
hg : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → 0 ≤ g x
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
hgi : Integrable I l g (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))
⊢ 0 ≤ integral I l g (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))
[PROOFSTEP]
refine ge_of_tendsto' hgi.hasIntegral fun π => sum_nonneg fun J _ => ?_
[GOAL]
case pos
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J✝ : Box ι
π✝ : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
g : (ι → ℝ) → ℝ
hg : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → 0 ≤ g x
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
hgi : Integrable I l g (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))
π : TaggedPrepartition I
J : Box ι
x✝ : J ∈ π.boxes
⊢ 0 ≤ ↑(↑(BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ)) J) (g (tag π J))
[PROOFSTEP]
exact mul_nonneg ENNReal.toReal_nonneg (hg _ <| π.tag_mem_Icc _)
[GOAL]
case neg
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
g : (ι → ℝ) → ℝ
hg : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → 0 ≤ g x
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
hgi : ¬Integrable I l g (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))
⊢ 0 ≤ integral I l g (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))
[PROOFSTEP]
rw [integral, dif_neg hgi]
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
g : (ι → ℝ) → ℝ
hle : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ‖f x‖ ≤ g x
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
hg : Integrable I l g (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))
⊢ ‖integral I l f (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))‖ ≤
    integral I l g (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))
[PROOFSTEP]
by_cases hfi : Integrable.{u, v, v} I l f μ.toBoxAdditive.toSMul
[GOAL]
case pos
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
g : (ι → ℝ) → ℝ
hle : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ‖f x‖ ≤ g x
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
hg : Integrable I l g (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))
hfi : Integrable I l f (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))
⊢ ‖integral I l f (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))‖ ≤
    integral I l g (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))
[PROOFSTEP]
refine' le_of_tendsto_of_tendsto' hfi.hasIntegral.norm hg.hasIntegral fun π => _
[GOAL]
case pos
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
g : (ι → ℝ) → ℝ
hle : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ‖f x‖ ≤ g x
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
hg : Integrable I l g (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))
hfi : Integrable I l f (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))
π : TaggedPrepartition I
⊢ ‖integralSum f (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ)) π‖ ≤
    integralSum g (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ)) π
[PROOFSTEP]
refine' norm_sum_le_of_le _ fun J _ => _
[GOAL]
case pos
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J✝ : Box ι
π✝ : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
g : (ι → ℝ) → ℝ
hle : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ‖f x‖ ≤ g x
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
hg : Integrable I l g (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))
hfi : Integrable I l f (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))
π : TaggedPrepartition I
J : Box ι
x✝ : J ∈ π.boxes
⊢ ‖↑(↑(BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ)) J) (f (tag π J))‖ ≤
    ↑(↑(BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ)) J) (g (tag π J))
[PROOFSTEP]
simp only [BoxAdditiveMap.toSMul_apply, norm_smul, smul_eq_mul, Real.norm_eq_abs, μ.toBoxAdditive_apply,
  abs_of_nonneg ENNReal.toReal_nonneg]
[GOAL]
case pos
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J✝ : Box ι
π✝ : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
g : (ι → ℝ) → ℝ
hle : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ‖f x‖ ≤ g x
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
hg : Integrable I l g (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))
hfi : Integrable I l f (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))
π : TaggedPrepartition I
J : Box ι
x✝ : J ∈ π.boxes
⊢ ENNReal.toReal (↑↑μ ↑J) * ‖f (tag π J)‖ ≤ ENNReal.toReal (↑↑μ ↑J) * g (tag π J)
[PROOFSTEP]
exact mul_le_mul_of_nonneg_left (hle _ <| π.tag_mem_Icc _) ENNReal.toReal_nonneg
[GOAL]
case neg
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
g : (ι → ℝ) → ℝ
hle : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ‖f x‖ ≤ g x
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
hg : Integrable I l g (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))
hfi : ¬Integrable I l f (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))
⊢ ‖integral I l f (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))‖ ≤
    integral I l g (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))
[PROOFSTEP]
rw [integral, dif_neg hfi, norm_zero]
[GOAL]
case neg
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
g : (ι → ℝ) → ℝ
hle : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ‖f x‖ ≤ g x
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
hg : Integrable I l g (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))
hfi : ¬Integrable I l f (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))
⊢ 0 ≤ integral I l g (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))
[PROOFSTEP]
exact integral_nonneg (fun x hx => (norm_nonneg _).trans (hle x hx)) μ
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c : ℝ
hc : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ‖f x‖ ≤ c
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
⊢ ‖integral I l f (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))‖ ≤ ENNReal.toReal (↑↑μ ↑I) * c
[PROOFSTEP]
simpa only [integral_const] using norm_integral_le_of_norm_le hc μ (integrable_const c)
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c✝ c₁ c₂ : ℝ≥0
ε✝ ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
h : Integrable I l f vol
ε : ℝ
c : ℝ≥0
⊢ RCond l (convergenceR h ε c)
[PROOFSTEP]
rw [convergenceR]
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c✝ c₁ c₂ : ℝ≥0
ε✝ ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
h : Integrable I l f vol
ε : ℝ
c : ℝ≥0
⊢ RCond l
    (dite (0 < ε)
      (fun hε =>
        Exists.choose
          (_ :
            ∃ r,
              (∀ (c : ℝ≥0), RCond l (r c)) ∧
                ∀ (c : ℝ≥0) (π : TaggedPrepartition I),
                  MemBaseSet l I c (r c) π → IsPartition π → dist (integralSum f vol π) (integral I l f vol) ≤ ε))
      (fun hε x x => { val := 1, property := convergenceR.proof_3 }) c)
[PROOFSTEP]
split_ifs with h₀
[GOAL]
case pos
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c✝ c₁ c₂ : ℝ≥0
ε✝ ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
h : Integrable I l f vol
ε : ℝ
c : ℝ≥0
h₀ : 0 < ε
⊢ RCond l
    (Exists.choose
      (_ :
        ∃ r,
          (∀ (c : ℝ≥0), RCond l (r c)) ∧
            ∀ (c : ℝ≥0) (π : TaggedPrepartition I),
              MemBaseSet l I c (r c) π → IsPartition π → dist (integralSum f vol π) (integral I l f vol) ≤ ε)
      c)
case neg
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c✝ c₁ c₂ : ℝ≥0
ε✝ ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
h : Integrable I l f vol
ε : ℝ
c : ℝ≥0
h₀ : ¬0 < ε
⊢ RCond l ((fun x x => { val := 1, property := convergenceR.proof_3 }) c)
[PROOFSTEP]
exacts [(hasIntegral_iff.1 h.hasIntegral ε h₀).choose_spec.1 _, fun _ x => rfl]
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
h : Integrable I l f vol
h₀ : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
hπp : IsPartition π
⊢ dist (integralSum f vol π) (integral I l f vol) ≤ ε
[PROOFSTEP]
rw [convergenceR, dif_pos h₀] at hπ 
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
h : Integrable I l f vol
h₀ : 0 < ε
hπ :
  MemBaseSet l I c
    (Exists.choose
      (_ :
        ∃ r,
          (∀ (c : ℝ≥0), RCond l (r c)) ∧
            ∀ (c : ℝ≥0) (π : TaggedPrepartition I),
              MemBaseSet l I c (r c) π → IsPartition π → dist (integralSum f vol π) (integral I l f vol) ≤ ε)
      c)
    π
hπp : IsPartition π
⊢ dist (integralSum f vol π) (integral I l f vol) ≤ ε
[PROOFSTEP]
exact (hasIntegral_iff.1 h.hasIntegral ε h₀).choose_spec.2 c _ hπ hπp
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
h : Integrable I l f vol
hpos₁ : 0 < ε₁
hpos₂ : 0 < ε₂
h₁ : MemBaseSet l I c₁ (convergenceR h ε₁ c₁) π₁
h₂ : MemBaseSet l I c₂ (convergenceR h ε₂ c₂) π₂
HU : TaggedPrepartition.iUnion π₁ = TaggedPrepartition.iUnion π₂
⊢ dist (integralSum f vol π₁) (integralSum f vol π₂) ≤ ε₁ + ε₂
[PROOFSTEP]
rcases h₁.exists_common_compl h₂ HU with ⟨π, hπU, hπc₁, hπc₂⟩
[GOAL]
case intro.intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
h : Integrable I l f vol
hpos₁ : 0 < ε₁
hpos₂ : 0 < ε₂
h₁ : MemBaseSet l I c₁ (convergenceR h ε₁ c₁) π₁
h₂ : MemBaseSet l I c₂ (convergenceR h ε₂ c₂) π₂
HU : TaggedPrepartition.iUnion π₁ = TaggedPrepartition.iUnion π₂
π : Prepartition I
hπU : Prepartition.iUnion π = ↑I \ TaggedPrepartition.iUnion π₁
hπc₁ : l.bDistortion = true → Prepartition.distortion π ≤ c₁
hπc₂ : l.bDistortion = true → Prepartition.distortion π ≤ c₂
⊢ dist (integralSum f vol π₁) (integralSum f vol π₂) ≤ ε₁ + ε₂
[PROOFSTEP]
set r : ℝⁿ → Ioi (0 : ℝ) := fun x => min (h.convergenceR ε₁ c₁ x) (h.convergenceR ε₂ c₂ x)
[GOAL]
case intro.intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
h : Integrable I l f vol
hpos₁ : 0 < ε₁
hpos₂ : 0 < ε₂
h₁ : MemBaseSet l I c₁ (convergenceR h ε₁ c₁) π₁
h₂ : MemBaseSet l I c₂ (convergenceR h ε₂ c₂) π₂
HU : TaggedPrepartition.iUnion π₁ = TaggedPrepartition.iUnion π₂
π : Prepartition I
hπU : Prepartition.iUnion π = ↑I \ TaggedPrepartition.iUnion π₁
hπc₁ : l.bDistortion = true → Prepartition.distortion π ≤ c₁
hπc₂ : l.bDistortion = true → Prepartition.distortion π ≤ c₂
r : (ι → ℝ) → ↑(Set.Ioi 0) := fun x => min (convergenceR h ε₁ c₁ x) (convergenceR h ε₂ c₂ x)
⊢ dist (integralSum f vol π₁) (integralSum f vol π₂) ≤ ε₁ + ε₂
[PROOFSTEP]
have hr : l.RCond r := (h.convergenceR_cond _ c₁).min (h.convergenceR_cond _ c₂)
[GOAL]
case intro.intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
h : Integrable I l f vol
hpos₁ : 0 < ε₁
hpos₂ : 0 < ε₂
h₁ : MemBaseSet l I c₁ (convergenceR h ε₁ c₁) π₁
h₂ : MemBaseSet l I c₂ (convergenceR h ε₂ c₂) π₂
HU : TaggedPrepartition.iUnion π₁ = TaggedPrepartition.iUnion π₂
π : Prepartition I
hπU : Prepartition.iUnion π = ↑I \ TaggedPrepartition.iUnion π₁
hπc₁ : l.bDistortion = true → Prepartition.distortion π ≤ c₁
hπc₂ : l.bDistortion = true → Prepartition.distortion π ≤ c₂
r : (ι → ℝ) → ↑(Set.Ioi 0) := fun x => min (convergenceR h ε₁ c₁ x) (convergenceR h ε₂ c₂ x)
hr : RCond l r
⊢ dist (integralSum f vol π₁) (integralSum f vol π₂) ≤ ε₁ + ε₂
[PROOFSTEP]
set πr := π.toSubordinate r
[GOAL]
case intro.intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
h : Integrable I l f vol
hpos₁ : 0 < ε₁
hpos₂ : 0 < ε₂
h₁ : MemBaseSet l I c₁ (convergenceR h ε₁ c₁) π₁
h₂ : MemBaseSet l I c₂ (convergenceR h ε₂ c₂) π₂
HU : TaggedPrepartition.iUnion π₁ = TaggedPrepartition.iUnion π₂
π : Prepartition I
hπU : Prepartition.iUnion π = ↑I \ TaggedPrepartition.iUnion π₁
hπc₁ : l.bDistortion = true → Prepartition.distortion π ≤ c₁
hπc₂ : l.bDistortion = true → Prepartition.distortion π ≤ c₂
r : (ι → ℝ) → ↑(Set.Ioi 0) := fun x => min (convergenceR h ε₁ c₁ x) (convergenceR h ε₂ c₂ x)
hr : RCond l r
πr : TaggedPrepartition I := Prepartition.toSubordinate π r
⊢ dist (integralSum f vol π₁) (integralSum f vol π₂) ≤ ε₁ + ε₂
[PROOFSTEP]
have H₁ : dist (integralSum f vol (π₁.unionComplToSubordinate π hπU r)) (integral I l f vol) ≤ ε₁ :=
  h.dist_integralSum_integral_le_of_memBaseSet hpos₁ (h₁.unionComplToSubordinate (fun _ _ => min_le_left _ _) hπU hπc₁)
    (isPartition_unionComplToSubordinate _ _ _ _)
[GOAL]
case intro.intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
h : Integrable I l f vol
hpos₁ : 0 < ε₁
hpos₂ : 0 < ε₂
h₁ : MemBaseSet l I c₁ (convergenceR h ε₁ c₁) π₁
h₂ : MemBaseSet l I c₂ (convergenceR h ε₂ c₂) π₂
HU : TaggedPrepartition.iUnion π₁ = TaggedPrepartition.iUnion π₂
π : Prepartition I
hπU : Prepartition.iUnion π = ↑I \ TaggedPrepartition.iUnion π₁
hπc₁ : l.bDistortion = true → Prepartition.distortion π ≤ c₁
hπc₂ : l.bDistortion = true → Prepartition.distortion π ≤ c₂
r : (ι → ℝ) → ↑(Set.Ioi 0) := fun x => min (convergenceR h ε₁ c₁ x) (convergenceR h ε₂ c₂ x)
hr : RCond l r
πr : TaggedPrepartition I := Prepartition.toSubordinate π r
H₁ : dist (integralSum f vol (unionComplToSubordinate π₁ π hπU r)) (integral I l f vol) ≤ ε₁
⊢ dist (integralSum f vol π₁) (integralSum f vol π₂) ≤ ε₁ + ε₂
[PROOFSTEP]
rw [HU] at hπU 
[GOAL]
case intro.intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
h : Integrable I l f vol
hpos₁ : 0 < ε₁
hpos₂ : 0 < ε₂
h₁ : MemBaseSet l I c₁ (convergenceR h ε₁ c₁) π₁
h₂ : MemBaseSet l I c₂ (convergenceR h ε₂ c₂) π₂
HU : TaggedPrepartition.iUnion π₁ = TaggedPrepartition.iUnion π₂
π : Prepartition I
hπU✝ : Prepartition.iUnion π = ↑I \ TaggedPrepartition.iUnion π₁
hπU : Prepartition.iUnion π = ↑I \ TaggedPrepartition.iUnion π₂
hπc₁ : l.bDistortion = true → Prepartition.distortion π ≤ c₁
hπc₂ : l.bDistortion = true → Prepartition.distortion π ≤ c₂
r : (ι → ℝ) → ↑(Set.Ioi 0) := fun x => min (convergenceR h ε₁ c₁ x) (convergenceR h ε₂ c₂ x)
hr : RCond l r
πr : TaggedPrepartition I := Prepartition.toSubordinate π r
H₁ : dist (integralSum f vol (unionComplToSubordinate π₁ π hπU✝ r)) (integral I l f vol) ≤ ε₁
⊢ dist (integralSum f vol π₁) (integralSum f vol π₂) ≤ ε₁ + ε₂
[PROOFSTEP]
have H₂ : dist (integralSum f vol (π₂.unionComplToSubordinate π hπU r)) (integral I l f vol) ≤ ε₂ :=
  h.dist_integralSum_integral_le_of_memBaseSet hpos₂ (h₂.unionComplToSubordinate (fun _ _ => min_le_right _ _) hπU hπc₂)
    (isPartition_unionComplToSubordinate _ _ _ _)
[GOAL]
case intro.intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
h : Integrable I l f vol
hpos₁ : 0 < ε₁
hpos₂ : 0 < ε₂
h₁ : MemBaseSet l I c₁ (convergenceR h ε₁ c₁) π₁
h₂ : MemBaseSet l I c₂ (convergenceR h ε₂ c₂) π₂
HU : TaggedPrepartition.iUnion π₁ = TaggedPrepartition.iUnion π₂
π : Prepartition I
hπU✝ : Prepartition.iUnion π = ↑I \ TaggedPrepartition.iUnion π₁
hπU : Prepartition.iUnion π = ↑I \ TaggedPrepartition.iUnion π₂
hπc₁ : l.bDistortion = true → Prepartition.distortion π ≤ c₁
hπc₂ : l.bDistortion = true → Prepartition.distortion π ≤ c₂
r : (ι → ℝ) → ↑(Set.Ioi 0) := fun x => min (convergenceR h ε₁ c₁ x) (convergenceR h ε₂ c₂ x)
hr : RCond l r
πr : TaggedPrepartition I := Prepartition.toSubordinate π r
H₁ : dist (integralSum f vol (unionComplToSubordinate π₁ π hπU✝ r)) (integral I l f vol) ≤ ε₁
H₂ : dist (integralSum f vol (unionComplToSubordinate π₂ π hπU r)) (integral I l f vol) ≤ ε₂
⊢ dist (integralSum f vol π₁) (integralSum f vol π₂) ≤ ε₁ + ε₂
[PROOFSTEP]
simpa [unionComplToSubordinate] using (dist_triangle_right _ _ _).trans (add_le_add H₁ H₂)
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
h : Integrable I l f vol
⊢ Tendsto (fun π => (integralSum f vol π.fst, integralSum f vol π.snd))
    (toFilter l I ×ˢ toFilter l I ⊓ 𝓟 {π | TaggedPrepartition.iUnion π.fst = TaggedPrepartition.iUnion π.snd}) (𝓤 F)
[PROOFSTEP]
refine (((l.hasBasis_toFilter I).prod_self.inf_principal _).tendsto_iff uniformity_basis_dist_le).2 fun ε ε0 => ?_
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε✝ ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
h : Integrable I l f vol
ε : ℝ
ε0 : 0 < ε
⊢ ∃ ia,
    (∀ (c : ℝ≥0), RCond l (ia c)) ∧
      ∀ (x : TaggedPrepartition I × TaggedPrepartition I),
        x ∈
            {π | ∃ c, MemBaseSet l I c (ia c) π} ×ˢ {π | ∃ c, MemBaseSet l I c (ia c) π} ∩
              {π | TaggedPrepartition.iUnion π.fst = TaggedPrepartition.iUnion π.snd} →
          (integralSum f vol x.fst, integralSum f vol x.snd) ∈ {p | dist p.fst p.snd ≤ ε}
[PROOFSTEP]
replace ε0 := half_pos ε0
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε✝ ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
h : Integrable I l f vol
ε : ℝ
ε0 : 0 < ε / 2
⊢ ∃ ia,
    (∀ (c : ℝ≥0), RCond l (ia c)) ∧
      ∀ (x : TaggedPrepartition I × TaggedPrepartition I),
        x ∈
            {π | ∃ c, MemBaseSet l I c (ia c) π} ×ˢ {π | ∃ c, MemBaseSet l I c (ia c) π} ∩
              {π | TaggedPrepartition.iUnion π.fst = TaggedPrepartition.iUnion π.snd} →
          (integralSum f vol x.fst, integralSum f vol x.snd) ∈ {p | dist p.fst p.snd ≤ ε}
[PROOFSTEP]
use h.convergenceR (ε / 2), h.convergenceR_cond (ε / 2)
[GOAL]
case right
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε✝ ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
h : Integrable I l f vol
ε : ℝ
ε0 : 0 < ε / 2
⊢ ∀ (x : TaggedPrepartition I × TaggedPrepartition I),
    x ∈
        {π | ∃ c, MemBaseSet l I c (convergenceR h (ε / 2) c) π} ×ˢ
            {π | ∃ c, MemBaseSet l I c (convergenceR h (ε / 2) c) π} ∩
          {π | TaggedPrepartition.iUnion π.fst = TaggedPrepartition.iUnion π.snd} →
      (integralSum f vol x.fst, integralSum f vol x.snd) ∈ {p | dist p.fst p.snd ≤ ε}
[PROOFSTEP]
rintro ⟨π₁, π₂⟩ ⟨⟨h₁, h₂⟩, hU⟩
[GOAL]
case right.mk.intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε✝ ε₁ ε₂ : ℝ
π₁✝ π₂✝ : TaggedPrepartition I
h : Integrable I l f vol
ε : ℝ
ε0 : 0 < ε / 2
π₁ π₂ : TaggedPrepartition I
hU : (π₁, π₂) ∈ {π | TaggedPrepartition.iUnion π.fst = TaggedPrepartition.iUnion π.snd}
h₁ : (π₁, π₂).fst ∈ {π | ∃ c, MemBaseSet l I c (convergenceR h (ε / 2) c) π}
h₂ : (π₁, π₂).snd ∈ {π | ∃ c, MemBaseSet l I c (convergenceR h (ε / 2) c) π}
⊢ (integralSum f vol (π₁, π₂).fst, integralSum f vol (π₁, π₂).snd) ∈ {p | dist p.fst p.snd ≤ ε}
[PROOFSTEP]
rw [← add_halves ε]
[GOAL]
case right.mk.intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε✝ ε₁ ε₂ : ℝ
π₁✝ π₂✝ : TaggedPrepartition I
h : Integrable I l f vol
ε : ℝ
ε0 : 0 < ε / 2
π₁ π₂ : TaggedPrepartition I
hU : (π₁, π₂) ∈ {π | TaggedPrepartition.iUnion π.fst = TaggedPrepartition.iUnion π.snd}
h₁ : (π₁, π₂).fst ∈ {π | ∃ c, MemBaseSet l I c (convergenceR h (ε / 2) c) π}
h₂ : (π₁, π₂).snd ∈ {π | ∃ c, MemBaseSet l I c (convergenceR h (ε / 2) c) π}
⊢ (integralSum f vol (π₁, π₂).fst, integralSum f vol (π₁, π₂).snd) ∈ {p | dist p.fst p.snd ≤ ε / 2 + ε / 2}
[PROOFSTEP]
exact h.dist_integralSum_le_of_memBaseSet ε0 ε0 h₁.choose_spec h₂.choose_spec hU
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
h : Integrable I l f vol
π₀ : Prepartition I
⊢ Cauchy (Filter.map (integralSum f vol) (toFilteriUnion l I π₀))
[PROOFSTEP]
refine' ⟨inferInstance, _⟩
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
h : Integrable I l f vol
π₀ : Prepartition I
⊢ Filter.map (integralSum f vol) (toFilteriUnion l I π₀) ×ˢ Filter.map (integralSum f vol) (toFilteriUnion l I π₀) ≤ 𝓤 F
[PROOFSTEP]
rw [prod_map_map_eq, ← toFilter_inf_iUnion_eq, ← prod_inf_prod, prod_principal_principal]
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
h : Integrable I l f vol
π₀ : Prepartition I
⊢ Filter.map (fun p => (integralSum f vol p.fst, integralSum f vol p.snd))
      (toFilter l I ×ˢ toFilter l I ⊓
        𝓟
          ({π | TaggedPrepartition.iUnion π = Prepartition.iUnion π₀} ×ˢ
            {π | TaggedPrepartition.iUnion π = Prepartition.iUnion π₀})) ≤
    𝓤 F
[PROOFSTEP]
exact
  h.tendsto_integralSum_toFilter_prod_self_inf_iUnion_eq_uniformity.mono_left
    (inf_le_inf_left _ <| principal_mono.2 fun π h => h.1.trans h.2.symm)
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
hJ : J ≤ I
⊢ ∃ y, HasIntegral J l f vol y ∧ Tendsto (integralSum f vol) (toFilteriUnion l I (Prepartition.single I J hJ)) (𝓝 y)
[PROOFSTEP]
refine
  (cauchy_map_iff_exists_tendsto.1 (h.cauchy_map_integralSum_toFilteriUnion (.single I J hJ))).imp fun y hy ↦ ⟨?_, hy⟩
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y✝ y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
hJ : J ≤ I
y : F
hy : Tendsto (integralSum f vol) (toFilteriUnion l I (Prepartition.single I J hJ)) (𝓝 y)
⊢ HasIntegral J l f vol y
[PROOFSTEP]
convert
  hy.comp
    (l.tendsto_embedBox_toFilteriUnion_top hJ)
      -- faster than `exact` here
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
⊢ dist (integralSum f vol π) (∑ J in π₀.boxes, integral J l f vol) ≤ ε
[PROOFSTEP]
refine'
  le_of_forall_pos_le_add fun δ δ0 =>
    _
      -- First we choose some constants.
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
δ : ℝ
δ0 : 0 < δ
⊢ dist (integralSum f vol π) (∑ J in π₀.boxes, integral J l f vol) ≤ ε + δ
[PROOFSTEP]
set δ' : ℝ := δ / (π₀.boxes.card + 1)
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
δ : ℝ
δ0 : 0 < δ
δ' : ℝ := δ / (↑(card π₀.boxes) + 1)
⊢ dist (integralSum f vol π) (∑ J in π₀.boxes, integral J l f vol) ≤ ε + δ
[PROOFSTEP]
have H0 : 0 < (π₀.boxes.card + 1 : ℝ) := Nat.cast_add_one_pos _
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
δ : ℝ
δ0 : 0 < δ
δ' : ℝ := δ / (↑(card π₀.boxes) + 1)
H0 : 0 < ↑(card π₀.boxes) + 1
⊢ dist (integralSum f vol π) (∑ J in π₀.boxes, integral J l f vol) ≤ ε + δ
[PROOFSTEP]
have δ'0 : 0 < δ' := div_pos δ0 H0
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
δ : ℝ
δ0 : 0 < δ
δ' : ℝ := δ / (↑(card π₀.boxes) + 1)
H0 : 0 < ↑(card π₀.boxes) + 1
δ'0 : 0 < δ'
⊢ dist (integralSum f vol π) (∑ J in π₀.boxes, integral J l f vol) ≤ ε + δ
[PROOFSTEP]
set C := max π₀.distortion π₀.compl.distortion
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
δ : ℝ
δ0 : 0 < δ
δ' : ℝ := δ / (↑(card π₀.boxes) + 1)
H0 : 0 < ↑(card π₀.boxes) + 1
δ'0 : 0 < δ'
C : ℝ≥0 := max (Prepartition.distortion π₀) (Prepartition.distortion (Prepartition.compl π₀))
⊢ dist (integralSum f vol π) (∑ J in π₀.boxes, integral J l f vol) ≤ ε + δ
[PROOFSTEP]
have :
  ∀ J ∈ π₀,
    ∃ πi : TaggedPrepartition J,
      πi.IsPartition ∧
        dist (integralSum f vol πi) (integral J l f vol) ≤ δ' ∧ l.MemBaseSet J C (h.convergenceR δ' C) πi :=
  by
  intro J hJ
  have Hle : J ≤ I := π₀.le_of_mem hJ
  have HJi : Integrable J l f vol := h.to_subbox Hle
  set r := fun x => min (h.convergenceR δ' C x) (HJi.convergenceR δ' C x)
  have hJd : J.distortion ≤ C := le_trans (Finset.le_sup hJ) (le_max_left _ _)
  rcases l.exists_memBaseSet_isPartition J hJd r with ⟨πJ, hC, hp⟩
  have hC₁ : l.MemBaseSet J C (HJi.convergenceR δ' C) πJ := by refine' hC.mono J le_rfl le_rfl fun x _ => _;
    exact min_le_right _ _
  have hC₂ : l.MemBaseSet J C (h.convergenceR δ' C) πJ := by refine' hC.mono J le_rfl le_rfl fun x _ => _;
    exact min_le_left _ _
  exact
    ⟨πJ, hp, HJi.dist_integralSum_integral_le_of_memBaseSet δ'0 hC₁ hp, hC₂⟩
      /- Now we combine these tagged partitions into a tagged prepartition of `I` that covers the
          same part of `I` as `π₀` and apply `BoxIntegral.dist_integralSum_le_of_memBaseSet` to
          `π` and this prepartition. -/
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
δ : ℝ
δ0 : 0 < δ
δ' : ℝ := δ / (↑(card π₀.boxes) + 1)
H0 : 0 < ↑(card π₀.boxes) + 1
δ'0 : 0 < δ'
C : ℝ≥0 := max (Prepartition.distortion π₀) (Prepartition.distortion (Prepartition.compl π₀))
⊢ ∀ (J : Box ι),
    J ∈ π₀ →
      ∃ πi,
        IsPartition πi ∧
          dist (integralSum f vol πi) (integral J l f vol) ≤ δ' ∧ MemBaseSet l J C (convergenceR h δ' C) πi
[PROOFSTEP]
intro J hJ
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J✝ : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
δ : ℝ
δ0 : 0 < δ
δ' : ℝ := δ / (↑(card π₀.boxes) + 1)
H0 : 0 < ↑(card π₀.boxes) + 1
δ'0 : 0 < δ'
C : ℝ≥0 := max (Prepartition.distortion π₀) (Prepartition.distortion (Prepartition.compl π₀))
J : Box ι
hJ : J ∈ π₀
⊢ ∃ πi,
    IsPartition πi ∧ dist (integralSum f vol πi) (integral J l f vol) ≤ δ' ∧ MemBaseSet l J C (convergenceR h δ' C) πi
[PROOFSTEP]
have Hle : J ≤ I := π₀.le_of_mem hJ
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J✝ : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
δ : ℝ
δ0 : 0 < δ
δ' : ℝ := δ / (↑(card π₀.boxes) + 1)
H0 : 0 < ↑(card π₀.boxes) + 1
δ'0 : 0 < δ'
C : ℝ≥0 := max (Prepartition.distortion π₀) (Prepartition.distortion (Prepartition.compl π₀))
J : Box ι
hJ : J ∈ π₀
Hle : J ≤ I
⊢ ∃ πi,
    IsPartition πi ∧ dist (integralSum f vol πi) (integral J l f vol) ≤ δ' ∧ MemBaseSet l J C (convergenceR h δ' C) πi
[PROOFSTEP]
have HJi : Integrable J l f vol := h.to_subbox Hle
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J✝ : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
δ : ℝ
δ0 : 0 < δ
δ' : ℝ := δ / (↑(card π₀.boxes) + 1)
H0 : 0 < ↑(card π₀.boxes) + 1
δ'0 : 0 < δ'
C : ℝ≥0 := max (Prepartition.distortion π₀) (Prepartition.distortion (Prepartition.compl π₀))
J : Box ι
hJ : J ∈ π₀
Hle : J ≤ I
HJi : Integrable J l f vol
⊢ ∃ πi,
    IsPartition πi ∧ dist (integralSum f vol πi) (integral J l f vol) ≤ δ' ∧ MemBaseSet l J C (convergenceR h δ' C) πi
[PROOFSTEP]
set r := fun x => min (h.convergenceR δ' C x) (HJi.convergenceR δ' C x)
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J✝ : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
δ : ℝ
δ0 : 0 < δ
δ' : ℝ := δ / (↑(card π₀.boxes) + 1)
H0 : 0 < ↑(card π₀.boxes) + 1
δ'0 : 0 < δ'
C : ℝ≥0 := max (Prepartition.distortion π₀) (Prepartition.distortion (Prepartition.compl π₀))
J : Box ι
hJ : J ∈ π₀
Hle : J ≤ I
HJi : Integrable J l f vol
r : (ι → ℝ) → ↑(Set.Ioi 0) := fun x => min (convergenceR h δ' C x) (convergenceR HJi δ' C x)
⊢ ∃ πi,
    IsPartition πi ∧ dist (integralSum f vol πi) (integral J l f vol) ≤ δ' ∧ MemBaseSet l J C (convergenceR h δ' C) πi
[PROOFSTEP]
have hJd : J.distortion ≤ C := le_trans (Finset.le_sup hJ) (le_max_left _ _)
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J✝ : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
δ : ℝ
δ0 : 0 < δ
δ' : ℝ := δ / (↑(card π₀.boxes) + 1)
H0 : 0 < ↑(card π₀.boxes) + 1
δ'0 : 0 < δ'
C : ℝ≥0 := max (Prepartition.distortion π₀) (Prepartition.distortion (Prepartition.compl π₀))
J : Box ι
hJ : J ∈ π₀
Hle : J ≤ I
HJi : Integrable J l f vol
r : (ι → ℝ) → ↑(Set.Ioi 0) := fun x => min (convergenceR h δ' C x) (convergenceR HJi δ' C x)
hJd : Box.distortion J ≤ C
⊢ ∃ πi,
    IsPartition πi ∧ dist (integralSum f vol πi) (integral J l f vol) ≤ δ' ∧ MemBaseSet l J C (convergenceR h δ' C) πi
[PROOFSTEP]
rcases l.exists_memBaseSet_isPartition J hJd r with ⟨πJ, hC, hp⟩
[GOAL]
case intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J✝ : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
δ : ℝ
δ0 : 0 < δ
δ' : ℝ := δ / (↑(card π₀.boxes) + 1)
H0 : 0 < ↑(card π₀.boxes) + 1
δ'0 : 0 < δ'
C : ℝ≥0 := max (Prepartition.distortion π₀) (Prepartition.distortion (Prepartition.compl π₀))
J : Box ι
hJ : J ∈ π₀
Hle : J ≤ I
HJi : Integrable J l f vol
r : (ι → ℝ) → ↑(Set.Ioi 0) := fun x => min (convergenceR h δ' C x) (convergenceR HJi δ' C x)
hJd : Box.distortion J ≤ C
πJ : TaggedPrepartition J
hC : MemBaseSet l J C r πJ
hp : IsPartition πJ
⊢ ∃ πi,
    IsPartition πi ∧ dist (integralSum f vol πi) (integral J l f vol) ≤ δ' ∧ MemBaseSet l J C (convergenceR h δ' C) πi
[PROOFSTEP]
have hC₁ : l.MemBaseSet J C (HJi.convergenceR δ' C) πJ := by refine' hC.mono J le_rfl le_rfl fun x _ => _;
  exact min_le_right _ _
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J✝ : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
δ : ℝ
δ0 : 0 < δ
δ' : ℝ := δ / (↑(card π₀.boxes) + 1)
H0 : 0 < ↑(card π₀.boxes) + 1
δ'0 : 0 < δ'
C : ℝ≥0 := max (Prepartition.distortion π₀) (Prepartition.distortion (Prepartition.compl π₀))
J : Box ι
hJ : J ∈ π₀
Hle : J ≤ I
HJi : Integrable J l f vol
r : (ι → ℝ) → ↑(Set.Ioi 0) := fun x => min (convergenceR h δ' C x) (convergenceR HJi δ' C x)
hJd : Box.distortion J ≤ C
πJ : TaggedPrepartition J
hC : MemBaseSet l J C r πJ
hp : IsPartition πJ
⊢ MemBaseSet l J C (convergenceR HJi δ' C) πJ
[PROOFSTEP]
refine' hC.mono J le_rfl le_rfl fun x _ => _
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J✝ : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
δ : ℝ
δ0 : 0 < δ
δ' : ℝ := δ / (↑(card π₀.boxes) + 1)
H0 : 0 < ↑(card π₀.boxes) + 1
δ'0 : 0 < δ'
C : ℝ≥0 := max (Prepartition.distortion π₀) (Prepartition.distortion (Prepartition.compl π₀))
J : Box ι
hJ : J ∈ π₀
Hle : J ≤ I
HJi : Integrable J l f vol
r : (ι → ℝ) → ↑(Set.Ioi 0) := fun x => min (convergenceR h δ' C x) (convergenceR HJi δ' C x)
hJd : Box.distortion J ≤ C
πJ : TaggedPrepartition J
hC : MemBaseSet l J C r πJ
hp : IsPartition πJ
x : ι → ℝ
x✝ : x ∈ ↑Box.Icc J
⊢ r x ≤ convergenceR HJi δ' C x
[PROOFSTEP]
exact min_le_right _ _
[GOAL]
case intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J✝ : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
δ : ℝ
δ0 : 0 < δ
δ' : ℝ := δ / (↑(card π₀.boxes) + 1)
H0 : 0 < ↑(card π₀.boxes) + 1
δ'0 : 0 < δ'
C : ℝ≥0 := max (Prepartition.distortion π₀) (Prepartition.distortion (Prepartition.compl π₀))
J : Box ι
hJ : J ∈ π₀
Hle : J ≤ I
HJi : Integrable J l f vol
r : (ι → ℝ) → ↑(Set.Ioi 0) := fun x => min (convergenceR h δ' C x) (convergenceR HJi δ' C x)
hJd : Box.distortion J ≤ C
πJ : TaggedPrepartition J
hC : MemBaseSet l J C r πJ
hp : IsPartition πJ
hC₁ : MemBaseSet l J C (convergenceR HJi δ' C) πJ
⊢ ∃ πi,
    IsPartition πi ∧ dist (integralSum f vol πi) (integral J l f vol) ≤ δ' ∧ MemBaseSet l J C (convergenceR h δ' C) πi
[PROOFSTEP]
have hC₂ : l.MemBaseSet J C (h.convergenceR δ' C) πJ := by refine' hC.mono J le_rfl le_rfl fun x _ => _;
  exact min_le_left _ _
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J✝ : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
δ : ℝ
δ0 : 0 < δ
δ' : ℝ := δ / (↑(card π₀.boxes) + 1)
H0 : 0 < ↑(card π₀.boxes) + 1
δ'0 : 0 < δ'
C : ℝ≥0 := max (Prepartition.distortion π₀) (Prepartition.distortion (Prepartition.compl π₀))
J : Box ι
hJ : J ∈ π₀
Hle : J ≤ I
HJi : Integrable J l f vol
r : (ι → ℝ) → ↑(Set.Ioi 0) := fun x => min (convergenceR h δ' C x) (convergenceR HJi δ' C x)
hJd : Box.distortion J ≤ C
πJ : TaggedPrepartition J
hC : MemBaseSet l J C r πJ
hp : IsPartition πJ
hC₁ : MemBaseSet l J C (convergenceR HJi δ' C) πJ
⊢ MemBaseSet l J C (convergenceR h δ' C) πJ
[PROOFSTEP]
refine' hC.mono J le_rfl le_rfl fun x _ => _
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J✝ : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
δ : ℝ
δ0 : 0 < δ
δ' : ℝ := δ / (↑(card π₀.boxes) + 1)
H0 : 0 < ↑(card π₀.boxes) + 1
δ'0 : 0 < δ'
C : ℝ≥0 := max (Prepartition.distortion π₀) (Prepartition.distortion (Prepartition.compl π₀))
J : Box ι
hJ : J ∈ π₀
Hle : J ≤ I
HJi : Integrable J l f vol
r : (ι → ℝ) → ↑(Set.Ioi 0) := fun x => min (convergenceR h δ' C x) (convergenceR HJi δ' C x)
hJd : Box.distortion J ≤ C
πJ : TaggedPrepartition J
hC : MemBaseSet l J C r πJ
hp : IsPartition πJ
hC₁ : MemBaseSet l J C (convergenceR HJi δ' C) πJ
x : ι → ℝ
x✝ : x ∈ ↑Box.Icc J
⊢ r x ≤ convergenceR h δ' C x
[PROOFSTEP]
exact min_le_left _ _
[GOAL]
case intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J✝ : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
δ : ℝ
δ0 : 0 < δ
δ' : ℝ := δ / (↑(card π₀.boxes) + 1)
H0 : 0 < ↑(card π₀.boxes) + 1
δ'0 : 0 < δ'
C : ℝ≥0 := max (Prepartition.distortion π₀) (Prepartition.distortion (Prepartition.compl π₀))
J : Box ι
hJ : J ∈ π₀
Hle : J ≤ I
HJi : Integrable J l f vol
r : (ι → ℝ) → ↑(Set.Ioi 0) := fun x => min (convergenceR h δ' C x) (convergenceR HJi δ' C x)
hJd : Box.distortion J ≤ C
πJ : TaggedPrepartition J
hC : MemBaseSet l J C r πJ
hp : IsPartition πJ
hC₁ : MemBaseSet l J C (convergenceR HJi δ' C) πJ
hC₂ : MemBaseSet l J C (convergenceR h δ' C) πJ
⊢ ∃ πi,
    IsPartition πi ∧ dist (integralSum f vol πi) (integral J l f vol) ≤ δ' ∧ MemBaseSet l J C (convergenceR h δ' C) πi
[PROOFSTEP]
exact
  ⟨πJ, hp, HJi.dist_integralSum_integral_le_of_memBaseSet δ'0 hC₁ hp, hC₂⟩
    /- Now we combine these tagged partitions into a tagged prepartition of `I` that covers the
        same part of `I` as `π₀` and apply `BoxIntegral.dist_integralSum_le_of_memBaseSet` to
        `π` and this prepartition. -/
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
δ : ℝ
δ0 : 0 < δ
δ' : ℝ := δ / (↑(card π₀.boxes) + 1)
H0 : 0 < ↑(card π₀.boxes) + 1
δ'0 : 0 < δ'
C : ℝ≥0 := max (Prepartition.distortion π₀) (Prepartition.distortion (Prepartition.compl π₀))
this :
  ∀ (J : Box ι),
    J ∈ π₀ →
      ∃ πi,
        IsPartition πi ∧
          dist (integralSum f vol πi) (integral J l f vol) ≤ δ' ∧ MemBaseSet l J C (convergenceR h δ' C) πi
⊢ dist (integralSum f vol π) (∑ J in π₀.boxes, integral J l f vol) ≤ ε + δ
[PROOFSTEP]
choose! πi hπip hπiδ' hπiC using this
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
δ : ℝ
δ0 : 0 < δ
δ' : ℝ := δ / (↑(card π₀.boxes) + 1)
H0 : 0 < ↑(card π₀.boxes) + 1
δ'0 : 0 < δ'
C : ℝ≥0 := max (Prepartition.distortion π₀) (Prepartition.distortion (Prepartition.compl π₀))
πi : (J : Box ι) → TaggedPrepartition J
hπip : ∀ (J : Box ι), J ∈ π₀ → IsPartition (πi J)
hπiδ' : ∀ (J : Box ι), J ∈ π₀ → dist (integralSum f vol (πi J)) (integral J l f vol) ≤ δ'
hπiC : ∀ (J : Box ι), J ∈ π₀ → MemBaseSet l J C (convergenceR h δ' C) (πi J)
⊢ dist (integralSum f vol π) (∑ J in π₀.boxes, integral J l f vol) ≤ ε + δ
[PROOFSTEP]
have : l.MemBaseSet I C (h.convergenceR δ' C) (π₀.biUnionTagged πi) :=
  biUnionTagged_memBaseSet hπiC hπip fun _ => le_max_right _ _
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
δ : ℝ
δ0 : 0 < δ
δ' : ℝ := δ / (↑(card π₀.boxes) + 1)
H0 : 0 < ↑(card π₀.boxes) + 1
δ'0 : 0 < δ'
C : ℝ≥0 := max (Prepartition.distortion π₀) (Prepartition.distortion (Prepartition.compl π₀))
πi : (J : Box ι) → TaggedPrepartition J
hπip : ∀ (J : Box ι), J ∈ π₀ → IsPartition (πi J)
hπiδ' : ∀ (J : Box ι), J ∈ π₀ → dist (integralSum f vol (πi J)) (integral J l f vol) ≤ δ'
hπiC : ∀ (J : Box ι), J ∈ π₀ → MemBaseSet l J C (convergenceR h δ' C) (πi J)
this : MemBaseSet l I C (convergenceR h δ' C) (Prepartition.biUnionTagged π₀ πi)
⊢ dist (integralSum f vol π) (∑ J in π₀.boxes, integral J l f vol) ≤ ε + δ
[PROOFSTEP]
have hU' : π.iUnion = (π₀.biUnionTagged πi).iUnion := hU.trans (Prepartition.iUnion_biUnion_partition _ hπip).symm
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
δ : ℝ
δ0 : 0 < δ
δ' : ℝ := δ / (↑(card π₀.boxes) + 1)
H0 : 0 < ↑(card π₀.boxes) + 1
δ'0 : 0 < δ'
C : ℝ≥0 := max (Prepartition.distortion π₀) (Prepartition.distortion (Prepartition.compl π₀))
πi : (J : Box ι) → TaggedPrepartition J
hπip : ∀ (J : Box ι), J ∈ π₀ → IsPartition (πi J)
hπiδ' : ∀ (J : Box ι), J ∈ π₀ → dist (integralSum f vol (πi J)) (integral J l f vol) ≤ δ'
hπiC : ∀ (J : Box ι), J ∈ π₀ → MemBaseSet l J C (convergenceR h δ' C) (πi J)
this : MemBaseSet l I C (convergenceR h δ' C) (Prepartition.biUnionTagged π₀ πi)
hU' : TaggedPrepartition.iUnion π = TaggedPrepartition.iUnion (Prepartition.biUnionTagged π₀ πi)
⊢ dist (integralSum f vol π) (∑ J in π₀.boxes, integral J l f vol) ≤ ε + δ
[PROOFSTEP]
have := h.dist_integralSum_le_of_memBaseSet h0 δ'0 hπ this hU'
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
δ : ℝ
δ0 : 0 < δ
δ' : ℝ := δ / (↑(card π₀.boxes) + 1)
H0 : 0 < ↑(card π₀.boxes) + 1
δ'0 : 0 < δ'
C : ℝ≥0 := max (Prepartition.distortion π₀) (Prepartition.distortion (Prepartition.compl π₀))
πi : (J : Box ι) → TaggedPrepartition J
hπip : ∀ (J : Box ι), J ∈ π₀ → IsPartition (πi J)
hπiδ' : ∀ (J : Box ι), J ∈ π₀ → dist (integralSum f vol (πi J)) (integral J l f vol) ≤ δ'
hπiC : ∀ (J : Box ι), J ∈ π₀ → MemBaseSet l J C (convergenceR h δ' C) (πi J)
this✝ : MemBaseSet l I C (convergenceR h δ' C) (Prepartition.biUnionTagged π₀ πi)
hU' : TaggedPrepartition.iUnion π = TaggedPrepartition.iUnion (Prepartition.biUnionTagged π₀ πi)
this : dist (integralSum f vol π) (integralSum f vol (Prepartition.biUnionTagged π₀ πi)) ≤ ε + δ'
⊢ dist (integralSum f vol π) (∑ J in π₀.boxes, integral J l f vol) ≤ ε + δ
[PROOFSTEP]
rw [integralSum_biUnionTagged] at this 
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
δ : ℝ
δ0 : 0 < δ
δ' : ℝ := δ / (↑(card π₀.boxes) + 1)
H0 : 0 < ↑(card π₀.boxes) + 1
δ'0 : 0 < δ'
C : ℝ≥0 := max (Prepartition.distortion π₀) (Prepartition.distortion (Prepartition.compl π₀))
πi : (J : Box ι) → TaggedPrepartition J
hπip : ∀ (J : Box ι), J ∈ π₀ → IsPartition (πi J)
hπiδ' : ∀ (J : Box ι), J ∈ π₀ → dist (integralSum f vol (πi J)) (integral J l f vol) ≤ δ'
hπiC : ∀ (J : Box ι), J ∈ π₀ → MemBaseSet l J C (convergenceR h δ' C) (πi J)
this✝ : MemBaseSet l I C (convergenceR h δ' C) (Prepartition.biUnionTagged π₀ πi)
hU' : TaggedPrepartition.iUnion π = TaggedPrepartition.iUnion (Prepartition.biUnionTagged π₀ πi)
this : dist (integralSum f vol π) (∑ J in π₀.boxes, integralSum f vol (πi J)) ≤ ε + δ'
⊢ dist (integralSum f vol π) (∑ J in π₀.boxes, integral J l f vol) ≤ ε + δ
[PROOFSTEP]
calc
  dist (integralSum f vol π) (∑ J in π₀.boxes, integral J l f vol) ≤
      dist (integralSum f vol π) (∑ J in π₀.boxes, integralSum f vol (πi J)) +
        dist (∑ J in π₀.boxes, integralSum f vol (πi J)) (∑ J in π₀.boxes, integral J l f vol) :=
    dist_triangle _ _ _
  _ ≤ ε + δ' + ∑ _J in π₀.boxes, δ' := (add_le_add this (dist_sum_sum_le_of_le _ hπiδ'))
  _ = ε + δ := by field_simp [H0.ne']; ring
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
δ : ℝ
δ0 : 0 < δ
δ' : ℝ := δ / (↑(card π₀.boxes) + 1)
H0 : 0 < ↑(card π₀.boxes) + 1
δ'0 : 0 < δ'
C : ℝ≥0 := max (Prepartition.distortion π₀) (Prepartition.distortion (Prepartition.compl π₀))
πi : (J : Box ι) → TaggedPrepartition J
hπip : ∀ (J : Box ι), J ∈ π₀ → IsPartition (πi J)
hπiδ' : ∀ (J : Box ι), J ∈ π₀ → dist (integralSum f vol (πi J)) (integral J l f vol) ≤ δ'
hπiC : ∀ (J : Box ι), J ∈ π₀ → MemBaseSet l J C (convergenceR h δ' C) (πi J)
this✝ : MemBaseSet l I C (convergenceR h δ' C) (Prepartition.biUnionTagged π₀ πi)
hU' : TaggedPrepartition.iUnion π = TaggedPrepartition.iUnion (Prepartition.biUnionTagged π₀ πi)
this : dist (integralSum f vol π) (∑ J in π₀.boxes, integralSum f vol (πi J)) ≤ ε + δ'
⊢ ε + δ' + ∑ _J in π₀.boxes, δ' = ε + δ
[PROOFSTEP]
field_simp [H0.ne']
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
h0 : 0 < ε
hπ : MemBaseSet l I c (convergenceR h ε c) π
π₀ : Prepartition I
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
δ : ℝ
δ0 : 0 < δ
δ' : ℝ := δ / (↑(card π₀.boxes) + 1)
H0 : 0 < ↑(card π₀.boxes) + 1
δ'0 : 0 < δ'
C : ℝ≥0 := max (Prepartition.distortion π₀) (Prepartition.distortion (Prepartition.compl π₀))
πi : (J : Box ι) → TaggedPrepartition J
hπip : ∀ (J : Box ι), J ∈ π₀ → IsPartition (πi J)
hπiδ' : ∀ (J : Box ι), J ∈ π₀ → dist (integralSum f vol (πi J)) (integral J l f vol) ≤ δ'
hπiC : ∀ (J : Box ι), J ∈ π₀ → MemBaseSet l J C (convergenceR h δ' C) (πi J)
this✝ : MemBaseSet l I C (convergenceR h δ' C) (Prepartition.biUnionTagged π₀ πi)
hU' : TaggedPrepartition.iUnion π = TaggedPrepartition.iUnion (Prepartition.biUnionTagged π₀ πi)
this : dist (integralSum f vol π) (∑ J in π₀.boxes, integralSum f vol (πi J)) ≤ ε + δ'
⊢ ε * (↑(card π₀.boxes) + 1) + δ + ↑(card π₀.boxes) * δ = (ε + δ) * (↑(card π₀.boxes) + 1)
[PROOFSTEP]
ring
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
π₀ : Prepartition I
⊢ Tendsto (integralSum f vol) (toFilteriUnion l I π₀) (𝓝 (∑ J in π₀.boxes, integral J l f vol))
[PROOFSTEP]
refine' ((l.hasBasis_toFilteriUnion I π₀).tendsto_iff nhds_basis_closedBall).2 fun ε ε0 => _
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε✝ ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
π₀ : Prepartition I
ε : ℝ
ε0 : 0 < ε
⊢ ∃ ia,
    (∀ (c : ℝ≥0), RCond l (ia c)) ∧
      ∀ (x : TaggedPrepartition I),
        x ∈ {π | ∃ c, MemBaseSet l I c (ia c) π ∧ TaggedPrepartition.iUnion π = Prepartition.iUnion π₀} →
          integralSum f vol x ∈ closedBall (∑ J in π₀.boxes, integral J l f vol) ε
[PROOFSTEP]
refine' ⟨h.convergenceR ε, h.convergenceR_cond ε, _⟩
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε✝ ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
π₀ : Prepartition I
ε : ℝ
ε0 : 0 < ε
⊢ ∀ (x : TaggedPrepartition I),
    x ∈ {π | ∃ c, MemBaseSet l I c (convergenceR h ε c) π ∧ TaggedPrepartition.iUnion π = Prepartition.iUnion π₀} →
      integralSum f vol x ∈ closedBall (∑ J in π₀.boxes, integral J l f vol) ε
[PROOFSTEP]
simp only [mem_inter_iff, Set.mem_iUnion, mem_setOf_eq]
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε✝ ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
π₀ : Prepartition I
ε : ℝ
ε0 : 0 < ε
⊢ ∀ (x : TaggedPrepartition I),
    (∃ c, MemBaseSet l I c (convergenceR h ε c) x ∧ TaggedPrepartition.iUnion x = Prepartition.iUnion π₀) →
      integralSum f vol x ∈ closedBall (∑ J in π₀.boxes, integral J l f vol) ε
[PROOFSTEP]
rintro π ⟨c, hc, hU⟩
[GOAL]
case intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c✝ c₁ c₂ : ℝ≥0
ε✝ ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
π₀ : Prepartition I
ε : ℝ
ε0 : 0 < ε
π : TaggedPrepartition I
c : ℝ≥0
hc : MemBaseSet l I c (convergenceR h ε c) π
hU : TaggedPrepartition.iUnion π = Prepartition.iUnion π₀
⊢ integralSum f vol π ∈ closedBall (∑ J in π₀.boxes, integral J l f vol) ε
[PROOFSTEP]
exact h.dist_integralSum_sum_integral_le_of_memBaseSet_of_iUnion_eq ε0 hc hU
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁✝ π₂✝ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
π₁ π₂ : Prepartition I
hU : Prepartition.iUnion π₁ = Prepartition.iUnion π₂
⊢ ∑ J in π₁.boxes, integral J l f vol = ∑ J in π₂.boxes, integral J l f vol
[PROOFSTEP]
refine' tendsto_nhds_unique (h.tendsto_integralSum_sum_integral π₁) _
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁✝ π₂✝ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
π₁ π₂ : Prepartition I
hU : Prepartition.iUnion π₁ = Prepartition.iUnion π₂
⊢ Tendsto (integralSum f vol) (toFilteriUnion l I π₁) (𝓝 (∑ J in π₂.boxes, integral J l f vol))
[PROOFSTEP]
rw [l.toFilteriUnion_congr _ hU]
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁✝ π₂✝ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
π₁ π₂ : Prepartition I
hU : Prepartition.iUnion π₁ = Prepartition.iUnion π₂
⊢ Tendsto (integralSum f vol) (toFilteriUnion l I π₂) (𝓝 (∑ J in π₂.boxes, integral J l f vol))
[PROOFSTEP]
exact h.tendsto_integralSum_sum_integral π₂
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J✝ : Box ι
π✝ : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
J : Box ι
hJ : ↑J ≤ ↑I
π : Prepartition J
hπ : Prepartition.IsPartition π
⊢ ∑ Ji in π.boxes, (fun J => integral J l f vol) Ji = (fun J => integral J l f vol) J
[PROOFSTEP]
replace hπ := hπ.iUnion_eq
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J✝ : Box ι
π✝ : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
J : Box ι
hJ : ↑J ≤ ↑I
π : Prepartition J
hπ : Prepartition.iUnion π = ↑J
⊢ ∑ Ji in π.boxes, (fun J => integral J l f vol) Ji = (fun J => integral J l f vol) J
[PROOFSTEP]
rw [← Prepartition.iUnion_top] at hπ 
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace ℝ F
I J✝ : Box ι
π✝ : TaggedPrepartition I
inst✝¹ : Fintype ι
l : IntegrationParams
f g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
c c₁ c₂ : ℝ≥0
ε ε₁ ε₂ : ℝ
π₁ π₂ : TaggedPrepartition I
inst✝ : CompleteSpace F
h : Integrable I l f vol
J : Box ι
hJ : ↑J ≤ ↑I
π : Prepartition J
hπ : Prepartition.iUnion π = Prepartition.iUnion ⊤
⊢ ∑ Ji in π.boxes, (fun J => integral J l f vol) Ji = (fun J => integral J l f vol) J
[PROOFSTEP]
rw [(h.to_subbox (WithTop.coe_le_coe.1 hJ)).sum_integral_congr hπ, Prepartition.top_boxes, sum_singleton]
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
I✝ J : Box ι
π : TaggedPrepartition I✝
inst✝² : Fintype ι
l : IntegrationParams
f✝ g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝¹ : CompleteSpace E
I : Box ι
f : (ι → ℝ) → E
hc : ContinuousOn f (↑Box.Icc I)
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
⊢ Integrable I l f (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))
[PROOFSTEP]
have huc := I.isCompact_Icc.uniformContinuousOn_of_continuous hc
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
I✝ J : Box ι
π : TaggedPrepartition I✝
inst✝² : Fintype ι
l : IntegrationParams
f✝ g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝¹ : CompleteSpace E
I : Box ι
f : (ι → ℝ) → E
hc : ContinuousOn f (↑Box.Icc I)
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
huc : UniformContinuousOn f (↑Box.Icc I)
⊢ Integrable I l f (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))
[PROOFSTEP]
rw [Metric.uniformContinuousOn_iff_le] at huc 
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
I✝ J : Box ι
π : TaggedPrepartition I✝
inst✝² : Fintype ι
l : IntegrationParams
f✝ g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝¹ : CompleteSpace E
I : Box ι
f : (ι → ℝ) → E
hc : ContinuousOn f (↑Box.Icc I)
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
huc :
  ∀ (ε : ℝ),
    ε > 0 →
      ∃ δ, δ > 0 ∧ ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε
⊢ Integrable I l f (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ))
[PROOFSTEP]
refine' integrable_iff_cauchy_basis.2 fun ε ε0 => _
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
I✝ J : Box ι
π : TaggedPrepartition I✝
inst✝² : Fintype ι
l : IntegrationParams
f✝ g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝¹ : CompleteSpace E
I : Box ι
f : (ι → ℝ) → E
hc : ContinuousOn f (↑Box.Icc I)
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
huc :
  ∀ (ε : ℝ),
    ε > 0 →
      ∃ δ, δ > 0 ∧ ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε
ε : ℝ
ε0 : ε > 0
⊢ ∃ r,
    (∀ (c : ℝ≥0), RCond l (r c)) ∧
      ∀ (c₁ c₂ : ℝ≥0) (π₁ π₂ : TaggedPrepartition I),
        MemBaseSet l I c₁ (r c₁) π₁ →
          IsPartition π₁ →
            MemBaseSet l I c₂ (r c₂) π₂ →
              IsPartition π₂ →
                dist (integralSum f (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ)) π₁)
                    (integralSum f (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ)) π₂) ≤
                  ε
[PROOFSTEP]
rcases exists_pos_mul_lt ε0 (μ.toBoxAdditive I) with ⟨ε', ε0', hε⟩
[GOAL]
case intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
I✝ J : Box ι
π : TaggedPrepartition I✝
inst✝² : Fintype ι
l : IntegrationParams
f✝ g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝¹ : CompleteSpace E
I : Box ι
f : (ι → ℝ) → E
hc : ContinuousOn f (↑Box.Icc I)
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
huc :
  ∀ (ε : ℝ),
    ε > 0 →
      ∃ δ, δ > 0 ∧ ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε
ε : ℝ
ε0 : ε > 0
ε' : ℝ
ε0' : 0 < ε'
hε : ↑(Measure.toBoxAdditive μ) I * ε' < ε
⊢ ∃ r,
    (∀ (c : ℝ≥0), RCond l (r c)) ∧
      ∀ (c₁ c₂ : ℝ≥0) (π₁ π₂ : TaggedPrepartition I),
        MemBaseSet l I c₁ (r c₁) π₁ →
          IsPartition π₁ →
            MemBaseSet l I c₂ (r c₂) π₂ →
              IsPartition π₂ →
                dist (integralSum f (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ)) π₁)
                    (integralSum f (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ)) π₂) ≤
                  ε
[PROOFSTEP]
rcases huc ε' ε0' with ⟨δ, δ0 : 0 < δ, Hδ⟩
[GOAL]
case intro.intro.intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
I✝ J : Box ι
π : TaggedPrepartition I✝
inst✝² : Fintype ι
l : IntegrationParams
f✝ g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝¹ : CompleteSpace E
I : Box ι
f : (ι → ℝ) → E
hc : ContinuousOn f (↑Box.Icc I)
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
huc :
  ∀ (ε : ℝ),
    ε > 0 →
      ∃ δ, δ > 0 ∧ ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε
ε : ℝ
ε0 : ε > 0
ε' : ℝ
ε0' : 0 < ε'
hε : ↑(Measure.toBoxAdditive μ) I * ε' < ε
δ : ℝ
δ0 : 0 < δ
Hδ : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε'
⊢ ∃ r,
    (∀ (c : ℝ≥0), RCond l (r c)) ∧
      ∀ (c₁ c₂ : ℝ≥0) (π₁ π₂ : TaggedPrepartition I),
        MemBaseSet l I c₁ (r c₁) π₁ →
          IsPartition π₁ →
            MemBaseSet l I c₂ (r c₂) π₂ →
              IsPartition π₂ →
                dist (integralSum f (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ)) π₁)
                    (integralSum f (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ)) π₂) ≤
                  ε
[PROOFSTEP]
refine' ⟨fun _ _ => ⟨δ / 2, half_pos δ0⟩, fun _ _ _ => rfl, fun c₁ c₂ π₁ π₂ h₁ h₁p h₂ h₂p => _⟩
[GOAL]
case intro.intro.intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
I✝ J : Box ι
π : TaggedPrepartition I✝
inst✝² : Fintype ι
l : IntegrationParams
f✝ g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝¹ : CompleteSpace E
I : Box ι
f : (ι → ℝ) → E
hc : ContinuousOn f (↑Box.Icc I)
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
huc :
  ∀ (ε : ℝ),
    ε > 0 →
      ∃ δ, δ > 0 ∧ ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε
ε : ℝ
ε0 : ε > 0
ε' : ℝ
ε0' : 0 < ε'
hε : ↑(Measure.toBoxAdditive μ) I * ε' < ε
δ : ℝ
δ0 : 0 < δ
Hδ : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε'
c₁ c₂ : ℝ≥0
π₁ π₂ : TaggedPrepartition I
h₁ : MemBaseSet l I c₁ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₁) π₁
h₁p : IsPartition π₁
h₂ : MemBaseSet l I c₂ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₂) π₂
h₂p : IsPartition π₂
⊢ dist (integralSum f (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ)) π₁)
      (integralSum f (BoxAdditiveMap.toSMul (Measure.toBoxAdditive μ)) π₂) ≤
    ε
[PROOFSTEP]
simp only [dist_eq_norm, integralSum_sub_partitions _ _ h₁p h₂p, BoxAdditiveMap.toSMul_apply, ← smul_sub]
[GOAL]
case intro.intro.intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
I✝ J : Box ι
π : TaggedPrepartition I✝
inst✝² : Fintype ι
l : IntegrationParams
f✝ g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝¹ : CompleteSpace E
I : Box ι
f : (ι → ℝ) → E
hc : ContinuousOn f (↑Box.Icc I)
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
huc :
  ∀ (ε : ℝ),
    ε > 0 →
      ∃ δ, δ > 0 ∧ ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε
ε : ℝ
ε0 : ε > 0
ε' : ℝ
ε0' : 0 < ε'
hε : ↑(Measure.toBoxAdditive μ) I * ε' < ε
δ : ℝ
δ0 : 0 < δ
Hδ : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε'
c₁ c₂ : ℝ≥0
π₁ π₂ : TaggedPrepartition I
h₁ : MemBaseSet l I c₁ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₁) π₁
h₁p : IsPartition π₁
h₂ : MemBaseSet l I c₂ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₂) π₂
h₂p : IsPartition π₂
⊢ ‖∑ x in (π₁.toPrepartition ⊓ π₂.toPrepartition).boxes,
        ↑(Measure.toBoxAdditive μ) x •
          (f (tag (infPrepartition π₁ π₂.toPrepartition) x) - f (tag (infPrepartition π₂ π₁.toPrepartition) x))‖ ≤
    ε
[PROOFSTEP]
have :
  ∀ J ∈ π₁.toPrepartition ⊓ π₂.toPrepartition,
    ‖μ.toBoxAdditive J •
          (f ((π₁.infPrepartition π₂.toPrepartition).tag J) - f ((π₂.infPrepartition π₁.toPrepartition).tag J))‖ ≤
      μ.toBoxAdditive J * ε' :=
  by
  intro J hJ
  have : 0 ≤ μ.toBoxAdditive J := ENNReal.toReal_nonneg
  rw [norm_smul, Real.norm_eq_abs, abs_of_nonneg this, ← dist_eq_norm]
  refine' mul_le_mul_of_nonneg_left _ this
  refine' Hδ _ (TaggedPrepartition.tag_mem_Icc _ _) _ (TaggedPrepartition.tag_mem_Icc _ _) _
  rw [← add_halves δ]
  refine' (dist_triangle_left _ _ J.upper).trans (add_le_add (h₁.1 _ _ _) (h₂.1 _ _ _))
  · exact Prepartition.biUnionIndex_mem _ hJ
  · exact Box.le_iff_Icc.1 (Prepartition.le_biUnionIndex _ hJ) J.upper_mem_Icc
  · rw [_root_.inf_comm] at hJ 
    exact Prepartition.biUnionIndex_mem _ hJ
  · rw [_root_.inf_comm] at hJ 
    exact Box.le_iff_Icc.1 (Prepartition.le_biUnionIndex _ hJ) J.upper_mem_Icc
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
I✝ J : Box ι
π : TaggedPrepartition I✝
inst✝² : Fintype ι
l : IntegrationParams
f✝ g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝¹ : CompleteSpace E
I : Box ι
f : (ι → ℝ) → E
hc : ContinuousOn f (↑Box.Icc I)
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
huc :
  ∀ (ε : ℝ),
    ε > 0 →
      ∃ δ, δ > 0 ∧ ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε
ε : ℝ
ε0 : ε > 0
ε' : ℝ
ε0' : 0 < ε'
hε : ↑(Measure.toBoxAdditive μ) I * ε' < ε
δ : ℝ
δ0 : 0 < δ
Hδ : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε'
c₁ c₂ : ℝ≥0
π₁ π₂ : TaggedPrepartition I
h₁ : MemBaseSet l I c₁ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₁) π₁
h₁p : IsPartition π₁
h₂ : MemBaseSet l I c₂ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₂) π₂
h₂p : IsPartition π₂
⊢ ∀ (J : Box ι),
    J ∈ π₁.toPrepartition ⊓ π₂.toPrepartition →
      ‖↑(Measure.toBoxAdditive μ) J •
            (f (tag (infPrepartition π₁ π₂.toPrepartition) J) - f (tag (infPrepartition π₂ π₁.toPrepartition) J))‖ ≤
        ↑(Measure.toBoxAdditive μ) J * ε'
[PROOFSTEP]
intro J hJ
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
I✝ J✝ : Box ι
π : TaggedPrepartition I✝
inst✝² : Fintype ι
l : IntegrationParams
f✝ g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝¹ : CompleteSpace E
I : Box ι
f : (ι → ℝ) → E
hc : ContinuousOn f (↑Box.Icc I)
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
huc :
  ∀ (ε : ℝ),
    ε > 0 →
      ∃ δ, δ > 0 ∧ ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε
ε : ℝ
ε0 : ε > 0
ε' : ℝ
ε0' : 0 < ε'
hε : ↑(Measure.toBoxAdditive μ) I * ε' < ε
δ : ℝ
δ0 : 0 < δ
Hδ : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε'
c₁ c₂ : ℝ≥0
π₁ π₂ : TaggedPrepartition I
h₁ : MemBaseSet l I c₁ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₁) π₁
h₁p : IsPartition π₁
h₂ : MemBaseSet l I c₂ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₂) π₂
h₂p : IsPartition π₂
J : Box ι
hJ : J ∈ π₁.toPrepartition ⊓ π₂.toPrepartition
⊢ ‖↑(Measure.toBoxAdditive μ) J •
        (f (tag (infPrepartition π₁ π₂.toPrepartition) J) - f (tag (infPrepartition π₂ π₁.toPrepartition) J))‖ ≤
    ↑(Measure.toBoxAdditive μ) J * ε'
[PROOFSTEP]
have : 0 ≤ μ.toBoxAdditive J := ENNReal.toReal_nonneg
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
I✝ J✝ : Box ι
π : TaggedPrepartition I✝
inst✝² : Fintype ι
l : IntegrationParams
f✝ g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝¹ : CompleteSpace E
I : Box ι
f : (ι → ℝ) → E
hc : ContinuousOn f (↑Box.Icc I)
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
huc :
  ∀ (ε : ℝ),
    ε > 0 →
      ∃ δ, δ > 0 ∧ ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε
ε : ℝ
ε0 : ε > 0
ε' : ℝ
ε0' : 0 < ε'
hε : ↑(Measure.toBoxAdditive μ) I * ε' < ε
δ : ℝ
δ0 : 0 < δ
Hδ : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε'
c₁ c₂ : ℝ≥0
π₁ π₂ : TaggedPrepartition I
h₁ : MemBaseSet l I c₁ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₁) π₁
h₁p : IsPartition π₁
h₂ : MemBaseSet l I c₂ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₂) π₂
h₂p : IsPartition π₂
J : Box ι
hJ : J ∈ π₁.toPrepartition ⊓ π₂.toPrepartition
this : 0 ≤ ↑(Measure.toBoxAdditive μ) J
⊢ ‖↑(Measure.toBoxAdditive μ) J •
        (f (tag (infPrepartition π₁ π₂.toPrepartition) J) - f (tag (infPrepartition π₂ π₁.toPrepartition) J))‖ ≤
    ↑(Measure.toBoxAdditive μ) J * ε'
[PROOFSTEP]
rw [norm_smul, Real.norm_eq_abs, abs_of_nonneg this, ← dist_eq_norm]
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
I✝ J✝ : Box ι
π : TaggedPrepartition I✝
inst✝² : Fintype ι
l : IntegrationParams
f✝ g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝¹ : CompleteSpace E
I : Box ι
f : (ι → ℝ) → E
hc : ContinuousOn f (↑Box.Icc I)
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
huc :
  ∀ (ε : ℝ),
    ε > 0 →
      ∃ δ, δ > 0 ∧ ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε
ε : ℝ
ε0 : ε > 0
ε' : ℝ
ε0' : 0 < ε'
hε : ↑(Measure.toBoxAdditive μ) I * ε' < ε
δ : ℝ
δ0 : 0 < δ
Hδ : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε'
c₁ c₂ : ℝ≥0
π₁ π₂ : TaggedPrepartition I
h₁ : MemBaseSet l I c₁ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₁) π₁
h₁p : IsPartition π₁
h₂ : MemBaseSet l I c₂ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₂) π₂
h₂p : IsPartition π₂
J : Box ι
hJ : J ∈ π₁.toPrepartition ⊓ π₂.toPrepartition
this : 0 ≤ ↑(Measure.toBoxAdditive μ) J
⊢ ↑(Measure.toBoxAdditive μ) J *
      dist (f (tag (infPrepartition π₁ π₂.toPrepartition) J)) (f (tag (infPrepartition π₂ π₁.toPrepartition) J)) ≤
    ↑(Measure.toBoxAdditive μ) J * ε'
[PROOFSTEP]
refine' mul_le_mul_of_nonneg_left _ this
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
I✝ J✝ : Box ι
π : TaggedPrepartition I✝
inst✝² : Fintype ι
l : IntegrationParams
f✝ g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝¹ : CompleteSpace E
I : Box ι
f : (ι → ℝ) → E
hc : ContinuousOn f (↑Box.Icc I)
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
huc :
  ∀ (ε : ℝ),
    ε > 0 →
      ∃ δ, δ > 0 ∧ ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε
ε : ℝ
ε0 : ε > 0
ε' : ℝ
ε0' : 0 < ε'
hε : ↑(Measure.toBoxAdditive μ) I * ε' < ε
δ : ℝ
δ0 : 0 < δ
Hδ : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε'
c₁ c₂ : ℝ≥0
π₁ π₂ : TaggedPrepartition I
h₁ : MemBaseSet l I c₁ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₁) π₁
h₁p : IsPartition π₁
h₂ : MemBaseSet l I c₂ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₂) π₂
h₂p : IsPartition π₂
J : Box ι
hJ : J ∈ π₁.toPrepartition ⊓ π₂.toPrepartition
this : 0 ≤ ↑(Measure.toBoxAdditive μ) J
⊢ dist (f (tag (infPrepartition π₁ π₂.toPrepartition) J)) (f (tag (infPrepartition π₂ π₁.toPrepartition) J)) ≤ ε'
[PROOFSTEP]
refine' Hδ _ (TaggedPrepartition.tag_mem_Icc _ _) _ (TaggedPrepartition.tag_mem_Icc _ _) _
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
I✝ J✝ : Box ι
π : TaggedPrepartition I✝
inst✝² : Fintype ι
l : IntegrationParams
f✝ g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝¹ : CompleteSpace E
I : Box ι
f : (ι → ℝ) → E
hc : ContinuousOn f (↑Box.Icc I)
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
huc :
  ∀ (ε : ℝ),
    ε > 0 →
      ∃ δ, δ > 0 ∧ ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε
ε : ℝ
ε0 : ε > 0
ε' : ℝ
ε0' : 0 < ε'
hε : ↑(Measure.toBoxAdditive μ) I * ε' < ε
δ : ℝ
δ0 : 0 < δ
Hδ : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε'
c₁ c₂ : ℝ≥0
π₁ π₂ : TaggedPrepartition I
h₁ : MemBaseSet l I c₁ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₁) π₁
h₁p : IsPartition π₁
h₂ : MemBaseSet l I c₂ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₂) π₂
h₂p : IsPartition π₂
J : Box ι
hJ : J ∈ π₁.toPrepartition ⊓ π₂.toPrepartition
this : 0 ≤ ↑(Measure.toBoxAdditive μ) J
⊢ dist (tag (infPrepartition π₁ π₂.toPrepartition) J) (tag (infPrepartition π₂ π₁.toPrepartition) J) ≤ δ
[PROOFSTEP]
rw [← add_halves δ]
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
I✝ J✝ : Box ι
π : TaggedPrepartition I✝
inst✝² : Fintype ι
l : IntegrationParams
f✝ g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝¹ : CompleteSpace E
I : Box ι
f : (ι → ℝ) → E
hc : ContinuousOn f (↑Box.Icc I)
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
huc :
  ∀ (ε : ℝ),
    ε > 0 →
      ∃ δ, δ > 0 ∧ ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε
ε : ℝ
ε0 : ε > 0
ε' : ℝ
ε0' : 0 < ε'
hε : ↑(Measure.toBoxAdditive μ) I * ε' < ε
δ : ℝ
δ0 : 0 < δ
Hδ : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε'
c₁ c₂ : ℝ≥0
π₁ π₂ : TaggedPrepartition I
h₁ : MemBaseSet l I c₁ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₁) π₁
h₁p : IsPartition π₁
h₂ : MemBaseSet l I c₂ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₂) π₂
h₂p : IsPartition π₂
J : Box ι
hJ : J ∈ π₁.toPrepartition ⊓ π₂.toPrepartition
this : 0 ≤ ↑(Measure.toBoxAdditive μ) J
⊢ dist (tag (infPrepartition π₁ π₂.toPrepartition) J) (tag (infPrepartition π₂ π₁.toPrepartition) J) ≤ δ / 2 + δ / 2
[PROOFSTEP]
refine' (dist_triangle_left _ _ J.upper).trans (add_le_add (h₁.1 _ _ _) (h₂.1 _ _ _))
[GOAL]
case refine'_1
ι : Type u
E : Type v
F : Type w
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
I✝ J✝ : Box ι
π : TaggedPrepartition I✝
inst✝² : Fintype ι
l : IntegrationParams
f✝ g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝¹ : CompleteSpace E
I : Box ι
f : (ι → ℝ) → E
hc : ContinuousOn f (↑Box.Icc I)
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
huc :
  ∀ (ε : ℝ),
    ε > 0 →
      ∃ δ, δ > 0 ∧ ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε
ε : ℝ
ε0 : ε > 0
ε' : ℝ
ε0' : 0 < ε'
hε : ↑(Measure.toBoxAdditive μ) I * ε' < ε
δ : ℝ
δ0 : 0 < δ
Hδ : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε'
c₁ c₂ : ℝ≥0
π₁ π₂ : TaggedPrepartition I
h₁ : MemBaseSet l I c₁ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₁) π₁
h₁p : IsPartition π₁
h₂ : MemBaseSet l I c₂ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₂) π₂
h₂p : IsPartition π₂
J : Box ι
hJ : J ∈ π₁.toPrepartition ⊓ π₂.toPrepartition
this : 0 ≤ ↑(Measure.toBoxAdditive μ) J
⊢ Prepartition.biUnionIndex π₁.toPrepartition (fun J => Prepartition.restrict π₂.toPrepartition J) J ∈ π₁
[PROOFSTEP]
exact Prepartition.biUnionIndex_mem _ hJ
[GOAL]
case refine'_2
ι : Type u
E : Type v
F : Type w
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
I✝ J✝ : Box ι
π : TaggedPrepartition I✝
inst✝² : Fintype ι
l : IntegrationParams
f✝ g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝¹ : CompleteSpace E
I : Box ι
f : (ι → ℝ) → E
hc : ContinuousOn f (↑Box.Icc I)
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
huc :
  ∀ (ε : ℝ),
    ε > 0 →
      ∃ δ, δ > 0 ∧ ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε
ε : ℝ
ε0 : ε > 0
ε' : ℝ
ε0' : 0 < ε'
hε : ↑(Measure.toBoxAdditive μ) I * ε' < ε
δ : ℝ
δ0 : 0 < δ
Hδ : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε'
c₁ c₂ : ℝ≥0
π₁ π₂ : TaggedPrepartition I
h₁ : MemBaseSet l I c₁ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₁) π₁
h₁p : IsPartition π₁
h₂ : MemBaseSet l I c₂ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₂) π₂
h₂p : IsPartition π₂
J : Box ι
hJ : J ∈ π₁.toPrepartition ⊓ π₂.toPrepartition
this : 0 ≤ ↑(Measure.toBoxAdditive μ) J
⊢ J.upper ∈
    ↑Box.Icc (Prepartition.biUnionIndex π₁.toPrepartition (fun J => Prepartition.restrict π₂.toPrepartition J) J)
[PROOFSTEP]
exact Box.le_iff_Icc.1 (Prepartition.le_biUnionIndex _ hJ) J.upper_mem_Icc
[GOAL]
case refine'_3
ι : Type u
E : Type v
F : Type w
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
I✝ J✝ : Box ι
π : TaggedPrepartition I✝
inst✝² : Fintype ι
l : IntegrationParams
f✝ g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝¹ : CompleteSpace E
I : Box ι
f : (ι → ℝ) → E
hc : ContinuousOn f (↑Box.Icc I)
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
huc :
  ∀ (ε : ℝ),
    ε > 0 →
      ∃ δ, δ > 0 ∧ ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε
ε : ℝ
ε0 : ε > 0
ε' : ℝ
ε0' : 0 < ε'
hε : ↑(Measure.toBoxAdditive μ) I * ε' < ε
δ : ℝ
δ0 : 0 < δ
Hδ : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε'
c₁ c₂ : ℝ≥0
π₁ π₂ : TaggedPrepartition I
h₁ : MemBaseSet l I c₁ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₁) π₁
h₁p : IsPartition π₁
h₂ : MemBaseSet l I c₂ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₂) π₂
h₂p : IsPartition π₂
J : Box ι
hJ : J ∈ π₁.toPrepartition ⊓ π₂.toPrepartition
this : 0 ≤ ↑(Measure.toBoxAdditive μ) J
⊢ Prepartition.biUnionIndex π₂.toPrepartition (fun J => Prepartition.restrict π₁.toPrepartition J) J ∈ π₂
[PROOFSTEP]
rw [_root_.inf_comm] at hJ 
[GOAL]
case refine'_3
ι : Type u
E : Type v
F : Type w
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
I✝ J✝ : Box ι
π : TaggedPrepartition I✝
inst✝² : Fintype ι
l : IntegrationParams
f✝ g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝¹ : CompleteSpace E
I : Box ι
f : (ι → ℝ) → E
hc : ContinuousOn f (↑Box.Icc I)
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
huc :
  ∀ (ε : ℝ),
    ε > 0 →
      ∃ δ, δ > 0 ∧ ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε
ε : ℝ
ε0 : ε > 0
ε' : ℝ
ε0' : 0 < ε'
hε : ↑(Measure.toBoxAdditive μ) I * ε' < ε
δ : ℝ
δ0 : 0 < δ
Hδ : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε'
c₁ c₂ : ℝ≥0
π₁ π₂ : TaggedPrepartition I
h₁ : MemBaseSet l I c₁ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₁) π₁
h₁p : IsPartition π₁
h₂ : MemBaseSet l I c₂ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₂) π₂
h₂p : IsPartition π₂
J : Box ι
hJ : J ∈ π₂.toPrepartition ⊓ π₁.toPrepartition
this : 0 ≤ ↑(Measure.toBoxAdditive μ) J
⊢ Prepartition.biUnionIndex π₂.toPrepartition (fun J => Prepartition.restrict π₁.toPrepartition J) J ∈ π₂
[PROOFSTEP]
exact Prepartition.biUnionIndex_mem _ hJ
[GOAL]
case refine'_4
ι : Type u
E : Type v
F : Type w
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
I✝ J✝ : Box ι
π : TaggedPrepartition I✝
inst✝² : Fintype ι
l : IntegrationParams
f✝ g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝¹ : CompleteSpace E
I : Box ι
f : (ι → ℝ) → E
hc : ContinuousOn f (↑Box.Icc I)
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
huc :
  ∀ (ε : ℝ),
    ε > 0 →
      ∃ δ, δ > 0 ∧ ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε
ε : ℝ
ε0 : ε > 0
ε' : ℝ
ε0' : 0 < ε'
hε : ↑(Measure.toBoxAdditive μ) I * ε' < ε
δ : ℝ
δ0 : 0 < δ
Hδ : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε'
c₁ c₂ : ℝ≥0
π₁ π₂ : TaggedPrepartition I
h₁ : MemBaseSet l I c₁ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₁) π₁
h₁p : IsPartition π₁
h₂ : MemBaseSet l I c₂ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₂) π₂
h₂p : IsPartition π₂
J : Box ι
hJ : J ∈ π₁.toPrepartition ⊓ π₂.toPrepartition
this : 0 ≤ ↑(Measure.toBoxAdditive μ) J
⊢ J.upper ∈
    ↑Box.Icc (Prepartition.biUnionIndex π₂.toPrepartition (fun J => Prepartition.restrict π₁.toPrepartition J) J)
[PROOFSTEP]
rw [_root_.inf_comm] at hJ 
[GOAL]
case refine'_4
ι : Type u
E : Type v
F : Type w
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
I✝ J✝ : Box ι
π : TaggedPrepartition I✝
inst✝² : Fintype ι
l : IntegrationParams
f✝ g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝¹ : CompleteSpace E
I : Box ι
f : (ι → ℝ) → E
hc : ContinuousOn f (↑Box.Icc I)
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
huc :
  ∀ (ε : ℝ),
    ε > 0 →
      ∃ δ, δ > 0 ∧ ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε
ε : ℝ
ε0 : ε > 0
ε' : ℝ
ε0' : 0 < ε'
hε : ↑(Measure.toBoxAdditive μ) I * ε' < ε
δ : ℝ
δ0 : 0 < δ
Hδ : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε'
c₁ c₂ : ℝ≥0
π₁ π₂ : TaggedPrepartition I
h₁ : MemBaseSet l I c₁ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₁) π₁
h₁p : IsPartition π₁
h₂ : MemBaseSet l I c₂ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₂) π₂
h₂p : IsPartition π₂
J : Box ι
hJ : J ∈ π₂.toPrepartition ⊓ π₁.toPrepartition
this : 0 ≤ ↑(Measure.toBoxAdditive μ) J
⊢ J.upper ∈
    ↑Box.Icc (Prepartition.biUnionIndex π₂.toPrepartition (fun J => Prepartition.restrict π₁.toPrepartition J) J)
[PROOFSTEP]
exact Box.le_iff_Icc.1 (Prepartition.le_biUnionIndex _ hJ) J.upper_mem_Icc
[GOAL]
case intro.intro.intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
I✝ J : Box ι
π : TaggedPrepartition I✝
inst✝² : Fintype ι
l : IntegrationParams
f✝ g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝¹ : CompleteSpace E
I : Box ι
f : (ι → ℝ) → E
hc : ContinuousOn f (↑Box.Icc I)
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
huc :
  ∀ (ε : ℝ),
    ε > 0 →
      ∃ δ, δ > 0 ∧ ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε
ε : ℝ
ε0 : ε > 0
ε' : ℝ
ε0' : 0 < ε'
hε : ↑(Measure.toBoxAdditive μ) I * ε' < ε
δ : ℝ
δ0 : 0 < δ
Hδ : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε'
c₁ c₂ : ℝ≥0
π₁ π₂ : TaggedPrepartition I
h₁ : MemBaseSet l I c₁ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₁) π₁
h₁p : IsPartition π₁
h₂ : MemBaseSet l I c₂ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₂) π₂
h₂p : IsPartition π₂
this :
  ∀ (J : Box ι),
    J ∈ π₁.toPrepartition ⊓ π₂.toPrepartition →
      ‖↑(Measure.toBoxAdditive μ) J •
            (f (tag (infPrepartition π₁ π₂.toPrepartition) J) - f (tag (infPrepartition π₂ π₁.toPrepartition) J))‖ ≤
        ↑(Measure.toBoxAdditive μ) J * ε'
⊢ ‖∑ x in (π₁.toPrepartition ⊓ π₂.toPrepartition).boxes,
        ↑(Measure.toBoxAdditive μ) x •
          (f (tag (infPrepartition π₁ π₂.toPrepartition) x) - f (tag (infPrepartition π₂ π₁.toPrepartition) x))‖ ≤
    ε
[PROOFSTEP]
refine' (norm_sum_le_of_le _ this).trans _
[GOAL]
case intro.intro.intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
I✝ J : Box ι
π : TaggedPrepartition I✝
inst✝² : Fintype ι
l : IntegrationParams
f✝ g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝¹ : CompleteSpace E
I : Box ι
f : (ι → ℝ) → E
hc : ContinuousOn f (↑Box.Icc I)
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
huc :
  ∀ (ε : ℝ),
    ε > 0 →
      ∃ δ, δ > 0 ∧ ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε
ε : ℝ
ε0 : ε > 0
ε' : ℝ
ε0' : 0 < ε'
hε : ↑(Measure.toBoxAdditive μ) I * ε' < ε
δ : ℝ
δ0 : 0 < δ
Hδ : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε'
c₁ c₂ : ℝ≥0
π₁ π₂ : TaggedPrepartition I
h₁ : MemBaseSet l I c₁ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₁) π₁
h₁p : IsPartition π₁
h₂ : MemBaseSet l I c₂ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₂) π₂
h₂p : IsPartition π₂
this :
  ∀ (J : Box ι),
    J ∈ π₁.toPrepartition ⊓ π₂.toPrepartition →
      ‖↑(Measure.toBoxAdditive μ) J •
            (f (tag (infPrepartition π₁ π₂.toPrepartition) J) - f (tag (infPrepartition π₂ π₁.toPrepartition) J))‖ ≤
        ↑(Measure.toBoxAdditive μ) J * ε'
⊢ ∑ b in (π₁.toPrepartition ⊓ π₂.toPrepartition).boxes, ↑(Measure.toBoxAdditive μ) b * ε' ≤ ε
[PROOFSTEP]
rw [← Finset.sum_mul, μ.toBoxAdditive.sum_partition_boxes le_top (h₁p.inf h₂p)]
[GOAL]
case intro.intro.intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : NormedAddCommGroup F
inst✝³ : NormedSpace ℝ F
I✝ J : Box ι
π : TaggedPrepartition I✝
inst✝² : Fintype ι
l : IntegrationParams
f✝ g : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
inst✝¹ : CompleteSpace E
I : Box ι
f : (ι → ℝ) → E
hc : ContinuousOn f (↑Box.Icc I)
μ : Measure (ι → ℝ)
inst✝ : IsLocallyFiniteMeasure μ
huc :
  ∀ (ε : ℝ),
    ε > 0 →
      ∃ δ, δ > 0 ∧ ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε
ε : ℝ
ε0 : ε > 0
ε' : ℝ
ε0' : 0 < ε'
hε : ↑(Measure.toBoxAdditive μ) I * ε' < ε
δ : ℝ
δ0 : 0 < δ
Hδ : ∀ (x : ι → ℝ), x ∈ ↑Box.Icc I → ∀ (y : ι → ℝ), y ∈ ↑Box.Icc I → dist x y ≤ δ → dist (f x) (f y) ≤ ε'
c₁ c₂ : ℝ≥0
π₁ π₂ : TaggedPrepartition I
h₁ : MemBaseSet l I c₁ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₁) π₁
h₁p : IsPartition π₁
h₂ : MemBaseSet l I c₂ ((fun x x => { val := δ / 2, property := (_ : 0 < δ / 2) }) c₂) π₂
h₂p : IsPartition π₂
this :
  ∀ (J : Box ι),
    J ∈ π₁.toPrepartition ⊓ π₂.toPrepartition →
      ‖↑(Measure.toBoxAdditive μ) J •
            (f (tag (infPrepartition π₁ π₂.toPrepartition) J) - f (tag (infPrepartition π₂ π₁.toPrepartition) J))‖ ≤
        ↑(Measure.toBoxAdditive μ) J * ε'
⊢ ↑(Measure.toBoxAdditive μ) I * ε' ≤ ε
[PROOFSTEP]
exact hε.le
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
hlH : Set.Nonempty s → l.bHenstock = true
H₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        ε > 0 →
          ∃ δ,
            δ > 0 ∧
              ∀ (J : Box ι),
                J ≤ I →
                  ↑Box.Icc J ⊆ closedBall x δ →
                    x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
H₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        ε > 0 →
          ∃ δ,
            δ > 0 ∧
              ∀ (J : Box ι),
                J ≤ I →
                  ↑Box.Icc J ⊆ closedBall x δ →
                    (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                      (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
⊢ HasIntegral I l f vol (↑g I)
[PROOFSTEP]
refine' ((l.hasBasis_toFilteriUnion_top _).tendsto_iff Metric.nhds_basis_closedBall).2 _
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
hlH : Set.Nonempty s → l.bHenstock = true
H₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        ε > 0 →
          ∃ δ,
            δ > 0 ∧
              ∀ (J : Box ι),
                J ≤ I →
                  ↑Box.Icc J ⊆ closedBall x δ →
                    x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
H₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        ε > 0 →
          ∃ δ,
            δ > 0 ∧
              ∀ (J : Box ι),
                J ≤ I →
                  ↑Box.Icc J ⊆ closedBall x δ →
                    (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                      (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
⊢ ∀ (ib : ℝ),
    0 < ib →
      ∃ ia,
        (∀ (c : ℝ≥0), RCond l (ia c)) ∧
          ∀ (x : TaggedPrepartition I),
            x ∈ {π | ∃ c, MemBaseSet l I c (ia c) π ∧ IsPartition π} → integralSum f vol x ∈ closedBall (↑g I) ib
[PROOFSTEP]
intro ε ε0
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
hlH : Set.Nonempty s → l.bHenstock = true
H₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        ε > 0 →
          ∃ δ,
            δ > 0 ∧
              ∀ (J : Box ι),
                J ≤ I →
                  ↑Box.Icc J ⊆ closedBall x δ →
                    x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
H₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        ε > 0 →
          ∃ δ,
            δ > 0 ∧
              ∀ (J : Box ι),
                J ≤ I →
                  ↑Box.Icc J ⊆ closedBall x δ →
                    (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                      (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε : ℝ
ε0 : 0 < ε
⊢ ∃ ia,
    (∀ (c : ℝ≥0), RCond l (ia c)) ∧
      ∀ (x : TaggedPrepartition I),
        x ∈ {π | ∃ c, MemBaseSet l I c (ia c) π ∧ IsPartition π} → integralSum f vol x ∈ closedBall (↑g I) ε
[PROOFSTEP]
simp only [← exists_prop, gt_iff_lt, Subtype.exists'] at H₁ H₂ 
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
hlH : Set.Nonempty s → l.bHenstock = true
ε : ℝ
ε0 : 0 < ε
H₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∃ x_1,
            ∀ (J : Box ι),
              J ≤ I →
                ↑Box.Icc J ⊆ closedBall x ↑x_1 →
                  x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
H₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∃ x_1,
            ∀ (J : Box ι),
              J ≤ I →
                ↑Box.Icc J ⊆ closedBall x ↑x_1 →
                  (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                    (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
⊢ ∃ ia,
    (∀ (c : ℝ≥0), RCond l (ia c)) ∧
      ∀ (x : TaggedPrepartition I),
        x ∈ {π | ∃ c, MemBaseSet l I c (ia c) π ∧ IsPartition π} → integralSum f vol x ∈ closedBall (↑g I) ε
[PROOFSTEP]
choose! δ₁ Hδ₁ using H₁
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
hlH : Set.Nonempty s → l.bHenstock = true
ε : ℝ
ε0 : 0 < ε
H₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∃ x_1,
            ∀ (J : Box ι),
              J ≤ I →
                ↑Box.Icc J ⊆ closedBall x ↑x_1 →
                  (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                    (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
⊢ ∃ ia,
    (∀ (c : ℝ≥0), RCond l (ia c)) ∧
      ∀ (x : TaggedPrepartition I),
        x ∈ {π | ∃ c, MemBaseSet l I c (ia c) π ∧ IsPartition π} → integralSum f vol x ∈ closedBall (↑g I) ε
[PROOFSTEP]
choose! δ₂ Hδ₂ using H₂
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
hlH : Set.Nonempty s → l.bHenstock = true
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
⊢ ∃ ia,
    (∀ (c : ℝ≥0), RCond l (ia c)) ∧
      ∀ (x : TaggedPrepartition I),
        x ∈ {π | ∃ c, MemBaseSet l I c (ia c) π ∧ IsPartition π} → integralSum f vol x ∈ closedBall (↑g I) ε
[PROOFSTEP]
have ε0' := half_pos ε0
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
hlH : Set.Nonempty s → l.bHenstock = true
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
⊢ ∃ ia,
    (∀ (c : ℝ≥0), RCond l (ia c)) ∧
      ∀ (x : TaggedPrepartition I),
        x ∈ {π | ∃ c, MemBaseSet l I c (ia c) π ∧ IsPartition π} → integralSum f vol x ∈ closedBall (↑g I) ε
[PROOFSTEP]
have H0 : 0 < (2 : ℝ) ^ Fintype.card ι := pow_pos zero_lt_two _
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
hlH : Set.Nonempty s → l.bHenstock = true
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
⊢ ∃ ia,
    (∀ (c : ℝ≥0), RCond l (ia c)) ∧
      ∀ (x : TaggedPrepartition I),
        x ∈ {π | ∃ c, MemBaseSet l I c (ia c) π ∧ IsPartition π} → integralSum f vol x ∈ closedBall (↑g I) ε
[PROOFSTEP]
rcases hs.exists_pos_forall_sum_le (div_pos ε0' H0) with ⟨εs, hεs0, hεs⟩
[GOAL]
case intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
hlH : Set.Nonempty s → l.bHenstock = true
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ i in t, εs i ≤ ε / 2 / 2 ^ Fintype.card ι
⊢ ∃ ia,
    (∀ (c : ℝ≥0), RCond l (ia c)) ∧
      ∀ (x : TaggedPrepartition I),
        x ∈ {π | ∃ c, MemBaseSet l I c (ia c) π ∧ IsPartition π} → integralSum f vol x ∈ closedBall (↑g I) ε
[PROOFSTEP]
simp only [le_div_iff' H0, mul_sum] at hεs 
[GOAL]
case intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
hlH : Set.Nonempty s → l.bHenstock = true
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
⊢ ∃ ia,
    (∀ (c : ℝ≥0), RCond l (ia c)) ∧
      ∀ (x : TaggedPrepartition I),
        x ∈ {π | ∃ c, MemBaseSet l I c (ia c) π ∧ IsPartition π} → integralSum f vol x ∈ closedBall (↑g I) ε
[PROOFSTEP]
rcases exists_pos_mul_lt ε0' (B I) with ⟨ε', ε'0, hεI⟩
[GOAL]
case intro.intro.intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
hlH : Set.Nonempty s → l.bHenstock = true
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
⊢ ∃ ia,
    (∀ (c : ℝ≥0), RCond l (ia c)) ∧
      ∀ (x : TaggedPrepartition I),
        x ∈ {π | ∃ c, MemBaseSet l I c (ia c) π ∧ IsPartition π} → integralSum f vol x ∈ closedBall (↑g I) ε
[PROOFSTEP]
set δ : ℝ≥0 → ℝⁿ → Ioi (0 : ℝ) := fun c x => if x ∈ s then δ₁ c x (εs x) else (δ₂ c) x ε'
[GOAL]
case intro.intro.intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
hlH : Set.Nonempty s → l.bHenstock = true
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
⊢ ∃ ia,
    (∀ (c : ℝ≥0), RCond l (ia c)) ∧
      ∀ (x : TaggedPrepartition I),
        x ∈ {π | ∃ c, MemBaseSet l I c (ia c) π ∧ IsPartition π} → integralSum f vol x ∈ closedBall (↑g I) ε
[PROOFSTEP]
refine' ⟨δ, fun c => l.rCond_of_bRiemann_eq_false hl, _⟩
[GOAL]
case intro.intro.intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
hlH : Set.Nonempty s → l.bHenstock = true
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
⊢ ∀ (x : TaggedPrepartition I),
    x ∈ {π | ∃ c, MemBaseSet l I c (δ c) π ∧ IsPartition π} → integralSum f vol x ∈ closedBall (↑g I) ε
[PROOFSTEP]
simp only [Set.mem_iUnion, mem_inter_iff, mem_setOf_eq]
[GOAL]
case intro.intro.intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
hlH : Set.Nonempty s → l.bHenstock = true
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
⊢ ∀ (x : TaggedPrepartition I),
    (∃ c, MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') x ∧ IsPartition x) →
      integralSum f vol x ∈ closedBall (↑g I) ε
[PROOFSTEP]
rintro π
  ⟨c, hπδ, hπp⟩
      -- Now we split the sum into two parts based on whether `π.tag J` belongs to `s` or not.
[GOAL]
case intro.intro.intro.intro.intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
hlH : Set.Nonempty s → l.bHenstock = true
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
⊢ integralSum f vol π ∈ closedBall (↑g I) ε
[PROOFSTEP]
rw [← g.sum_partition_boxes le_rfl hπp, mem_closedBall, integralSum, ←
  sum_filter_add_sum_filter_not π.boxes fun J => π.tag J ∈ s, ←
  sum_filter_add_sum_filter_not π.boxes fun J => π.tag J ∈ s, ← add_halves ε]
[GOAL]
case intro.intro.intro.intro.intro.intro
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
hlH : Set.Nonempty s → l.bHenstock = true
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
⊢ dist
      (∑ x in Finset.filter (fun J => tag π J ∈ s) π.boxes, ↑(↑vol x) (f (tag π x)) +
        ∑ x in Finset.filter (fun x => ¬tag π x ∈ s) π.boxes, ↑(↑vol x) (f (tag π x)))
      (∑ x in Finset.filter (fun J => tag π J ∈ s) π.boxes, ↑g x +
        ∑ x in Finset.filter (fun x => ¬tag π x ∈ s) π.boxes, ↑g x) ≤
    ε / 2 + ε / 2
[PROOFSTEP]
refine' dist_add_add_le_of_le _ _
[GOAL]
case intro.intro.intro.intro.intro.intro.refine'_1
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
hlH : Set.Nonempty s → l.bHenstock = true
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
⊢ dist (∑ x in Finset.filter (fun J => tag π J ∈ s) π.boxes, ↑(↑vol x) (f (tag π x)))
      (∑ x in Finset.filter (fun J => tag π J ∈ s) π.boxes, ↑g x) ≤
    ε / 2
[PROOFSTEP]
rcases s.eq_empty_or_nonempty with (rfl | hsne)
[GOAL]
case intro.intro.intro.intro.intro.intro.refine'_1.inl
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
ε : ℝ
ε0 : 0 < ε
δ₁ δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
π : TaggedPrepartition I
c : ℝ≥0
hπp : IsPartition π
hs : Set.Countable ∅
hlH : Set.Nonempty ∅ → l.bHenstock = true
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ ∅ →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ ∅ →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ ∅ → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ ∅ then δ₁ c x (εs x) else δ₂ c x ε'
hπδ : MemBaseSet l I c (fun x => if x ∈ ∅ then δ₁ c x (εs x) else δ₂ c x ε') π
⊢ dist (∑ x in Finset.filter (fun J => tag π J ∈ ∅) π.boxes, ↑(↑vol x) (f (tag π x)))
      (∑ x in Finset.filter (fun J => tag π J ∈ ∅) π.boxes, ↑g x) ≤
    ε / 2
[PROOFSTEP]
simp [ε0'.le]
  /- For the boxes such that `π.tag J ∈ s`, we use the fact that at most `2 ^ #ι` boxes have the
          same tag. -/
[GOAL]
case intro.intro.intro.intro.intro.intro.refine'_1.inr
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
hlH : Set.Nonempty s → l.bHenstock = true
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
hsne : Set.Nonempty s
⊢ dist (∑ x in Finset.filter (fun J => tag π J ∈ s) π.boxes, ↑(↑vol x) (f (tag π x)))
      (∑ x in Finset.filter (fun J => tag π J ∈ s) π.boxes, ↑g x) ≤
    ε / 2
[PROOFSTEP]
specialize hlH hsne
[GOAL]
case intro.intro.intro.intro.intro.intro.refine'_1.inr
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
hsne : Set.Nonempty s
hlH : l.bHenstock = true
⊢ dist (∑ x in Finset.filter (fun J => tag π J ∈ s) π.boxes, ↑(↑vol x) (f (tag π x)))
      (∑ x in Finset.filter (fun J => tag π J ∈ s) π.boxes, ↑g x) ≤
    ε / 2
[PROOFSTEP]
have : ∀ J ∈ π.boxes.filter fun J => π.tag J ∈ s, dist (vol J (f <| π.tag J)) (g J) ≤ εs (π.tag J) := fun J hJ ↦
  by
  rw [Finset.mem_filter] at hJ ; cases' hJ with hJ hJs
  refine'
    Hδ₁ c _ ⟨π.tag_mem_Icc _, hJs⟩ _ (hεs0 _) _ (π.le_of_mem' _ hJ) _ (hπδ.2 hlH J hJ) fun hD =>
      (Finset.le_sup hJ).trans (hπδ.3 hD)
  convert hπδ.1 J hJ using 3; exact (if_pos hJs).symm
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J✝ : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
hsne : Set.Nonempty s
hlH : l.bHenstock = true
J : Box ι
hJ : J ∈ Finset.filter (fun J => tag π J ∈ s) π.boxes
⊢ dist (↑(↑vol J) (f (tag π J))) (↑g J) ≤ εs (tag π J)
[PROOFSTEP]
rw [Finset.mem_filter] at hJ 
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J✝ : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
hsne : Set.Nonempty s
hlH : l.bHenstock = true
J : Box ι
hJ : J ∈ π.boxes ∧ tag π J ∈ s
⊢ dist (↑(↑vol J) (f (tag π J))) (↑g J) ≤ εs (tag π J)
[PROOFSTEP]
cases' hJ with hJ hJs
[GOAL]
case intro
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J✝ : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
hsne : Set.Nonempty s
hlH : l.bHenstock = true
J : Box ι
hJ : J ∈ π.boxes
hJs : tag π J ∈ s
⊢ dist (↑(↑vol J) (f (tag π J))) (↑g J) ≤ εs (tag π J)
[PROOFSTEP]
refine'
  Hδ₁ c _ ⟨π.tag_mem_Icc _, hJs⟩ _ (hεs0 _) _ (π.le_of_mem' _ hJ) _ (hπδ.2 hlH J hJ) fun hD =>
    (Finset.le_sup hJ).trans (hπδ.3 hD)
[GOAL]
case intro
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J✝ : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
hsne : Set.Nonempty s
hlH : l.bHenstock = true
J : Box ι
hJ : J ∈ π.boxes
hJs : tag π J ∈ s
⊢ ↑Box.Icc J ⊆ closedBall (tag π J) ↑(δ₁ c (tag π J) (εs (tag π J)))
[PROOFSTEP]
convert hπδ.1 J hJ using 3
[GOAL]
case h.e'_4.h.e'_4.h.e'_3.h
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J✝ : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
hsne : Set.Nonempty s
hlH : l.bHenstock = true
J : Box ι
hJ : J ∈ π.boxes
hJs : tag π J ∈ s
e_2✝ : (fun a => 0 < a) = fun x => x ∈ Set.Ioi 0
⊢ δ₁ c (tag π J) (εs (tag π J)) = (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') (tag π J)
[PROOFSTEP]
exact (if_pos hJs).symm
[GOAL]
case intro.intro.intro.intro.intro.intro.refine'_1.inr
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
hsne : Set.Nonempty s
hlH : l.bHenstock = true
this :
  ∀ (J : Box ι), J ∈ Finset.filter (fun J => tag π J ∈ s) π.boxes → dist (↑(↑vol J) (f (tag π J))) (↑g J) ≤ εs (tag π J)
⊢ dist (∑ x in Finset.filter (fun J => tag π J ∈ s) π.boxes, ↑(↑vol x) (f (tag π x)))
      (∑ x in Finset.filter (fun J => tag π J ∈ s) π.boxes, ↑g x) ≤
    ε / 2
[PROOFSTEP]
refine' (dist_sum_sum_le_of_le _ this).trans _
[GOAL]
case intro.intro.intro.intro.intro.intro.refine'_1.inr
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
hsne : Set.Nonempty s
hlH : l.bHenstock = true
this :
  ∀ (J : Box ι), J ∈ Finset.filter (fun J => tag π J ∈ s) π.boxes → dist (↑(↑vol J) (f (tag π J))) (↑g J) ≤ εs (tag π J)
⊢ ∑ b in Finset.filter (fun J => tag π J ∈ s) π.boxes, εs (tag π b) ≤ ε / 2
[PROOFSTEP]
rw [sum_comp]
[GOAL]
case intro.intro.intro.intro.intro.intro.refine'_1.inr
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
hsne : Set.Nonempty s
hlH : l.bHenstock = true
this :
  ∀ (J : Box ι), J ∈ Finset.filter (fun J => tag π J ∈ s) π.boxes → dist (↑(↑vol J) (f (tag π J))) (↑g J) ≤ εs (tag π J)
⊢ ∑ b in Finset.image (fun b => tag π b) (Finset.filter (fun J => tag π J ∈ s) π.boxes),
      card (Finset.filter (fun a => tag π a = b) (Finset.filter (fun J => tag π J ∈ s) π.boxes)) • εs b ≤
    ε / 2
[PROOFSTEP]
refine' (sum_le_sum _).trans (hεs _ _)
[GOAL]
case intro.intro.intro.intro.intro.intro.refine'_1.inr.refine'_1
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
hsne : Set.Nonempty s
hlH : l.bHenstock = true
this :
  ∀ (J : Box ι), J ∈ Finset.filter (fun J => tag π J ∈ s) π.boxes → dist (↑(↑vol J) (f (tag π J))) (↑g J) ≤ εs (tag π J)
⊢ ∀ (i : ι → ℝ),
    i ∈ Finset.image (fun b => tag π b) (Finset.filter (fun J => tag π J ∈ s) π.boxes) →
      card (Finset.filter (fun a => tag π a = i) (Finset.filter (fun J => tag π J ∈ s) π.boxes)) • εs i ≤
        2 ^ Fintype.card ι * εs i
[PROOFSTEP]
rintro b -
[GOAL]
case intro.intro.intro.intro.intro.intro.refine'_1.inr.refine'_1
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
hsne : Set.Nonempty s
hlH : l.bHenstock = true
this :
  ∀ (J : Box ι), J ∈ Finset.filter (fun J => tag π J ∈ s) π.boxes → dist (↑(↑vol J) (f (tag π J))) (↑g J) ≤ εs (tag π J)
b : ι → ℝ
⊢ card (Finset.filter (fun a => tag π a = b) (Finset.filter (fun J => tag π J ∈ s) π.boxes)) • εs b ≤
    2 ^ Fintype.card ι * εs b
[PROOFSTEP]
rw [← Nat.cast_two, ← Nat.cast_pow, ← nsmul_eq_mul]
[GOAL]
case intro.intro.intro.intro.intro.intro.refine'_1.inr.refine'_1
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
hsne : Set.Nonempty s
hlH : l.bHenstock = true
this :
  ∀ (J : Box ι), J ∈ Finset.filter (fun J => tag π J ∈ s) π.boxes → dist (↑(↑vol J) (f (tag π J))) (↑g J) ≤ εs (tag π J)
b : ι → ℝ
⊢ card (Finset.filter (fun a => tag π a = b) (Finset.filter (fun J => tag π J ∈ s) π.boxes)) • εs b ≤
    2 ^ Fintype.card ι • εs b
[PROOFSTEP]
refine' nsmul_le_nsmul (hεs0 _).le _
[GOAL]
case intro.intro.intro.intro.intro.intro.refine'_1.inr.refine'_1
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
hsne : Set.Nonempty s
hlH : l.bHenstock = true
this :
  ∀ (J : Box ι), J ∈ Finset.filter (fun J => tag π J ∈ s) π.boxes → dist (↑(↑vol J) (f (tag π J))) (↑g J) ≤ εs (tag π J)
b : ι → ℝ
⊢ card (Finset.filter (fun a => tag π a = b) (Finset.filter (fun J => tag π J ∈ s) π.boxes)) ≤ 2 ^ Fintype.card ι
[PROOFSTEP]
refine' (Finset.card_le_of_subset _).trans ((hπδ.isHenstock hlH).card_filter_tag_eq_le b)
[GOAL]
case intro.intro.intro.intro.intro.intro.refine'_1.inr.refine'_1
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
hsne : Set.Nonempty s
hlH : l.bHenstock = true
this :
  ∀ (J : Box ι), J ∈ Finset.filter (fun J => tag π J ∈ s) π.boxes → dist (↑(↑vol J) (f (tag π J))) (↑g J) ≤ εs (tag π J)
b : ι → ℝ
⊢ Finset.filter (fun a => tag π a = b) (Finset.filter (fun J => tag π J ∈ s) π.boxes) ⊆
    Finset.filter (fun J => tag π J = b) π.boxes
[PROOFSTEP]
exact filter_subset_filter _ (filter_subset _ _)
[GOAL]
case intro.intro.intro.intro.intro.intro.refine'_1.inr.refine'_2
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
hsne : Set.Nonempty s
hlH : l.bHenstock = true
this :
  ∀ (J : Box ι), J ∈ Finset.filter (fun J => tag π J ∈ s) π.boxes → dist (↑(↑vol J) (f (tag π J))) (↑g J) ≤ εs (tag π J)
⊢ ↑(Finset.image (fun b => tag π b) (Finset.filter (fun J => tag π J ∈ s) π.boxes)) ⊆ s
[PROOFSTEP]
rw [Finset.coe_image, Set.image_subset_iff]
[GOAL]
case intro.intro.intro.intro.intro.intro.refine'_1.inr.refine'_2
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
hsne : Set.Nonempty s
hlH : l.bHenstock = true
this :
  ∀ (J : Box ι), J ∈ Finset.filter (fun J => tag π J ∈ s) π.boxes → dist (↑(↑vol J) (f (tag π J))) (↑g J) ≤ εs (tag π J)
⊢ ↑(Finset.filter (fun J => tag π J ∈ s) π.boxes) ⊆ (fun b => tag π b) ⁻¹' s
[PROOFSTEP]
exact fun J hJ =>
  (Finset.mem_filter.1 hJ).2
    /- Now we deal with boxes such that `π.tag J ∉ s`.
        In this case the estimate is straightforward. -/
      -- porting note: avoided strange elaboration issues by rewriting using `calc`
[GOAL]
case intro.intro.intro.intro.intro.intro.refine'_2
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
hlH : Set.Nonempty s → l.bHenstock = true
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
⊢ dist (∑ x in Finset.filter (fun x => ¬tag π x ∈ s) π.boxes, ↑(↑vol x) (f (tag π x)))
      (∑ x in Finset.filter (fun x => ¬tag π x ∈ s) π.boxes, ↑g x) ≤
    ε / 2
[PROOFSTEP]
calc
  dist (∑ J in π.boxes.filter (¬tag π · ∈ s), vol J (f (tag π J))) (∑ J in π.boxes.filter (¬tag π · ∈ s), g J) ≤
      ∑ J in π.boxes.filter (¬tag π · ∈ s), ε' * B J :=
    dist_sum_sum_le_of_le _ fun J hJ ↦ by
      rw [Finset.mem_filter] at hJ ; cases' hJ with hJ hJs
      refine'
        Hδ₂ c _ ⟨π.tag_mem_Icc _, hJs⟩ _ ε'0 _ (π.le_of_mem' _ hJ) _ (fun hH => hπδ.2 hH J hJ) fun hD =>
          (Finset.le_sup hJ).trans (hπδ.3 hD)
      convert hπδ.1 J hJ using 3; exact (if_neg hJs).symm
  _ ≤ ∑ J in π.boxes, ε' * B J :=
    (sum_le_sum_of_subset_of_nonneg (filter_subset _ _) fun _ _ _ ↦ mul_nonneg ε'0.le (hB0 _))
  _ = B I * ε' := by rw [← mul_sum, B.sum_partition_boxes le_rfl hπp, mul_comm]
  _ ≤ ε / 2 := hεI.le
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J✝ : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
hlH : Set.Nonempty s → l.bHenstock = true
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
J : Box ι
hJ : J ∈ Finset.filter (fun x => ¬tag π x ∈ s) π.boxes
⊢ dist (↑(↑vol J) (f (tag π J))) (↑g J) ≤ ε' * ↑B J
[PROOFSTEP]
rw [Finset.mem_filter] at hJ 
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J✝ : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
hlH : Set.Nonempty s → l.bHenstock = true
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
J : Box ι
hJ : J ∈ π.boxes ∧ ¬tag π J ∈ s
⊢ dist (↑(↑vol J) (f (tag π J))) (↑g J) ≤ ε' * ↑B J
[PROOFSTEP]
cases' hJ with hJ hJs
[GOAL]
case intro
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J✝ : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
hlH : Set.Nonempty s → l.bHenstock = true
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
J : Box ι
hJ : J ∈ π.boxes
hJs : ¬tag π J ∈ s
⊢ dist (↑(↑vol J) (f (tag π J))) (↑g J) ≤ ε' * ↑B J
[PROOFSTEP]
refine'
  Hδ₂ c _ ⟨π.tag_mem_Icc _, hJs⟩ _ ε'0 _ (π.le_of_mem' _ hJ) _ (fun hH => hπδ.2 hH J hJ) fun hD =>
    (Finset.le_sup hJ).trans (hπδ.3 hD)
[GOAL]
case intro
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J✝ : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
hlH : Set.Nonempty s → l.bHenstock = true
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
J : Box ι
hJ : J ∈ π.boxes
hJs : ¬tag π J ∈ s
⊢ ↑Box.Icc J ⊆ closedBall (tag π J) ↑(δ₂ c (tag π J) ε')
[PROOFSTEP]
convert hπδ.1 J hJ using 3
[GOAL]
case h.e'_4.h.e'_4.h.e'_3.h
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J✝ : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
hlH : Set.Nonempty s → l.bHenstock = true
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
J : Box ι
hJ : J ∈ π.boxes
hJs : ¬tag π J ∈ s
e_2✝ : (fun a => 0 < a) = fun x => x ∈ Set.Ioi 0
⊢ δ₂ c (tag π J) ε' = (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') (tag π J)
[PROOFSTEP]
exact (if_neg hJs).symm
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π✝ : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l.bRiemann = false
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
hlH : Set.Nonempty s → l.bHenstock = true
ε : ℝ
ε0 : 0 < ε
δ₁ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₁ c x ε) →
                x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
δ₂ : ℝ≥0 → (ι → ℝ) → ℝ → { a // 0 < a }
Hδ₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        0 < ε →
          ∀ (J : Box ι),
            J ≤ I →
              ↑Box.Icc J ⊆ closedBall x ↑(δ₂ c x ε) →
                (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                  (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
ε0' : 0 < ε / 2
H0 : 0 < 2 ^ Fintype.card ι
εs : (ι → ℝ) → ℝ
hεs0 : ∀ (i : ι → ℝ), 0 < εs i
hεs : ∀ (t : Finset (ι → ℝ)), ↑t ⊆ s → ∑ x in t, 2 ^ Fintype.card ι * εs x ≤ ε / 2
ε' : ℝ
ε'0 : 0 < ε'
hεI : ↑B I * ε' < ε / 2
δ : ℝ≥0 → (ι → ℝ) → ↑(Set.Ioi 0) := fun c x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε'
π : TaggedPrepartition I
c : ℝ≥0
hπδ : MemBaseSet l I c (fun x => if x ∈ s then δ₁ c x (εs x) else δ₂ c x ε') π
hπp : IsPartition π
⊢ ∑ J in π.boxes, ε' * ↑B J = ↑B I * ε'
[PROOFSTEP]
rw [← mul_sum, B.sum_partition_boxes le_rfl hπp, mul_comm]
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l ≤ Henstock
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
H₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        ε > 0 →
          ∃ δ,
            δ > 0 ∧
              ∀ (J : Box ι),
                J ≤ I →
                  ↑Box.Icc J ⊆ closedBall x δ →
                    x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
H₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        ε > 0 →
          ∃ δ,
            δ > 0 ∧
              ∀ (J : Box ι),
                J ≤ I →
                  ↑Box.Icc J ⊆ closedBall x δ →
                    x ∈ ↑Box.Icc J →
                      (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
⊢ ¬(↑equivProd Henstock).snd.fst = false
[PROOFSTEP]
decide
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l ≤ Henstock
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
H₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        ε > 0 →
          ∃ δ,
            δ > 0 ∧
              ∀ (J : Box ι),
                J ≤ I →
                  ↑Box.Icc J ⊆ closedBall x δ →
                    x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
H₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        ε > 0 →
          ∃ δ,
            δ > 0 ∧
              ∀ (J : Box ι),
                J ≤ I →
                  ↑Box.Icc J ⊆ closedBall x δ →
                    x ∈ ↑Box.Icc J →
                      (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
A : l.bHenstock = true
⊢ ¬(↑equivProd Henstock).fst = true
[PROOFSTEP]
decide
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
hl : l ≤ Henstock
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
s : Set (ι → ℝ)
hs : Set.Countable s
H₁ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I ∩ s →
      ∀ (ε : ℝ),
        ε > 0 →
          ∃ δ,
            δ > 0 ∧
              ∀ (J : Box ι),
                J ≤ I →
                  ↑Box.Icc J ⊆ closedBall x δ →
                    x ∈ ↑Box.Icc J → (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε
H₂ :
  ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        ε > 0 →
          ∃ δ,
            δ > 0 ∧
              ∀ (J : Box ι),
                J ≤ I →
                  ↑Box.Icc J ⊆ closedBall x δ →
                    x ∈ ↑Box.Icc J →
                      (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
A : l.bHenstock = true
⊢ ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ s →
      ∀ (ε : ℝ),
        ε > 0 →
          ∃ δ,
            δ > 0 ∧
              ∀ (J : Box ι),
                J ≤ I →
                  ↑Box.Icc J ⊆ closedBall x δ →
                    (l.bHenstock = true → x ∈ ↑Box.Icc J) →
                      (l.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
[PROOFSTEP]
simpa only [A, true_imp_iff] using H₂
[GOAL]
ι : Type u
E : Type v
F : Type w
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedSpace ℝ E
inst✝² : NormedAddCommGroup F
inst✝¹ : NormedSpace ℝ F
I J : Box ι
π : TaggedPrepartition I
inst✝ : Fintype ι
l : IntegrationParams
f g✝ : (ι → ℝ) → E
vol : ι →ᵇᵃ[⊤] E →L[ℝ] F
y y' : F
B : ι →ᵇᵃ[↑I] ℝ
hB0 : ∀ (J : Box ι), 0 ≤ ↑B J
g : ι →ᵇᵃ[↑I] F
H :
  ℝ≥0 →
    ∀ (x : ι → ℝ),
      x ∈ ↑Box.Icc I →
        ∀ (ε : ℝ),
          ε > 0 →
            ∃ δ, δ > 0 ∧ ∀ (J : Box ι), J ≤ I → ↑Box.Icc J ⊆ closedBall x δ → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
⊢ ∀ (c : ℝ≥0) (x : ι → ℝ),
    x ∈ ↑Box.Icc I \ ∅ →
      ∀ (ε : ℝ),
        ε > 0 →
          ∃ δ,
            δ > 0 ∧
              ∀ (J : Box ι),
                J ≤ I →
                  ↑Box.Icc J ⊆ closedBall x δ →
                    (McShane.bHenstock = true → x ∈ ↑Box.Icc J) →
                      (McShane.bDistortion = true → Box.distortion J ≤ c) → dist (↑(↑vol J) (f x)) (↑g J) ≤ ε * ↑B J
[PROOFSTEP]
simpa only [McShane, Bool.coe_sort_false, false_imp_iff, true_imp_iff, diff_empty] using H
