[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
I : Finset ι
s : ι → Set X
hI : ∀ (i : ι), i ∈ I → ∀ (j : ι), j ∈ I → i ≠ j → IsMetricSeparated (s i) (s j)
⊢ ↑μ (⋃ (i : ι) (_ : i ∈ I), s i) = ∑ i in I, ↑μ (s i)
[PROOFSTEP]
classical
induction' I using Finset.induction_on with i I hiI ihI hI
· simp
simp only [Finset.mem_insert] at hI
rw [Finset.set_biUnion_insert, hm, ihI, Finset.sum_insert hiI]
exacts [fun i hi j hj hij => hI i (Or.inr hi) j (Or.inr hj) hij,
  IsMetricSeparated.finset_iUnion_right fun j hj => hI i (Or.inl rfl) j (Or.inr hj) (ne_of_mem_of_not_mem hj hiI).symm]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
I : Finset ι
s : ι → Set X
hI : ∀ (i : ι), i ∈ I → ∀ (j : ι), j ∈ I → i ≠ j → IsMetricSeparated (s i) (s j)
⊢ ↑μ (⋃ (i : ι) (_ : i ∈ I), s i) = ∑ i in I, ↑μ (s i)
[PROOFSTEP]
induction' I using Finset.induction_on with i I hiI ihI hI
[GOAL]
case empty
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
I : Finset ι
s : ι → Set X
hI✝ : ∀ (i : ι), i ∈ I → ∀ (j : ι), j ∈ I → i ≠ j → IsMetricSeparated (s i) (s j)
hI : ∀ (i : ι), i ∈ ∅ → ∀ (j : ι), j ∈ ∅ → i ≠ j → IsMetricSeparated (s i) (s j)
⊢ ↑μ (⋃ (i : ι) (_ : i ∈ ∅), s i) = ∑ i in ∅, ↑μ (s i)
[PROOFSTEP]
simp
[GOAL]
case insert
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
I✝ : Finset ι
s : ι → Set X
hI✝ : ∀ (i : ι), i ∈ I✝ → ∀ (j : ι), j ∈ I✝ → i ≠ j → IsMetricSeparated (s i) (s j)
i : ι
I : Finset ι
hiI : ¬i ∈ I
ihI :
  (∀ (i : ι), i ∈ I → ∀ (j : ι), j ∈ I → i ≠ j → IsMetricSeparated (s i) (s j)) →
    ↑μ (⋃ (i : ι) (_ : i ∈ I), s i) = ∑ i in I, ↑μ (s i)
hI : ∀ (i_1 : ι), i_1 ∈ insert i I → ∀ (j : ι), j ∈ insert i I → i_1 ≠ j → IsMetricSeparated (s i_1) (s j)
⊢ ↑μ (⋃ (i_1 : ι) (_ : i_1 ∈ insert i I), s i_1) = ∑ i in insert i I, ↑μ (s i)
[PROOFSTEP]
simp only [Finset.mem_insert] at hI
[GOAL]
case insert
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
I✝ : Finset ι
s : ι → Set X
hI✝ : ∀ (i : ι), i ∈ I✝ → ∀ (j : ι), j ∈ I✝ → i ≠ j → IsMetricSeparated (s i) (s j)
i : ι
I : Finset ι
hiI : ¬i ∈ I
ihI :
  (∀ (i : ι), i ∈ I → ∀ (j : ι), j ∈ I → i ≠ j → IsMetricSeparated (s i) (s j)) →
    ↑μ (⋃ (i : ι) (_ : i ∈ I), s i) = ∑ i in I, ↑μ (s i)
hI : ∀ (i_1 : ι), i_1 = i ∨ i_1 ∈ I → ∀ (j : ι), j = i ∨ j ∈ I → i_1 ≠ j → IsMetricSeparated (s i_1) (s j)
⊢ ↑μ (⋃ (i_1 : ι) (_ : i_1 ∈ insert i I), s i_1) = ∑ i in insert i I, ↑μ (s i)
[PROOFSTEP]
rw [Finset.set_biUnion_insert, hm, ihI, Finset.sum_insert hiI]
[GOAL]
case insert
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
I✝ : Finset ι
s : ι → Set X
hI✝ : ∀ (i : ι), i ∈ I✝ → ∀ (j : ι), j ∈ I✝ → i ≠ j → IsMetricSeparated (s i) (s j)
i : ι
I : Finset ι
hiI : ¬i ∈ I
ihI :
  (∀ (i : ι), i ∈ I → ∀ (j : ι), j ∈ I → i ≠ j → IsMetricSeparated (s i) (s j)) →
    ↑μ (⋃ (i : ι) (_ : i ∈ I), s i) = ∑ i in I, ↑μ (s i)
hI : ∀ (i_1 : ι), i_1 = i ∨ i_1 ∈ I → ∀ (j : ι), j = i ∨ j ∈ I → i_1 ≠ j → IsMetricSeparated (s i_1) (s j)
⊢ ∀ (i : ι), i ∈ I → ∀ (j : ι), j ∈ I → i ≠ j → IsMetricSeparated (s i) (s j)
case insert.a
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
I✝ : Finset ι
s : ι → Set X
hI✝ : ∀ (i : ι), i ∈ I✝ → ∀ (j : ι), j ∈ I✝ → i ≠ j → IsMetricSeparated (s i) (s j)
i : ι
I : Finset ι
hiI : ¬i ∈ I
ihI :
  (∀ (i : ι), i ∈ I → ∀ (j : ι), j ∈ I → i ≠ j → IsMetricSeparated (s i) (s j)) →
    ↑μ (⋃ (i : ι) (_ : i ∈ I), s i) = ∑ i in I, ↑μ (s i)
hI : ∀ (i_1 : ι), i_1 = i ∨ i_1 ∈ I → ∀ (j : ι), j = i ∨ j ∈ I → i_1 ≠ j → IsMetricSeparated (s i_1) (s j)
⊢ IsMetricSeparated (s i) (⋃ (x : ι) (_ : x ∈ I), s x)
[PROOFSTEP]
exacts [fun i hi j hj hij => hI i (Or.inr hi) j (Or.inr hj) hij,
  IsMetricSeparated.finset_iUnion_right fun j hj => hI i (Or.inl rfl) j (Or.inr hj) (ne_of_mem_of_not_mem hj hiI).symm]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
⊢ borel X ≤ OuterMeasure.caratheodory μ
[PROOFSTEP]
rw [borel_eq_generateFrom_isClosed]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
⊢ MeasurableSpace.generateFrom {s | IsClosed s} ≤ OuterMeasure.caratheodory μ
[PROOFSTEP]
refine' MeasurableSpace.generateFrom_le fun t ht => μ.isCaratheodory_iff_le.2 fun s => _
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
⊢ ↑μ (s ∩ t) + ↑μ (s \ t) ≤ ↑μ s
[PROOFSTEP]
set S : ℕ → Set X := fun n => {x ∈ s | (↑n)⁻¹ ≤ infEdist x t}
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
⊢ ↑μ (s ∩ t) + ↑μ (s \ t) ≤ ↑μ s
[PROOFSTEP]
have n0 : ∀ {n : ℕ}, (n⁻¹ : ℝ≥0∞) ≠ 0 := fun {n} => ENNReal.inv_ne_zero.2 (ENNReal.nat_ne_top _)
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
⊢ ↑μ (s ∩ t) + ↑μ (s \ t) ≤ ↑μ s
[PROOFSTEP]
have Ssep : ∀ n, IsMetricSeparated (S n) t := fun n =>
  ⟨n⁻¹, n0, fun x hx y hy => hx.2.trans <| infEdist_le_edist_of_mem hy⟩
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
⊢ ↑μ (s ∩ t) + ↑μ (s \ t) ≤ ↑μ s
[PROOFSTEP]
have Ssep' : ∀ n, IsMetricSeparated (S n) (s ∩ t) := fun n => (Ssep n).mono Subset.rfl (inter_subset_right _ _)
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
⊢ ↑μ (s ∩ t) + ↑μ (s \ t) ≤ ↑μ s
[PROOFSTEP]
have S_sub : ∀ n, S n ⊆ s \ t := fun n => subset_inter (inter_subset_left _ _) (Ssep n).subset_compl_right
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
⊢ ↑μ (s ∩ t) + ↑μ (s \ t) ≤ ↑μ s
[PROOFSTEP]
have hSs : ∀ n, μ (s ∩ t) + μ (S n) ≤ μ s := fun n =>
  calc
    μ (s ∩ t) + μ (S n) = μ (s ∩ t ∪ S n) := Eq.symm <| hm _ _ <| (Ssep' n).symm
    _ ≤ μ (s ∩ t ∪ s \ t) := (μ.mono <| union_subset_union_right _ <| S_sub n)
    _ = μ s := by rw [inter_union_diff]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
n : ℕ
⊢ ↑μ (s ∩ t ∪ s \ t) = ↑μ s
[PROOFSTEP]
rw [inter_union_diff]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
⊢ ↑μ (s ∩ t) + ↑μ (s \ t) ≤ ↑μ s
[PROOFSTEP]
have iUnion_S : ⋃ n, S n = s \ t := by
  refine' Subset.antisymm (iUnion_subset S_sub) _
  rintro x ⟨hxs, hxt⟩
  rw [mem_iff_infEdist_zero_of_closed ht] at hxt
  rcases ENNReal.exists_inv_nat_lt hxt with ⟨n, hn⟩
  exact
    mem_iUnion.2
      ⟨n, hxs, hn.le⟩
        /- Now we have `∀ n, μ (s ∩ t) + μ (S n) ≤ μ s` and we need to prove
            `μ (s ∩ t) + μ (⋃ n, S n) ≤ μ s`. We can't pass to the limit because
            `μ` is only an outer measure. -/
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
⊢ ⋃ (n : ℕ), S n = s \ t
[PROOFSTEP]
refine' Subset.antisymm (iUnion_subset S_sub) _
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
⊢ s \ t ⊆ ⋃ (n : ℕ), S n
[PROOFSTEP]
rintro x ⟨hxs, hxt⟩
[GOAL]
case intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
x : X
hxs : x ∈ s
hxt : ¬x ∈ t
⊢ x ∈ ⋃ (n : ℕ), S n
[PROOFSTEP]
rw [mem_iff_infEdist_zero_of_closed ht] at hxt
[GOAL]
case intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
x : X
hxs : x ∈ s
hxt : ¬infEdist x t = 0
⊢ x ∈ ⋃ (n : ℕ), S n
[PROOFSTEP]
rcases ENNReal.exists_inv_nat_lt hxt with ⟨n, hn⟩
[GOAL]
case intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
x : X
hxs : x ∈ s
hxt : ¬infEdist x t = 0
n : ℕ
hn : (↑n)⁻¹ < infEdist x t
⊢ x ∈ ⋃ (n : ℕ), S n
[PROOFSTEP]
exact
  mem_iUnion.2
    ⟨n, hxs, hn.le⟩
      /- Now we have `∀ n, μ (s ∩ t) + μ (S n) ≤ μ s` and we need to prove
          `μ (s ∩ t) + μ (⋃ n, S n) ≤ μ s`. We can't pass to the limit because
          `μ` is only an outer measure. -/
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
⊢ ↑μ (s ∩ t) + ↑μ (s \ t) ≤ ↑μ s
[PROOFSTEP]
by_cases htop : μ (s \ t) = ∞
[GOAL]
case pos
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ↑μ (s \ t) = ⊤
⊢ ↑μ (s ∩ t) + ↑μ (s \ t) ≤ ↑μ s
[PROOFSTEP]
rw [htop, add_top, ← htop]
[GOAL]
case pos
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ↑μ (s \ t) = ⊤
⊢ ↑μ (s \ t) ≤ ↑μ s
[PROOFSTEP]
exact μ.mono (diff_subset _ _)
[GOAL]
case neg
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
⊢ ↑μ (s ∩ t) + ↑μ (s \ t) ≤ ↑μ s
[PROOFSTEP]
suffices : μ (⋃ n, S n) ≤ ⨆ n, μ (S n)
[GOAL]
case neg
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
this : ↑μ (⋃ (n : ℕ), S n) ≤ ⨆ (n : ℕ), ↑μ (S n)
⊢ ↑μ (s ∩ t) + ↑μ (s \ t) ≤ ↑μ s
case this
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
⊢ ↑μ (⋃ (n : ℕ), S n) ≤ ⨆ (n : ℕ), ↑μ (S n)
[PROOFSTEP]
calc
  μ (s ∩ t) + μ (s \ t) = μ (s ∩ t) + μ (⋃ n, S n) := by rw [iUnion_S]
  _ ≤ μ (s ∩ t) + ⨆ n, μ (S n) := (add_le_add le_rfl this)
  _ = ⨆ n, μ (s ∩ t) + μ (S n) := ENNReal.add_iSup
  _ ≤ μ s := iSup_le hSs
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
this : ↑μ (⋃ (n : ℕ), S n) ≤ ⨆ (n : ℕ), ↑μ (S n)
⊢ ↑μ (s ∩ t) + ↑μ (s \ t) = ↑μ (s ∩ t) + ↑μ (⋃ (n : ℕ), S n)
[PROOFSTEP]
rw [iUnion_S]
[GOAL]
case this
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
⊢ ↑μ (⋃ (n : ℕ), S n) ≤ ⨆ (n : ℕ), ↑μ (S n)
[PROOFSTEP]
have : ∀ n, S n ⊆ S (n + 1) := fun n x hx => ⟨hx.1, le_trans (ENNReal.inv_le_inv.2 <| Nat.cast_le.2 n.le_succ) hx.2⟩
[GOAL]
case this
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
this : ∀ (n : ℕ), S n ⊆ S (n + 1)
⊢ ↑μ (⋃ (n : ℕ), S n) ≤ ⨆ (n : ℕ), ↑μ (S n)
[PROOFSTEP]
classical
  -- Porting note: Added this to get the next tactic to work
refine' (μ.iUnion_nat_of_monotone_of_tsum_ne_top this _).le;
clear this
rw [← tsum_even_add_odd ENNReal.summable ENNReal.summable, ENNReal.add_ne_top]
suffices : ∀ a, (∑' k : ℕ, μ (S (2 * k + 1 + a) \ S (2 * k + a))) ≠ ∞
exact ⟨by simpa using this 0, by simpa using this 1⟩
refine' fun r => ne_top_of_le_ne_top htop _
rw [← iUnion_S, ENNReal.tsum_eq_iSup_nat, iSup_le_iff]
intro n
rw [← hm.finset_iUnion_of_pairwise_separated]
· exact μ.mono (iUnion_subset fun i => iUnion_subset fun _ x hx => mem_iUnion.2 ⟨_, hx.1⟩)
suffices : ∀ i j, i < j → IsMetricSeparated (S (2 * i + 1 + r)) (s \ S (2 * j + r))
exact fun i _ j _ hij =>
  hij.lt_or_lt.elim (fun h => (this i j h).mono (inter_subset_left _ _) fun x hx => by exact ⟨hx.1.1, hx.2⟩) fun h =>
    (this j i h).symm.mono (fun x hx => by exact ⟨hx.1.1, hx.2⟩) (inter_subset_left _ _)
intro i j hj
have A : ((↑(2 * j + r))⁻¹ : ℝ≥0∞) < (↑(2 * i + 1 + r))⁻¹ := by rw [ENNReal.inv_lt_inv, Nat.cast_lt]; linarith
refine' ⟨(↑(2 * i + 1 + r))⁻¹ - (↑(2 * j + r))⁻¹, by simpa using A, fun x hx y hy => _⟩
have : infEdist y t < (↑(2 * j + r))⁻¹ := not_le.1 fun hle => hy.2 ⟨hy.1, hle⟩
rcases infEdist_lt_iff.mp this with ⟨z, hzt, hyz⟩
have hxz : (↑(2 * i + 1 + r))⁻¹ ≤ edist x z := le_infEdist.1 hx.2 _ hzt
apply ENNReal.le_of_add_le_add_right hyz.ne_top
refine' le_trans _ (edist_triangle _ _ _)
refine' (add_le_add le_rfl hyz.le).trans (Eq.trans_le _ hxz)
rw [tsub_add_cancel_of_le A.le]
[GOAL]
case this
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
this : ∀ (n : ℕ), S n ⊆ S (n + 1)
⊢ ↑μ (⋃ (n : ℕ), S n) ≤ ⨆ (n : ℕ), ↑μ (S n)
[PROOFSTEP]
refine' (μ.iUnion_nat_of_monotone_of_tsum_ne_top this _).le
[GOAL]
case this
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
this : ∀ (n : ℕ), S n ⊆ S (n + 1)
⊢ ∑' (k : ℕ), ↑μ (S (k + 1) \ S k) ≠ ⊤
[PROOFSTEP]
clear this
[GOAL]
case this
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
⊢ ∑' (k : ℕ), ↑μ (S (k + 1) \ S k) ≠ ⊤
[PROOFSTEP]
rw [← tsum_even_add_odd ENNReal.summable ENNReal.summable, ENNReal.add_ne_top]
[GOAL]
case this
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
⊢ ∑' (k : ℕ), ↑μ (S (2 * k + 1) \ S (2 * k)) ≠ ⊤ ∧ ∑' (k : ℕ), ↑μ (S (2 * k + 1 + 1) \ S (2 * k + 1)) ≠ ⊤
[PROOFSTEP]
suffices : ∀ a, (∑' k : ℕ, μ (S (2 * k + 1 + a) \ S (2 * k + a))) ≠ ∞
[GOAL]
case this
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
this : ∀ (a : ℕ), ∑' (k : ℕ), ↑μ (S (2 * k + 1 + a) \ S (2 * k + a)) ≠ ⊤
⊢ ∑' (k : ℕ), ↑μ (S (2 * k + 1) \ S (2 * k)) ≠ ⊤ ∧ ∑' (k : ℕ), ↑μ (S (2 * k + 1 + 1) \ S (2 * k + 1)) ≠ ⊤
case this
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
⊢ ∀ (a : ℕ), ∑' (k : ℕ), ↑μ (S (2 * k + 1 + a) \ S (2 * k + a)) ≠ ⊤
[PROOFSTEP]
exact ⟨by simpa using this 0, by simpa using this 1⟩
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
this : ∀ (a : ℕ), ∑' (k : ℕ), ↑μ (S (2 * k + 1 + a) \ S (2 * k + a)) ≠ ⊤
⊢ ∑' (k : ℕ), ↑μ (S (2 * k + 1) \ S (2 * k)) ≠ ⊤
[PROOFSTEP]
simpa using this 0
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
this : ∀ (a : ℕ), ∑' (k : ℕ), ↑μ (S (2 * k + 1 + a) \ S (2 * k + a)) ≠ ⊤
⊢ ∑' (k : ℕ), ↑μ (S (2 * k + 1 + 1) \ S (2 * k + 1)) ≠ ⊤
[PROOFSTEP]
simpa using this 1
[GOAL]
case this
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
⊢ ∀ (a : ℕ), ∑' (k : ℕ), ↑μ (S (2 * k + 1 + a) \ S (2 * k + a)) ≠ ⊤
[PROOFSTEP]
refine' fun r => ne_top_of_le_ne_top htop _
[GOAL]
case this
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
r : ℕ
⊢ ∑' (k : ℕ), ↑μ (S (2 * k + 1 + r) \ S (2 * k + r)) ≤ ↑μ (s \ t)
[PROOFSTEP]
rw [← iUnion_S, ENNReal.tsum_eq_iSup_nat, iSup_le_iff]
[GOAL]
case this
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
r : ℕ
⊢ ∀ (i : ℕ), ∑ a in Finset.range i, ↑μ (S (2 * a + 1 + r) \ S (2 * a + r)) ≤ ↑μ (⋃ (n : ℕ), S n)
[PROOFSTEP]
intro n
[GOAL]
case this
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
r n : ℕ
⊢ ∑ a in Finset.range n, ↑μ (S (2 * a + 1 + r) \ S (2 * a + r)) ≤ ↑μ (⋃ (n : ℕ), S n)
[PROOFSTEP]
rw [← hm.finset_iUnion_of_pairwise_separated]
[GOAL]
case this
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
r n : ℕ
⊢ ↑μ (⋃ (i : ℕ) (_ : i ∈ Finset.range n), S (2 * i + 1 + r) \ S (2 * i + r)) ≤ ↑μ (⋃ (n : ℕ), S n)
[PROOFSTEP]
exact μ.mono (iUnion_subset fun i => iUnion_subset fun _ x hx => mem_iUnion.2 ⟨_, hx.1⟩)
[GOAL]
case this
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
r n : ℕ
⊢ ∀ (i : ℕ),
    i ∈ Finset.range n →
      ∀ (j : ℕ),
        j ∈ Finset.range n →
          i ≠ j → IsMetricSeparated (S (2 * i + 1 + r) \ S (2 * i + r)) (S (2 * j + 1 + r) \ S (2 * j + r))
[PROOFSTEP]
suffices : ∀ i j, i < j → IsMetricSeparated (S (2 * i + 1 + r)) (s \ S (2 * j + r))
[GOAL]
case this
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
r n : ℕ
this : ∀ (i j : ℕ), i < j → IsMetricSeparated (S (2 * i + 1 + r)) (s \ S (2 * j + r))
⊢ ∀ (i : ℕ),
    i ∈ Finset.range n →
      ∀ (j : ℕ),
        j ∈ Finset.range n →
          i ≠ j → IsMetricSeparated (S (2 * i + 1 + r) \ S (2 * i + r)) (S (2 * j + 1 + r) \ S (2 * j + r))
case this
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
r n : ℕ
⊢ ∀ (i j : ℕ), i < j → IsMetricSeparated (S (2 * i + 1 + r)) (s \ S (2 * j + r))
[PROOFSTEP]
exact fun i _ j _ hij =>
  hij.lt_or_lt.elim (fun h => (this i j h).mono (inter_subset_left _ _) fun x hx => by exact ⟨hx.1.1, hx.2⟩) fun h =>
    (this j i h).symm.mono (fun x hx => by exact ⟨hx.1.1, hx.2⟩) (inter_subset_left _ _)
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
r n : ℕ
this : ∀ (i j : ℕ), i < j → IsMetricSeparated (S (2 * i + 1 + r)) (s \ S (2 * j + r))
i : ℕ
x✝¹ : i ∈ Finset.range n
j : ℕ
x✝ : j ∈ Finset.range n
hij : i ≠ j
h : i < j
x : X
hx : x ∈ S (2 * j + 1 + r) \ S (2 * j + r)
⊢ x ∈ s \ S (2 * j + r)
[PROOFSTEP]
exact ⟨hx.1.1, hx.2⟩
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
r n : ℕ
this : ∀ (i j : ℕ), i < j → IsMetricSeparated (S (2 * i + 1 + r)) (s \ S (2 * j + r))
i : ℕ
x✝¹ : i ∈ Finset.range n
j : ℕ
x✝ : j ∈ Finset.range n
hij : i ≠ j
h : j < i
x : X
hx : x ∈ S (2 * i + 1 + r) \ S (2 * i + r)
⊢ x ∈ s \ S (2 * i + r)
[PROOFSTEP]
exact ⟨hx.1.1, hx.2⟩
[GOAL]
case this
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
r n : ℕ
⊢ ∀ (i j : ℕ), i < j → IsMetricSeparated (S (2 * i + 1 + r)) (s \ S (2 * j + r))
[PROOFSTEP]
intro i j hj
[GOAL]
case this
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
r n i j : ℕ
hj : i < j
⊢ IsMetricSeparated (S (2 * i + 1 + r)) (s \ S (2 * j + r))
[PROOFSTEP]
have A : ((↑(2 * j + r))⁻¹ : ℝ≥0∞) < (↑(2 * i + 1 + r))⁻¹ := by rw [ENNReal.inv_lt_inv, Nat.cast_lt]; linarith
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
r n i j : ℕ
hj : i < j
⊢ (↑(2 * j + r))⁻¹ < (↑(2 * i + 1 + r))⁻¹
[PROOFSTEP]
rw [ENNReal.inv_lt_inv, Nat.cast_lt]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
r n i j : ℕ
hj : i < j
⊢ 2 * i + 1 + r < 2 * j + r
[PROOFSTEP]
linarith
[GOAL]
case this
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
r n i j : ℕ
hj : i < j
A : (↑(2 * j + r))⁻¹ < (↑(2 * i + 1 + r))⁻¹
⊢ IsMetricSeparated (S (2 * i + 1 + r)) (s \ S (2 * j + r))
[PROOFSTEP]
refine' ⟨(↑(2 * i + 1 + r))⁻¹ - (↑(2 * j + r))⁻¹, by simpa using A, fun x hx y hy => _⟩
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
r n i j : ℕ
hj : i < j
A : (↑(2 * j + r))⁻¹ < (↑(2 * i + 1 + r))⁻¹
⊢ (↑(2 * i + 1 + r))⁻¹ - (↑(2 * j + r))⁻¹ ≠ 0
[PROOFSTEP]
simpa using A
[GOAL]
case this
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
r n i j : ℕ
hj : i < j
A : (↑(2 * j + r))⁻¹ < (↑(2 * i + 1 + r))⁻¹
x : X
hx : x ∈ S (2 * i + 1 + r)
y : X
hy : y ∈ s \ S (2 * j + r)
⊢ (↑(2 * i + 1 + r))⁻¹ - (↑(2 * j + r))⁻¹ ≤ edist x y
[PROOFSTEP]
have : infEdist y t < (↑(2 * j + r))⁻¹ := not_le.1 fun hle => hy.2 ⟨hy.1, hle⟩
[GOAL]
case this
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
r n i j : ℕ
hj : i < j
A : (↑(2 * j + r))⁻¹ < (↑(2 * i + 1 + r))⁻¹
x : X
hx : x ∈ S (2 * i + 1 + r)
y : X
hy : y ∈ s \ S (2 * j + r)
this : infEdist y t < (↑(2 * j + r))⁻¹
⊢ (↑(2 * i + 1 + r))⁻¹ - (↑(2 * j + r))⁻¹ ≤ edist x y
[PROOFSTEP]
rcases infEdist_lt_iff.mp this with ⟨z, hzt, hyz⟩
[GOAL]
case this.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
r n i j : ℕ
hj : i < j
A : (↑(2 * j + r))⁻¹ < (↑(2 * i + 1 + r))⁻¹
x : X
hx : x ∈ S (2 * i + 1 + r)
y : X
hy : y ∈ s \ S (2 * j + r)
this : infEdist y t < (↑(2 * j + r))⁻¹
z : X
hzt : z ∈ t
hyz : edist y z < (↑(2 * j + r))⁻¹
⊢ (↑(2 * i + 1 + r))⁻¹ - (↑(2 * j + r))⁻¹ ≤ edist x y
[PROOFSTEP]
have hxz : (↑(2 * i + 1 + r))⁻¹ ≤ edist x z := le_infEdist.1 hx.2 _ hzt
[GOAL]
case this.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
r n i j : ℕ
hj : i < j
A : (↑(2 * j + r))⁻¹ < (↑(2 * i + 1 + r))⁻¹
x : X
hx : x ∈ S (2 * i + 1 + r)
y : X
hy : y ∈ s \ S (2 * j + r)
this : infEdist y t < (↑(2 * j + r))⁻¹
z : X
hzt : z ∈ t
hyz : edist y z < (↑(2 * j + r))⁻¹
hxz : (↑(2 * i + 1 + r))⁻¹ ≤ edist x z
⊢ (↑(2 * i + 1 + r))⁻¹ - (↑(2 * j + r))⁻¹ ≤ edist x y
[PROOFSTEP]
apply ENNReal.le_of_add_le_add_right hyz.ne_top
[GOAL]
case this.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
r n i j : ℕ
hj : i < j
A : (↑(2 * j + r))⁻¹ < (↑(2 * i + 1 + r))⁻¹
x : X
hx : x ∈ S (2 * i + 1 + r)
y : X
hy : y ∈ s \ S (2 * j + r)
this : infEdist y t < (↑(2 * j + r))⁻¹
z : X
hzt : z ∈ t
hyz : edist y z < (↑(2 * j + r))⁻¹
hxz : (↑(2 * i + 1 + r))⁻¹ ≤ edist x z
⊢ (↑(2 * i + 1 + r))⁻¹ - (↑(2 * j + r))⁻¹ + edist y z ≤ edist x y + edist y z
[PROOFSTEP]
refine' le_trans _ (edist_triangle _ _ _)
[GOAL]
case this.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
r n i j : ℕ
hj : i < j
A : (↑(2 * j + r))⁻¹ < (↑(2 * i + 1 + r))⁻¹
x : X
hx : x ∈ S (2 * i + 1 + r)
y : X
hy : y ∈ s \ S (2 * j + r)
this : infEdist y t < (↑(2 * j + r))⁻¹
z : X
hzt : z ∈ t
hyz : edist y z < (↑(2 * j + r))⁻¹
hxz : (↑(2 * i + 1 + r))⁻¹ ≤ edist x z
⊢ (↑(2 * i + 1 + r))⁻¹ - (↑(2 * j + r))⁻¹ + edist y z ≤ edist x z
[PROOFSTEP]
refine' (add_le_add le_rfl hyz.le).trans (Eq.trans_le _ hxz)
[GOAL]
case this.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
μ : OuterMeasure X
hm : IsMetric μ
t : Set X
ht : t ∈ {s | IsClosed s}
s : Set X
S : ℕ → Set X := fun n => {x | x ∈ s ∧ (↑n)⁻¹ ≤ infEdist x t}
n0 : ∀ {n : ℕ}, (↑n)⁻¹ ≠ 0
Ssep : ∀ (n : ℕ), IsMetricSeparated (S n) t
Ssep' : ∀ (n : ℕ), IsMetricSeparated (S n) (s ∩ t)
S_sub : ∀ (n : ℕ), S n ⊆ s \ t
hSs : ∀ (n : ℕ), ↑μ (s ∩ t) + ↑μ (S n) ≤ ↑μ s
iUnion_S : ⋃ (n : ℕ), S n = s \ t
htop : ¬↑μ (s \ t) = ⊤
r n i j : ℕ
hj : i < j
A : (↑(2 * j + r))⁻¹ < (↑(2 * i + 1 + r))⁻¹
x : X
hx : x ∈ S (2 * i + 1 + r)
y : X
hy : y ∈ s \ S (2 * j + r)
this : infEdist y t < (↑(2 * j + r))⁻¹
z : X
hzt : z ∈ t
hyz : edist y z < (↑(2 * j + r))⁻¹
hxz : (↑(2 * i + 1 + r))⁻¹ ≤ edist x z
⊢ (↑(2 * i + 1 + r))⁻¹ - (↑(2 * j + r))⁻¹ + (↑(2 * j + r))⁻¹ = (↑(2 * i + 1 + r))⁻¹
[PROOFSTEP]
rw [tsub_add_cancel_of_le A.le]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
μ : OuterMeasure X
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
hm : IsMetric μ
⊢ inst✝¹ ≤ OuterMeasure.caratheodory μ
[PROOFSTEP]
rw [BorelSpace.measurable_eq (α := X)]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
μ : OuterMeasure X
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
hm : IsMetric μ
⊢ borel X ≤ OuterMeasure.caratheodory μ
[PROOFSTEP]
exact hm.borel_le_caratheodory
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
r : ℝ≥0∞
μ : OuterMeasure X
s : Set X
⊢ μ ≤ pre m r ↔ ∀ (s : Set X), diam s ≤ r → ↑μ s ≤ m s
[PROOFSTEP]
simp only [pre, le_boundedBy, extend, le_iInf_iff]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m✝ : Set X → ℝ≥0∞
r : ℝ≥0∞
μ : OuterMeasure X
s✝ : Set X
m : Set X → ℝ≥0∞
k l : ℕ
h : k ≤ l
s : Set X
hs : diam s ≤ (↑l)⁻¹
⊢ (↑l)⁻¹ ≤ (↑k)⁻¹
[PROOFSTEP]
simpa
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m✝ : Set X → ℝ≥0∞
r : ℝ≥0∞
μ : OuterMeasure X
s✝ : Set X
m : Set X → ℝ≥0∞
s : Set X
⊢ Tendsto (fun r => ↑(pre m r) s) (𝓝[Ioi 0] 0) (𝓝 (↑(mkMetric' m) s))
[PROOFSTEP]
rw [← map_coe_Ioi_atBot, tendsto_map'_iff]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m✝ : Set X → ℝ≥0∞
r : ℝ≥0∞
μ : OuterMeasure X
s✝ : Set X
m : Set X → ℝ≥0∞
s : Set X
⊢ Tendsto ((fun r => ↑(pre m r) s) ∘ Subtype.val) atBot (𝓝 (↑(mkMetric' m) s))
[PROOFSTEP]
simp only [mkMetric', OuterMeasure.iSup_apply, iSup_subtype']
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m✝ : Set X → ℝ≥0∞
r : ℝ≥0∞
μ : OuterMeasure X
s✝ : Set X
m : Set X → ℝ≥0∞
s : Set X
⊢ Tendsto ((fun r => ↑(pre m r) s) ∘ Subtype.val) atBot (𝓝 (⨆ (i : { i // i > 0 }), ↑(pre m ↑i) s))
[PROOFSTEP]
exact tendsto_atBot_iSup fun r r' hr => mono_pre _ hr _
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m✝ : Set X → ℝ≥0∞
r : ℝ≥0∞
μ : OuterMeasure X
s✝ : Set X
m : Set X → ℝ≥0∞
s : Set X
⊢ Tendsto (fun n => ↑(pre m (↑n)⁻¹) s) atTop (𝓝 (↑(mkMetric' m) s))
[PROOFSTEP]
refine' (tendsto_pre m s).comp (tendsto_inf.2 ⟨ENNReal.tendsto_inv_nat_nhds_zero, _⟩)
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m✝ : Set X → ℝ≥0∞
r : ℝ≥0∞
μ : OuterMeasure X
s✝ : Set X
m : Set X → ℝ≥0∞
s : Set X
⊢ Tendsto (fun n => (↑n)⁻¹) atTop (𝓟 (Ioi 0))
[PROOFSTEP]
refine' tendsto_principal.2 (eventually_of_forall fun n => _)
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m✝ : Set X → ℝ≥0∞
r : ℝ≥0∞
μ : OuterMeasure X
s✝ : Set X
m : Set X → ℝ≥0∞
s : Set X
n : ℕ
⊢ (↑n)⁻¹ ∈ Ioi 0
[PROOFSTEP]
simp
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m✝ : Set X → ℝ≥0∞
r : ℝ≥0∞
μ : OuterMeasure X
s : Set X
m : Set X → ℝ≥0∞
⊢ mkMetric' m = ⨆ (n : ℕ), pre m (↑n)⁻¹
[PROOFSTEP]
ext1 s
[GOAL]
case h
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m✝ : Set X → ℝ≥0∞
r : ℝ≥0∞
μ : OuterMeasure X
s✝ : Set X
m : Set X → ℝ≥0∞
s : Set X
⊢ ↑(mkMetric' m) s = ↑(⨆ (n : ℕ), pre m (↑n)⁻¹) s
[PROOFSTEP]
rw [iSup_apply]
[GOAL]
case h
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m✝ : Set X → ℝ≥0∞
r : ℝ≥0∞
μ : OuterMeasure X
s✝ : Set X
m : Set X → ℝ≥0∞
s : Set X
⊢ ↑(mkMetric' m) s = ⨆ (i : ℕ), ↑(pre m (↑i)⁻¹) s
[PROOFSTEP]
refine'
  tendsto_nhds_unique (mkMetric'.tendsto_pre_nat m s) (tendsto_atTop_iSup fun k l hkl => mkMetric'.mono_pre_nat m hkl s)
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
m✝ : Set X → ℝ≥0∞
r✝ : ℝ≥0∞
μ : OuterMeasure X
s : Set X
inst✝¹ : MeasurableSpace X
inst✝ : OpensMeasurableSpace X
m : Set X → ℝ≥0∞
hcl : ∀ (s : Set X), m (closure s) = m s
r : ℝ≥0∞
⊢ trim (pre m r) = pre m r
[PROOFSTEP]
refine' le_antisymm (le_pre.2 fun s hs => _) (le_trim _)
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
m✝ : Set X → ℝ≥0∞
r✝ : ℝ≥0∞
μ : OuterMeasure X
s✝ : Set X
inst✝¹ : MeasurableSpace X
inst✝ : OpensMeasurableSpace X
m : Set X → ℝ≥0∞
hcl : ∀ (s : Set X), m (closure s) = m s
r : ℝ≥0∞
s : Set X
hs : diam s ≤ r
⊢ ↑(trim (pre m r)) s ≤ m s
[PROOFSTEP]
rw [trim_eq_iInf]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
m✝ : Set X → ℝ≥0∞
r✝ : ℝ≥0∞
μ : OuterMeasure X
s✝ : Set X
inst✝¹ : MeasurableSpace X
inst✝ : OpensMeasurableSpace X
m : Set X → ℝ≥0∞
hcl : ∀ (s : Set X), m (closure s) = m s
r : ℝ≥0∞
s : Set X
hs : diam s ≤ r
⊢ ⨅ (t : Set X) (_ : s ⊆ t) (_ : MeasurableSet t), ↑(pre m r) t ≤ m s
[PROOFSTEP]
refine'
  iInf_le_of_le (closure s) <|
    iInf_le_of_le subset_closure <| iInf_le_of_le measurableSet_closure ((pre_le _).trans_eq (hcl _))
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
m✝ : Set X → ℝ≥0∞
r✝ : ℝ≥0∞
μ : OuterMeasure X
s✝ : Set X
inst✝¹ : MeasurableSpace X
inst✝ : OpensMeasurableSpace X
m : Set X → ℝ≥0∞
hcl : ∀ (s : Set X), m (closure s) = m s
r : ℝ≥0∞
s : Set X
hs : diam s ≤ r
⊢ diam (closure s) ≤ r
[PROOFSTEP]
rwa [diam_closure]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
⊢ IsMetric (mkMetric' m)
[PROOFSTEP]
rintro s t ⟨r, r0, hr⟩
[GOAL]
case intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
s t : Set X
r : ℝ≥0∞
r0 : r ≠ 0
hr : ∀ (x : X), x ∈ s → ∀ (y : X), y ∈ t → r ≤ edist x y
⊢ ↑(mkMetric' m) (s ∪ t) = ↑(mkMetric' m) s + ↑(mkMetric' m) t
[PROOFSTEP]
refine'
  tendsto_nhds_unique_of_eventuallyEq (mkMetric'.tendsto_pre _ _)
    ((mkMetric'.tendsto_pre _ _).add (mkMetric'.tendsto_pre _ _)) _
[GOAL]
case intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
s t : Set X
r : ℝ≥0∞
r0 : r ≠ 0
hr : ∀ (x : X), x ∈ s → ∀ (y : X), y ∈ t → r ≤ edist x y
⊢ (fun r => ↑(mkMetric'.pre m r) (s ∪ t)) =ᶠ[𝓝[Ioi 0] 0] fun x => ↑(mkMetric'.pre m x) s + ↑(mkMetric'.pre m x) t
[PROOFSTEP]
rw [← pos_iff_ne_zero] at r0
[GOAL]
case intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
s t : Set X
r : ℝ≥0∞
r0 : 0 < r
hr : ∀ (x : X), x ∈ s → ∀ (y : X), y ∈ t → r ≤ edist x y
⊢ (fun r => ↑(mkMetric'.pre m r) (s ∪ t)) =ᶠ[𝓝[Ioi 0] 0] fun x => ↑(mkMetric'.pre m x) s + ↑(mkMetric'.pre m x) t
[PROOFSTEP]
filter_upwards [Ioo_mem_nhdsWithin_Ioi ⟨le_rfl, r0⟩]
[GOAL]
case h
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
s t : Set X
r : ℝ≥0∞
r0 : 0 < r
hr : ∀ (x : X), x ∈ s → ∀ (y : X), y ∈ t → r ≤ edist x y
⊢ ∀ (a : ℝ≥0∞), a ∈ Ioo 0 r → ↑(mkMetric'.pre m a) (s ∪ t) = ↑(mkMetric'.pre m a) s + ↑(mkMetric'.pre m a) t
[PROOFSTEP]
rintro ε ⟨_, εr⟩
[GOAL]
case h.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
s t : Set X
r : ℝ≥0∞
r0 : 0 < r
hr : ∀ (x : X), x ∈ s → ∀ (y : X), y ∈ t → r ≤ edist x y
ε : ℝ≥0∞
left✝ : 0 < ε
εr : ε < r
⊢ ↑(mkMetric'.pre m ε) (s ∪ t) = ↑(mkMetric'.pre m ε) s + ↑(mkMetric'.pre m ε) t
[PROOFSTEP]
refine' boundedBy_union_of_top_of_nonempty_inter _
[GOAL]
case h.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
s t : Set X
r : ℝ≥0∞
r0 : 0 < r
hr : ∀ (x : X), x ∈ s → ∀ (y : X), y ∈ t → r ≤ edist x y
ε : ℝ≥0∞
left✝ : 0 < ε
εr : ε < r
⊢ ∀ (u : Set X), Set.Nonempty (s ∩ u) → Set.Nonempty (t ∩ u) → extend (fun s x => m s) u = ⊤
[PROOFSTEP]
rintro u ⟨x, hxs, hxu⟩ ⟨y, hyt, hyu⟩
[GOAL]
case h.intro.intro.intro.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
s t : Set X
r : ℝ≥0∞
r0 : 0 < r
hr : ∀ (x : X), x ∈ s → ∀ (y : X), y ∈ t → r ≤ edist x y
ε : ℝ≥0∞
left✝ : 0 < ε
εr : ε < r
u : Set X
x : X
hxs : x ∈ s
hxu : x ∈ u
y : X
hyt : y ∈ t
hyu : y ∈ u
⊢ extend (fun s x => m s) u = ⊤
[PROOFSTEP]
have : ε < diam u := εr.trans_le ((hr x hxs y hyt).trans <| edist_le_diam_of_mem hxu hyu)
[GOAL]
case h.intro.intro.intro.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : Set X → ℝ≥0∞
s t : Set X
r : ℝ≥0∞
r0 : 0 < r
hr : ∀ (x : X), x ∈ s → ∀ (y : X), y ∈ t → r ≤ edist x y
ε : ℝ≥0∞
left✝ : 0 < ε
εr : ε < r
u : Set X
x : X
hxs : x ∈ s
hxu : x ∈ u
y : X
hyt : y ∈ t
hyu : y ∈ u
this : ε < diam u
⊢ extend (fun s x => m s) u = ⊤
[PROOFSTEP]
exact iInf_eq_top.2 fun h => (this.not_le h).elim
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m₁ m₂ : ℝ≥0∞ → ℝ≥0∞
c : ℝ≥0∞
hc : c ≠ ⊤
h0 : c ≠ 0
hle : m₁ ≤ᶠ[𝓝[Ici 0] 0] c • m₂
⊢ mkMetric m₁ ≤ c • mkMetric m₂
[PROOFSTEP]
classical
rcases(mem_nhdsWithin_Ici_iff_exists_Ico_subset' zero_lt_one).1 hle with ⟨r, hr0, hr⟩
refine' fun s =>
  le_of_tendsto_of_tendsto (mkMetric'.tendsto_pre _ s)
    (ENNReal.Tendsto.const_mul (mkMetric'.tendsto_pre _ s) (Or.inr hc))
    (mem_of_superset (Ioo_mem_nhdsWithin_Ioi ⟨le_rfl, hr0⟩) fun r' hr' => _)
simp only [mem_setOf_eq, mkMetric'.pre, RingHom.id_apply]
rw [← smul_eq_mul, ← smul_apply, smul_boundedBy hc]
refine' le_boundedBy.2 (fun t => (boundedBy_le _).trans _) _
simp only [smul_eq_mul, Pi.smul_apply, extend, iInf_eq_if]
split_ifs with ht
· apply hr
  exact ⟨zero_le _, ht.trans_lt hr'.2⟩
· simp [h0]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m₁ m₂ : ℝ≥0∞ → ℝ≥0∞
c : ℝ≥0∞
hc : c ≠ ⊤
h0 : c ≠ 0
hle : m₁ ≤ᶠ[𝓝[Ici 0] 0] c • m₂
⊢ mkMetric m₁ ≤ c • mkMetric m₂
[PROOFSTEP]
rcases(mem_nhdsWithin_Ici_iff_exists_Ico_subset' zero_lt_one).1 hle with ⟨r, hr0, hr⟩
[GOAL]
case intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m₁ m₂ : ℝ≥0∞ → ℝ≥0∞
c : ℝ≥0∞
hc : c ≠ ⊤
h0 : c ≠ 0
hle : m₁ ≤ᶠ[𝓝[Ici 0] 0] c • m₂
r : ℝ≥0∞
hr0 : r ∈ Ioi 0
hr : Ico 0 r ⊆ {x | (fun x => m₁ x ≤ (c • m₂) x) x}
⊢ mkMetric m₁ ≤ c • mkMetric m₂
[PROOFSTEP]
refine' fun s =>
  le_of_tendsto_of_tendsto (mkMetric'.tendsto_pre _ s)
    (ENNReal.Tendsto.const_mul (mkMetric'.tendsto_pre _ s) (Or.inr hc))
    (mem_of_superset (Ioo_mem_nhdsWithin_Ioi ⟨le_rfl, hr0⟩) fun r' hr' => _)
[GOAL]
case intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m₁ m₂ : ℝ≥0∞ → ℝ≥0∞
c : ℝ≥0∞
hc : c ≠ ⊤
h0 : c ≠ 0
hle : m₁ ≤ᶠ[𝓝[Ici 0] 0] c • m₂
r : ℝ≥0∞
hr0 : r ∈ Ioi 0
hr : Ico 0 r ⊆ {x | (fun x => m₁ x ≤ (c • m₂) x) x}
s : Set X
r' : ℝ≥0∞
hr' : r' ∈ Ioo 0 r
⊢ r' ∈
    {x |
      (fun x =>
          (fun r => ↑(mkMetric'.pre (fun s => m₁ (diam s)) r) s) x ≤
            (fun b => ↑(RingHom.id ℝ≥0∞) c * ↑(mkMetric'.pre (fun s => m₂ (diam s)) b) s) x)
        x}
[PROOFSTEP]
simp only [mem_setOf_eq, mkMetric'.pre, RingHom.id_apply]
[GOAL]
case intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m₁ m₂ : ℝ≥0∞ → ℝ≥0∞
c : ℝ≥0∞
hc : c ≠ ⊤
h0 : c ≠ 0
hle : m₁ ≤ᶠ[𝓝[Ici 0] 0] c • m₂
r : ℝ≥0∞
hr0 : r ∈ Ioi 0
hr : Ico 0 r ⊆ {x | (fun x => m₁ x ≤ (c • m₂) x) x}
s : Set X
r' : ℝ≥0∞
hr' : r' ∈ Ioo 0 r
⊢ ↑(boundedBy (extend fun s x => m₁ (diam s))) s ≤ c * ↑(boundedBy (extend fun s x => m₂ (diam s))) s
[PROOFSTEP]
rw [← smul_eq_mul, ← smul_apply, smul_boundedBy hc]
[GOAL]
case intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m₁ m₂ : ℝ≥0∞ → ℝ≥0∞
c : ℝ≥0∞
hc : c ≠ ⊤
h0 : c ≠ 0
hle : m₁ ≤ᶠ[𝓝[Ici 0] 0] c • m₂
r : ℝ≥0∞
hr0 : r ∈ Ioi 0
hr : Ico 0 r ⊆ {x | (fun x => m₁ x ≤ (c • m₂) x) x}
s : Set X
r' : ℝ≥0∞
hr' : r' ∈ Ioo 0 r
⊢ ↑(boundedBy (extend fun s x => m₁ (diam s))) s ≤ ↑(boundedBy (c • extend fun s x => m₂ (diam s))) s
[PROOFSTEP]
refine' le_boundedBy.2 (fun t => (boundedBy_le _).trans _) _
[GOAL]
case intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m₁ m₂ : ℝ≥0∞ → ℝ≥0∞
c : ℝ≥0∞
hc : c ≠ ⊤
h0 : c ≠ 0
hle : m₁ ≤ᶠ[𝓝[Ici 0] 0] c • m₂
r : ℝ≥0∞
hr0 : r ∈ Ioi 0
hr : Ico 0 r ⊆ {x | (fun x => m₁ x ≤ (c • m₂) x) x}
s : Set X
r' : ℝ≥0∞
hr' : r' ∈ Ioo 0 r
t : Set X
⊢ extend (fun s x => m₁ (diam s)) t ≤ (c • extend fun s x => m₂ (diam s)) t
[PROOFSTEP]
simp only [smul_eq_mul, Pi.smul_apply, extend, iInf_eq_if]
[GOAL]
case intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m₁ m₂ : ℝ≥0∞ → ℝ≥0∞
c : ℝ≥0∞
hc : c ≠ ⊤
h0 : c ≠ 0
hle : m₁ ≤ᶠ[𝓝[Ici 0] 0] c • m₂
r : ℝ≥0∞
hr0 : r ∈ Ioi 0
hr : Ico 0 r ⊆ {x | (fun x => m₁ x ≤ (c • m₂) x) x}
s : Set X
r' : ℝ≥0∞
hr' : r' ∈ Ioo 0 r
t : Set X
⊢ (if diam t ≤ r' then m₁ (diam t) else ⊤) ≤ c * if diam t ≤ r' then m₂ (diam t) else ⊤
[PROOFSTEP]
split_ifs with ht
[GOAL]
case pos
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m₁ m₂ : ℝ≥0∞ → ℝ≥0∞
c : ℝ≥0∞
hc : c ≠ ⊤
h0 : c ≠ 0
hle : m₁ ≤ᶠ[𝓝[Ici 0] 0] c • m₂
r : ℝ≥0∞
hr0 : r ∈ Ioi 0
hr : Ico 0 r ⊆ {x | (fun x => m₁ x ≤ (c • m₂) x) x}
s : Set X
r' : ℝ≥0∞
hr' : r' ∈ Ioo 0 r
t : Set X
ht : diam t ≤ r'
⊢ m₁ (diam t) ≤ c * m₂ (diam t)
[PROOFSTEP]
apply hr
[GOAL]
case pos.a
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m₁ m₂ : ℝ≥0∞ → ℝ≥0∞
c : ℝ≥0∞
hc : c ≠ ⊤
h0 : c ≠ 0
hle : m₁ ≤ᶠ[𝓝[Ici 0] 0] c • m₂
r : ℝ≥0∞
hr0 : r ∈ Ioi 0
hr : Ico 0 r ⊆ {x | (fun x => m₁ x ≤ (c • m₂) x) x}
s : Set X
r' : ℝ≥0∞
hr' : r' ∈ Ioo 0 r
t : Set X
ht : diam t ≤ r'
⊢ diam t ∈ Ico 0 r
[PROOFSTEP]
exact ⟨zero_le _, ht.trans_lt hr'.2⟩
[GOAL]
case neg
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m₁ m₂ : ℝ≥0∞ → ℝ≥0∞
c : ℝ≥0∞
hc : c ≠ ⊤
h0 : c ≠ 0
hle : m₁ ≤ᶠ[𝓝[Ici 0] 0] c • m₂
r : ℝ≥0∞
hr0 : r ∈ Ioi 0
hr : Ico 0 r ⊆ {x | (fun x => m₁ x ≤ (c • m₂) x) x}
s : Set X
r' : ℝ≥0∞
hr' : r' ∈ Ioo 0 r
t : Set X
ht : ¬diam t ≤ r'
⊢ ⊤ ≤ c * ⊤
[PROOFSTEP]
simp [h0]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
⊢ (mkMetric fun x => ⊤) = ⊤
[PROOFSTEP]
simp_rw [mkMetric, mkMetric', mkMetric'.pre, extend_top, boundedBy_top, eq_top_iff]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
⊢ ⊤ ≤ ⨆ (r : ℝ≥0∞) (_ : r > 0), ⊤
[PROOFSTEP]
rw [le_iSup_iff]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
⊢ ∀ (b : OuterMeasure X), (∀ (i : ℝ≥0∞), ⨆ (_ : i > 0), ⊤ ≤ b) → ⊤ ≤ b
[PROOFSTEP]
intro b hb
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
b : OuterMeasure X
hb : ∀ (i : ℝ≥0∞), ⨆ (_ : i > 0), ⊤ ≤ b
⊢ ⊤ ≤ b
[PROOFSTEP]
simpa using hb ⊤
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m₁ m₂ : ℝ≥0∞ → ℝ≥0∞
hle : m₁ ≤ᶠ[𝓝[Ici 0] 0] m₂
⊢ mkMetric m₁ ≤ mkMetric m₂
[PROOFSTEP]
convert @mkMetric_mono_smul X _ _ m₂ _ ENNReal.one_ne_top one_ne_zero _
[GOAL]
case h.e'_4
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m₁ m₂ : ℝ≥0∞ → ℝ≥0∞
hle : m₁ ≤ᶠ[𝓝[Ici 0] 0] m₂
⊢ mkMetric m₂ = 1 • mkMetric m₂
[PROOFSTEP]
simp [*]
[GOAL]
case convert_2
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m₁ m₂ : ℝ≥0∞ → ℝ≥0∞
hle : m₁ ≤ᶠ[𝓝[Ici 0] 0] m₂
⊢ m₁ ≤ᶠ[𝓝[Ici 0] 0] 1 • m₂
[PROOFSTEP]
simp [*]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : ℝ≥0∞ → ℝ≥0∞
f : X → Y
hf : Isometry f
H : Monotone m ∨ Surjective f
⊢ ↑(comap f) (mkMetric m) = mkMetric m
[PROOFSTEP]
simp only [mkMetric, mkMetric', mkMetric'.pre, inducedOuterMeasure, comap_iSup]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : ℝ≥0∞ → ℝ≥0∞
f : X → Y
hf : Isometry f
H : Monotone m ∨ Surjective f
⊢ ⨆ (i : ℝ≥0∞) (_ : i > 0), ↑(comap f) (boundedBy (extend fun s x => m (diam s))) =
    ⨆ (r : ℝ≥0∞) (_ : r > 0), boundedBy (extend fun s x => m (diam s))
[PROOFSTEP]
refine' surjective_id.iSup_congr id fun ε => surjective_id.iSup_congr id fun hε => _
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : ℝ≥0∞ → ℝ≥0∞
f : X → Y
hf : Isometry f
H : Monotone m ∨ Surjective f
ε : ℝ≥0∞
hε : id ε > 0
⊢ ↑(comap f) (boundedBy (extend fun s x => m (diam s))) = boundedBy (extend fun s x => m (diam s))
[PROOFSTEP]
rw [comap_boundedBy _ (H.imp _ id)]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : ℝ≥0∞ → ℝ≥0∞
f : X → Y
hf : Isometry f
H : Monotone m ∨ Surjective f
ε : ℝ≥0∞
hε : id ε > 0
⊢ (boundedBy fun s => extend (fun s x => m (diam s)) (f '' s)) = boundedBy (extend fun s x => m (diam s))
[PROOFSTEP]
congr with s : 1
[GOAL]
case e_m.h
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : ℝ≥0∞ → ℝ≥0∞
f : X → Y
hf : Isometry f
H : Monotone m ∨ Surjective f
ε : ℝ≥0∞
hε : id ε > 0
s : Set X
⊢ extend (fun s x => m (diam s)) (f '' s) = extend (fun s x => m (diam s)) s
[PROOFSTEP]
apply extend_congr
[GOAL]
case e_m.h.hP
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : ℝ≥0∞ → ℝ≥0∞
f : X → Y
hf : Isometry f
H : Monotone m ∨ Surjective f
ε : ℝ≥0∞
hε : id ε > 0
s : Set X
⊢ diam (f '' s) ≤ ε ↔ diam s ≤ id ε
[PROOFSTEP]
simp [hf.ediam_image]
[GOAL]
case e_m.h.hm
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : ℝ≥0∞ → ℝ≥0∞
f : X → Y
hf : Isometry f
H : Monotone m ∨ Surjective f
ε : ℝ≥0∞
hε : id ε > 0
s : Set X
⊢ diam (f '' s) ≤ ε → diam s ≤ id ε → m (diam (f '' s)) = m (diam s)
[PROOFSTEP]
intros
[GOAL]
case e_m.h.hm
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : ℝ≥0∞ → ℝ≥0∞
f : X → Y
hf : Isometry f
H : Monotone m ∨ Surjective f
ε : ℝ≥0∞
hε : id ε > 0
s : Set X
ha✝ : diam (f '' s) ≤ ε
hb✝ : diam s ≤ id ε
⊢ m (diam (f '' s)) = m (diam s)
[PROOFSTEP]
simp [hf.injective.subsingleton_image_iff, hf.ediam_image]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : ℝ≥0∞ → ℝ≥0∞
f : X → Y
hf : Isometry f
H : Monotone m ∨ Surjective f
ε : ℝ≥0∞
hε : id ε > 0
⊢ Monotone m → Monotone fun s => extend (fun s x => m (diam s)) ↑s
[PROOFSTEP]
intro h_mono s t hst
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : ℝ≥0∞ → ℝ≥0∞
f : X → Y
hf : Isometry f
H : Monotone m ∨ Surjective f
ε : ℝ≥0∞
hε : id ε > 0
h_mono : Monotone m
s t : { s // Set.Nonempty s }
hst : s ≤ t
⊢ (fun s => extend (fun s x => m (diam s)) ↑s) s ≤ (fun s => extend (fun s x => m (diam s)) ↑s) t
[PROOFSTEP]
simp only [extend, le_iInf_iff]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : ℝ≥0∞ → ℝ≥0∞
f : X → Y
hf : Isometry f
H : Monotone m ∨ Surjective f
ε : ℝ≥0∞
hε : id ε > 0
h_mono : Monotone m
s t : { s // Set.Nonempty s }
hst : s ≤ t
⊢ diam ↑t ≤ ε → ⨅ (_ : diam ↑s ≤ ε), m (diam ↑s) ≤ m (diam ↑t)
[PROOFSTEP]
intro ht
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : ℝ≥0∞ → ℝ≥0∞
f : X → Y
hf : Isometry f
H : Monotone m ∨ Surjective f
ε : ℝ≥0∞
hε : id ε > 0
h_mono : Monotone m
s t : { s // Set.Nonempty s }
hst : s ≤ t
ht : diam ↑t ≤ ε
⊢ ⨅ (_ : diam ↑s ≤ ε), m (diam ↑s) ≤ m (diam ↑t)
[PROOFSTEP]
apply le_trans _ (h_mono (diam_mono hst))
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : ℝ≥0∞ → ℝ≥0∞
f : X → Y
hf : Isometry f
H : Monotone m ∨ Surjective f
ε : ℝ≥0∞
hε : id ε > 0
h_mono : Monotone m
s t : { s // Set.Nonempty s }
hst : s ≤ t
ht : diam ↑t ≤ ε
⊢ ⨅ (_ : diam ↑s ≤ ε), m (diam ↑s) ≤ m (diam ((fun a => ↑a) s))
[PROOFSTEP]
simp only [(diam_mono hst).trans ht, le_refl, ciInf_pos]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : ℝ≥0∞ → ℝ≥0∞
c : ℝ≥0∞
hc : c ≠ ⊤
hc' : c ≠ 0
⊢ mkMetric (c • m) = c • mkMetric m
[PROOFSTEP]
simp only [mkMetric, mkMetric', mkMetric'.pre, inducedOuterMeasure, ENNReal.smul_iSup]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : ℝ≥0∞ → ℝ≥0∞
c : ℝ≥0∞
hc : c ≠ ⊤
hc' : c ≠ 0
⊢ ⨆ (r : ℝ≥0∞) (_ : r > 0), boundedBy (extend fun s x => (c • m) (diam s)) =
    c • ⨆ (r : ℝ≥0∞) (_ : r > 0), boundedBy (extend fun s x => m (diam s))
[PROOFSTEP]
simp_rw [smul_iSup, smul_boundedBy hc, smul_extend _ hc', Pi.smul_apply]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : ℝ≥0∞ → ℝ≥0∞
c : ℝ≥0
hc : c ≠ 0
⊢ mkMetric (c • m) = c • mkMetric m
[PROOFSTEP]
rw [ENNReal.smul_def, ENNReal.smul_def, mkMetric_smul m ENNReal.coe_ne_top (ENNReal.coe_ne_zero.mpr hc)]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : ℝ≥0∞ → ℝ≥0∞
f : X → Y
hf : Isometry f
H : Monotone m ∨ Surjective f
⊢ ↑(map f) (mkMetric m) = ↑(restrict (range f)) (mkMetric m)
[PROOFSTEP]
rw [← isometry_comap_mkMetric _ hf H, map_comap]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹ : EMetricSpace X
inst✝ : EMetricSpace Y
m : ℝ≥0∞ → ℝ≥0∞
f : X ≃ᵢ Y
⊢ ↑(map ↑f) (mkMetric m) = mkMetric m
[PROOFSTEP]
rw [← isometryEquiv_comap_mkMetric _ f, map_comap_of_surjective f.surjective]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m : ℝ≥0∞ → ℝ≥0∞
⊢ trim (mkMetric m) = mkMetric m
[PROOFSTEP]
simp only [mkMetric, mkMetric'.eq_iSup_nat, trim_iSup]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m : ℝ≥0∞ → ℝ≥0∞
⊢ ⨆ (i : ℕ), trim (mkMetric'.pre (fun s => m (diam s)) (↑i)⁻¹) = ⨆ (n : ℕ), mkMetric'.pre (fun s => m (diam s)) (↑n)⁻¹
[PROOFSTEP]
congr 1 with n : 1
[GOAL]
case e_s.h
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m : ℝ≥0∞ → ℝ≥0∞
n : ℕ
⊢ trim (mkMetric'.pre (fun s => m (diam s)) (↑n)⁻¹) = mkMetric'.pre (fun s => m (diam s)) (↑n)⁻¹
[PROOFSTEP]
refine' mkMetric'.trim_pre _ (fun s => _) _
[GOAL]
case e_s.h
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m : ℝ≥0∞ → ℝ≥0∞
n : ℕ
s : Set X
⊢ m (diam (closure s)) = m (diam s)
[PROOFSTEP]
simp
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m : ℝ≥0∞ → ℝ≥0∞
⊢ ↑(mkMetric m) = ↑↑(Measure.mkMetric m)
[PROOFSTEP]
rw [← Measure.mkMetric_toOuterMeasure]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m₁ m₂ : ℝ≥0∞ → ℝ≥0∞
c : ℝ≥0∞
hc : c ≠ ⊤
h0 : c ≠ 0
hle : m₁ ≤ᶠ[𝓝[Ici 0] 0] c • m₂
⊢ mkMetric m₁ ≤ c • mkMetric m₂
[PROOFSTEP]
intro s _
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m₁ m₂ : ℝ≥0∞ → ℝ≥0∞
c : ℝ≥0∞
hc : c ≠ ⊤
h0 : c ≠ 0
hle : m₁ ≤ᶠ[𝓝[Ici 0] 0] c • m₂
s : Set X
a✝ : MeasurableSet s
⊢ ↑↑(mkMetric m₁) s ≤ ↑↑(c • mkMetric m₂) s
[PROOFSTEP]
rw [← OuterMeasure.coe_mkMetric, coe_smul, ← OuterMeasure.coe_mkMetric]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m₁ m₂ : ℝ≥0∞ → ℝ≥0∞
c : ℝ≥0∞
hc : c ≠ ⊤
h0 : c ≠ 0
hle : m₁ ≤ᶠ[𝓝[Ici 0] 0] c • m₂
s : Set X
a✝ : MeasurableSet s
⊢ ↑(OuterMeasure.mkMetric m₁) s ≤ (c • ↑(OuterMeasure.mkMetric m₂)) s
[PROOFSTEP]
exact OuterMeasure.mkMetric_mono_smul hc h0 hle s
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
⊢ (mkMetric fun x => ⊤) = ⊤
[PROOFSTEP]
apply toOuterMeasure_injective
[GOAL]
case a
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
⊢ ↑(mkMetric fun x => ⊤) = ↑⊤
[PROOFSTEP]
rw [mkMetric_toOuterMeasure, OuterMeasure.mkMetric_top, toOuterMeasure_top]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m₁ m₂ : ℝ≥0∞ → ℝ≥0∞
hle : m₁ ≤ᶠ[𝓝[Ici 0] 0] m₂
⊢ mkMetric m₁ ≤ mkMetric m₂
[PROOFSTEP]
convert @mkMetric_mono_smul X _ _ _ _ m₂ _ ENNReal.one_ne_top one_ne_zero _
[GOAL]
case h.e'_4
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m₁ m₂ : ℝ≥0∞ → ℝ≥0∞
hle : m₁ ≤ᶠ[𝓝[Ici 0] 0] m₂
⊢ mkMetric m₂ = 1 • mkMetric m₂
[PROOFSTEP]
simp [*]
[GOAL]
case convert_2
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m₁ m₂ : ℝ≥0∞ → ℝ≥0∞
hle : m₁ ≤ᶠ[𝓝[Ici 0] 0] m₂
⊢ m₁ ≤ᶠ[𝓝[Ici 0] 0] 1 • m₂
[PROOFSTEP]
simp [*]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m : ℝ≥0∞ → ℝ≥0∞
s : Set X
⊢ ↑↑(mkMetric m) s =
    ⨆ (r : ℝ≥0∞) (_ : 0 < r),
      ⨅ (t : ℕ → Set X) (_ : s ⊆ iUnion t) (_ : ∀ (n : ℕ), diam (t n) ≤ r),
        ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), m (diam (t n))
[PROOFSTEP]
classical
  -- We mostly unfold the definitions but we need to switch the order of `∑'` and `⨅`
simp only [← OuterMeasure.coe_mkMetric, OuterMeasure.mkMetric, OuterMeasure.mkMetric', OuterMeasure.iSup_apply,
  OuterMeasure.mkMetric'.pre, OuterMeasure.boundedBy_apply, extend]
refine'
  surjective_id.iSup_congr (fun r => r) fun r =>
    iSup_congr_Prop Iff.rfl fun _ => surjective_id.iInf_congr _ fun t => iInf_congr_Prop Iff.rfl fun ht => _
dsimp
by_cases htr : ∀ n, diam (t n) ≤ r
· rw [iInf_eq_if, if_pos htr]
  congr 1 with n : 1
  simp only [iInf_eq_if, htr n, id, if_true, iSup_and']
· rw [iInf_eq_if, if_neg htr]
  push_neg at htr ; rcases htr with ⟨n, hn⟩
  refine' ENNReal.tsum_eq_top_of_eq_top ⟨n, _⟩
  rw [iSup_eq_if, if_pos, iInf_eq_if, if_neg]
  exact hn.not_le
  rcases diam_pos_iff.1 ((zero_le r).trans_lt hn) with ⟨x, hx, -⟩
  exact ⟨x, hx⟩
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m : ℝ≥0∞ → ℝ≥0∞
s : Set X
⊢ ↑↑(mkMetric m) s =
    ⨆ (r : ℝ≥0∞) (_ : 0 < r),
      ⨅ (t : ℕ → Set X) (_ : s ⊆ iUnion t) (_ : ∀ (n : ℕ), diam (t n) ≤ r),
        ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), m (diam (t n))
[PROOFSTEP]
simp only [← OuterMeasure.coe_mkMetric, OuterMeasure.mkMetric, OuterMeasure.mkMetric', OuterMeasure.iSup_apply,
  OuterMeasure.mkMetric'.pre, OuterMeasure.boundedBy_apply, extend]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m : ℝ≥0∞ → ℝ≥0∞
s : Set X
⊢ ⨆ (i : ℝ≥0∞) (_ : i > 0),
      ⨅ (t : ℕ → Set X) (_ : s ⊆ iUnion t),
        ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), ⨅ (_ : diam (t n) ≤ i), m (diam (t n)) =
    ⨆ (r : ℝ≥0∞) (_ : 0 < r),
      ⨅ (t : ℕ → Set X) (_ : s ⊆ iUnion t) (_ : ∀ (n : ℕ), diam (t n) ≤ r),
        ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), m (diam (t n))
[PROOFSTEP]
refine'
  surjective_id.iSup_congr (fun r => r) fun r =>
    iSup_congr_Prop Iff.rfl fun _ => surjective_id.iInf_congr _ fun t => iInf_congr_Prop Iff.rfl fun ht => _
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m : ℝ≥0∞ → ℝ≥0∞
s : Set X
r : ℝ≥0∞
x✝ : r > 0
t : ℕ → Set X
ht : s ⊆ iUnion t
⊢ ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (id t n)), ⨅ (_ : diam (id t n) ≤ r), m (diam (id t n)) =
    ⨅ (_ : ∀ (n : ℕ), diam (t n) ≤ (fun r => r) r), ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), m (diam (t n))
[PROOFSTEP]
dsimp
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m : ℝ≥0∞ → ℝ≥0∞
s : Set X
r : ℝ≥0∞
x✝ : r > 0
t : ℕ → Set X
ht : s ⊆ iUnion t
⊢ ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), ⨅ (_ : diam (t n) ≤ r), m (diam (t n)) =
    ⨅ (_ : ∀ (n : ℕ), diam (t n) ≤ r), ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), m (diam (t n))
[PROOFSTEP]
by_cases htr : ∀ n, diam (t n) ≤ r
[GOAL]
case pos
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m : ℝ≥0∞ → ℝ≥0∞
s : Set X
r : ℝ≥0∞
x✝ : r > 0
t : ℕ → Set X
ht : s ⊆ iUnion t
htr : ∀ (n : ℕ), diam (t n) ≤ r
⊢ ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), ⨅ (_ : diam (t n) ≤ r), m (diam (t n)) =
    ⨅ (_ : ∀ (n : ℕ), diam (t n) ≤ r), ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), m (diam (t n))
[PROOFSTEP]
rw [iInf_eq_if, if_pos htr]
[GOAL]
case pos
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m : ℝ≥0∞ → ℝ≥0∞
s : Set X
r : ℝ≥0∞
x✝ : r > 0
t : ℕ → Set X
ht : s ⊆ iUnion t
htr : ∀ (n : ℕ), diam (t n) ≤ r
⊢ ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), ⨅ (_ : diam (t n) ≤ r), m (diam (t n)) =
    ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), m (diam (t n))
[PROOFSTEP]
congr 1 with n : 1
[GOAL]
case pos.e_f.h
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m : ℝ≥0∞ → ℝ≥0∞
s : Set X
r : ℝ≥0∞
x✝ : r > 0
t : ℕ → Set X
ht : s ⊆ iUnion t
htr : ∀ (n : ℕ), diam (t n) ≤ r
n : ℕ
⊢ ⨆ (_ : Set.Nonempty (t n)), ⨅ (_ : diam (t n) ≤ r), m (diam (t n)) = ⨆ (_ : Set.Nonempty (t n)), m (diam (t n))
[PROOFSTEP]
simp only [iInf_eq_if, htr n, id, if_true, iSup_and']
[GOAL]
case neg
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m : ℝ≥0∞ → ℝ≥0∞
s : Set X
r : ℝ≥0∞
x✝ : r > 0
t : ℕ → Set X
ht : s ⊆ iUnion t
htr : ¬∀ (n : ℕ), diam (t n) ≤ r
⊢ ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), ⨅ (_ : diam (t n) ≤ r), m (diam (t n)) =
    ⨅ (_ : ∀ (n : ℕ), diam (t n) ≤ r), ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), m (diam (t n))
[PROOFSTEP]
rw [iInf_eq_if, if_neg htr]
[GOAL]
case neg
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m : ℝ≥0∞ → ℝ≥0∞
s : Set X
r : ℝ≥0∞
x✝ : r > 0
t : ℕ → Set X
ht : s ⊆ iUnion t
htr : ¬∀ (n : ℕ), diam (t n) ≤ r
⊢ ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), ⨅ (_ : diam (t n) ≤ r), m (diam (t n)) = ⊤
[PROOFSTEP]
push_neg at htr
[GOAL]
case neg
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m : ℝ≥0∞ → ℝ≥0∞
s : Set X
r : ℝ≥0∞
x✝ : r > 0
t : ℕ → Set X
ht : s ⊆ iUnion t
htr : ∃ n, r < diam (t n)
⊢ ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), ⨅ (_ : diam (t n) ≤ r), m (diam (t n)) = ⊤
[PROOFSTEP]
rcases htr with ⟨n, hn⟩
[GOAL]
case neg.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m : ℝ≥0∞ → ℝ≥0∞
s : Set X
r : ℝ≥0∞
x✝ : r > 0
t : ℕ → Set X
ht : s ⊆ iUnion t
n : ℕ
hn : r < diam (t n)
⊢ ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), ⨅ (_ : diam (t n) ≤ r), m (diam (t n)) = ⊤
[PROOFSTEP]
refine' ENNReal.tsum_eq_top_of_eq_top ⟨n, _⟩
[GOAL]
case neg.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m : ℝ≥0∞ → ℝ≥0∞
s : Set X
r : ℝ≥0∞
x✝ : r > 0
t : ℕ → Set X
ht : s ⊆ iUnion t
n : ℕ
hn : r < diam (t n)
⊢ ⨆ (_ : Set.Nonempty (t n)), ⨅ (_ : diam (t n) ≤ r), m (diam (t n)) = ⊤
[PROOFSTEP]
rw [iSup_eq_if, if_pos, iInf_eq_if, if_neg]
[GOAL]
case neg.intro.hnc
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m : ℝ≥0∞ → ℝ≥0∞
s : Set X
r : ℝ≥0∞
x✝ : r > 0
t : ℕ → Set X
ht : s ⊆ iUnion t
n : ℕ
hn : r < diam (t n)
⊢ ¬diam (t n) ≤ r
case neg.intro.hc
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m : ℝ≥0∞ → ℝ≥0∞
s : Set X
r : ℝ≥0∞
x✝ : r > 0
t : ℕ → Set X
ht : s ⊆ iUnion t
n : ℕ
hn : r < diam (t n)
⊢ Set.Nonempty (t n)
[PROOFSTEP]
exact hn.not_le
[GOAL]
case neg.intro.hc
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m : ℝ≥0∞ → ℝ≥0∞
s : Set X
r : ℝ≥0∞
x✝ : r > 0
t : ℕ → Set X
ht : s ⊆ iUnion t
n : ℕ
hn : r < diam (t n)
⊢ Set.Nonempty (t n)
[PROOFSTEP]
rcases diam_pos_iff.1 ((zero_le r).trans_lt hn) with ⟨x, hx, -⟩
[GOAL]
case neg.intro.hc.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m : ℝ≥0∞ → ℝ≥0∞
s : Set X
r : ℝ≥0∞
x✝ : r > 0
t : ℕ → Set X
ht : s ⊆ iUnion t
n : ℕ
hn : r < diam (t n)
x : X
hx : x ∈ t n
⊢ Set.Nonempty (t n)
[PROOFSTEP]
exact ⟨x, hx⟩
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m : ℝ≥0∞ → ℝ≥0∞
μ : Measure X
ε : ℝ≥0∞
h₀ : 0 < ε
h : ∀ (s : Set X), diam s ≤ ε → ↑↑μ s ≤ m (diam s)
⊢ μ ≤ mkMetric m
[PROOFSTEP]
rw [← toOuterMeasure_le, mkMetric_toOuterMeasure]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
m : ℝ≥0∞ → ℝ≥0∞
μ : Measure X
ε : ℝ≥0∞
h₀ : 0 < ε
h : ∀ (s : Set X), diam s ≤ ε → ↑↑μ s ≤ m (diam s)
⊢ ↑μ ≤ OuterMeasure.mkMetric m
[PROOFSTEP]
exact OuterMeasure.le_mkMetric m μ.toOuterMeasure ε h₀ h
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁴ : EMetricSpace X
inst✝³ : EMetricSpace Y
inst✝² : MeasurableSpace X
inst✝¹ : BorelSpace X
β : Type u_4
ι : β → Type u_5
inst✝ : ∀ (n : β), Countable (ι n)
s : Set X
l : Filter β
r : β → ℝ≥0∞
hr : Tendsto r l (𝓝 0)
t : (n : β) → ι n → Set X
ht : ∀ᶠ (n : β) in l, ∀ (i : ι n), diam (t n i) ≤ r n
hst : ∀ᶠ (n : β) in l, s ⊆ ⋃ (i : ι n), t n i
m : ℝ≥0∞ → ℝ≥0∞
⊢ ↑↑(mkMetric m) s ≤ liminf (fun n => ∑' (i : ι n), m (diam (t n i))) l
[PROOFSTEP]
haveI : ∀ n, Encodable (ι n) := fun n => Encodable.ofCountable _
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁴ : EMetricSpace X
inst✝³ : EMetricSpace Y
inst✝² : MeasurableSpace X
inst✝¹ : BorelSpace X
β : Type u_4
ι : β → Type u_5
inst✝ : ∀ (n : β), Countable (ι n)
s : Set X
l : Filter β
r : β → ℝ≥0∞
hr : Tendsto r l (𝓝 0)
t : (n : β) → ι n → Set X
ht : ∀ᶠ (n : β) in l, ∀ (i : ι n), diam (t n i) ≤ r n
hst : ∀ᶠ (n : β) in l, s ⊆ ⋃ (i : ι n), t n i
m : ℝ≥0∞ → ℝ≥0∞
this : (n : β) → Encodable (ι n)
⊢ ↑↑(mkMetric m) s ≤ liminf (fun n => ∑' (i : ι n), m (diam (t n i))) l
[PROOFSTEP]
simp only [mkMetric_apply]
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁴ : EMetricSpace X
inst✝³ : EMetricSpace Y
inst✝² : MeasurableSpace X
inst✝¹ : BorelSpace X
β : Type u_4
ι : β → Type u_5
inst✝ : ∀ (n : β), Countable (ι n)
s : Set X
l : Filter β
r : β → ℝ≥0∞
hr : Tendsto r l (𝓝 0)
t : (n : β) → ι n → Set X
ht : ∀ᶠ (n : β) in l, ∀ (i : ι n), diam (t n i) ≤ r n
hst : ∀ᶠ (n : β) in l, s ⊆ ⋃ (i : ι n), t n i
m : ℝ≥0∞ → ℝ≥0∞
this : (n : β) → Encodable (ι n)
⊢ ⨆ (r : ℝ≥0∞) (_ : 0 < r),
      ⨅ (t : ℕ → Set X) (_ : s ⊆ iUnion t) (_ : ∀ (n : ℕ), diam (t n) ≤ r),
        ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), m (diam (t n)) ≤
    liminf (fun n => ∑' (i : ι n), m (diam (t n i))) l
[PROOFSTEP]
refine' iSup₂_le fun ε hε => _
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁴ : EMetricSpace X
inst✝³ : EMetricSpace Y
inst✝² : MeasurableSpace X
inst✝¹ : BorelSpace X
β : Type u_4
ι : β → Type u_5
inst✝ : ∀ (n : β), Countable (ι n)
s : Set X
l : Filter β
r : β → ℝ≥0∞
hr : Tendsto r l (𝓝 0)
t : (n : β) → ι n → Set X
ht : ∀ᶠ (n : β) in l, ∀ (i : ι n), diam (t n i) ≤ r n
hst : ∀ᶠ (n : β) in l, s ⊆ ⋃ (i : ι n), t n i
m : ℝ≥0∞ → ℝ≥0∞
this : (n : β) → Encodable (ι n)
ε : ℝ≥0∞
hε : 0 < ε
⊢ ⨅ (t : ℕ → Set X) (_ : s ⊆ iUnion t) (_ : ∀ (n : ℕ), diam (t n) ≤ ε),
      ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), m (diam (t n)) ≤
    liminf (fun n => ∑' (i : ι n), m (diam (t n i))) l
[PROOFSTEP]
refine' le_of_forall_le_of_dense fun c hc => _
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁴ : EMetricSpace X
inst✝³ : EMetricSpace Y
inst✝² : MeasurableSpace X
inst✝¹ : BorelSpace X
β : Type u_4
ι : β → Type u_5
inst✝ : ∀ (n : β), Countable (ι n)
s : Set X
l : Filter β
r : β → ℝ≥0∞
hr : Tendsto r l (𝓝 0)
t : (n : β) → ι n → Set X
ht : ∀ᶠ (n : β) in l, ∀ (i : ι n), diam (t n i) ≤ r n
hst : ∀ᶠ (n : β) in l, s ⊆ ⋃ (i : ι n), t n i
m : ℝ≥0∞ → ℝ≥0∞
this : (n : β) → Encodable (ι n)
ε : ℝ≥0∞
hε : 0 < ε
c : ℝ≥0∞
hc : liminf (fun n => ∑' (i : ι n), m (diam (t n i))) l < c
⊢ ⨅ (t : ℕ → Set X) (_ : s ⊆ iUnion t) (_ : ∀ (n : ℕ), diam (t n) ≤ ε),
      ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), m (diam (t n)) ≤
    c
[PROOFSTEP]
rcases((frequently_lt_of_liminf_lt (by isBoundedDefault) hc).and_eventually
      ((hr.eventually (gt_mem_nhds hε)).and (ht.and hst))).exists with
  ⟨n, hn, hrn, htn, hstn⟩
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁴ : EMetricSpace X
inst✝³ : EMetricSpace Y
inst✝² : MeasurableSpace X
inst✝¹ : BorelSpace X
β : Type u_4
ι : β → Type u_5
inst✝ : ∀ (n : β), Countable (ι n)
s : Set X
l : Filter β
r : β → ℝ≥0∞
hr : Tendsto r l (𝓝 0)
t : (n : β) → ι n → Set X
ht : ∀ᶠ (n : β) in l, ∀ (i : ι n), diam (t n i) ≤ r n
hst : ∀ᶠ (n : β) in l, s ⊆ ⋃ (i : ι n), t n i
m : ℝ≥0∞ → ℝ≥0∞
this : (n : β) → Encodable (ι n)
ε : ℝ≥0∞
hε : 0 < ε
c : ℝ≥0∞
hc : liminf (fun n => ∑' (i : ι n), m (diam (t n i))) l < c
⊢ IsCoboundedUnder (fun x x_1 => x ≥ x_1) l fun n => ∑' (i : ι n), m (diam (t n i))
[PROOFSTEP]
isBoundedDefault
[GOAL]
case intro.intro.intro.intro
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁴ : EMetricSpace X
inst✝³ : EMetricSpace Y
inst✝² : MeasurableSpace X
inst✝¹ : BorelSpace X
β : Type u_4
ι : β → Type u_5
inst✝ : ∀ (n : β), Countable (ι n)
s : Set X
l : Filter β
r : β → ℝ≥0∞
hr : Tendsto r l (𝓝 0)
t : (n : β) → ι n → Set X
ht : ∀ᶠ (n : β) in l, ∀ (i : ι n), diam (t n i) ≤ r n
hst : ∀ᶠ (n : β) in l, s ⊆ ⋃ (i : ι n), t n i
m : ℝ≥0∞ → ℝ≥0∞
this : (n : β) → Encodable (ι n)
ε : ℝ≥0∞
hε : 0 < ε
c : ℝ≥0∞
hc : liminf (fun n => ∑' (i : ι n), m (diam (t n i))) l < c
n : β
hn : ∑' (i : ι n), m (diam (t n i)) < c
hrn : r n < ε
htn : ∀ (i : ι n), diam (t n i) ≤ r n
hstn : s ⊆ ⋃ (i : ι n), t n i
⊢ ⨅ (t : ℕ → Set X) (_ : s ⊆ iUnion t) (_ : ∀ (n : ℕ), diam (t n) ≤ ε),
      ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), m (diam (t n)) ≤
    c
[PROOFSTEP]
set u : ℕ → Set X := fun j => ⋃ b ∈ decode₂ (ι n) j, t n b
[GOAL]
case intro.intro.intro.intro
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁴ : EMetricSpace X
inst✝³ : EMetricSpace Y
inst✝² : MeasurableSpace X
inst✝¹ : BorelSpace X
β : Type u_4
ι : β → Type u_5
inst✝ : ∀ (n : β), Countable (ι n)
s : Set X
l : Filter β
r : β → ℝ≥0∞
hr : Tendsto r l (𝓝 0)
t : (n : β) → ι n → Set X
ht : ∀ᶠ (n : β) in l, ∀ (i : ι n), diam (t n i) ≤ r n
hst : ∀ᶠ (n : β) in l, s ⊆ ⋃ (i : ι n), t n i
m : ℝ≥0∞ → ℝ≥0∞
this : (n : β) → Encodable (ι n)
ε : ℝ≥0∞
hε : 0 < ε
c : ℝ≥0∞
hc : liminf (fun n => ∑' (i : ι n), m (diam (t n i))) l < c
n : β
hn : ∑' (i : ι n), m (diam (t n i)) < c
hrn : r n < ε
htn : ∀ (i : ι n), diam (t n i) ≤ r n
hstn : s ⊆ ⋃ (i : ι n), t n i
u : ℕ → Set X := fun j => ⋃ (b : ι n) (_ : b ∈ decode₂ (ι n) j), t n b
⊢ ⨅ (t : ℕ → Set X) (_ : s ⊆ iUnion t) (_ : ∀ (n : ℕ), diam (t n) ≤ ε),
      ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), m (diam (t n)) ≤
    c
[PROOFSTEP]
refine' iInf₂_le_of_le u (by rwa [iUnion_decode₂]) _
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁴ : EMetricSpace X
inst✝³ : EMetricSpace Y
inst✝² : MeasurableSpace X
inst✝¹ : BorelSpace X
β : Type u_4
ι : β → Type u_5
inst✝ : ∀ (n : β), Countable (ι n)
s : Set X
l : Filter β
r : β → ℝ≥0∞
hr : Tendsto r l (𝓝 0)
t : (n : β) → ι n → Set X
ht : ∀ᶠ (n : β) in l, ∀ (i : ι n), diam (t n i) ≤ r n
hst : ∀ᶠ (n : β) in l, s ⊆ ⋃ (i : ι n), t n i
m : ℝ≥0∞ → ℝ≥0∞
this : (n : β) → Encodable (ι n)
ε : ℝ≥0∞
hε : 0 < ε
c : ℝ≥0∞
hc : liminf (fun n => ∑' (i : ι n), m (diam (t n i))) l < c
n : β
hn : ∑' (i : ι n), m (diam (t n i)) < c
hrn : r n < ε
htn : ∀ (i : ι n), diam (t n i) ≤ r n
hstn : s ⊆ ⋃ (i : ι n), t n i
u : ℕ → Set X := fun j => ⋃ (b : ι n) (_ : b ∈ decode₂ (ι n) j), t n b
⊢ s ⊆ iUnion u
[PROOFSTEP]
rwa [iUnion_decode₂]
[GOAL]
case intro.intro.intro.intro
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁴ : EMetricSpace X
inst✝³ : EMetricSpace Y
inst✝² : MeasurableSpace X
inst✝¹ : BorelSpace X
β : Type u_4
ι : β → Type u_5
inst✝ : ∀ (n : β), Countable (ι n)
s : Set X
l : Filter β
r : β → ℝ≥0∞
hr : Tendsto r l (𝓝 0)
t : (n : β) → ι n → Set X
ht : ∀ᶠ (n : β) in l, ∀ (i : ι n), diam (t n i) ≤ r n
hst : ∀ᶠ (n : β) in l, s ⊆ ⋃ (i : ι n), t n i
m : ℝ≥0∞ → ℝ≥0∞
this : (n : β) → Encodable (ι n)
ε : ℝ≥0∞
hε : 0 < ε
c : ℝ≥0∞
hc : liminf (fun n => ∑' (i : ι n), m (diam (t n i))) l < c
n : β
hn : ∑' (i : ι n), m (diam (t n i)) < c
hrn : r n < ε
htn : ∀ (i : ι n), diam (t n i) ≤ r n
hstn : s ⊆ ⋃ (i : ι n), t n i
u : ℕ → Set X := fun j => ⋃ (b : ι n) (_ : b ∈ decode₂ (ι n) j), t n b
⊢ ⨅ (_ : ∀ (n : ℕ), diam (u n) ≤ ε), ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (u n)), m (diam (u n)) ≤ c
[PROOFSTEP]
refine' iInf_le_of_le (fun j => _) _
[GOAL]
case intro.intro.intro.intro.refine'_1
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁴ : EMetricSpace X
inst✝³ : EMetricSpace Y
inst✝² : MeasurableSpace X
inst✝¹ : BorelSpace X
β : Type u_4
ι : β → Type u_5
inst✝ : ∀ (n : β), Countable (ι n)
s : Set X
l : Filter β
r : β → ℝ≥0∞
hr : Tendsto r l (𝓝 0)
t : (n : β) → ι n → Set X
ht : ∀ᶠ (n : β) in l, ∀ (i : ι n), diam (t n i) ≤ r n
hst : ∀ᶠ (n : β) in l, s ⊆ ⋃ (i : ι n), t n i
m : ℝ≥0∞ → ℝ≥0∞
this : (n : β) → Encodable (ι n)
ε : ℝ≥0∞
hε : 0 < ε
c : ℝ≥0∞
hc : liminf (fun n => ∑' (i : ι n), m (diam (t n i))) l < c
n : β
hn : ∑' (i : ι n), m (diam (t n i)) < c
hrn : r n < ε
htn : ∀ (i : ι n), diam (t n i) ≤ r n
hstn : s ⊆ ⋃ (i : ι n), t n i
u : ℕ → Set X := fun j => ⋃ (b : ι n) (_ : b ∈ decode₂ (ι n) j), t n b
j : ℕ
⊢ diam (u j) ≤ ε
[PROOFSTEP]
rw [EMetric.diam_iUnion_mem_option]
[GOAL]
case intro.intro.intro.intro.refine'_1
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁴ : EMetricSpace X
inst✝³ : EMetricSpace Y
inst✝² : MeasurableSpace X
inst✝¹ : BorelSpace X
β : Type u_4
ι : β → Type u_5
inst✝ : ∀ (n : β), Countable (ι n)
s : Set X
l : Filter β
r : β → ℝ≥0∞
hr : Tendsto r l (𝓝 0)
t : (n : β) → ι n → Set X
ht : ∀ᶠ (n : β) in l, ∀ (i : ι n), diam (t n i) ≤ r n
hst : ∀ᶠ (n : β) in l, s ⊆ ⋃ (i : ι n), t n i
m : ℝ≥0∞ → ℝ≥0∞
this : (n : β) → Encodable (ι n)
ε : ℝ≥0∞
hε : 0 < ε
c : ℝ≥0∞
hc : liminf (fun n => ∑' (i : ι n), m (diam (t n i))) l < c
n : β
hn : ∑' (i : ι n), m (diam (t n i)) < c
hrn : r n < ε
htn : ∀ (i : ι n), diam (t n i) ≤ r n
hstn : s ⊆ ⋃ (i : ι n), t n i
u : ℕ → Set X := fun j => ⋃ (b : ι n) (_ : b ∈ decode₂ (ι n) j), t n b
j : ℕ
⊢ ⨆ (i : ι n) (_ : i ∈ decode₂ (ι n) j), diam (t n i) ≤ ε
[PROOFSTEP]
exact iSup₂_le fun _ _ => (htn _).trans hrn.le
[GOAL]
case intro.intro.intro.intro.refine'_2
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁴ : EMetricSpace X
inst✝³ : EMetricSpace Y
inst✝² : MeasurableSpace X
inst✝¹ : BorelSpace X
β : Type u_4
ι : β → Type u_5
inst✝ : ∀ (n : β), Countable (ι n)
s : Set X
l : Filter β
r : β → ℝ≥0∞
hr : Tendsto r l (𝓝 0)
t : (n : β) → ι n → Set X
ht : ∀ᶠ (n : β) in l, ∀ (i : ι n), diam (t n i) ≤ r n
hst : ∀ᶠ (n : β) in l, s ⊆ ⋃ (i : ι n), t n i
m : ℝ≥0∞ → ℝ≥0∞
this : (n : β) → Encodable (ι n)
ε : ℝ≥0∞
hε : 0 < ε
c : ℝ≥0∞
hc : liminf (fun n => ∑' (i : ι n), m (diam (t n i))) l < c
n : β
hn : ∑' (i : ι n), m (diam (t n i)) < c
hrn : r n < ε
htn : ∀ (i : ι n), diam (t n i) ≤ r n
hstn : s ⊆ ⋃ (i : ι n), t n i
u : ℕ → Set X := fun j => ⋃ (b : ι n) (_ : b ∈ decode₂ (ι n) j), t n b
⊢ ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (u n)), m (diam (u n)) ≤ c
[PROOFSTEP]
calc
  (∑' j : ℕ, ⨆ _ : (u j).Nonempty, m (diam (u j))) = _ :=
    tsum_iUnion_decode₂ (fun t : Set X => ⨆ _ : t.Nonempty, m (diam t)) (by simp) _
  _ ≤ ∑' i : ι n, m (diam (t n i)) := (ENNReal.tsum_le_tsum fun b => iSup_le fun _ => le_rfl)
  _ ≤ c := hn.le
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁴ : EMetricSpace X
inst✝³ : EMetricSpace Y
inst✝² : MeasurableSpace X
inst✝¹ : BorelSpace X
β : Type u_4
ι : β → Type u_5
inst✝ : ∀ (n : β), Countable (ι n)
s : Set X
l : Filter β
r : β → ℝ≥0∞
hr : Tendsto r l (𝓝 0)
t : (n : β) → ι n → Set X
ht : ∀ᶠ (n : β) in l, ∀ (i : ι n), diam (t n i) ≤ r n
hst : ∀ᶠ (n : β) in l, s ⊆ ⋃ (i : ι n), t n i
m : ℝ≥0∞ → ℝ≥0∞
this : (n : β) → Encodable (ι n)
ε : ℝ≥0∞
hε : 0 < ε
c : ℝ≥0∞
hc : liminf (fun n => ∑' (i : ι n), m (diam (t n i))) l < c
n : β
hn : ∑' (i : ι n), m (diam (t n i)) < c
hrn : r n < ε
htn : ∀ (i : ι n), diam (t n i) ≤ r n
hstn : s ⊆ ⋃ (i : ι n), t n i
u : ℕ → Set X := fun j => ⋃ (b : ι n) (_ : b ∈ decode₂ (ι n) j), t n b
⊢ (fun t => ⨆ (_ : Set.Nonempty t), m (diam t)) ∅ = 0
[PROOFSTEP]
simp
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
β : Type u_4
ι : β → Type u_5
hι : (n : β) → Fintype (ι n)
s : Set X
l : Filter β
r : β → ℝ≥0∞
hr : Tendsto r l (𝓝 0)
t : (n : β) → ι n → Set X
ht : ∀ᶠ (n : β) in l, ∀ (i : ι n), diam (t n i) ≤ r n
hst : ∀ᶠ (n : β) in l, s ⊆ ⋃ (i : ι n), t n i
m : ℝ≥0∞ → ℝ≥0∞
⊢ ↑↑(mkMetric m) s ≤ liminf (fun n => ∑ i : ι n, m (diam (t n i))) l
[PROOFSTEP]
simpa only [tsum_fintype] using mkMetric_le_liminf_tsum s r hr t ht hst m
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h : d₁ < d₂
s : Set X
⊢ ↑↑μH[d₂] s = 0 ∨ ↑↑μH[d₁] s = ⊤
[PROOFSTEP]
by_contra' H
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h : d₁ < d₂
s : Set X
H : ↑↑μH[d₂] s ≠ 0 ∧ ↑↑μH[d₁] s ≠ ⊤
⊢ False
[PROOFSTEP]
suffices ∀ c : ℝ≥0, c ≠ 0 → μH[d₂] s ≤ c * μH[d₁] s
  by
  rcases ENNReal.exists_nnreal_pos_mul_lt H.2 H.1 with ⟨c, hc0, hc⟩
  exact hc.not_le (this c (pos_iff_ne_zero.1 hc0))
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h : d₁ < d₂
s : Set X
H : ↑↑μH[d₂] s ≠ 0 ∧ ↑↑μH[d₁] s ≠ ⊤
this : ∀ (c : ℝ≥0), c ≠ 0 → ↑↑μH[d₂] s ≤ ↑c * ↑↑μH[d₁] s
⊢ False
[PROOFSTEP]
rcases ENNReal.exists_nnreal_pos_mul_lt H.2 H.1 with ⟨c, hc0, hc⟩
[GOAL]
case intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h : d₁ < d₂
s : Set X
H : ↑↑μH[d₂] s ≠ 0 ∧ ↑↑μH[d₁] s ≠ ⊤
this : ∀ (c : ℝ≥0), c ≠ 0 → ↑↑μH[d₂] s ≤ ↑c * ↑↑μH[d₁] s
c : ℝ≥0
hc0 : c > 0
hc : ↑c * ↑↑μH[d₁] s < ↑↑μH[d₂] s
⊢ False
[PROOFSTEP]
exact hc.not_le (this c (pos_iff_ne_zero.1 hc0))
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h : d₁ < d₂
s : Set X
H : ↑↑μH[d₂] s ≠ 0 ∧ ↑↑μH[d₁] s ≠ ⊤
⊢ ∀ (c : ℝ≥0), c ≠ 0 → ↑↑μH[d₂] s ≤ ↑c * ↑↑μH[d₁] s
[PROOFSTEP]
intro c hc
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h : d₁ < d₂
s : Set X
H : ↑↑μH[d₂] s ≠ 0 ∧ ↑↑μH[d₁] s ≠ ⊤
c : ℝ≥0
hc : c ≠ 0
⊢ ↑↑μH[d₂] s ≤ ↑c * ↑↑μH[d₁] s
[PROOFSTEP]
refine' le_iff'.1 (mkMetric_mono_smul ENNReal.coe_ne_top (by exact_mod_cast hc) _) s
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h : d₁ < d₂
s : Set X
H : ↑↑μH[d₂] s ≠ 0 ∧ ↑↑μH[d₁] s ≠ ⊤
c : ℝ≥0
hc : c ≠ 0
⊢ ↑c ≠ 0
[PROOFSTEP]
exact_mod_cast hc
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h : d₁ < d₂
s : Set X
H : ↑↑μH[d₂] s ≠ 0 ∧ ↑↑μH[d₁] s ≠ ⊤
c : ℝ≥0
hc : c ≠ 0
⊢ (fun r => r ^ d₂) ≤ᶠ[𝓝[Ici 0] 0] ↑c • fun r => r ^ d₁
[PROOFSTEP]
have : 0 < ((c : ℝ≥0∞) ^ (d₂ - d₁)⁻¹) :=
  by
  rw [ENNReal.coe_rpow_of_ne_zero hc, pos_iff_ne_zero, Ne.def, ENNReal.coe_eq_zero, NNReal.rpow_eq_zero_iff]
  exact mt And.left hc
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h : d₁ < d₂
s : Set X
H : ↑↑μH[d₂] s ≠ 0 ∧ ↑↑μH[d₁] s ≠ ⊤
c : ℝ≥0
hc : c ≠ 0
⊢ 0 < ↑c ^ (d₂ - d₁)⁻¹
[PROOFSTEP]
rw [ENNReal.coe_rpow_of_ne_zero hc, pos_iff_ne_zero, Ne.def, ENNReal.coe_eq_zero, NNReal.rpow_eq_zero_iff]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h : d₁ < d₂
s : Set X
H : ↑↑μH[d₂] s ≠ 0 ∧ ↑↑μH[d₁] s ≠ ⊤
c : ℝ≥0
hc : c ≠ 0
⊢ ¬(c = 0 ∧ (d₂ - d₁)⁻¹ ≠ 0)
[PROOFSTEP]
exact mt And.left hc
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h : d₁ < d₂
s : Set X
H : ↑↑μH[d₂] s ≠ 0 ∧ ↑↑μH[d₁] s ≠ ⊤
c : ℝ≥0
hc : c ≠ 0
this : 0 < ↑c ^ (d₂ - d₁)⁻¹
⊢ (fun r => r ^ d₂) ≤ᶠ[𝓝[Ici 0] 0] ↑c • fun r => r ^ d₁
[PROOFSTEP]
filter_upwards [Ico_mem_nhdsWithin_Ici ⟨le_rfl, this⟩]
[GOAL]
case h
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h : d₁ < d₂
s : Set X
H : ↑↑μH[d₂] s ≠ 0 ∧ ↑↑μH[d₁] s ≠ ⊤
c : ℝ≥0
hc : c ≠ 0
this : 0 < ↑c ^ (d₂ - d₁)⁻¹
⊢ ∀ (a : ℝ≥0∞), a ∈ Ico 0 (↑c ^ (d₂ - d₁)⁻¹) → a ^ d₂ ≤ (↑c • fun r => r ^ d₁) a
[PROOFSTEP]
rintro r ⟨hr₀, hrc⟩
[GOAL]
case h.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h : d₁ < d₂
s : Set X
H : ↑↑μH[d₂] s ≠ 0 ∧ ↑↑μH[d₁] s ≠ ⊤
c : ℝ≥0
hc : c ≠ 0
this : 0 < ↑c ^ (d₂ - d₁)⁻¹
r : ℝ≥0∞
hr₀ : 0 ≤ r
hrc : r < ↑c ^ (d₂ - d₁)⁻¹
⊢ r ^ d₂ ≤ (↑c • fun r => r ^ d₁) r
[PROOFSTEP]
lift r to ℝ≥0 using ne_top_of_lt hrc
[GOAL]
case h.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h : d₁ < d₂
s : Set X
H : ↑↑μH[d₂] s ≠ 0 ∧ ↑↑μH[d₁] s ≠ ⊤
c : ℝ≥0
hc : c ≠ 0
this : 0 < ↑c ^ (d₂ - d₁)⁻¹
r : ℝ≥0
hr₀ : 0 ≤ ↑r
hrc : ↑r < ↑c ^ (d₂ - d₁)⁻¹
⊢ ↑r ^ d₂ ≤ (↑c • fun r => r ^ d₁) ↑r
[PROOFSTEP]
rw [Pi.smul_apply, smul_eq_mul, ←
  ENNReal.div_le_iff_le_mul (Or.inr ENNReal.coe_ne_top) (Or.inr <| mt ENNReal.coe_eq_zero.1 hc)]
[GOAL]
case h.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h : d₁ < d₂
s : Set X
H : ↑↑μH[d₂] s ≠ 0 ∧ ↑↑μH[d₁] s ≠ ⊤
c : ℝ≥0
hc : c ≠ 0
this : 0 < ↑c ^ (d₂ - d₁)⁻¹
r : ℝ≥0
hr₀ : 0 ≤ ↑r
hrc : ↑r < ↑c ^ (d₂ - d₁)⁻¹
⊢ ↑r ^ d₂ / ↑r ^ d₁ ≤ ↑c
[PROOFSTEP]
rcases eq_or_ne r 0 with (rfl | hr₀)
[GOAL]
case h.intro.intro.inl
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h : d₁ < d₂
s : Set X
H : ↑↑μH[d₂] s ≠ 0 ∧ ↑↑μH[d₁] s ≠ ⊤
c : ℝ≥0
hc : c ≠ 0
this : 0 < ↑c ^ (d₂ - d₁)⁻¹
hr₀ : 0 ≤ ↑0
hrc : ↑0 < ↑c ^ (d₂ - d₁)⁻¹
⊢ ↑0 ^ d₂ / ↑0 ^ d₁ ≤ ↑c
[PROOFSTEP]
rcases lt_or_le 0 d₂ with (h₂ | h₂)
[GOAL]
case h.intro.intro.inl.inl
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h : d₁ < d₂
s : Set X
H : ↑↑μH[d₂] s ≠ 0 ∧ ↑↑μH[d₁] s ≠ ⊤
c : ℝ≥0
hc : c ≠ 0
this : 0 < ↑c ^ (d₂ - d₁)⁻¹
hr₀ : 0 ≤ ↑0
hrc : ↑0 < ↑c ^ (d₂ - d₁)⁻¹
h₂ : 0 < d₂
⊢ ↑0 ^ d₂ / ↑0 ^ d₁ ≤ ↑c
[PROOFSTEP]
simp only [h₂, ENNReal.zero_rpow_of_pos, zero_le, ENNReal.zero_div, ENNReal.coe_zero]
[GOAL]
case h.intro.intro.inl.inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h : d₁ < d₂
s : Set X
H : ↑↑μH[d₂] s ≠ 0 ∧ ↑↑μH[d₁] s ≠ ⊤
c : ℝ≥0
hc : c ≠ 0
this : 0 < ↑c ^ (d₂ - d₁)⁻¹
hr₀ : 0 ≤ ↑0
hrc : ↑0 < ↑c ^ (d₂ - d₁)⁻¹
h₂ : d₂ ≤ 0
⊢ ↑0 ^ d₂ / ↑0 ^ d₁ ≤ ↑c
[PROOFSTEP]
simp only [h.trans_le h₂, ENNReal.div_top, zero_le, ENNReal.zero_rpow_of_neg, ENNReal.coe_zero]
[GOAL]
case h.intro.intro.inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h : d₁ < d₂
s : Set X
H : ↑↑μH[d₂] s ≠ 0 ∧ ↑↑μH[d₁] s ≠ ⊤
c : ℝ≥0
hc : c ≠ 0
this : 0 < ↑c ^ (d₂ - d₁)⁻¹
r : ℝ≥0
hr₀✝ : 0 ≤ ↑r
hrc : ↑r < ↑c ^ (d₂ - d₁)⁻¹
hr₀ : r ≠ 0
⊢ ↑r ^ d₂ / ↑r ^ d₁ ≤ ↑c
[PROOFSTEP]
have : (r : ℝ≥0∞) ≠ 0 := by simpa only [ENNReal.coe_eq_zero, Ne.def] using hr₀
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h : d₁ < d₂
s : Set X
H : ↑↑μH[d₂] s ≠ 0 ∧ ↑↑μH[d₁] s ≠ ⊤
c : ℝ≥0
hc : c ≠ 0
this : 0 < ↑c ^ (d₂ - d₁)⁻¹
r : ℝ≥0
hr₀✝ : 0 ≤ ↑r
hrc : ↑r < ↑c ^ (d₂ - d₁)⁻¹
hr₀ : r ≠ 0
⊢ ↑r ≠ 0
[PROOFSTEP]
simpa only [ENNReal.coe_eq_zero, Ne.def] using hr₀
[GOAL]
case h.intro.intro.inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h : d₁ < d₂
s : Set X
H : ↑↑μH[d₂] s ≠ 0 ∧ ↑↑μH[d₁] s ≠ ⊤
c : ℝ≥0
hc : c ≠ 0
this✝ : 0 < ↑c ^ (d₂ - d₁)⁻¹
r : ℝ≥0
hr₀✝ : 0 ≤ ↑r
hrc : ↑r < ↑c ^ (d₂ - d₁)⁻¹
hr₀ : r ≠ 0
this : ↑r ≠ 0
⊢ ↑r ^ d₂ / ↑r ^ d₁ ≤ ↑c
[PROOFSTEP]
rw [← ENNReal.rpow_sub _ _ this ENNReal.coe_ne_top]
[GOAL]
case h.intro.intro.inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h : d₁ < d₂
s : Set X
H : ↑↑μH[d₂] s ≠ 0 ∧ ↑↑μH[d₁] s ≠ ⊤
c : ℝ≥0
hc : c ≠ 0
this✝ : 0 < ↑c ^ (d₂ - d₁)⁻¹
r : ℝ≥0
hr₀✝ : 0 ≤ ↑r
hrc : ↑r < ↑c ^ (d₂ - d₁)⁻¹
hr₀ : r ≠ 0
this : ↑r ≠ 0
⊢ ↑r ^ (d₂ - d₁) ≤ ↑c
[PROOFSTEP]
refine' (ENNReal.rpow_lt_rpow hrc (sub_pos.2 h)).le.trans _
[GOAL]
case h.intro.intro.inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h : d₁ < d₂
s : Set X
H : ↑↑μH[d₂] s ≠ 0 ∧ ↑↑μH[d₁] s ≠ ⊤
c : ℝ≥0
hc : c ≠ 0
this✝ : 0 < ↑c ^ (d₂ - d₁)⁻¹
r : ℝ≥0
hr₀✝ : 0 ≤ ↑r
hrc : ↑r < ↑c ^ (d₂ - d₁)⁻¹
hr₀ : r ≠ 0
this : ↑r ≠ 0
⊢ (↑c ^ (d₂ - d₁)⁻¹) ^ (d₂ - d₁) ≤ ↑c
[PROOFSTEP]
rw [← ENNReal.rpow_mul, inv_mul_cancel (sub_pos.2 h).ne', ENNReal.rpow_one]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h : d₁ ≤ d₂
s : Set X
⊢ ↑↑μH[d₂] s ≤ ↑↑μH[d₁] s
[PROOFSTEP]
rcases h.eq_or_lt with (rfl | h)
[GOAL]
case inl
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ : ℝ
s : Set X
h : d₁ ≤ d₁
⊢ ↑↑μH[d₁] s ≤ ↑↑μH[d₁] s
[PROOFSTEP]
exact le_rfl
[GOAL]
case inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h✝ : d₁ ≤ d₂
s : Set X
h : d₁ < d₂
⊢ ↑↑μH[d₂] s ≤ ↑↑μH[d₁] s
[PROOFSTEP]
cases' hausdorffMeasure_zero_or_top h s with hs hs
[GOAL]
case inr.inl
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h✝ : d₁ ≤ d₂
s : Set X
h : d₁ < d₂
hs : ↑↑μH[d₂] s = 0
⊢ ↑↑μH[d₂] s ≤ ↑↑μH[d₁] s
[PROOFSTEP]
rw [hs]
[GOAL]
case inr.inl
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h✝ : d₁ ≤ d₂
s : Set X
h : d₁ < d₂
hs : ↑↑μH[d₂] s = 0
⊢ 0 ≤ ↑↑μH[d₁] s
[PROOFSTEP]
exact zero_le _
[GOAL]
case inr.inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h✝ : d₁ ≤ d₂
s : Set X
h : d₁ < d₂
hs : ↑↑μH[d₁] s = ⊤
⊢ ↑↑μH[d₂] s ≤ ↑↑μH[d₁] s
[PROOFSTEP]
rw [hs]
[GOAL]
case inr.inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d₁ d₂ : ℝ
h✝ : d₁ ≤ d₂
s : Set X
h : d₁ < d₂
hs : ↑↑μH[d₁] s = ⊤
⊢ ↑↑μH[d₂] s ≤ ⊤
[PROOFSTEP]
exact le_top
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d : ℝ
hd : 0 < d
⊢ NoAtoms μH[d]
[PROOFSTEP]
refine' ⟨fun x => _⟩
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d : ℝ
hd : 0 < d
x : X
⊢ ↑↑μH[d] {x} = 0
[PROOFSTEP]
rw [← nonpos_iff_eq_zero, hausdorffMeasure_apply]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d : ℝ
hd : 0 < d
x : X
⊢ ⨆ (r : ℝ≥0∞) (_ : 0 < r),
      ⨅ (t : ℕ → Set X) (_ : {x} ⊆ ⋃ (n : ℕ), t n) (_ : ∀ (n : ℕ), diam (t n) ≤ r),
        ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), diam (t n) ^ d ≤
    0
[PROOFSTEP]
refine' iSup₂_le fun ε _ => iInf₂_le_of_le (fun _ => { x }) _ <| iInf_le_of_le (fun _ => _) _
[GOAL]
case refine'_1
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d : ℝ
hd : 0 < d
x : X
ε : ℝ≥0∞
x✝ : 0 < ε
⊢ {x} ⊆ ⋃ (n : ℕ), (fun x_1 => {x}) n
[PROOFSTEP]
exact subset_iUnion (fun _ => { x } : ℕ → Set X) 0
[GOAL]
case refine'_2
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d : ℝ
hd : 0 < d
x : X
ε : ℝ≥0∞
x✝¹ : 0 < ε
x✝ : ℕ
⊢ diam ((fun x_1 => {x}) x✝) ≤ ε
[PROOFSTEP]
simp only [EMetric.diam_singleton, zero_le]
[GOAL]
case refine'_3
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d : ℝ
hd : 0 < d
x : X
ε : ℝ≥0∞
x✝ : 0 < ε
⊢ ∑' (n : ℕ), ⨆ (_ : Set.Nonempty ((fun x_1 => {x}) n)), diam ((fun x_2 => {x}) n) ^ d ≤ 0
[PROOFSTEP]
simp [hd]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
x : X
⊢ ↑↑μH[0] {x} = 1
[PROOFSTEP]
apply le_antisymm
[GOAL]
case a
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
x : X
⊢ ↑↑μH[0] {x} ≤ 1
[PROOFSTEP]
let r : ℕ → ℝ≥0∞ := fun _ => 0
[GOAL]
case a
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
x : X
r : ℕ → ℝ≥0∞ := fun x => 0
⊢ ↑↑μH[0] {x} ≤ 1
[PROOFSTEP]
let t : ℕ → Unit → Set X := fun _ _ => { x }
[GOAL]
case a
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
x : X
r : ℕ → ℝ≥0∞ := fun x => 0
t : ℕ → Unit → Set X := fun x_1 x_2 => {x}
⊢ ↑↑μH[0] {x} ≤ 1
[PROOFSTEP]
have ht : ∀ᶠ n in atTop, ∀ i, diam (t n i) ≤ r n := by
  simp only [imp_true_iff, eq_self_iff_true, diam_singleton, eventually_atTop, nonpos_iff_eq_zero, exists_const]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
x : X
r : ℕ → ℝ≥0∞ := fun x => 0
t : ℕ → Unit → Set X := fun x_1 x_2 => {x}
⊢ ∀ᶠ (n : ℕ) in atTop, ∀ (i : Unit), diam (t n i) ≤ r n
[PROOFSTEP]
simp only [imp_true_iff, eq_self_iff_true, diam_singleton, eventually_atTop, nonpos_iff_eq_zero, exists_const]
[GOAL]
case a
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
x : X
r : ℕ → ℝ≥0∞ := fun x => 0
t : ℕ → Unit → Set X := fun x_1 x_2 => {x}
ht : ∀ᶠ (n : ℕ) in atTop, ∀ (i : Unit), diam (t n i) ≤ r n
⊢ ↑↑μH[0] {x} ≤ 1
[PROOFSTEP]
simpa [liminf_const] using hausdorffMeasure_le_liminf_sum 0 { x } r tendsto_const_nhds t ht
[GOAL]
case a
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
x : X
⊢ 1 ≤ ↑↑μH[0] {x}
[PROOFSTEP]
rw [hausdorffMeasure_apply]
[GOAL]
case a
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
x : X
⊢ 1 ≤
    ⨆ (r : ℝ≥0∞) (_ : 0 < r),
      ⨅ (t : ℕ → Set X) (_ : {x} ⊆ ⋃ (n : ℕ), t n) (_ : ∀ (n : ℕ), diam (t n) ≤ r),
        ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), diam (t n) ^ 0
[PROOFSTEP]
suffices
  (1 : ℝ≥0∞) ≤
    ⨅ (t : ℕ → Set X) (_ : { x } ⊆ ⋃ n, t n) (_ : ∀ n, diam (t n) ≤ 1), ∑' n, ⨆ _ : (t n).Nonempty, diam (t n) ^ (0 : ℝ)
  by
  apply le_trans this _
  convert le_iSup₂ (α := ℝ≥0∞) (1 : ℝ≥0∞) zero_lt_one
  rfl
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
x : X
this :
  1 ≤
    ⨅ (t : ℕ → Set X) (_ : {x} ⊆ ⋃ (n : ℕ), t n) (_ : ∀ (n : ℕ), diam (t n) ≤ 1),
      ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), diam (t n) ^ 0
⊢ 1 ≤
    ⨆ (r : ℝ≥0∞) (_ : 0 < r),
      ⨅ (t : ℕ → Set X) (_ : {x} ⊆ ⋃ (n : ℕ), t n) (_ : ∀ (n : ℕ), diam (t n) ≤ r),
        ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), diam (t n) ^ 0
[PROOFSTEP]
apply le_trans this _
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
x : X
this :
  1 ≤
    ⨅ (t : ℕ → Set X) (_ : {x} ⊆ ⋃ (n : ℕ), t n) (_ : ∀ (n : ℕ), diam (t n) ≤ 1),
      ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), diam (t n) ^ 0
⊢ ⨅ (t : ℕ → Set X) (_ : {x} ⊆ ⋃ (n : ℕ), t n) (_ : ∀ (n : ℕ), diam (t n) ≤ 1),
      ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), diam (t n) ^ 0 ≤
    ⨆ (r : ℝ≥0∞) (_ : 0 < r),
      ⨅ (t : ℕ → Set X) (_ : {x} ⊆ ⋃ (n : ℕ), t n) (_ : ∀ (n : ℕ), diam (t n) ≤ r),
        ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), diam (t n) ^ 0
[PROOFSTEP]
convert le_iSup₂ (α := ℝ≥0∞) (1 : ℝ≥0∞) zero_lt_one
[GOAL]
case h.e'_3
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
x : X
this :
  1 ≤
    ⨅ (t : ℕ → Set X) (_ : {x} ⊆ ⋃ (n : ℕ), t n) (_ : ∀ (n : ℕ), diam (t n) ≤ 1),
      ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), diam (t n) ^ 0
⊢ ⨅ (t : ℕ → Set X) (_ : {x} ⊆ ⋃ (n : ℕ), t n) (_ : ∀ (n : ℕ), diam (t n) ≤ 1),
      ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), diam (t n) ^ 0 =
    ⨅ (t : ℕ → Set X) (_ : {x} ⊆ ⋃ (n : ℕ), t n) (_ : ∀ (n : ℕ), diam (t n) ≤ 1),
      ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), diam (t n) ^ 0
[PROOFSTEP]
rfl
[GOAL]
case a
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
x : X
⊢ 1 ≤
    ⨅ (t : ℕ → Set X) (_ : {x} ⊆ ⋃ (n : ℕ), t n) (_ : ∀ (n : ℕ), diam (t n) ≤ 1),
      ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), diam (t n) ^ 0
[PROOFSTEP]
simp only [ENNReal.rpow_zero, le_iInf_iff]
[GOAL]
case a
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
x : X
⊢ ∀ (i : ℕ → Set X), {x} ⊆ ⋃ (n : ℕ), i n → (∀ (n : ℕ), diam (i n) ≤ 1) → 1 ≤ ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (i n)), 1
[PROOFSTEP]
intro t hst _
[GOAL]
case a
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
x : X
t : ℕ → Set X
hst : {x} ⊆ ⋃ (n : ℕ), t n
i✝ : ∀ (n : ℕ), diam (t n) ≤ 1
⊢ 1 ≤ ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), 1
[PROOFSTEP]
rcases mem_iUnion.1 (hst (mem_singleton x)) with ⟨m, hm⟩
[GOAL]
case a.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
x : X
t : ℕ → Set X
hst : {x} ⊆ ⋃ (n : ℕ), t n
i✝ : ∀ (n : ℕ), diam (t n) ≤ 1
m : ℕ
hm : x ∈ t m
⊢ 1 ≤ ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), 1
[PROOFSTEP]
have A : (t m).Nonempty := ⟨x, hm⟩
[GOAL]
case a.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
x : X
t : ℕ → Set X
hst : {x} ⊆ ⋃ (n : ℕ), t n
i✝ : ∀ (n : ℕ), diam (t n) ≤ 1
m : ℕ
hm : x ∈ t m
A : Set.Nonempty (t m)
⊢ 1 ≤ ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), 1
[PROOFSTEP]
calc
  (1 : ℝ≥0∞) = ⨆ h : (t m).Nonempty, 1 := by simp only [A, ciSup_pos]
  _ ≤ ∑' n, ⨆ h : (t n).Nonempty, 1 := ENNReal.le_tsum _
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
x : X
t : ℕ → Set X
hst : {x} ⊆ ⋃ (n : ℕ), t n
i✝ : ∀ (n : ℕ), diam (t n) ≤ 1
m : ℕ
hm : x ∈ t m
A : Set.Nonempty (t m)
⊢ 1 = ⨆ (_ : Set.Nonempty (t m)), 1
[PROOFSTEP]
simp only [A, ciSup_pos]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
s : Set X
h : Set.Nonempty s
⊢ 1 ≤ ↑↑μH[0] s
[PROOFSTEP]
rcases h with ⟨x, hx⟩
[GOAL]
case intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
s : Set X
x : X
hx : x ∈ s
⊢ 1 ≤ ↑↑μH[0] s
[PROOFSTEP]
calc
  (1 : ℝ≥0∞) = μH[0] ({ x } : Set X) := (hausdorffMeasure_zero_singleton x).symm
  _ ≤ μH[0] s := measure_mono (singleton_subset_iff.2 hx)
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
s : Set X
hs : Set.Subsingleton s
d : ℝ
hd : 0 ≤ d
⊢ ↑↑μH[d] s ≤ 1
[PROOFSTEP]
rcases eq_empty_or_nonempty s with (rfl | ⟨x, hx⟩)
[GOAL]
case inl
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
d : ℝ
hd : 0 ≤ d
hs : Set.Subsingleton ∅
⊢ ↑↑μH[d] ∅ ≤ 1
[PROOFSTEP]
simp only [measure_empty, zero_le]
[GOAL]
case inr.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
s : Set X
hs : Set.Subsingleton s
d : ℝ
hd : 0 ≤ d
x : X
hx : x ∈ s
⊢ ↑↑μH[d] s ≤ 1
[PROOFSTEP]
rw [(subsingleton_iff_singleton hx).1 hs]
[GOAL]
case inr.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
s : Set X
hs : Set.Subsingleton s
d : ℝ
hd : 0 ≤ d
x : X
hx : x ∈ s
⊢ ↑↑μH[d] {x} ≤ 1
[PROOFSTEP]
rcases eq_or_lt_of_le hd with (rfl | dpos)
[GOAL]
case inr.intro.inl
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
s : Set X
hs : Set.Subsingleton s
x : X
hx : x ∈ s
hd : 0 ≤ 0
⊢ ↑↑μH[0] {x} ≤ 1
[PROOFSTEP]
simp only [le_refl, hausdorffMeasure_zero_singleton]
[GOAL]
case inr.intro.inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
s : Set X
hs : Set.Subsingleton s
d : ℝ
hd : 0 ≤ d
x : X
hx : x ∈ s
dpos : 0 < d
⊢ ↑↑μH[d] {x} ≤ 1
[PROOFSTEP]
haveI := noAtoms_hausdorff X dpos
[GOAL]
case inr.intro.inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
s : Set X
hs : Set.Subsingleton s
d : ℝ
hd : 0 ≤ d
x : X
hx : x ∈ s
dpos : 0 < d
this : NoAtoms μH[d]
⊢ ↑↑μH[d] {x} ≤ 1
[PROOFSTEP]
simp only [zero_le, measure_singleton]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
C r : ℝ≥0
f : X → Y
s t : Set X
h : HolderOnWith C r f s
hr : 0 < r
d : ℝ
hd : 0 ≤ d
⊢ ↑↑μH[d] (f '' s) ≤ ↑C ^ d * ↑↑μH[↑r * d] s
[PROOFSTEP]
rcases(zero_le C).eq_or_lt with (rfl | hC0)
[GOAL]
case inl
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
r : ℝ≥0
f : X → Y
s t : Set X
hr : 0 < r
d : ℝ
hd : 0 ≤ d
h : HolderOnWith 0 r f s
⊢ ↑↑μH[d] (f '' s) ≤ ↑0 ^ d * ↑↑μH[↑r * d] s
[PROOFSTEP]
rcases eq_empty_or_nonempty s with (rfl | ⟨x, hx⟩)
[GOAL]
case inl.inl
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
r : ℝ≥0
f : X → Y
t : Set X
hr : 0 < r
d : ℝ
hd : 0 ≤ d
h : HolderOnWith 0 r f ∅
⊢ ↑↑μH[d] (f '' ∅) ≤ ↑0 ^ d * ↑↑μH[↑r * d] ∅
[PROOFSTEP]
simp only [measure_empty, nonpos_iff_eq_zero, mul_zero, image_empty]
[GOAL]
case inl.inr.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
r : ℝ≥0
f : X → Y
s t : Set X
hr : 0 < r
d : ℝ
hd : 0 ≤ d
h : HolderOnWith 0 r f s
x : X
hx : x ∈ s
⊢ ↑↑μH[d] (f '' s) ≤ ↑0 ^ d * ↑↑μH[↑r * d] s
[PROOFSTEP]
have : f '' s = {f x} :=
  haveI : (f '' s).Subsingleton := by simpa [diam_eq_zero_iff] using h.ediam_image_le
  (subsingleton_iff_singleton (mem_image_of_mem f hx)).1 this
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
r : ℝ≥0
f : X → Y
s t : Set X
hr : 0 < r
d : ℝ
hd : 0 ≤ d
h : HolderOnWith 0 r f s
x : X
hx : x ∈ s
⊢ Set.Subsingleton (f '' s)
[PROOFSTEP]
simpa [diam_eq_zero_iff] using h.ediam_image_le
[GOAL]
case inl.inr.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
r : ℝ≥0
f : X → Y
s t : Set X
hr : 0 < r
d : ℝ
hd : 0 ≤ d
h : HolderOnWith 0 r f s
x : X
hx : x ∈ s
this : f '' s = {f x}
⊢ ↑↑μH[d] (f '' s) ≤ ↑0 ^ d * ↑↑μH[↑r * d] s
[PROOFSTEP]
rw [this]
[GOAL]
case inl.inr.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
r : ℝ≥0
f : X → Y
s t : Set X
hr : 0 < r
d : ℝ
hd : 0 ≤ d
h : HolderOnWith 0 r f s
x : X
hx : x ∈ s
this : f '' s = {f x}
⊢ ↑↑μH[d] {f x} ≤ ↑0 ^ d * ↑↑μH[↑r * d] s
[PROOFSTEP]
rcases eq_or_lt_of_le hd with (rfl | h'd)
[GOAL]
case inl.inr.intro.inl
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
r : ℝ≥0
f : X → Y
s t : Set X
hr : 0 < r
h : HolderOnWith 0 r f s
x : X
hx : x ∈ s
this : f '' s = {f x}
hd : 0 ≤ 0
⊢ ↑↑μH[0] {f x} ≤ ↑0 ^ 0 * ↑↑μH[↑r * 0] s
[PROOFSTEP]
simp only [ENNReal.rpow_zero, one_mul, mul_zero]
[GOAL]
case inl.inr.intro.inl
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
r : ℝ≥0
f : X → Y
s t : Set X
hr : 0 < r
h : HolderOnWith 0 r f s
x : X
hx : x ∈ s
this : f '' s = {f x}
hd : 0 ≤ 0
⊢ ↑↑μH[0] {f x} ≤ ↑↑μH[0] s
[PROOFSTEP]
rw [hausdorffMeasure_zero_singleton]
[GOAL]
case inl.inr.intro.inl
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
r : ℝ≥0
f : X → Y
s t : Set X
hr : 0 < r
h : HolderOnWith 0 r f s
x : X
hx : x ∈ s
this : f '' s = {f x}
hd : 0 ≤ 0
⊢ 1 ≤ ↑↑μH[0] s
[PROOFSTEP]
exact one_le_hausdorffMeasure_zero_of_nonempty ⟨x, hx⟩
[GOAL]
case inl.inr.intro.inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
r : ℝ≥0
f : X → Y
s t : Set X
hr : 0 < r
d : ℝ
hd : 0 ≤ d
h : HolderOnWith 0 r f s
x : X
hx : x ∈ s
this : f '' s = {f x}
h'd : 0 < d
⊢ ↑↑μH[d] {f x} ≤ ↑0 ^ d * ↑↑μH[↑r * d] s
[PROOFSTEP]
haveI := noAtoms_hausdorff Y h'd
[GOAL]
case inl.inr.intro.inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
r : ℝ≥0
f : X → Y
s t : Set X
hr : 0 < r
d : ℝ
hd : 0 ≤ d
h : HolderOnWith 0 r f s
x : X
hx : x ∈ s
this✝ : f '' s = {f x}
h'd : 0 < d
this : NoAtoms μH[d]
⊢ ↑↑μH[d] {f x} ≤ ↑0 ^ d * ↑↑μH[↑r * d] s
[PROOFSTEP]
simp only [zero_le, measure_singleton]
  -- Now assume `C ≠ 0`
[GOAL]
case inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
C r : ℝ≥0
f : X → Y
s t : Set X
h : HolderOnWith C r f s
hr : 0 < r
d : ℝ
hd : 0 ≤ d
hC0 : 0 < C
⊢ ↑↑μH[d] (f '' s) ≤ ↑C ^ d * ↑↑μH[↑r * d] s
[PROOFSTEP]
have hCd0 : (C : ℝ≥0∞) ^ d ≠ 0 := by simp [hC0.ne']
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
C r : ℝ≥0
f : X → Y
s t : Set X
h : HolderOnWith C r f s
hr : 0 < r
d : ℝ
hd : 0 ≤ d
hC0 : 0 < C
⊢ ↑C ^ d ≠ 0
[PROOFSTEP]
simp [hC0.ne']
[GOAL]
case inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
C r : ℝ≥0
f : X → Y
s t : Set X
h : HolderOnWith C r f s
hr : 0 < r
d : ℝ
hd : 0 ≤ d
hC0 : 0 < C
hCd0 : ↑C ^ d ≠ 0
⊢ ↑↑μH[d] (f '' s) ≤ ↑C ^ d * ↑↑μH[↑r * d] s
[PROOFSTEP]
have hCd : (C : ℝ≥0∞) ^ d ≠ ∞ := by simp [hd]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
C r : ℝ≥0
f : X → Y
s t : Set X
h : HolderOnWith C r f s
hr : 0 < r
d : ℝ
hd : 0 ≤ d
hC0 : 0 < C
hCd0 : ↑C ^ d ≠ 0
⊢ ↑C ^ d ≠ ⊤
[PROOFSTEP]
simp [hd]
[GOAL]
case inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
C r : ℝ≥0
f : X → Y
s t : Set X
h : HolderOnWith C r f s
hr : 0 < r
d : ℝ
hd : 0 ≤ d
hC0 : 0 < C
hCd0 : ↑C ^ d ≠ 0
hCd : ↑C ^ d ≠ ⊤
⊢ ↑↑μH[d] (f '' s) ≤ ↑C ^ d * ↑↑μH[↑r * d] s
[PROOFSTEP]
simp only [hausdorffMeasure_apply, ENNReal.mul_iSup, ENNReal.mul_iInf_of_ne hCd0 hCd, ← ENNReal.tsum_mul_left]
[GOAL]
case inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
C r : ℝ≥0
f : X → Y
s t : Set X
h : HolderOnWith C r f s
hr : 0 < r
d : ℝ
hd : 0 ≤ d
hC0 : 0 < C
hCd0 : ↑C ^ d ≠ 0
hCd : ↑C ^ d ≠ ⊤
⊢ ⨆ (r : ℝ≥0∞) (_ : 0 < r),
      ⨅ (t : ℕ → Set Y) (_ : f '' s ⊆ ⋃ (n : ℕ), t n) (_ : ∀ (n : ℕ), diam (t n) ≤ r),
        ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), diam (t n) ^ d ≤
    ⨆ (i : ℝ≥0∞) (_ : 0 < i),
      ⨅ (i_1 : ℕ → Set X) (_ : s ⊆ ⋃ (n : ℕ), i_1 n) (_ : ∀ (n : ℕ), diam (i_1 n) ≤ i),
        ∑' (i : ℕ), ⨆ (_ : Set.Nonempty (i_1 i)), ↑C ^ d * diam (i_1 i) ^ (↑r * d)
[PROOFSTEP]
refine' iSup_le fun R => iSup_le fun hR => _
[GOAL]
case inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
C r : ℝ≥0
f : X → Y
s t : Set X
h : HolderOnWith C r f s
hr : 0 < r
d : ℝ
hd : 0 ≤ d
hC0 : 0 < C
hCd0 : ↑C ^ d ≠ 0
hCd : ↑C ^ d ≠ ⊤
R : ℝ≥0∞
hR : 0 < R
⊢ ⨅ (t : ℕ → Set Y) (_ : f '' s ⊆ ⋃ (n : ℕ), t n) (_ : ∀ (n : ℕ), diam (t n) ≤ R),
      ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), diam (t n) ^ d ≤
    ⨆ (i : ℝ≥0∞) (_ : 0 < i),
      ⨅ (i_1 : ℕ → Set X) (_ : s ⊆ ⋃ (n : ℕ), i_1 n) (_ : ∀ (n : ℕ), diam (i_1 n) ≤ i),
        ∑' (i : ℕ), ⨆ (_ : Set.Nonempty (i_1 i)), ↑C ^ d * diam (i_1 i) ^ (↑r * d)
[PROOFSTEP]
have : Tendsto (fun d : ℝ≥0∞ => (C : ℝ≥0∞) * d ^ (r : ℝ)) (𝓝 0) (𝓝 0) :=
  ENNReal.tendsto_const_mul_rpow_nhds_zero_of_pos ENNReal.coe_ne_top hr
[GOAL]
case inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
C r : ℝ≥0
f : X → Y
s t : Set X
h : HolderOnWith C r f s
hr : 0 < r
d : ℝ
hd : 0 ≤ d
hC0 : 0 < C
hCd0 : ↑C ^ d ≠ 0
hCd : ↑C ^ d ≠ ⊤
R : ℝ≥0∞
hR : 0 < R
this : Tendsto (fun d => ↑C * d ^ ↑r) (𝓝 0) (𝓝 0)
⊢ ⨅ (t : ℕ → Set Y) (_ : f '' s ⊆ ⋃ (n : ℕ), t n) (_ : ∀ (n : ℕ), diam (t n) ≤ R),
      ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), diam (t n) ^ d ≤
    ⨆ (i : ℝ≥0∞) (_ : 0 < i),
      ⨅ (i_1 : ℕ → Set X) (_ : s ⊆ ⋃ (n : ℕ), i_1 n) (_ : ∀ (n : ℕ), diam (i_1 n) ≤ i),
        ∑' (i : ℕ), ⨆ (_ : Set.Nonempty (i_1 i)), ↑C ^ d * diam (i_1 i) ^ (↑r * d)
[PROOFSTEP]
rcases ENNReal.nhds_zero_basis_Iic.eventually_iff.1 (this.eventually (gt_mem_nhds hR)) with ⟨δ, δ0, H⟩
[GOAL]
case inr.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
C r : ℝ≥0
f : X → Y
s t : Set X
h : HolderOnWith C r f s
hr : 0 < r
d : ℝ
hd : 0 ≤ d
hC0 : 0 < C
hCd0 : ↑C ^ d ≠ 0
hCd : ↑C ^ d ≠ ⊤
R : ℝ≥0∞
hR : 0 < R
this : Tendsto (fun d => ↑C * d ^ ↑r) (𝓝 0) (𝓝 0)
δ : ℝ≥0∞
δ0 : 0 < δ
H : ∀ ⦃x : ℝ≥0∞⦄, x ∈ Iic δ → ↑C * x ^ ↑r < R
⊢ ⨅ (t : ℕ → Set Y) (_ : f '' s ⊆ ⋃ (n : ℕ), t n) (_ : ∀ (n : ℕ), diam (t n) ≤ R),
      ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), diam (t n) ^ d ≤
    ⨆ (i : ℝ≥0∞) (_ : 0 < i),
      ⨅ (i_1 : ℕ → Set X) (_ : s ⊆ ⋃ (n : ℕ), i_1 n) (_ : ∀ (n : ℕ), diam (i_1 n) ≤ i),
        ∑' (i : ℕ), ⨆ (_ : Set.Nonempty (i_1 i)), ↑C ^ d * diam (i_1 i) ^ (↑r * d)
[PROOFSTEP]
refine'
  le_iSup₂_of_le δ δ0
    (iInf₂_mono' fun t hst =>
      ⟨fun n => f '' (t n ∩ s), _,
        iInf_mono' fun htδ => ⟨fun n => (h.ediam_image_inter_le (t n)).trans (H (htδ n)).le, _⟩⟩)
[GOAL]
case inr.intro.intro.refine'_1
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
C r : ℝ≥0
f : X → Y
s t✝ : Set X
h : HolderOnWith C r f s
hr : 0 < r
d : ℝ
hd : 0 ≤ d
hC0 : 0 < C
hCd0 : ↑C ^ d ≠ 0
hCd : ↑C ^ d ≠ ⊤
R : ℝ≥0∞
hR : 0 < R
this : Tendsto (fun d => ↑C * d ^ ↑r) (𝓝 0) (𝓝 0)
δ : ℝ≥0∞
δ0 : 0 < δ
H : ∀ ⦃x : ℝ≥0∞⦄, x ∈ Iic δ → ↑C * x ^ ↑r < R
t : ℕ → Set X
hst : s ⊆ ⋃ (n : ℕ), t n
⊢ f '' s ⊆ ⋃ (n : ℕ), (fun n => f '' (t n ∩ s)) n
[PROOFSTEP]
rw [← image_iUnion, ← iUnion_inter]
[GOAL]
case inr.intro.intro.refine'_1
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
C r : ℝ≥0
f : X → Y
s t✝ : Set X
h : HolderOnWith C r f s
hr : 0 < r
d : ℝ
hd : 0 ≤ d
hC0 : 0 < C
hCd0 : ↑C ^ d ≠ 0
hCd : ↑C ^ d ≠ ⊤
R : ℝ≥0∞
hR : 0 < R
this : Tendsto (fun d => ↑C * d ^ ↑r) (𝓝 0) (𝓝 0)
δ : ℝ≥0∞
δ0 : 0 < δ
H : ∀ ⦃x : ℝ≥0∞⦄, x ∈ Iic δ → ↑C * x ^ ↑r < R
t : ℕ → Set X
hst : s ⊆ ⋃ (n : ℕ), t n
⊢ f '' s ⊆ f '' ((⋃ (i : ℕ), t i) ∩ s)
[PROOFSTEP]
exact image_subset _ (subset_inter hst Subset.rfl)
[GOAL]
case inr.intro.intro.refine'_2
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
C r : ℝ≥0
f : X → Y
s t✝ : Set X
h : HolderOnWith C r f s
hr : 0 < r
d : ℝ
hd : 0 ≤ d
hC0 : 0 < C
hCd0 : ↑C ^ d ≠ 0
hCd : ↑C ^ d ≠ ⊤
R : ℝ≥0∞
hR : 0 < R
this : Tendsto (fun d => ↑C * d ^ ↑r) (𝓝 0) (𝓝 0)
δ : ℝ≥0∞
δ0 : 0 < δ
H : ∀ ⦃x : ℝ≥0∞⦄, x ∈ Iic δ → ↑C * x ^ ↑r < R
t : ℕ → Set X
hst : s ⊆ ⋃ (n : ℕ), t n
htδ : ∀ (n : ℕ), diam (t n) ≤ δ
⊢ ∑' (n : ℕ), ⨆ (_ : Set.Nonempty ((fun n => f '' (t n ∩ s)) n)), diam ((fun n => f '' (t n ∩ s)) n) ^ d ≤
    ∑' (i : ℕ), ⨆ (_ : Set.Nonempty (t i)), ↑C ^ d * diam (t i) ^ (↑r * d)
[PROOFSTEP]
refine' ENNReal.tsum_le_tsum fun n => _
[GOAL]
case inr.intro.intro.refine'_2
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
C r : ℝ≥0
f : X → Y
s t✝ : Set X
h : HolderOnWith C r f s
hr : 0 < r
d : ℝ
hd : 0 ≤ d
hC0 : 0 < C
hCd0 : ↑C ^ d ≠ 0
hCd : ↑C ^ d ≠ ⊤
R : ℝ≥0∞
hR : 0 < R
this : Tendsto (fun d => ↑C * d ^ ↑r) (𝓝 0) (𝓝 0)
δ : ℝ≥0∞
δ0 : 0 < δ
H : ∀ ⦃x : ℝ≥0∞⦄, x ∈ Iic δ → ↑C * x ^ ↑r < R
t : ℕ → Set X
hst : s ⊆ ⋃ (n : ℕ), t n
htδ : ∀ (n : ℕ), diam (t n) ≤ δ
n : ℕ
⊢ ⨆ (_ : Set.Nonempty ((fun n => f '' (t n ∩ s)) n)), diam ((fun n => f '' (t n ∩ s)) n) ^ d ≤
    ⨆ (_ : Set.Nonempty (t n)), ↑C ^ d * diam (t n) ^ (↑r * d)
[PROOFSTEP]
simp only [iSup_le_iff, nonempty_image_iff]
[GOAL]
case inr.intro.intro.refine'_2
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
C r : ℝ≥0
f : X → Y
s t✝ : Set X
h : HolderOnWith C r f s
hr : 0 < r
d : ℝ
hd : 0 ≤ d
hC0 : 0 < C
hCd0 : ↑C ^ d ≠ 0
hCd : ↑C ^ d ≠ ⊤
R : ℝ≥0∞
hR : 0 < R
this : Tendsto (fun d => ↑C * d ^ ↑r) (𝓝 0) (𝓝 0)
δ : ℝ≥0∞
δ0 : 0 < δ
H : ∀ ⦃x : ℝ≥0∞⦄, x ∈ Iic δ → ↑C * x ^ ↑r < R
t : ℕ → Set X
hst : s ⊆ ⋃ (n : ℕ), t n
htδ : ∀ (n : ℕ), diam (t n) ≤ δ
n : ℕ
⊢ Set.Nonempty (t n ∩ s) → diam (f '' (t n ∩ s)) ^ d ≤ ⨆ (_ : Set.Nonempty (t n)), ↑C ^ d * diam (t n) ^ (↑r * d)
[PROOFSTEP]
intro hft
[GOAL]
case inr.intro.intro.refine'_2
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
C r : ℝ≥0
f : X → Y
s t✝ : Set X
h : HolderOnWith C r f s
hr : 0 < r
d : ℝ
hd : 0 ≤ d
hC0 : 0 < C
hCd0 : ↑C ^ d ≠ 0
hCd : ↑C ^ d ≠ ⊤
R : ℝ≥0∞
hR : 0 < R
this : Tendsto (fun d => ↑C * d ^ ↑r) (𝓝 0) (𝓝 0)
δ : ℝ≥0∞
δ0 : 0 < δ
H : ∀ ⦃x : ℝ≥0∞⦄, x ∈ Iic δ → ↑C * x ^ ↑r < R
t : ℕ → Set X
hst : s ⊆ ⋃ (n : ℕ), t n
htδ : ∀ (n : ℕ), diam (t n) ≤ δ
n : ℕ
hft : Set.Nonempty (t n ∩ s)
⊢ diam (f '' (t n ∩ s)) ^ d ≤ ⨆ (_ : Set.Nonempty (t n)), ↑C ^ d * diam (t n) ^ (↑r * d)
[PROOFSTEP]
simp only [Nonempty.mono ((t n).inter_subset_left s) hft, ciSup_pos]
[GOAL]
case inr.intro.intro.refine'_2
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
C r : ℝ≥0
f : X → Y
s t✝ : Set X
h : HolderOnWith C r f s
hr : 0 < r
d : ℝ
hd : 0 ≤ d
hC0 : 0 < C
hCd0 : ↑C ^ d ≠ 0
hCd : ↑C ^ d ≠ ⊤
R : ℝ≥0∞
hR : 0 < R
this : Tendsto (fun d => ↑C * d ^ ↑r) (𝓝 0) (𝓝 0)
δ : ℝ≥0∞
δ0 : 0 < δ
H : ∀ ⦃x : ℝ≥0∞⦄, x ∈ Iic δ → ↑C * x ^ ↑r < R
t : ℕ → Set X
hst : s ⊆ ⋃ (n : ℕ), t n
htδ : ∀ (n : ℕ), diam (t n) ≤ δ
n : ℕ
hft : Set.Nonempty (t n ∩ s)
⊢ diam (f '' (t n ∩ s)) ^ d ≤ ↑C ^ d * diam (t n) ^ (↑r * d)
[PROOFSTEP]
rw [ENNReal.rpow_mul, ← ENNReal.mul_rpow_of_nonneg _ _ hd]
[GOAL]
case inr.intro.intro.refine'_2
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
C r : ℝ≥0
f : X → Y
s t✝ : Set X
h : HolderOnWith C r f s
hr : 0 < r
d : ℝ
hd : 0 ≤ d
hC0 : 0 < C
hCd0 : ↑C ^ d ≠ 0
hCd : ↑C ^ d ≠ ⊤
R : ℝ≥0∞
hR : 0 < R
this : Tendsto (fun d => ↑C * d ^ ↑r) (𝓝 0) (𝓝 0)
δ : ℝ≥0∞
δ0 : 0 < δ
H : ∀ ⦃x : ℝ≥0∞⦄, x ∈ Iic δ → ↑C * x ^ ↑r < R
t : ℕ → Set X
hst : s ⊆ ⋃ (n : ℕ), t n
htδ : ∀ (n : ℕ), diam (t n) ≤ δ
n : ℕ
hft : Set.Nonempty (t n ∩ s)
⊢ diam (f '' (t n ∩ s)) ^ d ≤ (↑C * diam (t n) ^ ↑r) ^ d
[PROOFSTEP]
exact ENNReal.rpow_le_rpow (h.ediam_image_inter_le _) hd
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
K : ℝ≥0
f : X → Y
s t : Set X
h : LipschitzOnWith K f s
d : ℝ
hd : 0 ≤ d
⊢ ↑↑μH[d] (f '' s) ≤ ↑K ^ d * ↑↑μH[d] s
[PROOFSTEP]
simpa only [NNReal.coe_one, one_mul] using h.holderOnWith.hausdorffMeasure_image_le zero_lt_one hd
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹⁰ : EMetricSpace X
inst✝⁹ : EMetricSpace Y
inst✝⁸ : MeasurableSpace X
inst✝⁷ : BorelSpace X
inst✝⁶ : MeasurableSpace Y
inst✝⁵ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedField 𝕜
inst✝² : NormedSpace 𝕜 E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
d : ℝ
hd : 0 ≤ d
r : 𝕜
hr : r ≠ 0
s : Set E
⊢ ↑↑μH[d] (r • s) = NNReal.rpow ‖r‖₊ d • ↑↑μH[d] s
[PROOFSTEP]
suffices ∀ {r : 𝕜}, r ≠ 0 → ∀ s : Set E, μH[d] (r • s) ≤ NNReal.rpow ‖r‖₊ d • μH[d] s
  by
  refine' le_antisymm (this hr s) _
  rw [← ENNReal.le_inv_smul_iff]
  dsimp
  rw [← NNReal.inv_rpow, ← nnnorm_inv]
  · refine' Eq.trans_le _ (this (inv_ne_zero hr) (r • s))
    rw [inv_smul_smul₀ hr]
  · simp [hr]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹⁰ : EMetricSpace X
inst✝⁹ : EMetricSpace Y
inst✝⁸ : MeasurableSpace X
inst✝⁷ : BorelSpace X
inst✝⁶ : MeasurableSpace Y
inst✝⁵ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedField 𝕜
inst✝² : NormedSpace 𝕜 E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
d : ℝ
hd : 0 ≤ d
r : 𝕜
hr : r ≠ 0
s : Set E
this : ∀ {r : 𝕜}, r ≠ 0 → ∀ (s : Set E), ↑↑μH[d] (r • s) ≤ NNReal.rpow ‖r‖₊ d • ↑↑μH[d] s
⊢ ↑↑μH[d] (r • s) = NNReal.rpow ‖r‖₊ d • ↑↑μH[d] s
[PROOFSTEP]
refine' le_antisymm (this hr s) _
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹⁰ : EMetricSpace X
inst✝⁹ : EMetricSpace Y
inst✝⁸ : MeasurableSpace X
inst✝⁷ : BorelSpace X
inst✝⁶ : MeasurableSpace Y
inst✝⁵ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedField 𝕜
inst✝² : NormedSpace 𝕜 E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
d : ℝ
hd : 0 ≤ d
r : 𝕜
hr : r ≠ 0
s : Set E
this : ∀ {r : 𝕜}, r ≠ 0 → ∀ (s : Set E), ↑↑μH[d] (r • s) ≤ NNReal.rpow ‖r‖₊ d • ↑↑μH[d] s
⊢ NNReal.rpow ‖r‖₊ d • ↑↑μH[d] s ≤ ↑↑μH[d] (r • s)
[PROOFSTEP]
rw [← ENNReal.le_inv_smul_iff]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹⁰ : EMetricSpace X
inst✝⁹ : EMetricSpace Y
inst✝⁸ : MeasurableSpace X
inst✝⁷ : BorelSpace X
inst✝⁶ : MeasurableSpace Y
inst✝⁵ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedField 𝕜
inst✝² : NormedSpace 𝕜 E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
d : ℝ
hd : 0 ≤ d
r : 𝕜
hr : r ≠ 0
s : Set E
this : ∀ {r : 𝕜}, r ≠ 0 → ∀ (s : Set E), ↑↑μH[d] (r • s) ≤ NNReal.rpow ‖r‖₊ d • ↑↑μH[d] s
⊢ ↑↑μH[d] s ≤ (NNReal.rpow ‖r‖₊ d)⁻¹ • ↑↑μH[d] (r • s)
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹⁰ : EMetricSpace X
inst✝⁹ : EMetricSpace Y
inst✝⁸ : MeasurableSpace X
inst✝⁷ : BorelSpace X
inst✝⁶ : MeasurableSpace Y
inst✝⁵ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedField 𝕜
inst✝² : NormedSpace 𝕜 E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
d : ℝ
hd : 0 ≤ d
r : 𝕜
hr : r ≠ 0
s : Set E
this : ∀ {r : 𝕜}, r ≠ 0 → ∀ (s : Set E), ↑↑μH[d] (r • s) ≤ NNReal.rpow ‖r‖₊ d • ↑↑μH[d] s
⊢ NNReal.rpow ‖r‖₊ d ≠ 0
[PROOFSTEP]
dsimp
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹⁰ : EMetricSpace X
inst✝⁹ : EMetricSpace Y
inst✝⁸ : MeasurableSpace X
inst✝⁷ : BorelSpace X
inst✝⁶ : MeasurableSpace Y
inst✝⁵ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedField 𝕜
inst✝² : NormedSpace 𝕜 E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
d : ℝ
hd : 0 ≤ d
r : 𝕜
hr : r ≠ 0
s : Set E
this : ∀ {r : 𝕜}, r ≠ 0 → ∀ (s : Set E), ↑↑μH[d] (r • s) ≤ NNReal.rpow ‖r‖₊ d • ↑↑μH[d] s
⊢ ↑↑μH[d] s ≤ ↑(‖r‖₊ ^ d)⁻¹ * ↑↑μH[d] (r • s)
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹⁰ : EMetricSpace X
inst✝⁹ : EMetricSpace Y
inst✝⁸ : MeasurableSpace X
inst✝⁷ : BorelSpace X
inst✝⁶ : MeasurableSpace Y
inst✝⁵ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedField 𝕜
inst✝² : NormedSpace 𝕜 E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
d : ℝ
hd : 0 ≤ d
r : 𝕜
hr : r ≠ 0
s : Set E
this : ∀ {r : 𝕜}, r ≠ 0 → ∀ (s : Set E), ↑↑μH[d] (r • s) ≤ NNReal.rpow ‖r‖₊ d • ↑↑μH[d] s
⊢ NNReal.rpow ‖r‖₊ d ≠ 0
[PROOFSTEP]
rw [← NNReal.inv_rpow, ← nnnorm_inv]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹⁰ : EMetricSpace X
inst✝⁹ : EMetricSpace Y
inst✝⁸ : MeasurableSpace X
inst✝⁷ : BorelSpace X
inst✝⁶ : MeasurableSpace Y
inst✝⁵ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedField 𝕜
inst✝² : NormedSpace 𝕜 E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
d : ℝ
hd : 0 ≤ d
r : 𝕜
hr : r ≠ 0
s : Set E
this : ∀ {r : 𝕜}, r ≠ 0 → ∀ (s : Set E), ↑↑μH[d] (r • s) ≤ NNReal.rpow ‖r‖₊ d • ↑↑μH[d] s
⊢ ↑↑μH[d] s ≤ ↑(‖r⁻¹‖₊ ^ d) * ↑↑μH[d] (r • s)
[PROOFSTEP]
refine' Eq.trans_le _ (this (inv_ne_zero hr) (r • s))
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹⁰ : EMetricSpace X
inst✝⁹ : EMetricSpace Y
inst✝⁸ : MeasurableSpace X
inst✝⁷ : BorelSpace X
inst✝⁶ : MeasurableSpace Y
inst✝⁵ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedField 𝕜
inst✝² : NormedSpace 𝕜 E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
d : ℝ
hd : 0 ≤ d
r : 𝕜
hr : r ≠ 0
s : Set E
this : ∀ {r : 𝕜}, r ≠ 0 → ∀ (s : Set E), ↑↑μH[d] (r • s) ≤ NNReal.rpow ‖r‖₊ d • ↑↑μH[d] s
⊢ ↑↑μH[d] s = ↑↑μH[d] (r⁻¹ • r • s)
[PROOFSTEP]
rw [inv_smul_smul₀ hr]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹⁰ : EMetricSpace X
inst✝⁹ : EMetricSpace Y
inst✝⁸ : MeasurableSpace X
inst✝⁷ : BorelSpace X
inst✝⁶ : MeasurableSpace Y
inst✝⁵ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedField 𝕜
inst✝² : NormedSpace 𝕜 E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
d : ℝ
hd : 0 ≤ d
r : 𝕜
hr : r ≠ 0
s : Set E
this : ∀ {r : 𝕜}, r ≠ 0 → ∀ (s : Set E), ↑↑μH[d] (r • s) ≤ NNReal.rpow ‖r‖₊ d • ↑↑μH[d] s
⊢ NNReal.rpow ‖r‖₊ d ≠ 0
[PROOFSTEP]
simp [hr]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹⁰ : EMetricSpace X
inst✝⁹ : EMetricSpace Y
inst✝⁸ : MeasurableSpace X
inst✝⁷ : BorelSpace X
inst✝⁶ : MeasurableSpace Y
inst✝⁵ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedField 𝕜
inst✝² : NormedSpace 𝕜 E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
d : ℝ
hd : 0 ≤ d
r : 𝕜
hr : r ≠ 0
s : Set E
⊢ ∀ {r : 𝕜}, r ≠ 0 → ∀ (s : Set E), ↑↑μH[d] (r • s) ≤ NNReal.rpow ‖r‖₊ d • ↑↑μH[d] s
[PROOFSTEP]
intro r _ s
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹⁰ : EMetricSpace X
inst✝⁹ : EMetricSpace Y
inst✝⁸ : MeasurableSpace X
inst✝⁷ : BorelSpace X
inst✝⁶ : MeasurableSpace Y
inst✝⁵ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedField 𝕜
inst✝² : NormedSpace 𝕜 E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
d : ℝ
hd : 0 ≤ d
r✝ : 𝕜
hr : r✝ ≠ 0
s✝ : Set E
r : 𝕜
a✝ : r ≠ 0
s : Set E
⊢ ↑↑μH[d] (r • s) ≤ NNReal.rpow ‖r‖₊ d • ↑↑μH[d] s
[PROOFSTEP]
simp only [NNReal.rpow_eq_pow, ENNReal.smul_def, ← ENNReal.coe_rpow_of_nonneg _ hd, smul_eq_mul]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹⁰ : EMetricSpace X
inst✝⁹ : EMetricSpace Y
inst✝⁸ : MeasurableSpace X
inst✝⁷ : BorelSpace X
inst✝⁶ : MeasurableSpace Y
inst✝⁵ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedField 𝕜
inst✝² : NormedSpace 𝕜 E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
d : ℝ
hd : 0 ≤ d
r✝ : 𝕜
hr : r✝ ≠ 0
s✝ : Set E
r : 𝕜
a✝ : r ≠ 0
s : Set E
⊢ ↑↑μH[d] (r • s) ≤ ↑‖r‖₊ ^ d * ↑↑μH[d] s
[PROOFSTEP]
exact (lipschitzWith_smul (β := E) r).hausdorffMeasure_image_le hd s
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
K : ℝ≥0
d : ℝ
hf : AntilipschitzWith K f
hd : 0 ≤ d
s : Set Y
⊢ ↑↑μH[d] (f ⁻¹' s) ≤ ↑K ^ d * ↑↑μH[d] s
[PROOFSTEP]
rcases eq_or_ne K 0 with (rfl | h0)
[GOAL]
case inl
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
d : ℝ
hd : 0 ≤ d
s : Set Y
hf : AntilipschitzWith 0 f
⊢ ↑↑μH[d] (f ⁻¹' s) ≤ ↑0 ^ d * ↑↑μH[d] s
[PROOFSTEP]
rcases eq_empty_or_nonempty (f ⁻¹' s) with (hs | ⟨x, hx⟩)
[GOAL]
case inl.inl
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
d : ℝ
hd : 0 ≤ d
s : Set Y
hf : AntilipschitzWith 0 f
hs : f ⁻¹' s = ∅
⊢ ↑↑μH[d] (f ⁻¹' s) ≤ ↑0 ^ d * ↑↑μH[d] s
[PROOFSTEP]
simp only [hs, measure_empty, zero_le]
[GOAL]
case inl.inr.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
d : ℝ
hd : 0 ≤ d
s : Set Y
hf : AntilipschitzWith 0 f
x : X
hx : x ∈ f ⁻¹' s
⊢ ↑↑μH[d] (f ⁻¹' s) ≤ ↑0 ^ d * ↑↑μH[d] s
[PROOFSTEP]
have : f ⁻¹' s = { x } := by
  haveI : Subsingleton X := hf.subsingleton
  have : (f ⁻¹' s).Subsingleton := subsingleton_univ.anti (subset_univ _)
  exact (subsingleton_iff_singleton hx).1 this
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
d : ℝ
hd : 0 ≤ d
s : Set Y
hf : AntilipschitzWith 0 f
x : X
hx : x ∈ f ⁻¹' s
⊢ f ⁻¹' s = {x}
[PROOFSTEP]
haveI : Subsingleton X := hf.subsingleton
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
d : ℝ
hd : 0 ≤ d
s : Set Y
hf : AntilipschitzWith 0 f
x : X
hx : x ∈ f ⁻¹' s
this : Subsingleton X
⊢ f ⁻¹' s = {x}
[PROOFSTEP]
have : (f ⁻¹' s).Subsingleton := subsingleton_univ.anti (subset_univ _)
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
d : ℝ
hd : 0 ≤ d
s : Set Y
hf : AntilipschitzWith 0 f
x : X
hx : x ∈ f ⁻¹' s
this✝ : Subsingleton X
this : Set.Subsingleton (f ⁻¹' s)
⊢ f ⁻¹' s = {x}
[PROOFSTEP]
exact (subsingleton_iff_singleton hx).1 this
[GOAL]
case inl.inr.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
d : ℝ
hd : 0 ≤ d
s : Set Y
hf : AntilipschitzWith 0 f
x : X
hx : x ∈ f ⁻¹' s
this : f ⁻¹' s = {x}
⊢ ↑↑μH[d] (f ⁻¹' s) ≤ ↑0 ^ d * ↑↑μH[d] s
[PROOFSTEP]
rw [this]
[GOAL]
case inl.inr.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
d : ℝ
hd : 0 ≤ d
s : Set Y
hf : AntilipschitzWith 0 f
x : X
hx : x ∈ f ⁻¹' s
this : f ⁻¹' s = {x}
⊢ ↑↑μH[d] {x} ≤ ↑0 ^ d * ↑↑μH[d] s
[PROOFSTEP]
rcases eq_or_lt_of_le hd with (rfl | h'd)
[GOAL]
case inl.inr.intro.inl
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
s : Set Y
hf : AntilipschitzWith 0 f
x : X
hx : x ∈ f ⁻¹' s
this : f ⁻¹' s = {x}
hd : 0 ≤ 0
⊢ ↑↑μH[0] {x} ≤ ↑0 ^ 0 * ↑↑μH[0] s
[PROOFSTEP]
simp only [ENNReal.rpow_zero, one_mul, mul_zero]
[GOAL]
case inl.inr.intro.inl
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
s : Set Y
hf : AntilipschitzWith 0 f
x : X
hx : x ∈ f ⁻¹' s
this : f ⁻¹' s = {x}
hd : 0 ≤ 0
⊢ ↑↑μH[0] {x} ≤ ↑↑μH[0] s
[PROOFSTEP]
rw [hausdorffMeasure_zero_singleton]
[GOAL]
case inl.inr.intro.inl
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
s : Set Y
hf : AntilipschitzWith 0 f
x : X
hx : x ∈ f ⁻¹' s
this : f ⁻¹' s = {x}
hd : 0 ≤ 0
⊢ 1 ≤ ↑↑μH[0] s
[PROOFSTEP]
exact one_le_hausdorffMeasure_zero_of_nonempty ⟨f x, hx⟩
[GOAL]
case inl.inr.intro.inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
d : ℝ
hd : 0 ≤ d
s : Set Y
hf : AntilipschitzWith 0 f
x : X
hx : x ∈ f ⁻¹' s
this : f ⁻¹' s = {x}
h'd : 0 < d
⊢ ↑↑μH[d] {x} ≤ ↑0 ^ d * ↑↑μH[d] s
[PROOFSTEP]
haveI := noAtoms_hausdorff X h'd
[GOAL]
case inl.inr.intro.inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
d : ℝ
hd : 0 ≤ d
s : Set Y
hf : AntilipschitzWith 0 f
x : X
hx : x ∈ f ⁻¹' s
this✝ : f ⁻¹' s = {x}
h'd : 0 < d
this : NoAtoms μH[d]
⊢ ↑↑μH[d] {x} ≤ ↑0 ^ d * ↑↑μH[d] s
[PROOFSTEP]
simp only [zero_le, measure_singleton]
[GOAL]
case inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
K : ℝ≥0
d : ℝ
hf : AntilipschitzWith K f
hd : 0 ≤ d
s : Set Y
h0 : K ≠ 0
⊢ ↑↑μH[d] (f ⁻¹' s) ≤ ↑K ^ d * ↑↑μH[d] s
[PROOFSTEP]
have hKd0 : (K : ℝ≥0∞) ^ d ≠ 0 := by simp [h0]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
K : ℝ≥0
d : ℝ
hf : AntilipschitzWith K f
hd : 0 ≤ d
s : Set Y
h0 : K ≠ 0
⊢ ↑K ^ d ≠ 0
[PROOFSTEP]
simp [h0]
[GOAL]
case inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
K : ℝ≥0
d : ℝ
hf : AntilipschitzWith K f
hd : 0 ≤ d
s : Set Y
h0 : K ≠ 0
hKd0 : ↑K ^ d ≠ 0
⊢ ↑↑μH[d] (f ⁻¹' s) ≤ ↑K ^ d * ↑↑μH[d] s
[PROOFSTEP]
have hKd : (K : ℝ≥0∞) ^ d ≠ ∞ := by simp [hd]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
K : ℝ≥0
d : ℝ
hf : AntilipschitzWith K f
hd : 0 ≤ d
s : Set Y
h0 : K ≠ 0
hKd0 : ↑K ^ d ≠ 0
⊢ ↑K ^ d ≠ ⊤
[PROOFSTEP]
simp [hd]
[GOAL]
case inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
K : ℝ≥0
d : ℝ
hf : AntilipschitzWith K f
hd : 0 ≤ d
s : Set Y
h0 : K ≠ 0
hKd0 : ↑K ^ d ≠ 0
hKd : ↑K ^ d ≠ ⊤
⊢ ↑↑μH[d] (f ⁻¹' s) ≤ ↑K ^ d * ↑↑μH[d] s
[PROOFSTEP]
simp only [hausdorffMeasure_apply, ENNReal.mul_iSup, ENNReal.mul_iInf_of_ne hKd0 hKd, ← ENNReal.tsum_mul_left]
[GOAL]
case inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
K : ℝ≥0
d : ℝ
hf : AntilipschitzWith K f
hd : 0 ≤ d
s : Set Y
h0 : K ≠ 0
hKd0 : ↑K ^ d ≠ 0
hKd : ↑K ^ d ≠ ⊤
⊢ ⨆ (r : ℝ≥0∞) (_ : 0 < r),
      ⨅ (t : ℕ → Set X) (_ : f ⁻¹' s ⊆ ⋃ (n : ℕ), t n) (_ : ∀ (n : ℕ), diam (t n) ≤ r),
        ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), diam (t n) ^ d ≤
    ⨆ (i : ℝ≥0∞) (_ : 0 < i),
      ⨅ (i_1 : ℕ → Set Y) (_ : s ⊆ ⋃ (n : ℕ), i_1 n) (_ : ∀ (n : ℕ), diam (i_1 n) ≤ i),
        ∑' (i : ℕ), ⨆ (_ : Set.Nonempty (i_1 i)), ↑K ^ d * diam (i_1 i) ^ d
[PROOFSTEP]
refine' iSup₂_le fun ε ε0 => _
[GOAL]
case inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
K : ℝ≥0
d : ℝ
hf : AntilipschitzWith K f
hd : 0 ≤ d
s : Set Y
h0 : K ≠ 0
hKd0 : ↑K ^ d ≠ 0
hKd : ↑K ^ d ≠ ⊤
ε : ℝ≥0∞
ε0 : 0 < ε
⊢ ⨅ (t : ℕ → Set X) (_ : f ⁻¹' s ⊆ ⋃ (n : ℕ), t n) (_ : ∀ (n : ℕ), diam (t n) ≤ ε),
      ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), diam (t n) ^ d ≤
    ⨆ (i : ℝ≥0∞) (_ : 0 < i),
      ⨅ (i_1 : ℕ → Set Y) (_ : s ⊆ ⋃ (n : ℕ), i_1 n) (_ : ∀ (n : ℕ), diam (i_1 n) ≤ i),
        ∑' (i : ℕ), ⨆ (_ : Set.Nonempty (i_1 i)), ↑K ^ d * diam (i_1 i) ^ d
[PROOFSTEP]
refine' le_iSup₂_of_le (ε / K) (by simp [ε0.ne']) _
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
K : ℝ≥0
d : ℝ
hf : AntilipschitzWith K f
hd : 0 ≤ d
s : Set Y
h0 : K ≠ 0
hKd0 : ↑K ^ d ≠ 0
hKd : ↑K ^ d ≠ ⊤
ε : ℝ≥0∞
ε0 : 0 < ε
⊢ 0 < ε / ↑K
[PROOFSTEP]
simp [ε0.ne']
[GOAL]
case inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
K : ℝ≥0
d : ℝ
hf : AntilipschitzWith K f
hd : 0 ≤ d
s : Set Y
h0 : K ≠ 0
hKd0 : ↑K ^ d ≠ 0
hKd : ↑K ^ d ≠ ⊤
ε : ℝ≥0∞
ε0 : 0 < ε
⊢ ⨅ (t : ℕ → Set X) (_ : f ⁻¹' s ⊆ ⋃ (n : ℕ), t n) (_ : ∀ (n : ℕ), diam (t n) ≤ ε),
      ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), diam (t n) ^ d ≤
    ⨅ (i : ℕ → Set Y) (_ : s ⊆ ⋃ (n : ℕ), i n) (_ : ∀ (n : ℕ), diam (i n) ≤ ε / ↑K),
      ∑' (i_1 : ℕ), ⨆ (_ : Set.Nonempty (i i_1)), ↑K ^ d * diam (i i_1) ^ d
[PROOFSTEP]
refine' le_iInf₂ fun t hst => le_iInf fun htε => _
[GOAL]
case inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
K : ℝ≥0
d : ℝ
hf : AntilipschitzWith K f
hd : 0 ≤ d
s : Set Y
h0 : K ≠ 0
hKd0 : ↑K ^ d ≠ 0
hKd : ↑K ^ d ≠ ⊤
ε : ℝ≥0∞
ε0 : 0 < ε
t : ℕ → Set Y
hst : s ⊆ ⋃ (n : ℕ), t n
htε : ∀ (n : ℕ), diam (t n) ≤ ε / ↑K
⊢ ⨅ (t : ℕ → Set X) (_ : f ⁻¹' s ⊆ ⋃ (n : ℕ), t n) (_ : ∀ (n : ℕ), diam (t n) ≤ ε),
      ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), diam (t n) ^ d ≤
    ∑' (i : ℕ), ⨆ (_ : Set.Nonempty (t i)), ↑K ^ d * diam (t i) ^ d
[PROOFSTEP]
replace hst : f ⁻¹' s ⊆ _ := preimage_mono hst
[GOAL]
case inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
K : ℝ≥0
d : ℝ
hf : AntilipschitzWith K f
hd : 0 ≤ d
s : Set Y
h0 : K ≠ 0
hKd0 : ↑K ^ d ≠ 0
hKd : ↑K ^ d ≠ ⊤
ε : ℝ≥0∞
ε0 : 0 < ε
t : ℕ → Set Y
htε : ∀ (n : ℕ), diam (t n) ≤ ε / ↑K
hst : f ⁻¹' s ⊆ f ⁻¹' ⋃ (n : ℕ), t n
⊢ ⨅ (t : ℕ → Set X) (_ : f ⁻¹' s ⊆ ⋃ (n : ℕ), t n) (_ : ∀ (n : ℕ), diam (t n) ≤ ε),
      ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), diam (t n) ^ d ≤
    ∑' (i : ℕ), ⨆ (_ : Set.Nonempty (t i)), ↑K ^ d * diam (t i) ^ d
[PROOFSTEP]
rw [preimage_iUnion] at hst
[GOAL]
case inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
K : ℝ≥0
d : ℝ
hf : AntilipschitzWith K f
hd : 0 ≤ d
s : Set Y
h0 : K ≠ 0
hKd0 : ↑K ^ d ≠ 0
hKd : ↑K ^ d ≠ ⊤
ε : ℝ≥0∞
ε0 : 0 < ε
t : ℕ → Set Y
htε : ∀ (n : ℕ), diam (t n) ≤ ε / ↑K
hst : f ⁻¹' s ⊆ ⋃ (i : ℕ), f ⁻¹' t i
⊢ ⨅ (t : ℕ → Set X) (_ : f ⁻¹' s ⊆ ⋃ (n : ℕ), t n) (_ : ∀ (n : ℕ), diam (t n) ≤ ε),
      ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (t n)), diam (t n) ^ d ≤
    ∑' (i : ℕ), ⨆ (_ : Set.Nonempty (t i)), ↑K ^ d * diam (t i) ^ d
[PROOFSTEP]
refine' iInf₂_le_of_le _ hst (iInf_le_of_le (fun n => _) _)
[GOAL]
case inr.refine'_1
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
K : ℝ≥0
d : ℝ
hf : AntilipschitzWith K f
hd : 0 ≤ d
s : Set Y
h0 : K ≠ 0
hKd0 : ↑K ^ d ≠ 0
hKd : ↑K ^ d ≠ ⊤
ε : ℝ≥0∞
ε0 : 0 < ε
t : ℕ → Set Y
htε : ∀ (n : ℕ), diam (t n) ≤ ε / ↑K
hst : f ⁻¹' s ⊆ ⋃ (i : ℕ), f ⁻¹' t i
n : ℕ
⊢ diam (f ⁻¹' t n) ≤ ε
[PROOFSTEP]
exact (hf.ediam_preimage_le _).trans (ENNReal.mul_le_of_le_div' <| htε n)
[GOAL]
case inr.refine'_2
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
K : ℝ≥0
d : ℝ
hf : AntilipschitzWith K f
hd : 0 ≤ d
s : Set Y
h0 : K ≠ 0
hKd0 : ↑K ^ d ≠ 0
hKd : ↑K ^ d ≠ ⊤
ε : ℝ≥0∞
ε0 : 0 < ε
t : ℕ → Set Y
htε : ∀ (n : ℕ), diam (t n) ≤ ε / ↑K
hst : f ⁻¹' s ⊆ ⋃ (i : ℕ), f ⁻¹' t i
⊢ ∑' (n : ℕ), ⨆ (_ : Set.Nonempty (f ⁻¹' t n)), diam (f ⁻¹' t n) ^ d ≤
    ∑' (i : ℕ), ⨆ (_ : Set.Nonempty (t i)), ↑K ^ d * diam (t i) ^ d
[PROOFSTEP]
refine' ENNReal.tsum_le_tsum fun n => iSup_le_iff.2 fun hft => _
[GOAL]
case inr.refine'_2
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
K : ℝ≥0
d : ℝ
hf : AntilipschitzWith K f
hd : 0 ≤ d
s : Set Y
h0 : K ≠ 0
hKd0 : ↑K ^ d ≠ 0
hKd : ↑K ^ d ≠ ⊤
ε : ℝ≥0∞
ε0 : 0 < ε
t : ℕ → Set Y
htε : ∀ (n : ℕ), diam (t n) ≤ ε / ↑K
hst : f ⁻¹' s ⊆ ⋃ (i : ℕ), f ⁻¹' t i
n : ℕ
hft : Set.Nonempty (f ⁻¹' t n)
⊢ diam (f ⁻¹' t n) ^ d ≤ ⨆ (_ : Set.Nonempty (t n)), ↑K ^ d * diam (t n) ^ d
[PROOFSTEP]
simp only [nonempty_of_nonempty_preimage hft, ciSup_pos]
[GOAL]
case inr.refine'_2
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
K : ℝ≥0
d : ℝ
hf : AntilipschitzWith K f
hd : 0 ≤ d
s : Set Y
h0 : K ≠ 0
hKd0 : ↑K ^ d ≠ 0
hKd : ↑K ^ d ≠ ⊤
ε : ℝ≥0∞
ε0 : 0 < ε
t : ℕ → Set Y
htε : ∀ (n : ℕ), diam (t n) ≤ ε / ↑K
hst : f ⁻¹' s ⊆ ⋃ (i : ℕ), f ⁻¹' t i
n : ℕ
hft : Set.Nonempty (f ⁻¹' t n)
⊢ diam (f ⁻¹' t n) ^ d ≤ ↑K ^ d * diam (t n) ^ d
[PROOFSTEP]
rw [← ENNReal.mul_rpow_of_nonneg _ _ hd]
[GOAL]
case inr.refine'_2
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
K : ℝ≥0
d : ℝ
hf : AntilipschitzWith K f
hd : 0 ≤ d
s : Set Y
h0 : K ≠ 0
hKd0 : ↑K ^ d ≠ 0
hKd : ↑K ^ d ≠ ⊤
ε : ℝ≥0∞
ε0 : 0 < ε
t : ℕ → Set Y
htε : ∀ (n : ℕ), diam (t n) ≤ ε / ↑K
hst : f ⁻¹' s ⊆ ⋃ (i : ℕ), f ⁻¹' t i
n : ℕ
hft : Set.Nonempty (f ⁻¹' t n)
⊢ diam (f ⁻¹' t n) ^ d ≤ (↑K * diam (t n)) ^ d
[PROOFSTEP]
exact ENNReal.rpow_le_rpow (hf.ediam_preimage_le _) hd
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
d : ℝ
hf : Isometry f
hd : 0 ≤ d ∨ Surjective f
s : Set X
⊢ ↑↑μH[d] (f '' s) = ↑↑μH[d] s
[PROOFSTEP]
simp only [hausdorffMeasure, ← OuterMeasure.coe_mkMetric, ← OuterMeasure.comap_apply]
  -- porting note: this proof was slightly nicer before the port
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
d : ℝ
hf : Isometry f
hd : 0 ≤ d ∨ Surjective f
s : Set X
⊢ ↑(↑(OuterMeasure.comap f) ↑(mkMetric fun r => r ^ d)) s = ↑(OuterMeasure.mkMetric fun r => r ^ d) s
[PROOFSTEP]
simp only [mkMetric_toOuterMeasure]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
d : ℝ
hf : Isometry f
hd : 0 ≤ d ∨ Surjective f
s : Set X
⊢ ↑(↑(OuterMeasure.comap f) (OuterMeasure.mkMetric fun r => r ^ d)) s = ↑(OuterMeasure.mkMetric fun r => r ^ d) s
[PROOFSTEP]
have : 0 ≤ d → Monotone fun r ↦ @HPow.hPow ℝ≥0∞ ℝ ℝ≥0∞ instHPow r d := by
  exact fun hd x y hxy => ENNReal.rpow_le_rpow hxy hd
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
d : ℝ
hf : Isometry f
hd : 0 ≤ d ∨ Surjective f
s : Set X
⊢ 0 ≤ d → Monotone fun r => r ^ d
[PROOFSTEP]
exact fun hd x y hxy => ENNReal.rpow_le_rpow hxy hd
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
d : ℝ
hf : Isometry f
hd : 0 ≤ d ∨ Surjective f
s : Set X
this : 0 ≤ d → Monotone fun r => r ^ d
⊢ ↑(↑(OuterMeasure.comap f) (OuterMeasure.mkMetric fun r => r ^ d)) s = ↑(OuterMeasure.mkMetric fun r => r ^ d) s
[PROOFSTEP]
have := OuterMeasure.isometry_comap_mkMetric (fun (r : ℝ≥0∞) => r ^ d) hf (hd.imp_left this)
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
d : ℝ
hf : Isometry f
hd : 0 ≤ d ∨ Surjective f
s : Set X
this✝ : 0 ≤ d → Monotone fun r => r ^ d
this : ↑(OuterMeasure.comap f) (OuterMeasure.mkMetric fun r => r ^ d) = OuterMeasure.mkMetric fun r => r ^ d
⊢ ↑(↑(OuterMeasure.comap f) (OuterMeasure.mkMetric fun r => r ^ d)) s = ↑(OuterMeasure.mkMetric fun r => r ^ d) s
[PROOFSTEP]
congr
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
d : ℝ
hf : Isometry f
hd : 0 ≤ d ∨ Surjective f
s : Set Y
⊢ ↑↑μH[d] (f ⁻¹' s) = ↑↑μH[d] (s ∩ range f)
[PROOFSTEP]
rw [← hf.hausdorffMeasure_image hd, image_preimage_eq_inter_range]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
d : ℝ
hf : Isometry f
hd : 0 ≤ d ∨ Surjective f
⊢ Measure.map f μH[d] = Measure.restrict μH[d] (range f)
[PROOFSTEP]
ext1 s hs
[GOAL]
case h
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
f : X → Y
d : ℝ
hf : Isometry f
hd : 0 ≤ d ∨ Surjective f
s : Set Y
hs : MeasurableSet s
⊢ ↑↑(Measure.map f μH[d]) s = ↑↑(Measure.restrict μH[d] (range f)) s
[PROOFSTEP]
rw [map_apply hf.continuous.measurable hs, Measure.restrict_apply hs, hf.hausdorffMeasure_preimage hd]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
e : X ≃ᵢ Y
d : ℝ
s : Set Y
⊢ ↑↑μH[d] (↑e ⁻¹' s) = ↑↑μH[d] s
[PROOFSTEP]
rw [← e.image_symm, e.symm.hausdorffMeasure_image]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
e : X ≃ᵢ Y
d : ℝ
⊢ Measure.map ↑e μH[d] = μH[d]
[PROOFSTEP]
rw [e.isometry.map_hausdorffMeasure (Or.inr e.surjective), e.surjective.range_eq, restrict_univ]
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
⊢ μH[↑(Fintype.card ι)] = volume
[PROOFSTEP]
classical
  -- it suffices to check that the two measures coincide on products of rational intervals
refine'
  (pi_eq_generateFrom (fun _ => Real.borel_eq_generateFrom_Ioo_rat.symm) (fun _ => Real.isPiSystem_Ioo_rat)
      (fun _ => Real.finiteSpanningSetsInIooRat _) _).symm
simp only [mem_iUnion, mem_singleton_iff]
  -- fix such a product `s` of rational intervals, of the form `Π (a i, b i)`.
intro s hs
choose a b H using hs
obtain rfl : s = fun i => Ioo (α := ℝ) (a i) (b i)
exact funext fun i => (H i).2
replace H := fun i => (H i).1
apply
  le_antisymm
    _
      -- first check that `volume s ≤ μH s`
· have Hle : volume ≤ (μH[Fintype.card ι] : Measure (ι → ℝ)) :=
    by
    refine' le_hausdorffMeasure _ _ ∞ ENNReal.coe_lt_top fun s _ => _
    rw [ENNReal.rpow_nat_cast]
    exact Real.volume_pi_le_diam_pow s
  rw [← volume_pi_pi fun i => Ioo (a i : ℝ) (b i)]
  exact
    Measure.le_iff'.1 Hle
      _
        /- For the other inequality `μH s ≤ volume s`, we use a covering of `s` by sets of small diameter
            `1/n`, namely cubes with left-most point of the form `a i + f i / n` with `f i` ranging between
            `0` and `⌈(b i - a i) * n⌉`. Their number is asymptotic to `n^d * Π (b i - a i)`. -/
have I : ∀ i, 0 ≤ (b i : ℝ) - a i := fun i => by simpa only [sub_nonneg, Rat.cast_le] using (H i).le
let γ := fun n : ℕ => ∀ i : ι, Fin ⌈((b i : ℝ) - a i) * n⌉₊
let t : ∀ n : ℕ, γ n → Set (ι → ℝ) := fun n f => Set.pi univ fun i => Icc (a i + f i / n) (a i + (f i + 1) / n)
have A : Tendsto (fun n : ℕ => 1 / (n : ℝ≥0∞)) atTop (𝓝 0) := by simp only [one_div, ENNReal.tendsto_inv_nat_nhds_zero]
have B : ∀ᶠ n in atTop, ∀ i : γ n, diam (t n i) ≤ 1 / n :=
  by
  refine' eventually_atTop.2 ⟨1, fun n hn => _⟩
  intro f
  refine' diam_pi_le_of_le fun b => _
  simp only [Real.ediam_Icc, add_div, ENNReal.ofReal_div_of_pos (Nat.cast_pos.mpr hn), le_refl, add_sub_add_left_eq_sub,
    add_sub_cancel', ENNReal.ofReal_one, ENNReal.ofReal_coe_nat]
have C : ∀ᶠ n in atTop, (Set.pi univ fun i : ι => Ioo (a i : ℝ) (b i)) ⊆ ⋃ i : γ n, t n i :=
  by
  refine' eventually_atTop.2 ⟨1, fun n hn => _⟩
  have npos : (0 : ℝ) < n := Nat.cast_pos.2 hn
  intro x hx
  simp only [mem_Ioo, mem_univ_pi] at hx
  simp only [mem_iUnion, mem_Ioo, mem_univ_pi]
  let f : γ n := fun i =>
    ⟨⌊(x i - a i) * n⌋₊, by
      apply Nat.floor_lt_ceil_of_lt_of_pos
      · refine' (mul_lt_mul_right npos).2 _
        simp only [(hx i).right, sub_lt_sub_iff_right]
      · refine' mul_pos _ npos
        simpa only [Rat.cast_lt, sub_pos] using H i⟩
  refine' ⟨f, fun i => ⟨_, _⟩⟩
  ·
    calc
      (a i : ℝ) + ⌊(x i - a i) * n⌋₊ / n ≤ (a i : ℝ) + (x i - a i) * n / n :=
        by
        refine' add_le_add le_rfl ((div_le_div_right npos).2 _)
        exact Nat.floor_le (mul_nonneg (sub_nonneg.2 (hx i).1.le) npos.le)
      _ = x i := by field_simp [npos.ne']
  ·
    calc
      x i = (a i : ℝ) + (x i - a i) * n / n := by field_simp [npos.ne']
      _ ≤ (a i : ℝ) + (⌊(x i - a i) * n⌋₊ + 1) / n :=
        add_le_add le_rfl ((div_le_div_right npos).2 (Nat.lt_floor_add_one _).le)
calc
  μH[Fintype.card ι] (Set.pi univ fun i : ι => Ioo (a i : ℝ) (b i)) ≤
      liminf (fun n : ℕ => ∑ i : γ n, diam (t n i) ^ ((Fintype.card ι) : ℝ)) atTop :=
    hausdorffMeasure_le_liminf_sum _ (Set.pi univ fun i => Ioo (a i : ℝ) (b i)) (fun n : ℕ => 1 / (n : ℝ≥0∞)) A t B C
  _ ≤ liminf (fun n : ℕ => ∑ i : γ n, (1 / (n : ℝ≥0∞)) ^ Fintype.card ι) atTop :=
    by
    refine' liminf_le_liminf _ _
    · filter_upwards [B] with _ hn
      apply Finset.sum_le_sum fun i _ => _
      simp only [ENNReal.rpow_nat_cast]
      intros i _
      exact pow_le_pow_of_le_left' (hn i) _
    · isBoundedDefault
  _ = liminf (fun n : ℕ => ∏ i : ι, (⌈((b i : ℝ) - a i) * n⌉₊ : ℝ≥0∞) / n) atTop := by
    simp only [Finset.card_univ, Nat.cast_prod, one_mul, Fintype.card_fin, Finset.sum_const, nsmul_eq_mul,
      Fintype.card_pi, div_eq_mul_inv, Finset.prod_mul_distrib, Finset.prod_const]
  _ = ∏ i : ι, volume (Ioo (a i : ℝ) (b i)) := by
    simp only [Real.volume_Ioo]
    apply Tendsto.liminf_eq
    refine' ENNReal.tendsto_finset_prod_of_ne_top _ (fun i _ => _) fun i _ => _
    · apply
        Tendsto.congr' _
          ((ENNReal.continuous_ofReal.tendsto _).comp
            ((tendsto_nat_ceil_mul_div_atTop (I i)).comp tendsto_nat_cast_atTop_atTop))
      apply eventually_atTop.2 ⟨1, fun n hn => _⟩
      intros n hn
      simp only [ENNReal.ofReal_div_of_pos (Nat.cast_pos.mpr hn), comp_apply, ENNReal.ofReal_coe_nat]
    · simp only [ENNReal.ofReal_ne_top, Ne.def, not_false_iff]
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
⊢ μH[↑(Fintype.card ι)] = volume
[PROOFSTEP]
refine'
  (pi_eq_generateFrom (fun _ => Real.borel_eq_generateFrom_Ioo_rat.symm) (fun _ => Real.isPiSystem_Ioo_rat)
      (fun _ => Real.finiteSpanningSetsInIooRat _) _).symm
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
⊢ ∀ (s : ι → Set ℝ),
    (∀ (i : ι), s i ∈ ⋃ (a : ℚ) (b : ℚ) (_ : a < b), {Ioo ↑a ↑b}) →
      ↑↑μH[↑(Fintype.card ι)] (Set.pi univ s) = ∏ i : ι, ↑↑volume (s i)
[PROOFSTEP]
simp only [mem_iUnion, mem_singleton_iff]
  -- fix such a product `s` of rational intervals, of the form `Π (a i, b i)`.
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
⊢ ∀ (s : ι → Set ℝ),
    (∀ (i : ι), ∃ i_1 i_2 h, s i = Ioo ↑i_1 ↑i_2) → ↑↑μH[↑(Fintype.card ι)] (Set.pi univ s) = ∏ i : ι, ↑↑volume (s i)
[PROOFSTEP]
intro s hs
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
s : ι → Set ℝ
hs : ∀ (i : ι), ∃ i_1 i_2 h, s i = Ioo ↑i_1 ↑i_2
⊢ ↑↑μH[↑(Fintype.card ι)] (Set.pi univ s) = ∏ i : ι, ↑↑volume (s i)
[PROOFSTEP]
choose a b H using hs
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
s : ι → Set ℝ
a b : ι → ℚ
H : ∀ (i : ι), ∃ h, s i = Ioo ↑(a i) ↑(b i)
⊢ ↑↑μH[↑(Fintype.card ι)] (Set.pi univ s) = ∏ i : ι, ↑↑volume (s i)
[PROOFSTEP]
obtain rfl : s = fun i => Ioo (α := ℝ) (a i) (b i)
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
s : ι → Set ℝ
a b : ι → ℚ
H : ∀ (i : ι), ∃ h, s i = Ioo ↑(a i) ↑(b i)
⊢ s = fun i => Ioo ↑(a i) ↑(b i)
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), ∃ h, (fun i => Ioo ↑(a i) ↑(b i)) i = Ioo ↑(a i) ↑(b i)
⊢ ↑↑μH[↑(Fintype.card ι)] (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) = ∏ i : ι, ↑↑volume ((fun i => Ioo ↑(a i) ↑(b i)) i)
[PROOFSTEP]
exact funext fun i => (H i).2
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), ∃ h, (fun i => Ioo ↑(a i) ↑(b i)) i = Ioo ↑(a i) ↑(b i)
⊢ ↑↑μH[↑(Fintype.card ι)] (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) = ∏ i : ι, ↑↑volume ((fun i => Ioo ↑(a i) ↑(b i)) i)
[PROOFSTEP]
replace H := fun i => (H i).1
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
⊢ ↑↑μH[↑(Fintype.card ι)] (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) = ∏ i : ι, ↑↑volume ((fun i => Ioo ↑(a i) ↑(b i)) i)
[PROOFSTEP]
apply
  le_antisymm
    _
      -- first check that `volume s ≤ μH s`
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
⊢ ∏ i : ι, ↑↑volume ((fun i => Ioo ↑(a i) ↑(b i)) i) ≤ ↑↑μH[↑(Fintype.card ι)] (Set.pi univ fun i => Ioo ↑(a i) ↑(b i))
[PROOFSTEP]
have Hle : volume ≤ (μH[Fintype.card ι] : Measure (ι → ℝ)) :=
  by
  refine' le_hausdorffMeasure _ _ ∞ ENNReal.coe_lt_top fun s _ => _
  rw [ENNReal.rpow_nat_cast]
  exact Real.volume_pi_le_diam_pow s
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
⊢ volume ≤ μH[↑(Fintype.card ι)]
[PROOFSTEP]
refine' le_hausdorffMeasure _ _ ∞ ENNReal.coe_lt_top fun s _ => _
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
s : Set (ι → ℝ)
x✝ : diam s ≤ ⊤
⊢ ↑↑volume s ≤ diam s ^ ↑(Fintype.card ι)
[PROOFSTEP]
rw [ENNReal.rpow_nat_cast]
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
s : Set (ι → ℝ)
x✝ : diam s ≤ ⊤
⊢ ↑↑volume s ≤ diam s ^ Fintype.card ι
[PROOFSTEP]
exact Real.volume_pi_le_diam_pow s
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
Hle : volume ≤ μH[↑(Fintype.card ι)]
⊢ ∏ i : ι, ↑↑volume ((fun i => Ioo ↑(a i) ↑(b i)) i) ≤ ↑↑μH[↑(Fintype.card ι)] (Set.pi univ fun i => Ioo ↑(a i) ↑(b i))
[PROOFSTEP]
rw [← volume_pi_pi fun i => Ioo (a i : ℝ) (b i)]
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
Hle : volume ≤ μH[↑(Fintype.card ι)]
⊢ ↑↑volume (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ≤ ↑↑μH[↑(Fintype.card ι)] (Set.pi univ fun i => Ioo ↑(a i) ↑(b i))
[PROOFSTEP]
exact
  Measure.le_iff'.1 Hle
    _
      /- For the other inequality `μH s ≤ volume s`, we use a covering of `s` by sets of small diameter
          `1/n`, namely cubes with left-most point of the form `a i + f i / n` with `f i` ranging between
          `0` and `⌈(b i - a i) * n⌉`. Their number is asymptotic to `n^d * Π (b i - a i)`. -/
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
⊢ ↑↑μH[↑(Fintype.card ι)] (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ≤ ∏ i : ι, ↑↑volume ((fun i => Ioo ↑(a i) ↑(b i)) i)
[PROOFSTEP]
have I : ∀ i, 0 ≤ (b i : ℝ) - a i := fun i => by simpa only [sub_nonneg, Rat.cast_le] using (H i).le
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
i : ι
⊢ 0 ≤ ↑(b i) - ↑(a i)
[PROOFSTEP]
simpa only [sub_nonneg, Rat.cast_le] using (H i).le
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
⊢ ↑↑μH[↑(Fintype.card ι)] (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ≤ ∏ i : ι, ↑↑volume ((fun i => Ioo ↑(a i) ↑(b i)) i)
[PROOFSTEP]
let γ := fun n : ℕ => ∀ i : ι, Fin ⌈((b i : ℝ) - a i) * n⌉₊
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
⊢ ↑↑μH[↑(Fintype.card ι)] (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ≤ ∏ i : ι, ↑↑volume ((fun i => Ioo ↑(a i) ↑(b i)) i)
[PROOFSTEP]
let t : ∀ n : ℕ, γ n → Set (ι → ℝ) := fun n f => Set.pi univ fun i => Icc (a i + f i / n) (a i + (f i + 1) / n)
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
⊢ ↑↑μH[↑(Fintype.card ι)] (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ≤ ∏ i : ι, ↑↑volume ((fun i => Ioo ↑(a i) ↑(b i)) i)
[PROOFSTEP]
have A : Tendsto (fun n : ℕ => 1 / (n : ℝ≥0∞)) atTop (𝓝 0) := by simp only [one_div, ENNReal.tendsto_inv_nat_nhds_zero]
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
⊢ Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
[PROOFSTEP]
simp only [one_div, ENNReal.tendsto_inv_nat_nhds_zero]
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
⊢ ↑↑μH[↑(Fintype.card ι)] (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ≤ ∏ i : ι, ↑↑volume ((fun i => Ioo ↑(a i) ↑(b i)) i)
[PROOFSTEP]
have B : ∀ᶠ n in atTop, ∀ i : γ n, diam (t n i) ≤ 1 / n :=
  by
  refine' eventually_atTop.2 ⟨1, fun n hn => _⟩
  intro f
  refine' diam_pi_le_of_le fun b => _
  simp only [Real.ediam_Icc, add_div, ENNReal.ofReal_div_of_pos (Nat.cast_pos.mpr hn), le_refl, add_sub_add_left_eq_sub,
    add_sub_cancel', ENNReal.ofReal_one, ENNReal.ofReal_coe_nat]
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
⊢ ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
[PROOFSTEP]
refine' eventually_atTop.2 ⟨1, fun n hn => _⟩
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
n : ℕ
hn : n ≥ 1
⊢ ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
[PROOFSTEP]
intro f
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
n : ℕ
hn : n ≥ 1
f : γ n
⊢ diam (t n f) ≤ 1 / ↑n
[PROOFSTEP]
refine' diam_pi_le_of_le fun b => _
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b✝ : ι → ℚ
H : ∀ (i : ι), a i < b✝ i
I : ∀ (i : ι), 0 ≤ ↑(b✝ i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b✝ i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
n : ℕ
hn : n ≥ 1
f : γ n
b : ι
⊢ diam (Icc (↑(a b) + ↑↑(f b) / ↑n) (↑(a b) + (↑↑(f b) + 1) / ↑n)) ≤ 1 / ↑n
[PROOFSTEP]
simp only [Real.ediam_Icc, add_div, ENNReal.ofReal_div_of_pos (Nat.cast_pos.mpr hn), le_refl, add_sub_add_left_eq_sub,
  add_sub_cancel', ENNReal.ofReal_one, ENNReal.ofReal_coe_nat]
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
⊢ ↑↑μH[↑(Fintype.card ι)] (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ≤ ∏ i : ι, ↑↑volume ((fun i => Ioo ↑(a i) ↑(b i)) i)
[PROOFSTEP]
have C : ∀ᶠ n in atTop, (Set.pi univ fun i : ι => Ioo (a i : ℝ) (b i)) ⊆ ⋃ i : γ n, t n i :=
  by
  refine' eventually_atTop.2 ⟨1, fun n hn => _⟩
  have npos : (0 : ℝ) < n := Nat.cast_pos.2 hn
  intro x hx
  simp only [mem_Ioo, mem_univ_pi] at hx
  simp only [mem_iUnion, mem_Ioo, mem_univ_pi]
  let f : γ n := fun i =>
    ⟨⌊(x i - a i) * n⌋₊, by
      apply Nat.floor_lt_ceil_of_lt_of_pos
      · refine' (mul_lt_mul_right npos).2 _
        simp only [(hx i).right, sub_lt_sub_iff_right]
      · refine' mul_pos _ npos
        simpa only [Rat.cast_lt, sub_pos] using H i⟩
  refine' ⟨f, fun i => ⟨_, _⟩⟩
  ·
    calc
      (a i : ℝ) + ⌊(x i - a i) * n⌋₊ / n ≤ (a i : ℝ) + (x i - a i) * n / n :=
        by
        refine' add_le_add le_rfl ((div_le_div_right npos).2 _)
        exact Nat.floor_le (mul_nonneg (sub_nonneg.2 (hx i).1.le) npos.le)
      _ = x i := by field_simp [npos.ne']
  ·
    calc
      x i = (a i : ℝ) + (x i - a i) * n / n := by field_simp [npos.ne']
      _ ≤ (a i : ℝ) + (⌊(x i - a i) * n⌋₊ + 1) / n :=
        add_le_add le_rfl ((div_le_div_right npos).2 (Nat.lt_floor_add_one _).le)
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
⊢ ∀ᶠ (n : ℕ) in atTop, (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ⊆ ⋃ (i : γ n), t n i
[PROOFSTEP]
refine' eventually_atTop.2 ⟨1, fun n hn => _⟩
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
n : ℕ
hn : n ≥ 1
⊢ (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ⊆ ⋃ (i : γ n), t n i
[PROOFSTEP]
have npos : (0 : ℝ) < n := Nat.cast_pos.2 hn
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
n : ℕ
hn : n ≥ 1
npos : 0 < ↑n
⊢ (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ⊆ ⋃ (i : γ n), t n i
[PROOFSTEP]
intro x hx
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
n : ℕ
hn : n ≥ 1
npos : 0 < ↑n
x : ι → ℝ
hx : x ∈ Set.pi univ fun i => Ioo ↑(a i) ↑(b i)
⊢ x ∈ ⋃ (i : γ n), t n i
[PROOFSTEP]
simp only [mem_Ioo, mem_univ_pi] at hx
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
n : ℕ
hn : n ≥ 1
npos : 0 < ↑n
x : ι → ℝ
hx : ∀ (i : ι), ↑(a i) < x i ∧ x i < ↑(b i)
⊢ x ∈ ⋃ (i : γ n), t n i
[PROOFSTEP]
simp only [mem_iUnion, mem_Ioo, mem_univ_pi]
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
n : ℕ
hn : n ≥ 1
npos : 0 < ↑n
x : ι → ℝ
hx : ∀ (i : ι), ↑(a i) < x i ∧ x i < ↑(b i)
⊢ ∃ i, ∀ (i_1 : ι), x i_1 ∈ Icc (↑(a i_1) + ↑↑(i i_1) / ↑n) (↑(a i_1) + (↑↑(i i_1) + 1) / ↑n)
[PROOFSTEP]
let f : γ n := fun i =>
  ⟨⌊(x i - a i) * n⌋₊, by
    apply Nat.floor_lt_ceil_of_lt_of_pos
    · refine' (mul_lt_mul_right npos).2 _
      simp only [(hx i).right, sub_lt_sub_iff_right]
    · refine' mul_pos _ npos
      simpa only [Rat.cast_lt, sub_pos] using H i⟩
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
n : ℕ
hn : n ≥ 1
npos : 0 < ↑n
x : ι → ℝ
hx : ∀ (i : ι), ↑(a i) < x i ∧ x i < ↑(b i)
i : ι
⊢ ⌊(x i - ↑(a i)) * ↑n⌋₊ < ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
[PROOFSTEP]
apply Nat.floor_lt_ceil_of_lt_of_pos
[GOAL]
case h
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
n : ℕ
hn : n ≥ 1
npos : 0 < ↑n
x : ι → ℝ
hx : ∀ (i : ι), ↑(a i) < x i ∧ x i < ↑(b i)
i : ι
⊢ (x i - ↑(a i)) * ↑n < (↑(b i) - ↑(a i)) * ↑n
[PROOFSTEP]
refine' (mul_lt_mul_right npos).2 _
[GOAL]
case h
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
n : ℕ
hn : n ≥ 1
npos : 0 < ↑n
x : ι → ℝ
hx : ∀ (i : ι), ↑(a i) < x i ∧ x i < ↑(b i)
i : ι
⊢ x i - ↑(a i) < ↑(b i) - ↑(a i)
[PROOFSTEP]
simp only [(hx i).right, sub_lt_sub_iff_right]
[GOAL]
case h'
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
n : ℕ
hn : n ≥ 1
npos : 0 < ↑n
x : ι → ℝ
hx : ∀ (i : ι), ↑(a i) < x i ∧ x i < ↑(b i)
i : ι
⊢ 0 < (↑(b i) - ↑(a i)) * ↑n
[PROOFSTEP]
refine' mul_pos _ npos
[GOAL]
case h'
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
n : ℕ
hn : n ≥ 1
npos : 0 < ↑n
x : ι → ℝ
hx : ∀ (i : ι), ↑(a i) < x i ∧ x i < ↑(b i)
i : ι
⊢ 0 < ↑(b i) - ↑(a i)
[PROOFSTEP]
simpa only [Rat.cast_lt, sub_pos] using H i
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
n : ℕ
hn : n ≥ 1
npos : 0 < ↑n
x : ι → ℝ
hx : ∀ (i : ι), ↑(a i) < x i ∧ x i < ↑(b i)
f : γ n := fun i => { val := ⌊(x i - ↑(a i)) * ↑n⌋₊, isLt := (_ : ⌊(x i - ↑(a i)) * ↑n⌋₊ < ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊) }
⊢ ∃ i, ∀ (i_1 : ι), x i_1 ∈ Icc (↑(a i_1) + ↑↑(i i_1) / ↑n) (↑(a i_1) + (↑↑(i i_1) + 1) / ↑n)
[PROOFSTEP]
refine' ⟨f, fun i => ⟨_, _⟩⟩
[GOAL]
case refine'_1
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
n : ℕ
hn : n ≥ 1
npos : 0 < ↑n
x : ι → ℝ
hx : ∀ (i : ι), ↑(a i) < x i ∧ x i < ↑(b i)
f : γ n := fun i => { val := ⌊(x i - ↑(a i)) * ↑n⌋₊, isLt := (_ : ⌊(x i - ↑(a i)) * ↑n⌋₊ < ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊) }
i : ι
⊢ ↑(a i) + ↑↑(f i) / ↑n ≤ x i
[PROOFSTEP]
calc
  (a i : ℝ) + ⌊(x i - a i) * n⌋₊ / n ≤ (a i : ℝ) + (x i - a i) * n / n :=
    by
    refine' add_le_add le_rfl ((div_le_div_right npos).2 _)
    exact Nat.floor_le (mul_nonneg (sub_nonneg.2 (hx i).1.le) npos.le)
  _ = x i := by field_simp [npos.ne']
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
n : ℕ
hn : n ≥ 1
npos : 0 < ↑n
x : ι → ℝ
hx : ∀ (i : ι), ↑(a i) < x i ∧ x i < ↑(b i)
f : γ n := fun i => { val := ⌊(x i - ↑(a i)) * ↑n⌋₊, isLt := (_ : ⌊(x i - ↑(a i)) * ↑n⌋₊ < ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊) }
i : ι
⊢ ↑(a i) + ↑⌊(x i - ↑(a i)) * ↑n⌋₊ / ↑n ≤ ↑(a i) + (x i - ↑(a i)) * ↑n / ↑n
[PROOFSTEP]
refine' add_le_add le_rfl ((div_le_div_right npos).2 _)
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
n : ℕ
hn : n ≥ 1
npos : 0 < ↑n
x : ι → ℝ
hx : ∀ (i : ι), ↑(a i) < x i ∧ x i < ↑(b i)
f : γ n := fun i => { val := ⌊(x i - ↑(a i)) * ↑n⌋₊, isLt := (_ : ⌊(x i - ↑(a i)) * ↑n⌋₊ < ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊) }
i : ι
⊢ ↑⌊(x i - ↑(a i)) * ↑n⌋₊ ≤ (x i - ↑(a i)) * ↑n
[PROOFSTEP]
exact Nat.floor_le (mul_nonneg (sub_nonneg.2 (hx i).1.le) npos.le)
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
n : ℕ
hn : n ≥ 1
npos : 0 < ↑n
x : ι → ℝ
hx : ∀ (i : ι), ↑(a i) < x i ∧ x i < ↑(b i)
f : γ n := fun i => { val := ⌊(x i - ↑(a i)) * ↑n⌋₊, isLt := (_ : ⌊(x i - ↑(a i)) * ↑n⌋₊ < ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊) }
i : ι
⊢ ↑(a i) + (x i - ↑(a i)) * ↑n / ↑n = x i
[PROOFSTEP]
field_simp [npos.ne']
[GOAL]
case refine'_2
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
n : ℕ
hn : n ≥ 1
npos : 0 < ↑n
x : ι → ℝ
hx : ∀ (i : ι), ↑(a i) < x i ∧ x i < ↑(b i)
f : γ n := fun i => { val := ⌊(x i - ↑(a i)) * ↑n⌋₊, isLt := (_ : ⌊(x i - ↑(a i)) * ↑n⌋₊ < ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊) }
i : ι
⊢ x i ≤ ↑(a i) + (↑↑(f i) + 1) / ↑n
[PROOFSTEP]
calc
  x i = (a i : ℝ) + (x i - a i) * n / n := by field_simp [npos.ne']
  _ ≤ (a i : ℝ) + (⌊(x i - a i) * n⌋₊ + 1) / n :=
    add_le_add le_rfl ((div_le_div_right npos).2 (Nat.lt_floor_add_one _).le)
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
n : ℕ
hn : n ≥ 1
npos : 0 < ↑n
x : ι → ℝ
hx : ∀ (i : ι), ↑(a i) < x i ∧ x i < ↑(b i)
f : γ n := fun i => { val := ⌊(x i - ↑(a i)) * ↑n⌋₊, isLt := (_ : ⌊(x i - ↑(a i)) * ↑n⌋₊ < ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊) }
i : ι
⊢ x i = ↑(a i) + (x i - ↑(a i)) * ↑n / ↑n
[PROOFSTEP]
field_simp [npos.ne']
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
C : ∀ᶠ (n : ℕ) in atTop, (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ⊆ ⋃ (i : γ n), t n i
⊢ ↑↑μH[↑(Fintype.card ι)] (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ≤ ∏ i : ι, ↑↑volume ((fun i => Ioo ↑(a i) ↑(b i)) i)
[PROOFSTEP]
calc
  μH[Fintype.card ι] (Set.pi univ fun i : ι => Ioo (a i : ℝ) (b i)) ≤
      liminf (fun n : ℕ => ∑ i : γ n, diam (t n i) ^ ((Fintype.card ι) : ℝ)) atTop :=
    hausdorffMeasure_le_liminf_sum _ (Set.pi univ fun i => Ioo (a i : ℝ) (b i)) (fun n : ℕ => 1 / (n : ℝ≥0∞)) A t B C
  _ ≤ liminf (fun n : ℕ => ∑ i : γ n, (1 / (n : ℝ≥0∞)) ^ Fintype.card ι) atTop :=
    by
    refine' liminf_le_liminf _ _
    · filter_upwards [B] with _ hn
      apply Finset.sum_le_sum fun i _ => _
      simp only [ENNReal.rpow_nat_cast]
      intros i _
      exact pow_le_pow_of_le_left' (hn i) _
    · isBoundedDefault
  _ = liminf (fun n : ℕ => ∏ i : ι, (⌈((b i : ℝ) - a i) * n⌉₊ : ℝ≥0∞) / n) atTop := by
    simp only [Finset.card_univ, Nat.cast_prod, one_mul, Fintype.card_fin, Finset.sum_const, nsmul_eq_mul,
      Fintype.card_pi, div_eq_mul_inv, Finset.prod_mul_distrib, Finset.prod_const]
  _ = ∏ i : ι, volume (Ioo (a i : ℝ) (b i)) := by
    simp only [Real.volume_Ioo]
    apply Tendsto.liminf_eq
    refine' ENNReal.tendsto_finset_prod_of_ne_top _ (fun i _ => _) fun i _ => _
    · apply
        Tendsto.congr' _
          ((ENNReal.continuous_ofReal.tendsto _).comp
            ((tendsto_nat_ceil_mul_div_atTop (I i)).comp tendsto_nat_cast_atTop_atTop))
      apply eventually_atTop.2 ⟨1, fun n hn => _⟩
      intros n hn
      simp only [ENNReal.ofReal_div_of_pos (Nat.cast_pos.mpr hn), comp_apply, ENNReal.ofReal_coe_nat]
    · simp only [ENNReal.ofReal_ne_top, Ne.def, not_false_iff]
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
C : ∀ᶠ (n : ℕ) in atTop, (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ⊆ ⋃ (i : γ n), t n i
⊢ liminf (fun n => ∑ i : γ n, diam (t n i) ^ ↑(Fintype.card ι)) atTop ≤
    liminf (fun n => ∑ i : γ n, (1 / ↑n) ^ Fintype.card ι) atTop
[PROOFSTEP]
refine' liminf_le_liminf _ _
[GOAL]
case refine'_1
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
C : ∀ᶠ (n : ℕ) in atTop, (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ⊆ ⋃ (i : γ n), t n i
⊢ ∀ᶠ (a_1 : ℕ) in atTop, ∑ i : γ a_1, diam (t a_1 i) ^ ↑(Fintype.card ι) ≤ ∑ i : γ a_1, (1 / ↑a_1) ^ Fintype.card ι
[PROOFSTEP]
filter_upwards [B] with _ hn
[GOAL]
case h
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
C : ∀ᶠ (n : ℕ) in atTop, (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ⊆ ⋃ (i : γ n), t n i
a✝ : ℕ
hn :
  ∀ (i : (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑a✝⌉₊),
    diam (Set.pi univ fun i_1 => Icc (↑(a i_1) + ↑↑(i i_1) / ↑a✝) (↑(a i_1) + (↑↑(i i_1) + 1) / ↑a✝)) ≤ 1 / ↑a✝
⊢ ∑ i : (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑a✝⌉₊,
      diam (Set.pi univ fun i_1 => Icc (↑(a i_1) + ↑↑(i i_1) / ↑a✝) (↑(a i_1) + (↑↑(i i_1) + 1) / ↑a✝)) ^
        ↑(Fintype.card ι) ≤
    ∑ i : (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑a✝⌉₊, (1 / ↑a✝) ^ Fintype.card ι
[PROOFSTEP]
apply Finset.sum_le_sum fun i _ => _
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
C : ∀ᶠ (n : ℕ) in atTop, (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ⊆ ⋃ (i : γ n), t n i
a✝ : ℕ
hn :
  ∀ (i : (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑a✝⌉₊),
    diam (Set.pi univ fun i_1 => Icc (↑(a i_1) + ↑↑(i i_1) / ↑a✝) (↑(a i_1) + (↑↑(i i_1) + 1) / ↑a✝)) ≤ 1 / ↑a✝
⊢ ∀ (i : (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑a✝⌉₊),
    i ∈ Finset.univ →
      diam (Set.pi univ fun i_1 => Icc (↑(a i_1) + ↑↑(i i_1) / ↑a✝) (↑(a i_1) + (↑↑(i i_1) + 1) / ↑a✝)) ^
          ↑(Fintype.card ι) ≤
        (1 / ↑a✝) ^ Fintype.card ι
[PROOFSTEP]
simp only [ENNReal.rpow_nat_cast]
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
C : ∀ᶠ (n : ℕ) in atTop, (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ⊆ ⋃ (i : γ n), t n i
a✝ : ℕ
hn :
  ∀ (i : (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑a✝⌉₊),
    diam (Set.pi univ fun i_1 => Icc (↑(a i_1) + ↑↑(i i_1) / ↑a✝) (↑(a i_1) + (↑↑(i i_1) + 1) / ↑a✝)) ≤ 1 / ↑a✝
⊢ ∀ (i : (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑a✝⌉₊),
    i ∈ Finset.univ →
      diam (Set.pi univ fun i_1 => Icc (↑(a i_1) + ↑↑(i i_1) / ↑a✝) (↑(a i_1) + (↑↑(i i_1) + 1) / ↑a✝)) ^
          Fintype.card ι ≤
        (1 / ↑a✝) ^ Fintype.card ι
[PROOFSTEP]
intros i _
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
C : ∀ᶠ (n : ℕ) in atTop, (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ⊆ ⋃ (i : γ n), t n i
a✝ : ℕ
hn :
  ∀ (i : (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑a✝⌉₊),
    diam (Set.pi univ fun i_1 => Icc (↑(a i_1) + ↑↑(i i_1) / ↑a✝) (↑(a i_1) + (↑↑(i i_1) + 1) / ↑a✝)) ≤ 1 / ↑a✝
i : (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑a✝⌉₊
x✝ : i ∈ Finset.univ
⊢ diam (Set.pi univ fun i_1 => Icc (↑(a i_1) + ↑↑(i i_1) / ↑a✝) (↑(a i_1) + (↑↑(i i_1) + 1) / ↑a✝)) ^ Fintype.card ι ≤
    (1 / ↑a✝) ^ Fintype.card ι
[PROOFSTEP]
exact pow_le_pow_of_le_left' (hn i) _
[GOAL]
case refine'_2
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
C : ∀ᶠ (n : ℕ) in atTop, (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ⊆ ⋃ (i : γ n), t n i
⊢ IsBoundedUnder (fun x x_1 => x ≥ x_1) atTop fun n => ∑ i : γ n, diam (t n i) ^ ↑(Fintype.card ι)
[PROOFSTEP]
isBoundedDefault
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
C : ∀ᶠ (n : ℕ) in atTop, (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ⊆ ⋃ (i : γ n), t n i
⊢ liminf (fun n => ∑ i : γ n, (1 / ↑n) ^ Fintype.card ι) atTop =
    liminf (fun n => ∏ i : ι, ↑⌈(↑(b i) - ↑(a i)) * ↑n⌉₊ / ↑n) atTop
[PROOFSTEP]
simp only [Finset.card_univ, Nat.cast_prod, one_mul, Fintype.card_fin, Finset.sum_const, nsmul_eq_mul, Fintype.card_pi,
  div_eq_mul_inv, Finset.prod_mul_distrib, Finset.prod_const]
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
C : ∀ᶠ (n : ℕ) in atTop, (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ⊆ ⋃ (i : γ n), t n i
⊢ liminf (fun n => ∏ i : ι, ↑⌈(↑(b i) - ↑(a i)) * ↑n⌉₊ / ↑n) atTop = ∏ i : ι, ↑↑volume (Ioo ↑(a i) ↑(b i))
[PROOFSTEP]
simp only [Real.volume_Ioo]
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
C : ∀ᶠ (n : ℕ) in atTop, (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ⊆ ⋃ (i : γ n), t n i
⊢ liminf (fun n => ∏ i : ι, ↑⌈(↑(b i) - ↑(a i)) * ↑n⌉₊ / ↑n) atTop = ∏ x : ι, ENNReal.ofReal (↑(b x) - ↑(a x))
[PROOFSTEP]
apply Tendsto.liminf_eq
[GOAL]
case h
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
C : ∀ᶠ (n : ℕ) in atTop, (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ⊆ ⋃ (i : γ n), t n i
⊢ Tendsto (fun n => ∏ i : ι, ↑⌈(↑(b i) - ↑(a i)) * ↑n⌉₊ / ↑n) atTop (𝓝 (∏ x : ι, ENNReal.ofReal (↑(b x) - ↑(a x))))
[PROOFSTEP]
refine' ENNReal.tendsto_finset_prod_of_ne_top _ (fun i _ => _) fun i _ => _
[GOAL]
case h.refine'_1
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
C : ∀ᶠ (n : ℕ) in atTop, (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ⊆ ⋃ (i : γ n), t n i
i : ι
x✝ : i ∈ Finset.univ
⊢ Tendsto (fun n => ↑⌈(↑(b i) - ↑(a i)) * ↑n⌉₊ / ↑n) atTop (𝓝 (ENNReal.ofReal (↑(b i) - ↑(a i))))
[PROOFSTEP]
apply
  Tendsto.congr' _
    ((ENNReal.continuous_ofReal.tendsto _).comp
      ((tendsto_nat_ceil_mul_div_atTop (I i)).comp tendsto_nat_cast_atTop_atTop))
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
C : ∀ᶠ (n : ℕ) in atTop, (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ⊆ ⋃ (i : γ n), t n i
i : ι
x✝ : i ∈ Finset.univ
⊢ ENNReal.ofReal ∘ (fun x => ↑⌈(↑(b i) - ↑(a i)) * x⌉₊ / x) ∘ Nat.cast =ᶠ[atTop] fun n =>
    ↑⌈(↑(b i) - ↑(a i)) * ↑n⌉₊ / ↑n
[PROOFSTEP]
apply eventually_atTop.2 ⟨1, fun n hn => _⟩
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
C : ∀ᶠ (n : ℕ) in atTop, (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ⊆ ⋃ (i : γ n), t n i
i : ι
x✝ : i ∈ Finset.univ
⊢ ∀ (n : ℕ),
    n ≥ 1 →
      (ENNReal.ofReal ∘ (fun x => ↑⌈(↑(b i) - ↑(a i)) * x⌉₊ / x) ∘ Nat.cast) n =
        (fun n => ↑⌈(↑(b i) - ↑(a i)) * ↑n⌉₊ / ↑n) n
[PROOFSTEP]
intros n hn
[GOAL]
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
C : ∀ᶠ (n : ℕ) in atTop, (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ⊆ ⋃ (i : γ n), t n i
i : ι
x✝ : i ∈ Finset.univ
n : ℕ
hn : n ≥ 1
⊢ (ENNReal.ofReal ∘ (fun x => ↑⌈(↑(b i) - ↑(a i)) * x⌉₊ / x) ∘ Nat.cast) n =
    (fun n => ↑⌈(↑(b i) - ↑(a i)) * ↑n⌉₊ / ↑n) n
[PROOFSTEP]
simp only [ENNReal.ofReal_div_of_pos (Nat.cast_pos.mpr hn), comp_apply, ENNReal.ofReal_coe_nat]
[GOAL]
case h.refine'_2
ι✝ : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁶ : EMetricSpace X
inst✝⁵ : EMetricSpace Y
inst✝⁴ : MeasurableSpace X
inst✝³ : BorelSpace X
inst✝² : MeasurableSpace Y
inst✝¹ : BorelSpace Y
ι : Type u_4
inst✝ : Fintype ι
a b : ι → ℚ
H : ∀ (i : ι), a i < b i
I : ∀ (i : ι), 0 ≤ ↑(b i) - ↑(a i)
γ : ℕ → Type u_4 := fun n => (i : ι) → Fin ⌈(↑(b i) - ↑(a i)) * ↑n⌉₊
t : (n : ℕ) → γ n → Set (ι → ℝ) :=
  fun n f => Set.pi univ fun i => Icc (↑(a i) + ↑↑(f i) / ↑n) (↑(a i) + (↑↑(f i) + 1) / ↑n)
A : Tendsto (fun n => 1 / ↑n) atTop (𝓝 0)
B : ∀ᶠ (n : ℕ) in atTop, ∀ (i : γ n), diam (t n i) ≤ 1 / ↑n
C : ∀ᶠ (n : ℕ) in atTop, (Set.pi univ fun i => Ioo ↑(a i) ↑(b i)) ⊆ ⋃ (i : γ n), t n i
i : ι
x✝ : i ∈ Finset.univ
⊢ ENNReal.ofReal (↑(b i) - ↑(a i)) ≠ ⊤
[PROOFSTEP]
simp only [ENNReal.ofReal_ne_top, Ne.def, not_false_iff]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
⊢ μH[1] = volume
[PROOFSTEP]
rw [← (volume_preserving_funUnique Unit ℝ).map_eq, ← (hausdorffMeasure_measurePreserving_funUnique Unit ℝ 1).map_eq, ←
  hausdorffMeasure_pi_real, Fintype.card_unit, Nat.cast_one]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁵ : EMetricSpace X
inst✝⁴ : EMetricSpace Y
inst✝³ : MeasurableSpace X
inst✝² : BorelSpace X
inst✝¹ : MeasurableSpace Y
inst✝ : BorelSpace Y
⊢ μH[2] = volume
[PROOFSTEP]
rw [← (volume_preserving_piFinTwo fun _ => ℝ).map_eq, ←
  (hausdorffMeasure_measurePreserving_piFinTwo (fun _ => ℝ) _).map_eq, ← hausdorffMeasure_pi_real, Fintype.card_fin,
  Nat.cast_two]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁹ : EMetricSpace X
inst✝⁸ : EMetricSpace Y
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : MeasurableSpace Y
inst✝⁴ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
v : E
s : Set ℝ
⊢ ↑↑μH[1] ((fun r => r • v) '' s) = ‖v‖₊ • ↑↑μH[1] s
[PROOFSTEP]
obtain rfl | hv := eq_or_ne v 0
[GOAL]
case inl
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁹ : EMetricSpace X
inst✝⁸ : EMetricSpace Y
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : MeasurableSpace Y
inst✝⁴ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
s : Set ℝ
⊢ ↑↑μH[1] ((fun r => r • 0) '' s) = ‖0‖₊ • ↑↑μH[1] s
[PROOFSTEP]
haveI := noAtoms_hausdorff E one_pos
[GOAL]
case inl
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁹ : EMetricSpace X
inst✝⁸ : EMetricSpace Y
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : MeasurableSpace Y
inst✝⁴ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
s : Set ℝ
this : NoAtoms μH[1]
⊢ ↑↑μH[1] ((fun r => r • 0) '' s) = ‖0‖₊ • ↑↑μH[1] s
[PROOFSTEP]
obtain rfl | hs := s.eq_empty_or_nonempty
[GOAL]
case inl.inl
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁹ : EMetricSpace X
inst✝⁸ : EMetricSpace Y
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : MeasurableSpace Y
inst✝⁴ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
this : NoAtoms μH[1]
⊢ ↑↑μH[1] ((fun r => r • 0) '' ∅) = ‖0‖₊ • ↑↑μH[1] ∅
[PROOFSTEP]
simp
[GOAL]
case inl.inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁹ : EMetricSpace X
inst✝⁸ : EMetricSpace Y
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : MeasurableSpace Y
inst✝⁴ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
s : Set ℝ
this : NoAtoms μH[1]
hs : Set.Nonempty s
⊢ ↑↑μH[1] ((fun r => r • 0) '' s) = ‖0‖₊ • ↑↑μH[1] s
[PROOFSTEP]
simp [hs]
[GOAL]
case inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁹ : EMetricSpace X
inst✝⁸ : EMetricSpace Y
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : MeasurableSpace Y
inst✝⁴ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
v : E
s : Set ℝ
hv : v ≠ 0
⊢ ↑↑μH[1] ((fun r => r • v) '' s) = ‖v‖₊ • ↑↑μH[1] s
[PROOFSTEP]
have hn : ‖v‖ ≠ 0 := norm_ne_zero_iff.mpr hv
[GOAL]
case inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁹ : EMetricSpace X
inst✝⁸ : EMetricSpace Y
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : MeasurableSpace Y
inst✝⁴ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
v : E
s : Set ℝ
hv : v ≠ 0
hn : ‖v‖ ≠ 0
⊢ ↑↑μH[1] ((fun r => r • v) '' s) = ‖v‖₊ • ↑↑μH[1] s
[PROOFSTEP]
suffices μH[1] ((· • ·) ‖v‖ '' (LinearMap.toSpanSingleton ℝ E (‖v‖⁻¹ • v) '' s)) = ‖v‖₊ • μH[1] s by
  -- porting note: proof was shorter, could need some golf
  simp only [hausdorffMeasure_real, nnreal_smul_coe_apply]
  convert this
  · simp only [image_smul, LinearMap.toSpanSingleton_apply, Set.image_image]
    ext e
    simp
    refine' ⟨fun ⟨x, h⟩ => ⟨x, _⟩, fun ⟨x, h⟩ => ⟨x, _⟩⟩
    · rw [smul_comm (norm _), smul_comm (norm _), inv_smul_smul₀ hn]
      exact h
    · rw [smul_comm (norm _), smul_comm (norm _), inv_smul_smul₀ hn] at h
      exact h
  · exact hausdorffMeasure_real.symm
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁹ : EMetricSpace X
inst✝⁸ : EMetricSpace Y
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : MeasurableSpace Y
inst✝⁴ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
v : E
s : Set ℝ
hv : v ≠ 0
hn : ‖v‖ ≠ 0
this : ↑↑μH[1] ((fun x x_1 => x • x_1) ‖v‖ '' (↑(LinearMap.toSpanSingleton ℝ E (‖v‖⁻¹ • v)) '' s)) = ‖v‖₊ • ↑↑μH[1] s
⊢ ↑↑μH[1] ((fun r => r • v) '' s) = ‖v‖₊ • ↑↑μH[1] s
[PROOFSTEP]
simp only [hausdorffMeasure_real, nnreal_smul_coe_apply]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁹ : EMetricSpace X
inst✝⁸ : EMetricSpace Y
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : MeasurableSpace Y
inst✝⁴ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
v : E
s : Set ℝ
hv : v ≠ 0
hn : ‖v‖ ≠ 0
this : ↑↑μH[1] ((fun x x_1 => x • x_1) ‖v‖ '' (↑(LinearMap.toSpanSingleton ℝ E (‖v‖⁻¹ • v)) '' s)) = ‖v‖₊ • ↑↑μH[1] s
⊢ ↑↑μH[1] ((fun r => r • v) '' s) = ↑‖v‖₊ * ↑↑volume s
[PROOFSTEP]
convert this
[GOAL]
case h.e'_2.h.e'_3
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁹ : EMetricSpace X
inst✝⁸ : EMetricSpace Y
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : MeasurableSpace Y
inst✝⁴ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
v : E
s : Set ℝ
hv : v ≠ 0
hn : ‖v‖ ≠ 0
this : ↑↑μH[1] ((fun x x_1 => x • x_1) ‖v‖ '' (↑(LinearMap.toSpanSingleton ℝ E (‖v‖⁻¹ • v)) '' s)) = ‖v‖₊ • ↑↑μH[1] s
⊢ (fun r => r • v) '' s = (fun x x_1 => x • x_1) ‖v‖ '' (↑(LinearMap.toSpanSingleton ℝ E (‖v‖⁻¹ • v)) '' s)
[PROOFSTEP]
simp only [image_smul, LinearMap.toSpanSingleton_apply, Set.image_image]
[GOAL]
case h.e'_2.h.e'_3
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁹ : EMetricSpace X
inst✝⁸ : EMetricSpace Y
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : MeasurableSpace Y
inst✝⁴ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
v : E
s : Set ℝ
hv : v ≠ 0
hn : ‖v‖ ≠ 0
this : ↑↑μH[1] ((fun x x_1 => x • x_1) ‖v‖ '' (↑(LinearMap.toSpanSingleton ℝ E (‖v‖⁻¹ • v)) '' s)) = ‖v‖₊ • ↑↑μH[1] s
⊢ (fun r => r • v) '' s = (fun a => ‖v‖ • a • ‖v‖⁻¹ • v) '' s
[PROOFSTEP]
ext e
[GOAL]
case h.e'_2.h.e'_3.h
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁹ : EMetricSpace X
inst✝⁸ : EMetricSpace Y
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : MeasurableSpace Y
inst✝⁴ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
v : E
s : Set ℝ
hv : v ≠ 0
hn : ‖v‖ ≠ 0
this : ↑↑μH[1] ((fun x x_1 => x • x_1) ‖v‖ '' (↑(LinearMap.toSpanSingleton ℝ E (‖v‖⁻¹ • v)) '' s)) = ‖v‖₊ • ↑↑μH[1] s
e : E
⊢ e ∈ (fun r => r • v) '' s ↔ e ∈ (fun a => ‖v‖ • a • ‖v‖⁻¹ • v) '' s
[PROOFSTEP]
simp
[GOAL]
case h.e'_2.h.e'_3.h
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁹ : EMetricSpace X
inst✝⁸ : EMetricSpace Y
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : MeasurableSpace Y
inst✝⁴ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
v : E
s : Set ℝ
hv : v ≠ 0
hn : ‖v‖ ≠ 0
this : ↑↑μH[1] ((fun x x_1 => x • x_1) ‖v‖ '' (↑(LinearMap.toSpanSingleton ℝ E (‖v‖⁻¹ • v)) '' s)) = ‖v‖₊ • ↑↑μH[1] s
e : E
⊢ (∃ x, x ∈ s ∧ x • v = e) ↔ ∃ x, x ∈ s ∧ ‖v‖ • x • ‖v‖⁻¹ • v = e
[PROOFSTEP]
refine' ⟨fun ⟨x, h⟩ => ⟨x, _⟩, fun ⟨x, h⟩ => ⟨x, _⟩⟩
[GOAL]
case h.e'_2.h.e'_3.h.refine'_1
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁹ : EMetricSpace X
inst✝⁸ : EMetricSpace Y
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : MeasurableSpace Y
inst✝⁴ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
v : E
s : Set ℝ
hv : v ≠ 0
hn : ‖v‖ ≠ 0
this : ↑↑μH[1] ((fun x x_1 => x • x_1) ‖v‖ '' (↑(LinearMap.toSpanSingleton ℝ E (‖v‖⁻¹ • v)) '' s)) = ‖v‖₊ • ↑↑μH[1] s
e : E
x✝ : ∃ x, x ∈ s ∧ x • v = e
x : ℝ
h : x ∈ s ∧ x • v = e
⊢ x ∈ s ∧ ‖v‖ • x • ‖v‖⁻¹ • v = e
[PROOFSTEP]
rw [smul_comm (norm _), smul_comm (norm _), inv_smul_smul₀ hn]
[GOAL]
case h.e'_2.h.e'_3.h.refine'_1
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁹ : EMetricSpace X
inst✝⁸ : EMetricSpace Y
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : MeasurableSpace Y
inst✝⁴ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
v : E
s : Set ℝ
hv : v ≠ 0
hn : ‖v‖ ≠ 0
this : ↑↑μH[1] ((fun x x_1 => x • x_1) ‖v‖ '' (↑(LinearMap.toSpanSingleton ℝ E (‖v‖⁻¹ • v)) '' s)) = ‖v‖₊ • ↑↑μH[1] s
e : E
x✝ : ∃ x, x ∈ s ∧ x • v = e
x : ℝ
h : x ∈ s ∧ x • v = e
⊢ x ∈ s ∧ x • v = e
[PROOFSTEP]
exact h
[GOAL]
case h.e'_2.h.e'_3.h.refine'_2
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁹ : EMetricSpace X
inst✝⁸ : EMetricSpace Y
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : MeasurableSpace Y
inst✝⁴ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
v : E
s : Set ℝ
hv : v ≠ 0
hn : ‖v‖ ≠ 0
this : ↑↑μH[1] ((fun x x_1 => x • x_1) ‖v‖ '' (↑(LinearMap.toSpanSingleton ℝ E (‖v‖⁻¹ • v)) '' s)) = ‖v‖₊ • ↑↑μH[1] s
e : E
x✝ : ∃ x, x ∈ s ∧ ‖v‖ • x • ‖v‖⁻¹ • v = e
x : ℝ
h : x ∈ s ∧ ‖v‖ • x • ‖v‖⁻¹ • v = e
⊢ x ∈ s ∧ x • v = e
[PROOFSTEP]
rw [smul_comm (norm _), smul_comm (norm _), inv_smul_smul₀ hn] at h
[GOAL]
case h.e'_2.h.e'_3.h.refine'_2
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁹ : EMetricSpace X
inst✝⁸ : EMetricSpace Y
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : MeasurableSpace Y
inst✝⁴ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
v : E
s : Set ℝ
hv : v ≠ 0
hn : ‖v‖ ≠ 0
this : ↑↑μH[1] ((fun x x_1 => x • x_1) ‖v‖ '' (↑(LinearMap.toSpanSingleton ℝ E (‖v‖⁻¹ • v)) '' s)) = ‖v‖₊ • ↑↑μH[1] s
e : E
x✝ : ∃ x, x ∈ s ∧ ‖v‖ • x • ‖v‖⁻¹ • v = e
x : ℝ
h : x ∈ s ∧ x • v = e
⊢ x ∈ s ∧ x • v = e
[PROOFSTEP]
exact h
[GOAL]
case h.e'_3.h.e'_1.h.e'_2.h.e'_3
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁹ : EMetricSpace X
inst✝⁸ : EMetricSpace Y
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : MeasurableSpace Y
inst✝⁴ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
v : E
s : Set ℝ
hv : v ≠ 0
hn : ‖v‖ ≠ 0
this : ↑↑μH[1] ((fun x x_1 => x • x_1) ‖v‖ '' (↑(LinearMap.toSpanSingleton ℝ E (‖v‖⁻¹ • v)) '' s)) = ‖v‖₊ • ↑↑μH[1] s
⊢ volume = μH[1]
[PROOFSTEP]
exact hausdorffMeasure_real.symm
[GOAL]
case inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁹ : EMetricSpace X
inst✝⁸ : EMetricSpace Y
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : MeasurableSpace Y
inst✝⁴ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
v : E
s : Set ℝ
hv : v ≠ 0
hn : ‖v‖ ≠ 0
⊢ ↑↑μH[1] ((fun x x_1 => x • x_1) ‖v‖ '' (↑(LinearMap.toSpanSingleton ℝ E (‖v‖⁻¹ • v)) '' s)) = ‖v‖₊ • ↑↑μH[1] s
[PROOFSTEP]
have iso_smul : Isometry (LinearMap.toSpanSingleton ℝ E (‖v‖⁻¹ • v)) :=
  by
  refine' AddMonoidHomClass.isometry_of_norm _ fun x => (norm_smul _ _).trans _
  rw [norm_smul, norm_inv, norm_norm, inv_mul_cancel hn, mul_one, LinearMap.id_apply]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁹ : EMetricSpace X
inst✝⁸ : EMetricSpace Y
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : MeasurableSpace Y
inst✝⁴ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
v : E
s : Set ℝ
hv : v ≠ 0
hn : ‖v‖ ≠ 0
⊢ Isometry ↑(LinearMap.toSpanSingleton ℝ E (‖v‖⁻¹ • v))
[PROOFSTEP]
refine' AddMonoidHomClass.isometry_of_norm _ fun x => (norm_smul _ _).trans _
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁹ : EMetricSpace X
inst✝⁸ : EMetricSpace Y
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : MeasurableSpace Y
inst✝⁴ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
v : E
s : Set ℝ
hv : v ≠ 0
hn : ‖v‖ ≠ 0
x : ℝ
⊢ ‖↑LinearMap.id x‖ * ‖‖v‖⁻¹ • v‖ = ‖x‖
[PROOFSTEP]
rw [norm_smul, norm_inv, norm_norm, inv_mul_cancel hn, mul_one, LinearMap.id_apply]
[GOAL]
case inr
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁹ : EMetricSpace X
inst✝⁸ : EMetricSpace Y
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : MeasurableSpace Y
inst✝⁴ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
v : E
s : Set ℝ
hv : v ≠ 0
hn : ‖v‖ ≠ 0
iso_smul : Isometry ↑(LinearMap.toSpanSingleton ℝ E (‖v‖⁻¹ • v))
⊢ ↑↑μH[1] ((fun x x_1 => x • x_1) ‖v‖ '' (↑(LinearMap.toSpanSingleton ℝ E (‖v‖⁻¹ • v)) '' s)) = ‖v‖₊ • ↑↑μH[1] s
[PROOFSTEP]
rw [Set.image_smul, Measure.hausdorffMeasure_smul₀ zero_le_one hn, nnnorm_norm, NNReal.rpow_eq_pow, NNReal.rpow_one,
  iso_smul.hausdorffMeasure_image (Or.inl <| zero_le_one' ℝ)]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹² : EMetricSpace X
inst✝¹¹ : EMetricSpace Y
inst✝¹⁰ : MeasurableSpace X
inst✝⁹ : BorelSpace X
inst✝⁸ : MeasurableSpace Y
inst✝⁷ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝⁶ : NormedField 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
inst✝³ : MeasurableSpace P
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor E P
inst✝ : BorelSpace P
d : ℝ
hd : 0 ≤ d
x : P
c : 𝕜
hc : c ≠ 0
s : Set P
⊢ ↑↑μH[d] (↑(AffineMap.homothety x c) '' s) = NNReal.rpow ‖c‖₊ d • ↑↑μH[d] s
[PROOFSTEP]
suffices
  μH[d] (IsometryEquiv.vaddConst x '' ((· • ·) c '' ((IsometryEquiv.vaddConst x).symm '' s))) =
    NNReal.rpow ‖c‖₊ d • μH[d] s
  by simpa only [Set.image_image]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹² : EMetricSpace X
inst✝¹¹ : EMetricSpace Y
inst✝¹⁰ : MeasurableSpace X
inst✝⁹ : BorelSpace X
inst✝⁸ : MeasurableSpace Y
inst✝⁷ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝⁶ : NormedField 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
inst✝³ : MeasurableSpace P
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor E P
inst✝ : BorelSpace P
d : ℝ
hd : 0 ≤ d
x : P
c : 𝕜
hc : c ≠ 0
s : Set P
this :
  ↑↑μH[d]
      (↑(IsometryEquiv.vaddConst x) ''
        ((fun x x_1 => x • x_1) c '' (↑(IsometryEquiv.symm (IsometryEquiv.vaddConst x)) '' s))) =
    NNReal.rpow ‖c‖₊ d • ↑↑μH[d] s
⊢ ↑↑μH[d] (↑(AffineMap.homothety x c) '' s) = NNReal.rpow ‖c‖₊ d • ↑↑μH[d] s
[PROOFSTEP]
simpa only [Set.image_image]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹² : EMetricSpace X
inst✝¹¹ : EMetricSpace Y
inst✝¹⁰ : MeasurableSpace X
inst✝⁹ : BorelSpace X
inst✝⁸ : MeasurableSpace Y
inst✝⁷ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝⁶ : NormedField 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
inst✝³ : MeasurableSpace P
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor E P
inst✝ : BorelSpace P
d : ℝ
hd : 0 ≤ d
x : P
c : 𝕜
hc : c ≠ 0
s : Set P
⊢ ↑↑μH[d]
      (↑(IsometryEquiv.vaddConst x) ''
        ((fun x x_1 => x • x_1) c '' (↑(IsometryEquiv.symm (IsometryEquiv.vaddConst x)) '' s))) =
    NNReal.rpow ‖c‖₊ d • ↑↑μH[d] s
[PROOFSTEP]
borelize E
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹² : EMetricSpace X
inst✝¹¹ : EMetricSpace Y
inst✝¹⁰ : MeasurableSpace X
inst✝⁹ : BorelSpace X
inst✝⁸ : MeasurableSpace Y
inst✝⁷ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝⁶ : NormedField 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
inst✝³ : MeasurableSpace P
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor E P
inst✝ : BorelSpace P
d : ℝ
hd : 0 ≤ d
x : P
c : 𝕜
hc : c ≠ 0
s : Set P
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
⊢ ↑↑μH[d]
      (↑(IsometryEquiv.vaddConst x) ''
        ((fun x x_1 => x • x_1) c '' (↑(IsometryEquiv.symm (IsometryEquiv.vaddConst x)) '' s))) =
    NNReal.rpow ‖c‖₊ d • ↑↑μH[d] s
[PROOFSTEP]
rw [IsometryEquiv.hausdorffMeasure_image, Set.image_smul, Measure.hausdorffMeasure_smul₀ hd hc,
  IsometryEquiv.hausdorffMeasure_image]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹² : EMetricSpace X
inst✝¹¹ : EMetricSpace Y
inst✝¹⁰ : MeasurableSpace X
inst✝⁹ : BorelSpace X
inst✝⁸ : MeasurableSpace Y
inst✝⁷ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝⁶ : NormedField 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
inst✝³ : MeasurableSpace P
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor E P
inst✝ : BorelSpace P
d : ℝ
hd : 0 ≤ d
x : P
c : 𝕜
hc : c ≠ 0
s : Set P
⊢ ↑↑μH[d] (↑(AffineMap.homothety x c) ⁻¹' s) = NNReal.rpow ‖c‖₊⁻¹ d • ↑↑μH[d] s
[PROOFSTEP]
change μH[d] (AffineEquiv.homothetyUnitsMulHom x (Units.mk0 c hc) ⁻¹' s) = _
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹² : EMetricSpace X
inst✝¹¹ : EMetricSpace Y
inst✝¹⁰ : MeasurableSpace X
inst✝⁹ : BorelSpace X
inst✝⁸ : MeasurableSpace Y
inst✝⁷ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝⁶ : NormedField 𝕜
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
inst✝³ : MeasurableSpace P
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor E P
inst✝ : BorelSpace P
d : ℝ
hd : 0 ≤ d
x : P
c : 𝕜
hc : c ≠ 0
s : Set P
⊢ ↑↑μH[d] (↑(↑(AffineEquiv.homothetyUnitsMulHom x) (Units.mk0 c hc)) ⁻¹' s) = NNReal.rpow ‖c‖₊⁻¹ d • ↑↑μH[d] s
[PROOFSTEP]
rw [← AffineEquiv.image_symm, AffineEquiv.coe_homothetyUnitsMulHom_apply_symm,
  hausdorffMeasure_homothety_image hd x (_ : 𝕜ˣ).isUnit.ne_zero, Units.val_inv_eq_inv_val, Units.val_mk0, nnnorm_inv]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹¹ : EMetricSpace X
inst✝¹⁰ : EMetricSpace Y
inst✝⁹ : MeasurableSpace X
inst✝⁸ : BorelSpace X
inst✝⁷ : MeasurableSpace Y
inst✝⁶ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : MeasurableSpace P
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor E P
inst✝ : BorelSpace P
x y : P
s : Set ℝ
⊢ ↑↑μH[1] (↑(AffineMap.lineMap x y) '' s) = nndist x y • ↑↑μH[1] s
[PROOFSTEP]
suffices μH[1] (IsometryEquiv.vaddConst x '' ((· • (y -ᵥ x)) '' s)) = nndist x y • μH[1] s by
  simpa only [Set.image_image]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹¹ : EMetricSpace X
inst✝¹⁰ : EMetricSpace Y
inst✝⁹ : MeasurableSpace X
inst✝⁸ : BorelSpace X
inst✝⁷ : MeasurableSpace Y
inst✝⁶ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : MeasurableSpace P
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor E P
inst✝ : BorelSpace P
x y : P
s : Set ℝ
this : ↑↑μH[1] (↑(IsometryEquiv.vaddConst x) '' ((fun x_1 => x_1 • (y -ᵥ x)) '' s)) = nndist x y • ↑↑μH[1] s
⊢ ↑↑μH[1] (↑(AffineMap.lineMap x y) '' s) = nndist x y • ↑↑μH[1] s
[PROOFSTEP]
simpa only [Set.image_image]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹¹ : EMetricSpace X
inst✝¹⁰ : EMetricSpace Y
inst✝⁹ : MeasurableSpace X
inst✝⁸ : BorelSpace X
inst✝⁷ : MeasurableSpace Y
inst✝⁶ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : MeasurableSpace P
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor E P
inst✝ : BorelSpace P
x y : P
s : Set ℝ
⊢ ↑↑μH[1] (↑(IsometryEquiv.vaddConst x) '' ((fun x_1 => x_1 • (y -ᵥ x)) '' s)) = nndist x y • ↑↑μH[1] s
[PROOFSTEP]
borelize E
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹¹ : EMetricSpace X
inst✝¹⁰ : EMetricSpace Y
inst✝⁹ : MeasurableSpace X
inst✝⁸ : BorelSpace X
inst✝⁷ : MeasurableSpace Y
inst✝⁶ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : MeasurableSpace P
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor E P
inst✝ : BorelSpace P
x y : P
s : Set ℝ
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
⊢ ↑↑μH[1] (↑(IsometryEquiv.vaddConst x) '' ((fun x_1 => x_1 • (y -ᵥ x)) '' s)) = nndist x y • ↑↑μH[1] s
[PROOFSTEP]
rw [IsometryEquiv.hausdorffMeasure_image, hausdorffMeasure_smul_right_image, nndist_eq_nnnorm_vsub' E]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹¹ : EMetricSpace X
inst✝¹⁰ : EMetricSpace Y
inst✝⁹ : MeasurableSpace X
inst✝⁸ : BorelSpace X
inst✝⁷ : MeasurableSpace Y
inst✝⁶ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : MeasurableSpace P
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor E P
inst✝ : BorelSpace P
x y : P
⊢ ↑↑μH[1] (affineSegment ℝ x y) = edist x y
[PROOFSTEP]
rw [affineSegment, hausdorffMeasure_lineMap_image, hausdorffMeasure_real, Real.volume_Icc, sub_zero, ENNReal.ofReal_one,
  ← Algebra.algebraMap_eq_smul_one]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝¹¹ : EMetricSpace X
inst✝¹⁰ : EMetricSpace Y
inst✝⁹ : MeasurableSpace X
inst✝⁸ : BorelSpace X
inst✝⁷ : MeasurableSpace Y
inst✝⁶ : BorelSpace Y
𝕜 : Type u_4
E : Type u_5
P : Type u_6
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace ℝ E
inst✝³ : MeasurableSpace P
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor E P
inst✝ : BorelSpace P
x y : P
⊢ ↑(algebraMap ℝ≥0 ℝ≥0∞) (nndist x y) = edist x y
[PROOFSTEP]
exact (edist_nndist _ _).symm
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝⁹ : EMetricSpace X
inst✝⁸ : EMetricSpace Y
inst✝⁷ : MeasurableSpace X
inst✝⁶ : BorelSpace X
inst✝⁵ : MeasurableSpace Y
inst✝⁴ : BorelSpace Y
𝕜 : Type u_4
E✝ : Type u_5
P : Type u_6
E : Type u_7
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
inst✝¹ : MeasurableSpace E
inst✝ : BorelSpace E
x y : E
⊢ ↑↑μH[1] (segment ℝ x y) = edist x y
[PROOFSTEP]
rw [← affineSegment_eq_segment, hausdorffMeasure_affineSegment]