File: Mathlib/MeasureTheory/Measure/Doubling.lean

full_name: IsUnifLocDoublingMeasure
code: /-- A measure `μ` is said to be a uniformly locally doubling measure if there exists a constant `C`
such that for all sufficiently small radii `ε`, and for any centre, the measure of a ball of radius
`2 * ε` is bounded by `C` times the measure of the concentric ball of radius `ε`.

Note: it is important that this definition makes a demand only for sufficiently small `ε`. For
example we want hyperbolic space to carry the instance `IsUnifLocDoublingMeasure volume` but
volumes grow exponentially in hyperbolic space. To be really explicit, consider the hyperbolic plane
of curvature -1, the area of a disc of radius `ε` is `A(ε) = 2π(cosh(ε) - 1)` so
`A(2ε)/A(ε) ~ exp(ε)`. -/
class IsUnifLocDoublingMeasure {α : Type*} [MetricSpace α] [MeasurableSpace α]
  (μ : Measure α) : Prop where
  exists_measure_closedBall_le_mul'' :
    ∃ C : ℝ≥0, ∀ᶠ ε in 𝓝[>] 0, ∀ x, μ (closedBall x (2 * ε)) ≤ C * μ (closedBall x ε)
goal: Prop

full_name: IsUnifLocDoublingMeasure.exists_measure_closedBall_le_mul''
code: /-- A measure `μ` is said to be a uniformly locally doubling measure if there exists a constant `C`
such that for all sufficiently small radii `ε`, and for any centre, the measure of a ball of radius
`2 * ε` is bounded by `C` times the measure of the concentric ball of radius `ε`.

Note: it is important that this definition makes a demand only for sufficiently small `ε`. For
example we want hyperbolic space to carry the instance `IsUnifLocDoublingMeasure volume` but
volumes grow exponentially in hyperbolic space. To be really explicit, consider the hyperbolic plane
of curvature -1, the area of a disc of radius `ε` is `A(ε) = 2π(cosh(ε) - 1)` so
`A(2ε)/A(ε) ~ exp(ε)`. -/
class IsUnifLocDoublingMeasure {α : Type*} [MetricSpace α] [MeasurableSpace α]
  (μ : Measure α) : Prop where
  exists_measure_closedBall_le_mul'' :
    ∃ C : ℝ≥0, ∀ᶠ ε in 𝓝[>] 0, ∀ x, μ (closedBall x (2 * ε)) ≤ C * μ (closedBall x ε)
goal: ∃ C, ∀ᶠ (ε : ℝ) in 𝓝[>] 0, ∀ (x : α), μ (Metric.closedBall x (2 * ε)) ≤ ↑C * μ (Metric.closedBall x ε)

full_name: IsUnifLocDoublingMeasure.exists_measure_closedBall_le_mul
code: theorem exists_measure_closedBall_le_mul :
    ∃ C : ℝ≥0, ∀ᶠ ε in 𝓝[>] 0, ∀ x, μ (closedBall x (2 * ε)) ≤ C * μ (closedBall x ε) 
goal: ∃ C, ∀ᶠ (ε : ℝ) in 𝓝[>] 0, ∀ (x : α), μ (Metric.closedBall x (2 * ε)) ≤ ↑C * μ (Metric.closedBall x ε)

full_name: IsUnifLocDoublingMeasure.doublingConstant
code: /-- A doubling constant for a uniformly locally doubling measure.

See also `IsUnifLocDoublingMeasure.scalingConstantOf`. -/
def doublingConstant : ℝ≥0 
goal: ℝ≥0

full_name: IsUnifLocDoublingMeasure.exists_measure_closedBall_le_mul'
code: theorem exists_measure_closedBall_le_mul' :
    ∀ᶠ ε in 𝓝[>] 0, ∀ x, μ (closedBall x (2 * ε)) ≤ doublingConstant μ * μ (closedBall x ε) 
goal: ∀ᶠ (ε : ℝ) in 𝓝[>] 0,
  ∀ (x : α),
    μ (Metric.closedBall x (2 * ε)) ≤ ↑(IsUnifLocDoublingMeasure.doublingConstant μ) * μ (Metric.closedBall x ε)

full_name: IsUnifLocDoublingMeasure.exists_eventually_forall_measure_closedBall_le_mul
code: theorem exists_eventually_forall_measure_closedBall_le_mul (K : ℝ) :
    ∃ C : ℝ≥0, ∀ᶠ ε in 𝓝[>] 0, ∀ x, ∀ t ≤ K, μ (closedBall x (t * ε)) ≤ C * μ (closedBall x ε) 
