Built with
Alectryon , running Lean4 v4.17.0. Bubbles (
) indicate interactive fragments: hover for details, tap to reveal contents. Use
Ctrl+↑ Ctrl+↓ to navigate,
Ctrl+🖱️ to focus. On Mac, use
⌘ instead of
Ctrl .
/-
Created in 2024 by Gaëtan Serré
-/
/-
Formalization of the proof on the upper bound of the probability for LIPO to reject a candidate.
-/
import Mathlib.Order.CompletePartialOrder
import Mathlib.MeasureTheory.Measure.Lebesgue.VolumeOfBalls
import LeanLIPO.CompactUtils
open Metric Finset MeasureTheory ENNReal Set
/- The dimension of the space. -/
variable {d : ℕ} (hd : 0 < d)
include hd in
/-- Utility lemma: the the bigger the radius of a ball, the bigger its volume. -/
lemma volume_ball_mono (x₁ x₂ : EuclideanSpace ℝ (Fin d))
(r₁ r₂ : ℝ) (h : r₁ ≤ r₂) : volume (ball x₁ r₁) ≤ volume (ball x₂ r₂) := by
d : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂
volume (ball x₁ r₁) ≤ volume (ball x₂ r₂)
have : Nonempty (Fin d) := Fin.pos_iff_nonempty.mp hdd : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂ this : Nonempty (Fin d)
volume (ball x₁ r₁) ≤ volume (ball x₂ r₂)
d : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂
volume (ball x₁ r₁) ≤ volume (ball x₂ r₂)
repeat d : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂ this : Nonempty (Fin d)
volume (ball x₁ r₁) ≤ volume (ball x₂ r₂)
rw [ d : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂ this : Nonempty (Fin d)
ENNReal.ofReal r₁ ^ d * ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 )) ≤ volume (ball x₂ r₂)
EuclideanSpace.volume_ball, d : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂ this : Nonempty (Fin d)
ENNReal.ofReal r₁ ^ d * ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 )) ≤
ENNReal.ofReal r₂ ^ d * ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 ))
d : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂ this : Nonempty (Fin d)
ENNReal.ofReal r₁ ^ d * ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 )) ≤ volume (ball x₂ r₂)
Fintype.card_fin d : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂ this : Nonempty (Fin d)
ENNReal.ofReal r₁ ^ d * ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 )) ≤
ENNReal.ofReal r₂ ^ d * ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 ))
] d : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂ this : Nonempty (Fin d)
ENNReal.ofReal r₁ ^ d * ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 )) ≤
ENNReal.ofReal r₂ ^ d * ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 ))
d : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂
volume (ball x₁ r₁) ≤ volume (ball x₂ r₂)
have h1 : ENNReal.ofReal (√ Real.pi ^ d / ((d : ℝ) / 2 + 1 ). Gamma) ≠ 0 := d : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂ this : Nonempty (Fin d)
ENNReal.ofReal r₁ ^ d * ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 )) ≤
ENNReal.ofReal r₂ ^ d * ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 ))
by
d : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂ this : Nonempty (Fin d)
ENNReal.ofReal r₁ ^ d * ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 )) ≤
ENNReal.ofReal r₂ ^ d * ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 ))
suffices 0 < √ Real.pi ^ d / ((d : ℝ) / 2 + 1 ). Gamma d : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂ this : Nonempty (Fin d)
ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 )) ≠ 0
by
d : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂ this✝ : Nonempty (Fin d) this : 0 < √ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 )
ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 )) ≠ 0
exact (ne_of_lt (ofReal_pos.mpr this)). symm
d : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂ this : Nonempty (Fin d)
ENNReal.ofReal r₁ ^ d * ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 )) ≤
ENNReal.ofReal r₂ ^ d * ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 ))
have sqrt_pi_pos : 0 < √ Real.pi ^ d := pow_pos (Real.sqrt_pos_of_pos (Real.pi_pos)) dd : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂ this : Nonempty (Fin d) sqrt_pi_pos : 0 < √ Real.pi ^ d
0 < √ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 )
d : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂ this : Nonempty (Fin d)
ENNReal.ofReal r₁ ^ d * ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 )) ≤
ENNReal.ofReal r₂ ^ d * ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 ))
have arg_pos : 0 < (d : ℝ) / 2 + 1 := d : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂ this : Nonempty (Fin d) sqrt_pi_pos : 0 < √ Real.pi ^ d
0 < √ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 )
by
d : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂ this : Nonempty (Fin d) sqrt_pi_pos : 0 < √ Real.pi ^ d
0 < √ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 )
have : 0 < (d : ℝ) / 2 := half_pos (Nat.cast_pos.mpr hd)d : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂ this✝ : Nonempty (Fin d) sqrt_pi_pos : 0 < √ Real.pi ^ dthis : 0 < ↑ d / 2
0 < ↑ d / 2 + 1
d : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂ this : Nonempty (Fin d) sqrt_pi_pos : 0 < √ Real.pi ^ d
0 < √ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 )
linarith
d : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂ this : Nonempty (Fin d)
ENNReal.ofReal r₁ ^ d * ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 )) ≤
ENNReal.ofReal r₂ ^ d * ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 ))
exact div_pos sqrt_pi_pos (Real.Gamma_pos_of_pos arg_pos)
d : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂
volume (ball x₁ r₁) ≤ volume (ball x₂ r₂)
rw [ d : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂ this : Nonempty (Fin d) h1 : ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 )) ≠ 0
ENNReal.ofReal r₁ ^ d * ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 )) ≤
ENNReal.ofReal r₂ ^ d * ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 ))
mul_le_mul_right h1 (ofReal_ne_top) d : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂ this : Nonempty (Fin d) h1 : ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 )) ≠ 0
ENNReal.ofReal r₁ ^ d ≤ ENNReal.ofReal r₂ ^ d
] d : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂ this : Nonempty (Fin d) h1 : ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 )) ≠ 0
ENNReal.ofReal r₁ ^ d ≤ ENNReal.ofReal r₂ ^ d
d : ℕ hd : 0 < dx₁, x₂ : EuclideanSpace ℝ (Fin d) r₁, r₂ : ℝ h : r₁ ≤ r₂
volume (ball x₁ r₁) ≤ volume (ball x₂ r₂)
exact pow_le_pow_left' (ofReal_le_ofReal h) d
/--
`Finset` is a finite set of elements.
The image of a nonempty `Finset` by a function is also nonempty.
-/
lemma image_nonempty {α β : Type * } [DecidableEq β] {f : α → β} {A : Finset α}
(ha : A.Nonempty) : (A.image f). Nonempty :=
(Finset.image_nonempty). mpr ha
/- The search space. -/
variable {X : Set (EuclideanSpace ℝ (Fin d))} (hcompact : IsCompact X) (hne : X.Nonempty)
/- To create the instance `MeasureSpace X` -/
attribute [local instance ] Measure.Subtype.measureSpace
/--
The subtraction operator for the subtype `X`. It uses the operator from the encompassing type.
-/
noncomputable instance : HSub X X (EuclideanSpace ℝ (Fin d)) where
hSub := fun x y ↦ x. 1 - y. 1
/-- Definition of the diameter of the image of `X` by a continuous function. -/
noncomputable def diam {f : X → ℝ} (hf : Continuous f) :=
f (hcompact.exists_argmax hf hne). choose - f (hcompact.exists_argmin hf hne). choose
noncomputable def image_max (f : X → ℝ) {A : Finset X} (hA : A.Nonempty) := (A.image f). max' (image_nonempty hA)
/-- Wether the candidate `x` is being rejected. -/
def is_rejected (f : X → ℝ) {A : Finset X} (hA : A.Nonempty) (κ : ℝ) (x : X) :=
(A.image (fun y ↦ f y + κ * ‖ x - y‖ )). min' (image_nonempty hA)
< image_max f hA
/--
The set containing all points that are rejected, given a nonempty `Finset`
of potential maximizers
-/
def rejected (f : X → ℝ) {A : Finset X} (hA : A.Nonempty) (κ : ℝ) :=
{x | is_rejected f hA κ x}
/--
A candidate `x` is rejected iff it belongs to a ball determined
by the best maximizer found so far and a potential maximizer.
-/
theorem reject_iff_ball (f : X → ℝ) {A : Finset X} (hA : A.Nonempty) {κ : ℝ} (hκ : 0 < κ) (x : X) :
is_rejected f hA κ x
↔ ∃ x₁ ∈ A, x ∈ ball x₁ ((image_max f hA - f x₁) / κ) := by
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ X
is_rejected f hA κ x ↔ ∃ x₁ ∈ A, x ∈ ball x₁ ((image_max f hA - f x₁) / κ)
let f' := image_max f hAd : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ
is_rejected f hA κ x ↔ ∃ x₁ ∈ A, x ∈ ball x₁ ((image_max f hA - f x₁) / κ)
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ X
is_rejected f hA κ x ↔ ∃ x₁ ∈ A, x ∈ ball x₁ ((image_max f hA - f x₁) / κ)
rw [ d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ
is_rejected f hA κ x ↔ ∃ x₁ ∈ A, x ∈ ball x₁ ((image_max f hA - f x₁) / κ)
show image_max f hA = f' by d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ
is_rejected f hA κ x ↔ ∃ x₁ ∈ A, x ∈ ball x₁ ((image_max f hA - f x₁) / κ)
rfl ] d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ
is_rejected f hA κ x ↔ ∃ x₁ ∈ A, x ∈ ball x₁ ((f' - f x₁) / κ)
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ X
is_rejected f hA κ x ↔ ∃ x₁ ∈ A, x ∈ ball x₁ ((image_max f hA - f x₁) / κ)
let f'' := (A.image (fun y ↦ f y + κ * ‖ x - y‖ )). min' (image_nonempty hA)d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ
is_rejected f hA κ x ↔ ∃ x₁ ∈ A, x ∈ ball x₁ ((f' - f x₁) / κ)
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ X
is_rejected f hA κ x ↔ ∃ x₁ ∈ A, x ∈ ball x₁ ((image_max f hA - f x₁) / κ)
unfold is_rejected d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ
(Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ < image_max f hA ↔ ∃ x₁ ∈ A, x ∈ ball x₁ ((f' - f x₁) / κ)
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ X
is_rejected f hA κ x ↔ ∃ x₁ ∈ A, x ∈ ball x₁ ((image_max f hA - f x₁) / κ)
rw [ d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ
(Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ < image_max f hA ↔ ∃ x₁ ∈ A, x ∈ ball x₁ ((f' - f x₁) / κ)
show (A.image (fun y ↦ f y + κ * ‖ x - y‖ )). min' (image_nonempty hA) = f'' by d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ
(Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ < image_max f hA ↔ ∃ x₁ ∈ A, x ∈ ball x₁ ((f' - f x₁) / κ)
rfl ] d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ
f'' < image_max f hA ↔ ∃ x₁ ∈ A, x ∈ ball x₁ ((f' - f x₁) / κ)
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ X
is_rejected f hA κ x ↔ ∃ x₁ ∈ A, x ∈ ball x₁ ((image_max f hA - f x₁) / κ)
constructor d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ
mp f'' < image_max f hA → ∃ x₁ ∈ A, x ∈ ball x₁ ((f' - f x₁) / κ)
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ X
is_rejected f hA κ x ↔ ∃ x₁ ∈ A, x ∈ ball x₁ ((image_max f hA - f x₁) / κ)
· d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ
mp f'' < image_max f hA → ∃ x₁ ∈ A, x ∈ ball x₁ ((f' - f x₁) / κ)
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ
mp f'' < image_max f hA → ∃ x₁ ∈ A, x ∈ ball x₁ ((f' - f x₁) / κ)
intro h d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ h : f'' < image_max f hA
mp ∃ x₁ ∈ A, x ∈ ball x₁ ((f' - f x₁) / κ)
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ
mp f'' < image_max f hA → ∃ x₁ ∈ A, x ∈ ball x₁ ((f' - f x₁) / κ)
have : ∃ x₁ ∈ A, f x₁ + κ * ‖ x - x₁‖ = f'' := mem_image.mp (min'_mem _ (image_nonempty hA))d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ h : f'' < image_max f hA this : ∃ x₁ ∈ A, f x₁ + κ * ‖ x - x₁‖ = f''
mp ∃ x₁ ∈ A, x ∈ ball x₁ ((f' - f x₁) / κ)
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ
mp f'' < image_max f hA → ∃ x₁ ∈ A, x ∈ ball x₁ ((f' - f x₁) / κ)
rcases this with ⟨x₁, hx₁, hfx₁⟩ d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ h : f'' < image_max f hA x₁ : ↑ Xhx₁ : x₁ ∈ A hfx₁ : f x₁ + κ * ‖ x - x₁‖ = f''
mp.intro.intro ∃ x₁ ∈ A, x ∈ ball x₁ ((f' - f x₁) / κ)
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ
mp f'' < image_max f hA → ∃ x₁ ∈ A, x ∈ ball x₁ ((f' - f x₁) / κ)
use x₁ d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ h : f'' < image_max f hA x₁ : ↑ Xhx₁ : x₁ ∈ A hfx₁ : f x₁ + κ * ‖ x - x₁‖ = f''
h x₁ ∈ A ∧ x ∈ ball x₁ ((f' - f x₁) / κ)
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ
mp f'' < image_max f hA → ∃ x₁ ∈ A, x ∈ ball x₁ ((f' - f x₁) / κ)
refine ⟨hx₁, ? _⟩ d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ h : f'' < image_max f hA x₁ : ↑ Xhx₁ : x₁ ∈ A hfx₁ : f x₁ + κ * ‖ x - x₁‖ = f''
h x ∈ ball x₁ ((f' - f x₁) / κ)
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ
mp f'' < image_max f hA → ∃ x₁ ∈ A, x ∈ ball x₁ ((f' - f x₁) / κ)
rw [ d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ h : f'' < image_max f hA x₁ : ↑ Xhx₁ : x₁ ∈ A hfx₁ : f x₁ + κ * ‖ x - x₁‖ = f''
h x ∈ ball x₁ ((f' - f x₁) / κ)
← hfx₁d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ x₁ : ↑ Xh : f x₁ + κ * ‖ x - x₁‖ < image_max f hA hx₁ : x₁ ∈ A hfx₁ : f x₁ + κ * ‖ x - x₁‖ = f''
h x ∈ ball x₁ ((f' - f x₁) / κ)
] d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ x₁ : ↑ Xh : f x₁ + κ * ‖ x - x₁‖ < image_max f hA hx₁ : x₁ ∈ A hfx₁ : f x₁ + κ * ‖ x - x₁‖ = f''
h x ∈ ball x₁ ((f' - f x₁) / κ)
at h d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ x₁ : ↑ Xh : f x₁ + κ * ‖ x - x₁‖ < image_max f hA hx₁ : x₁ ∈ A hfx₁ : f x₁ + κ * ‖ x - x₁‖ = f''
h x ∈ ball x₁ ((f' - f x₁) / κ)
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ
mp f'' < image_max f hA → ∃ x₁ ∈ A, x ∈ ball x₁ ((f' - f x₁) / κ)
have norm_ineq : ‖ x - x₁‖ < (f' - f x₁) / κ :=
(lt_div_iff₀' hκ). mpr (lt_tsub_iff_left.mpr h)d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ x₁ : ↑ Xh : f x₁ + κ * ‖ x - x₁‖ < image_max f hA hx₁ : x₁ ∈ A hfx₁ : f x₁ + κ * ‖ x - x₁‖ = f'' norm_ineq : ‖ x - x₁‖ < (f' - f x₁) / κ
h x ∈ ball x₁ ((f' - f x₁) / κ)
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ
mp f'' < image_max f hA → ∃ x₁ ∈ A, x ∈ ball x₁ ((f' - f x₁) / κ)
exact norm_ineq
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ X
is_rejected f hA κ x ↔ ∃ x₁ ∈ A, x ∈ ball x₁ ((image_max f hA - f x₁) / κ)
rintro ⟨x₁, hx₁, h⟩ d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ x₁ : ↑ Xhx₁ : x₁ ∈ A h : x ∈ ball x₁ ((f' - f x₁) / κ)
mpr.intro.intro f'' < image_max f hA
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ X
is_rejected f hA κ x ↔ ∃ x₁ ∈ A, x ∈ ball x₁ ((image_max f hA - f x₁) / κ)
have reject : f x₁ + κ * ‖ x - x₁‖ < f' :=
lt_tsub_iff_left.mp ((lt_div_iff₀' hκ). mp (mem_ball_iff_norm.mp h))d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ x₁ : ↑ Xhx₁ : x₁ ∈ A h : x ∈ ball x₁ ((f' - f x₁) / κ) reject : f x₁ + κ * ‖ x - x₁‖ < f'
mpr.intro.intro f'' < image_max f hA
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ X
is_rejected f hA κ x ↔ ∃ x₁ ∈ A, x ∈ ball x₁ ((image_max f hA - f x₁) / κ)
have min_le : f'' ≤ f x₁ + κ * ‖ x - x₁‖ := min'_le _ _ (mem_image_of_mem _ hx₁)d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xf' := image_max f hA : ℝ f'' := (Finset.image (fun y => f y + κ * ‖ x - y‖ ) A). min' ⋯ : ℝ x₁ : ↑ Xhx₁ : x₁ ∈ A h : x ∈ ball x₁ ((f' - f x₁) / κ) reject : f x₁ + κ * ‖ x - x₁‖ < f' min_le : f'' ≤ f x₁ + κ * ‖ x - x₁‖
mpr.intro.intro f'' < image_max f hA
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ X
is_rejected f hA κ x ↔ ∃ x₁ ∈ A, x ∈ ball x₁ ((image_max f hA - f x₁) / κ)
exact lt_of_le_of_lt min_le reject
/-- The set of rejected candidates is equal to the union indexed by `A` of balls.-/
theorem reject_iff_ball_set (f : X → ℝ) {A : Finset X} (hA : A.Nonempty) {κ : ℝ} (hκ : 0 < κ) :
rejected f hA κ = ⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ) := by
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κ
rejected f hA κ = ⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)
ext x d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ X
h x ∈ rejected f hA κ ↔ x ∈ ⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κ
rejected f hA κ = ⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)
constructor d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ X
h.mp x ∈ rejected f hA κ → x ∈ ⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κ
rejected f hA κ = ⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)
· d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ X
h.mp x ∈ rejected f hA κ → x ∈ ⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ X
h.mp x ∈ rejected f hA κ → x ∈ ⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)
intro hx d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xhx : x ∈ rejected f hA κ
h.mp x ∈ ⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ X
h.mp x ∈ rejected f hA κ → x ∈ ⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)
obtain ⟨x₁, hx₁, hx₁ball⟩ := (reject_iff_ball f hA hκ x). mp hx d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xhx : x ∈ rejected f hA κ x₁ : ↑ Xhx₁ : x₁ ∈ A hx₁ball : x ∈ ball x₁ ((image_max f hA - f x₁) / κ)
h.mp.intro.intro x ∈ ⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ X
h.mp x ∈ rejected f hA κ → x ∈ ⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)
exact Set.mem_biUnion hx₁ hx₁ball
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κ
rejected f hA κ = ⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)
intro hx d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xhx : x ∈ ⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)
h.mpr x ∈ rejected f hA κ
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κ
rejected f hA κ = ⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)
suffices is_rejected f hA κ x d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xhx : x ∈ ⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)
h.mpr x ∈ rejected f hA κ
by d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xhx : x ∈ ⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ) this : is_rejected f hA κ x
x ∈ rejected f hA κ
exact this
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κ
rejected f hA κ = ⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)
rw [ d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xhx : x ∈ ⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)
h.mpr is_rejected f hA κ x
reject_iff_ball f hA hκ x d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xhx : x ∈ ⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)
h.mpr ∃ x₁ ∈ A, x ∈ ball x₁ ((image_max f hA - f x₁) / κ)
] d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κx : ↑ Xhx : x ∈ ⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)
h.mpr ∃ x₁ ∈ A, x ∈ ball x₁ ((image_max f hA - f x₁) / κ)
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) f : ↑ X → ℝA : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κ
rejected f hA κ = ⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)
simpa using hx
/-- The diameter is bigger than any distance within `A`. -/
lemma diam_le {f : X → ℝ} (hf : Continuous f) {A : Finset X} (hA : A.Nonempty) :
∀ ⦃x⦄, x ∈ A → image_max f hA - f x ≤ diam hcompact hne hf := by
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty
∀ ⦃x : ↑ X⦄, x ∈ A → image_max f hA - f x ≤ _root_.diam hcompact hne hf
intro x _ d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty x : ↑ Xa✝ : x ∈ A
image_max f hA - f x ≤ _root_.diam hcompact hne hf
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty
∀ ⦃x : ↑ X⦄, x ∈ A → image_max f hA - f x ≤ _root_.diam hcompact hne hf
have image_le_max : image_max f hA ≤ f (hcompact.exists_argmax hf hne). choose := d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty x : ↑ Xa✝ : x ∈ A
image_max f hA - f x ≤ _root_.diam hcompact hne hf
by
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty x : ↑ Xa✝ : x ∈ A
image_max f hA - f x ≤ _root_.diam hcompact hne hf
have : ∃ x₁ ∈ A, f x₁ = image_max f hA := mem_image.mp (max'_mem _ (image_nonempty hA))d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty x : ↑ Xa✝ : x ∈ A this : ∃ x₁ ∈ A, f x₁ = image_max f hA
image_max f hA ≤ f ⋯. choose
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty x : ↑ Xa✝ : x ∈ A
image_max f hA - f x ≤ _root_.diam hcompact hne hf
rcases this with ⟨x₁, _, hfx₁⟩ d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty x : ↑ Xa✝ : x ∈ A x₁ : ↑ Xleft✝ : x₁ ∈ A hfx₁ : f x₁ = image_max f hA
intro.intro image_max f hA ≤ f ⋯. choose
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty x : ↑ Xa✝ : x ∈ A
image_max f hA - f x ≤ _root_.diam hcompact hne hf
rw [ d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty x : ↑ Xa✝ : x ∈ A x₁ : ↑ Xleft✝ : x₁ ∈ A hfx₁ : f x₁ = image_max f hA
intro.intro image_max f hA ≤ f ⋯. choose
← hfx₁d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty x : ↑ Xa✝ : x ∈ A x₁ : ↑ Xleft✝ : x₁ ∈ A hfx₁ : f x₁ = image_max f hA
intro.intro f x₁ ≤ f ⋯. choose
] d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty x : ↑ Xa✝ : x ∈ A x₁ : ↑ Xleft✝ : x₁ ∈ A hfx₁ : f x₁ = image_max f hA
intro.intro f x₁ ≤ f ⋯. choose
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty x : ↑ Xa✝ : x ∈ A
image_max f hA - f x ≤ _root_.diam hcompact hne hf
exact (hcompact.exists_argmax hf hne). choose_spec x₁
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty
∀ ⦃x : ↑ X⦄, x ∈ A → image_max f hA - f x ≤ _root_.diam hcompact hne hf
exact tsub_le_tsub image_le_max ((hcompact.exists_argmin hf hne). choose_spec x)
/-- The uniform measure on `X`. -/
noncomputable def μ : Measure X := (volume X)⁻¹ • volume
include hcompact in
/--
Utility lemma. It shows that the volume restricted on `X` of a ball is less or equal
than the volume on the entire space of the same ball.
-/
lemma le_coe_volume (r : ℝ) (x : X) : volume (ball x r) ≤ volume (ball x. 1 r) := by
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ X
volume (ball x r) ≤ volume (ball (↑ x) r)
rw [ d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ X
volume (ball x r) ≤ volume (ball (↑ x) r)
show volume (ball x r) = volume.comap Subtype.val (ball x r) by d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ X
volume (ball x r) ≤ volume (ball (↑ x) r)
rfl ] d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ X
(Measure.comap Subtype.val volume) (ball x r) ≤ volume (ball (↑ x) r)
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ X
volume (ball x r) ≤ volume (ball (↑ x) r)
rw [ d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ X
(Measure.comap Subtype.val volume) (ball x r) ≤ volume (ball (↑ x) r)
Measure.comap_apply₀ Subtype.val volume Subtype.val_injective d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ X
volume (Subtype.val '' ball x r) ≤ volume (ball (↑ x) r)
] d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ X
volume (Subtype.val '' ball x r) ≤ volume (ball (↑ x) r)
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ X
volume (ball x r) ≤ volume (ball (↑ x) r)
swap d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ X
hf ∀ (s : Set { x // x ∈ X }), MeasurableSet s → NullMeasurableSet (Subtype.val '' s) volume
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ X
volume (ball x r) ≤ volume (ball (↑ x) r)
exact fun s a ↦ Measure.MeasurableSet.nullMeasurableSet_subtype_coe hcompact.nullMeasurable a d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ X
volume (Subtype.val '' ball x r) ≤ volume (ball (↑ x) r)
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ X
volume (ball x r) ≤ volume (ball (↑ x) r)
swap d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ X
hs NullMeasurableSet (ball x r) (Measure.comap Subtype.val volume)
; d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ X
hs NullMeasurableSet (ball x r) (Measure.comap Subtype.val volume)
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ X
volume (ball x r) ≤ volume (ball (↑ x) r)
exact MeasurableSet.nullMeasurableSet measurableSet_ball d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ X
volume (Subtype.val '' ball x r) ≤ volume (ball (↑ x) r)
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ X
volume (ball x r) ≤ volume (ball (↑ x) r)
suffices Subtype.val '' (ball x r) ⊆ ball x. 1 r d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ X
volume (Subtype.val '' ball x r) ≤ volume (ball (↑ x) r)
by
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ Xthis : Subtype.val '' ball x r ⊆ ball (↑ x) r
volume (Subtype.val '' ball x r) ≤ volume (ball (↑ x) r)
exact OuterMeasureClass.measure_mono volume this
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ X
volume (ball x r) ≤ volume (ball (↑ x) r)
intro y hy d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ Xy : EuclideanSpace ℝ (Fin d) hy : y ∈ Subtype.val '' ball x r
y ∈ ball (↑ x) r
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ X
volume (ball x r) ≤ volume (ball (↑ x) r)
obtain ⟨x', h1x', h2x'⟩ := (Set.mem_image Subtype.val (ball x r) y). mp hy d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ Xy : EuclideanSpace ℝ (Fin d) hy : y ∈ Subtype.val '' ball x r x' : { x // x ∈ X } h1x' : x' ∈ ball x r h2x' : ↑ x' = y
intro.intro y ∈ ball (↑ x) r
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ X
volume (ball x r) ≤ volume (ball (↑ x) r)
rw [ d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ Xy : EuclideanSpace ℝ (Fin d) hy : y ∈ Subtype.val '' ball x r x' : { x // x ∈ X } h1x' : x' ∈ ball x r h2x' : ↑ x' = y
intro.intro y ∈ ball (↑ x) r
← h2x'd : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ Xy : EuclideanSpace ℝ (Fin d) hy : y ∈ Subtype.val '' ball x r x' : { x // x ∈ X } h1x' : x' ∈ ball x r h2x' : ↑ x' = y
intro.intro ↑ x' ∈ ball (↑ x) r
] d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ Xy : EuclideanSpace ℝ (Fin d) hy : y ∈ Subtype.val '' ball x r x' : { x // x ∈ X } h1x' : x' ∈ ball x r h2x' : ↑ x' = y
intro.intro ↑ x' ∈ ball (↑ x) r
d : ℕ X : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X r : ℝ x : ↑ X
volume (ball x r) ≤ volume (ball (↑ x) r)
exact h1x'
/-- The measure over the entire space of a ball of radius `diam`. -/
noncomputable def measure_ball_diam {f : X → ℝ} (hf : Continuous f) (κ : ℝ) :=
(volume X)⁻¹
* (ENNReal.ofReal (diam hcompact hne hf / κ) ^ d
* ENNReal.ofReal (√ Real.pi ^ d / ((d : ℝ) / 2 + 1 ). Gamma))
include hd hcompact in
/--
**Main theorem**: the measure of the rejected candidates is less or equal than
the volume of `|A|` ball of radius `diam`.
-/
theorem measure_reject_le {f : X → ℝ} (hf : Continuous f) {A : Finset X} (hA : A.Nonempty)
{κ : ℝ} (hκ : 0 < κ) : μ (rejected f hA κ) ≤ A.card * measure_ball_diam hcompact hne hf κ := by
/- We rewrite the set of rejected candidates as a union of balls. -/
rw [ d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κ
μ (rejected f hA κ) ≤ ↑ (# A) * measure_ball_diam hcompact hne hf κ
reject_iff_ball_set f hA hκ d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κ
μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ↑ (# A) * measure_ball_diam hcompact hne hf κ
] d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κ
μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ↑ (# A) * measure_ball_diam hcompact hne hf κ
/-
We show that μ ∪(x ∈ A) ball(x, (A.img f).max - f (x))
≤ ∑ (x ∈ A) (volume X)⁻¹ * volume (ball((x : ℝᵈ), diam))
-/
let diam := diam hcompact hne hfd : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ
μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ↑ (# A) * measure_ball_diam hcompact hne hf κ
d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κ
μ (rejected f hA κ) ≤ ↑ (# A) * measure_ball_diam hcompact hne hf κ
have μ_le : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ))
≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball xᵢ. 1 (diam / κ)) := d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ
μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ↑ (# A) * measure_ball_diam hcompact hne hf κ
by
d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ
μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ↑ (# A) * measure_ball_diam hcompact hne hf κ
have union_le_sum : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ))
≤ ∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ)) :=
measure_biUnion_finset_le A (fun i =>
ball i (((Finset.image f A). max' (_root_.image_nonempty hA) - f i) / κ))d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ union_le_sum : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ))
μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ))
d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ
μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ↑ (# A) * measure_ball_diam hcompact hne hf κ
have sum_le_sum : ∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ))
≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball xᵢ. 1 (diam / κ)) := d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ union_le_sum : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ))
μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ))
by
d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ union_le_sum : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ))
μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ))
have μ_le : ∀ x ∈ A, μ (ball x ((image_max f hA - f x) / κ))
≤ (volume X)⁻¹ * volume (ball x. 1 (diam / κ)) := d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ union_le_sum : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ))
∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ))
by
d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ union_le_sum : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ))
∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ))
intro x hx d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ union_le_sum : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ)) x : ↑ Xhx : x ∈ A
μ (ball x ((image_max f hA - f x) / κ)) ≤ (volume X)⁻¹ * volume (ball (↑ x) (diam / κ))
d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ union_le_sum : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ))
∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ))
have volume_le : volume (ball x ((image_max f hA - f x) / κ))
≤ volume (ball x. 1 (diam / κ)) := d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ union_le_sum : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ)) x : ↑ Xhx : x ∈ A
μ (ball x ((image_max f hA - f x) / κ)) ≤ (volume X)⁻¹ * volume (ball (↑ x) (diam / κ))
by
d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ union_le_sum : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ)) x : ↑ Xhx : x ∈ A
μ (ball x ((image_max f hA - f x) / κ)) ≤ (volume X)⁻¹ * volume (ball (↑ x) (diam / κ))
have volume_comap_le := le_coe_volume
hcompact ((image_max f hA - f x) / κ) xd : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ union_le_sum : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ)) x : ↑ Xhx : x ∈ A volume_comap_le : volume (ball x ((image_max f hA - f x) / κ)) ≤ volume (ball (↑ x) ((image_max f hA - f x) / κ))
volume (ball x ((image_max f hA - f x) / κ)) ≤ volume (ball (↑ x) (diam / κ))
d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ union_le_sum : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ)) x : ↑ Xhx : x ∈ A
μ (ball x ((image_max f hA - f x) / κ)) ≤ (volume X)⁻¹ * volume (ball (↑ x) (diam / κ))
have volume_ball_le := volume_ball_mono hd x x _ _
((div_le_div_iff_of_pos_right hκ). mpr (diam_le hcompact hne hf hA hx))d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ union_le_sum : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ)) x : ↑ Xhx : x ∈ A volume_comap_le : volume (ball x ((image_max f hA - f x) / κ)) ≤ volume (ball (↑ x) ((image_max f hA - f x) / κ)) volume_ball_le : volume (ball (↑ x) ((image_max f hA - f x) / κ)) ≤ volume (ball (↑ x) (_root_.diam hcompact hne hf / κ))
volume (ball x ((image_max f hA - f x) / κ)) ≤ volume (ball (↑ x) (diam / κ))
d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ union_le_sum : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ)) x : ↑ Xhx : x ∈ A
μ (ball x ((image_max f hA - f x) / κ)) ≤ (volume X)⁻¹ * volume (ball (↑ x) (diam / κ))
exact Preorder.le_trans _ _ _ volume_comap_le volume_ball_le
d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ union_le_sum : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ))
∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ))
unfold μ d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ union_le_sum : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ)) x : ↑ Xhx : x ∈ A volume_le : volume (ball x ((image_max f hA - f x) / κ)) ≤ volume (ball (↑ x) (diam / κ))
((volume X)⁻¹ • volume) (ball x ((image_max f hA - f x) / κ)) ≤ (volume X)⁻¹ * volume (ball (↑ x) (diam / κ))
d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ union_le_sum : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ))
∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ))
rw [ d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ union_le_sum : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ)) x : ↑ Xhx : x ∈ A volume_le : volume (ball x ((image_max f hA - f x) / κ)) ≤ volume (ball (↑ x) (diam / κ))
((volume X)⁻¹ • volume) (ball x ((image_max f hA - f x) / κ)) ≤ (volume X)⁻¹ * volume (ball (↑ x) (diam / κ))
Measure.smul_apply, d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ union_le_sum : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ)) x : ↑ Xhx : x ∈ A volume_le : volume (ball x ((image_max f hA - f x) / κ)) ≤ volume (ball (↑ x) (diam / κ))
(volume X)⁻¹ • volume (ball x ((image_max f hA - f x) / κ)) ≤ (volume X)⁻¹ * volume (ball (↑ x) (diam / κ))
d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ union_le_sum : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ)) x : ↑ Xhx : x ∈ A volume_le : volume (ball x ((image_max f hA - f x) / κ)) ≤ volume (ball (↑ x) (diam / κ))
((volume X)⁻¹ • volume) (ball x ((image_max f hA - f x) / κ)) ≤ (volume X)⁻¹ * volume (ball (↑ x) (diam / κ))
smul_eq_mul d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ union_le_sum : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ)) x : ↑ Xhx : x ∈ A volume_le : volume (ball x ((image_max f hA - f x) / κ)) ≤ volume (ball (↑ x) (diam / κ))
(volume X)⁻¹ * volume (ball x ((image_max f hA - f x) / κ)) ≤ (volume X)⁻¹ * volume (ball (↑ x) (diam / κ))
] d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ union_le_sum : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ)) x : ↑ Xhx : x ∈ A volume_le : volume (ball x ((image_max f hA - f x) / κ)) ≤ volume (ball (↑ x) (diam / κ))
(volume X)⁻¹ * volume (ball x ((image_max f hA - f x) / κ)) ≤ (volume X)⁻¹ * volume (ball (↑ x) (diam / κ))
d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ union_le_sum : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ))
∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ))
exact mul_le_mul_left' volume_le _
d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ union_le_sum : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, μ (ball xᵢ ((image_max f hA - f xᵢ) / κ))
μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ))
exact sum_le_sum μ_le
d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ
μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ↑ (# A) * measure_ball_diam hcompact hne hf κ
exact Preorder.le_trans _ _ _ union_le_sum sum_le_sum
/-
We show that ∑ (x ∈ A) (volume X)⁻¹ * volume (ball(x, diam))
= A.card * (volume X)⁻¹ * volume_ball_diam
-/
let measure_ball_diam := measure_ball_diam hcompact hne hf κd : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ μ_le : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) measure_ball_diam := _root_.measure_ball_diam hcompact hne hf κ : ℝ≥ 0 ∞
μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ↑ (# A) * _root_.measure_ball_diam hcompact hne hf κ
d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κ
μ (rejected f hA κ) ≤ ↑ (# A) * measure_ball_diam hcompact hne hf κ
have sum_μ : ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball xᵢ. 1 (diam / κ))
= A.card * measure_ball_diam := d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ μ_le : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) measure_ball_diam := _root_.measure_ball_diam hcompact hne hf κ : ℝ≥ 0 ∞
μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ↑ (# A) * _root_.measure_ball_diam hcompact hne hf κ
by
d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ μ_le : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) measure_ball_diam := _root_.measure_ball_diam hcompact hne hf κ : ℝ≥ 0 ∞
μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ↑ (# A) * _root_.measure_ball_diam hcompact hne hf κ
have volume_ball : ∀ x ∈ A, (volume X)⁻¹
* volume (ball x. 1 (diam / κ)) = measure_ball_diam := d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ μ_le : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) measure_ball_diam := _root_.measure_ball_diam hcompact hne hf κ : ℝ≥ 0 ∞
∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) = ↑ (# A) * measure_ball_diam
by
d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ μ_le : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) measure_ball_diam := _root_.measure_ball_diam hcompact hne hf κ : ℝ≥ 0 ∞
∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) = ↑ (# A) * measure_ball_diam
intro x _ d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ μ_le : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) measure_ball_diam := _root_.measure_ball_diam hcompact hne hf κ : ℝ≥ 0 ∞ x : ↑ Xa✝ : x ∈ A
(volume X)⁻¹ * volume (ball (↑ x) (diam / κ)) = measure_ball_diam
d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ μ_le : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) measure_ball_diam := _root_.measure_ball_diam hcompact hne hf κ : ℝ≥ 0 ∞
∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) = ↑ (# A) * measure_ball_diam
have : Nonempty (Fin d) := Fin.pos_iff_nonempty.mp hdd : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ μ_le : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) measure_ball_diam := _root_.measure_ball_diam hcompact hne hf κ : ℝ≥ 0 ∞ x : ↑ Xa✝ : x ∈ A this : Nonempty (Fin d)
(volume X)⁻¹ * volume (ball (↑ x) (diam / κ)) = measure_ball_diam
d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ μ_le : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) measure_ball_diam := _root_.measure_ball_diam hcompact hne hf κ : ℝ≥ 0 ∞
∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) = ↑ (# A) * measure_ball_diam
rw [ d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ μ_le : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) measure_ball_diam := _root_.measure_ball_diam hcompact hne hf κ : ℝ≥ 0 ∞ x : ↑ Xa✝ : x ∈ A this : Nonempty (Fin d)
(volume X)⁻¹ * volume (ball (↑ x) (diam / κ)) = measure_ball_diam
EuclideanSpace.volume_ball, d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ μ_le : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) measure_ball_diam := _root_.measure_ball_diam hcompact hne hf κ : ℝ≥ 0 ∞ x : ↑ Xa✝ : x ∈ A this : Nonempty (Fin d)
(volume X)⁻¹ *
(ENNReal.ofReal (diam / κ) ^ Fintype.card (Fin d) *
ENNReal.ofReal (√ Real.pi ^ Fintype.card (Fin d) / Real.Gamma (↑ (Fintype.card (Fin d)) / 2 + 1 ))) =
measure_ball_diam
d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ μ_le : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) measure_ball_diam := _root_.measure_ball_diam hcompact hne hf κ : ℝ≥ 0 ∞ x : ↑ Xa✝ : x ∈ A this : Nonempty (Fin d)
(volume X)⁻¹ * volume (ball (↑ x) (diam / κ)) = measure_ball_diam
Fintype.card_fin d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ μ_le : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) measure_ball_diam := _root_.measure_ball_diam hcompact hne hf κ : ℝ≥ 0 ∞ x : ↑ Xa✝ : x ∈ A this : Nonempty (Fin d)
(volume X)⁻¹ * (ENNReal.ofReal (diam / κ) ^ d * ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 ))) =
measure_ball_diam
] d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ μ_le : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) measure_ball_diam := _root_.measure_ball_diam hcompact hne hf κ : ℝ≥ 0 ∞ x : ↑ Xa✝ : x ∈ A this : Nonempty (Fin d)
(volume X)⁻¹ * (ENNReal.ofReal (diam / κ) ^ d * ENNReal.ofReal (√ Real.pi ^ d / Real.Gamma (↑ d / 2 + 1 ))) =
measure_ball_diam
d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ μ_le : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) measure_ball_diam := _root_.measure_ball_diam hcompact hne hf κ : ℝ≥ 0 ∞
∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) = ↑ (# A) * measure_ball_diam
rfl
d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ μ_le : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) measure_ball_diam := _root_.measure_ball_diam hcompact hne hf κ : ℝ≥ 0 ∞
μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ↑ (# A) * _root_.measure_ball_diam hcompact hne hf κ
rw [ d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ μ_le : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) measure_ball_diam := _root_.measure_ball_diam hcompact hne hf κ : ℝ≥ 0 ∞ volume_ball : ∀ x ∈ A, (volume X)⁻¹ * volume (ball (↑ x) (diam / κ)) = measure_ball_diam
∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) = ↑ (# A) * measure_ball_diam
sum_congr rfl volume_ball, d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ μ_le : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) measure_ball_diam := _root_.measure_ball_diam hcompact hne hf κ : ℝ≥ 0 ∞ volume_ball : ∀ x ∈ A, (volume X)⁻¹ * volume (ball (↑ x) (diam / κ)) = measure_ball_diam
∑ x ∈ A, measure_ball_diam = ↑ (# A) * measure_ball_diam
d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ μ_le : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) measure_ball_diam := _root_.measure_ball_diam hcompact hne hf κ : ℝ≥ 0 ∞ volume_ball : ∀ x ∈ A, (volume X)⁻¹ * volume (ball (↑ x) (diam / κ)) = measure_ball_diam
∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) = ↑ (# A) * measure_ball_diam
← nsmul_eq_muld : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ μ_le : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) measure_ball_diam := _root_.measure_ball_diam hcompact hne hf κ : ℝ≥ 0 ∞ volume_ball : ∀ x ∈ A, (volume X)⁻¹ * volume (ball (↑ x) (diam / κ)) = measure_ball_diam
∑ x ∈ A, measure_ball_diam = # A • measure_ball_diam
] d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ μ_le : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) measure_ball_diam := _root_.measure_ball_diam hcompact hne hf κ : ℝ≥ 0 ∞ volume_ball : ∀ x ∈ A, (volume X)⁻¹ * volume (ball (↑ x) (diam / κ)) = measure_ball_diam
∑ x ∈ A, measure_ball_diam = # A • measure_ball_diam
d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ μ_le : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) measure_ball_diam := _root_.measure_ball_diam hcompact hne hf κ : ℝ≥ 0 ∞
μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ↑ (# A) * _root_.measure_ball_diam hcompact hne hf κ
exact sum_const (measure_ball_diam)
d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κ
μ (rejected f hA κ) ≤ ↑ (# A) * measure_ball_diam hcompact hne hf κ
rwa [ d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ μ_le : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) measure_ball_diam := _root_.measure_ball_diam hcompact hne hf κ : ℝ≥ 0 ∞ sum_μ : ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) = ↑ (# A) * measure_ball_diam
μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ↑ (# A) * _root_.measure_ball_diam hcompact hne hf κ
sum_μ d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ measure_ball_diam := _root_.measure_ball_diam hcompact hne hf κ : ℝ≥ 0 ∞ μ_le : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ↑ (# A) * measure_ball_diam sum_μ : ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) = ↑ (# A) * measure_ball_diam
μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ↑ (# A) * _root_.measure_ball_diam hcompact hne hf κ
] d : ℕ hd : 0 < dX : Set (EuclideanSpace ℝ (Fin d)) hcompact : IsCompact X hne : X.Nonempty f : ↑ X → ℝhf : Continuous f A : Finset ↑ X hA : A.Nonempty κ : ℝ hκ : 0 < κdiam := _root_.diam hcompact hne hf : ℝ measure_ball_diam := _root_.measure_ball_diam hcompact hne hf κ : ℝ≥ 0 ∞ μ_le : μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ↑ (# A) * measure_ball_diam sum_μ : ∑ xᵢ ∈ A, (volume X)⁻¹ * volume (ball (↑ xᵢ) (diam / κ)) = ↑ (# A) * measure_ball_diam
μ (⋃ xᵢ ∈ A, ball xᵢ ((image_max f hA - f xᵢ) / κ)) ≤ ↑ (# A) * _root_.measure_ball_diam hcompact hne hf κ
at μ_le