goal: ∃ C, ∀ᶠ (ε : ℝ) in 𝓝[>] 0, ∀ (x : α), ∀ t ≤ K, μ (Metric.closedBall x (t * ε)) ≤ ↑C * μ (Metric.closedBall x ε)

full_name: IsUnifLocDoublingMeasure.scalingConstantOf
code: /-- A variant of `IsUnifLocDoublingMeasure.doublingConstant` which allows for scaling the
radius by values other than `2`. -/
def scalingConstantOf (K : ℝ) : ℝ≥0 
goal: ℝ≥0

full_name: IsUnifLocDoublingMeasure.one_le_scalingConstantOf
code: @[simp]
theorem one_le_scalingConstantOf (K : ℝ) : 1 ≤ scalingConstantOf μ K 
goal: 1 ≤ IsUnifLocDoublingMeasure.scalingConstantOf μ K

full_name: IsUnifLocDoublingMeasure.eventually_measure_mul_le_scalingConstantOf_mul
code: theorem eventually_measure_mul_le_scalingConstantOf_mul (K : ℝ) :
    ∃ R : ℝ,
      0 < R ∧
        ∀ x t r, t ∈ Ioc 0 K → r ≤ R →
          μ (closedBall x (t * r)) ≤ scalingConstantOf μ K * μ (closedBall x r) 
goal: ∃ R,
  0 < R ∧
    ∀ (x : α) (t r : ℝ),
      t ∈ Set.Ioc 0 K →
        r ≤ R →
          μ (Metric.closedBall x (t * r)) ≤
            ↑(IsUnifLocDoublingMeasure.scalingConstantOf μ K) * μ (Metric.closedBall x r)

full_name: IsUnifLocDoublingMeasure.eventually_measure_le_scaling_constant_mul
code: theorem eventually_measure_le_scaling_constant_mul (K : ℝ) :
    ∀ᶠ r in 𝓝[>] 0, ∀ x, μ (closedBall x (K * r)) ≤ scalingConstantOf μ K * μ (closedBall x r) 
goal: ∀ᶠ (r : ℝ) in 𝓝[>] 0,
  ∀ (x : α),
    μ (Metric.closedBall x (K * r)) ≤ ↑(IsUnifLocDoublingMeasure.scalingConstantOf μ K) * μ (Metric.closedBall x r)

full_name: IsUnifLocDoublingMeasure.eventually_measure_le_scaling_constant_mul'
code: theorem eventually_measure_le_scaling_constant_mul' (K : ℝ) (hK : 0 < K) :
    ∀ᶠ r in 𝓝[>] 0, ∀ x,
      μ (closedBall x r) ≤ scalingConstantOf μ K⁻¹ * μ (closedBall x (K * r)) 
goal: ∀ᶠ (r : ℝ) in 𝓝[>] 0,
  ∀ (x : α),
    μ (Metric.closedBall x r) ≤ ↑(IsUnifLocDoublingMeasure.scalingConstantOf μ K⁻¹) * μ (Metric.closedBall x (K * r))

full_name: IsUnifLocDoublingMeasure.scalingScaleOf
code: /-- A scale below which the doubling measure `μ` satisfies good rescaling properties when one
multiplies the radius of balls by at most `K`, as stated
in `IsUnifLocDoublingMeasure.measure_mul_le_scalingConstantOf_mul`. -/
def scalingScaleOf (K : ℝ) : ℝ 
goal: ℝ

full_name: IsUnifLocDoublingMeasure.scalingScaleOf_pos
code: theorem scalingScaleOf_pos (K : ℝ) : 0 < scalingScaleOf μ K 
goal: 0 < IsUnifLocDoublingMeasure.scalingScaleOf μ K

full_name: IsUnifLocDoublingMeasure.measure_mul_le_scalingConstantOf_mul
code: theorem measure_mul_le_scalingConstantOf_mul {K : ℝ} {x : α} {t r : ℝ} (ht : t ∈ Ioc 0 K)
    (hr : r ≤ scalingScaleOf μ K) :
    μ (closedBall x (t * r)) ≤ scalingConstantOf μ K * μ (closedBall x r) 
goal: μ (Metric.closedBall x (t * r)) ≤ ↑(IsUnifLocDoublingMeasure.scalingConstantOf μ K) * μ (Metric.closedBall x r)