Theorem: Seminorm.gauge_ball
File: Mathlib/Analysis/Convex/Gauge.lean

tactic: ext x
state_before: 𝕜 : Type ?u.260696
E : Type u_1
F : Type ?u.260702
inst✝¹ : AddCommGroup E
inst✝ : Module ℝ E
s t : Set E
a : ℝ
p : Seminorm ℝ E
⊢ gauge (ball p 0 1) = ↑p

tactic: obtain hp | hp := { r : ℝ | 0 < r ∧ x ∈ r • p.ball 0 1 }.eq_empty_or_nonempty
state_before: case h
𝕜 : Type ?u.260696
E : Type u_1
F : Type ?u.260702
inst✝¹ : AddCommGroup E
inst✝ : Module ℝ E
s t : Set E
a : ℝ
p : Seminorm ℝ E
x : E
⊢ gauge (ball p 0 1) x = ↑p x

tactic: refine' IsGLB.csInf_eq ⟨fun r => _, fun r hr => le_of_forall_pos_le_add fun ε hε => _⟩ hp
state_before: case h.inr
𝕜 : Type ?u.260696
E : Type u_1
F : Type ?u.260702
inst✝¹ : AddCommGroup E
inst✝ : Module ℝ E
s t : Set E
a : ℝ
p : Seminorm ℝ E
x : E
hp : Set.Nonempty {r | 0 < r ∧ x ∈ r • ball p 0 1}
⊢ gauge (ball p 0 1) x = ↑p x

tactic: rw [gauge, hp, Real.sInf_empty]
state_before: case h.inl
𝕜 : Type ?u.260696
E : Type u_1
F : Type ?u.260702
inst✝¹ : AddCommGroup E
inst✝ : Module ℝ E
s t : Set E
a : ℝ
p : Seminorm ℝ E
x : E
hp : {r | 0 < r ∧ x ∈ r • ball p 0 1} = ∅
⊢ gauge (ball p 0 1) x = ↑p x

tactic: by_contra h
state_before: case h.inl
𝕜 : Type ?u.260696
E : Type u_1
F : Type ?u.260702
inst✝¹ : AddCommGroup E
inst✝ : Module ℝ E
s t : Set E
a : ℝ
p : Seminorm ℝ E
x : E
hp : {r | 0 < r ∧ x ∈ r • ball p 0 1} = ∅
⊢ 0 = ↑p x

tactic: have hpx : 0 < p x := (map_nonneg _ _).lt_of_ne h
state_before: case h.inl
𝕜 : Type ?u.260696
E : Type u_1
F : Type ?u.260702
inst✝¹ : AddCommGroup E
inst✝ : Module ℝ E
s t : Set E
a : ℝ
p : Seminorm ℝ E
x : E
hp : {r | 0 < r ∧ x ∈ r • ball p 0 1} = ∅
h : ¬0 = ↑p x
⊢ False

tactic: have hpx₂ : 0 < 2 * p x := mul_pos zero_lt_two hpx
state_before: case h.inl
𝕜 : Type ?u.260696
E : Type u_1
F : Type ?u.260702
inst✝¹ : AddCommGroup E
inst✝ : Module ℝ E
s t : Set E
a : ℝ
p : Seminorm ℝ E
x : E
hp : {r | 0 < r ∧ x ∈ r • ball p 0 1} = ∅
h : ¬0 = ↑p x
hpx : 0 < ↑p x
⊢ False

tactic: refine' hp.subset ⟨hpx₂, (2 * p x)⁻¹ • x, _, smul_inv_smul₀ hpx₂.ne' _⟩
state_before: case h.inl
𝕜 : Type ?u.260696
E : Type u_1
F : Type ?u.260702
inst✝¹ : AddCommGroup E
inst✝ : Module ℝ E
s t : Set E
a : ℝ
p : Seminorm ℝ E
x : E
hp : {r | 0 < r ∧ x ∈ r • ball p 0 1} = ∅
h : ¬0 = ↑p x
hpx : 0 < ↑p x
hpx₂ : 0 < 2 * ↑p x
⊢ False

tactic: rw [p.mem_ball_zero, map_smul_eq_mul, Real.norm_eq_abs, abs_of_pos (inv_pos.2 hpx₂),
  inv_mul_lt_iff hpx₂, mul_one]
state_before: case h.inl
𝕜 : Type ?u.260696
E : Type u_1
F : Type ?u.260702
inst✝¹ : AddCommGroup E
inst✝ : Module ℝ E
s t : Set E
a : ℝ
p : Seminorm ℝ E
x : E
hp : {r | 0 < r ∧ x ∈ r • ball p 0 1} = ∅
h : ¬0 = ↑p x
hpx : 0 < ↑p x
hpx₂ : 0 < 2 * ↑p x
⊢ (2 * ↑p x)⁻¹ • x ∈ ball p 0 1

tactic: exact lt_mul_of_one_lt_left hpx one_lt_two
state_before: case h.inl
𝕜 : Type ?u.260696
E : Type u_1
F : Type ?u.260702
inst✝¹ : AddCommGroup E
inst✝ : Module ℝ E
s t : Set E
a : ℝ
p : Seminorm ℝ E
x : E
hp : {r | 0 < r ∧ x ∈ r • ball p 0 1} = ∅
h : ¬0 = ↑p x
hpx : 0 < ↑p x
hpx₂ : 0 < 2 * ↑p x
⊢ ↑p x < 2 * ↑p x

tactic: rintro ⟨hr, y, hy, rfl⟩
state_before: case h.inr.refine'_1
𝕜 : Type ?u.260696
E : Type u_1
F : Type ?u.260702
inst✝¹ : AddCommGroup E
inst✝ : Module ℝ E
s t : Set E
a : ℝ
p : Seminorm ℝ E
x : E
hp : Set.Nonempty {r | 0 < r ∧ x ∈ r • ball p 0 1}
r : ℝ
⊢ r ∈ {r | 0 < r ∧ x ∈ r • ball p 0 1} → ↑p x ≤ r

tactic: rw [p.mem_ball_zero] at hy
state_before: case h.inr.refine'_1.intro.intro.intro
𝕜 : Type ?u.260696
E : Type u_1
F : Type ?u.260702
inst✝¹ : AddCommGroup E
inst✝ : Module ℝ E
s t : Set E
a : ℝ
p : Seminorm ℝ E
r : ℝ
hr : 0 < r
y : E
hy : y ∈ ball p 0 1
hp : Set.Nonempty {r_1 | 0 < r_1 ∧ (fun x => r • x) y ∈ r_1 • ball p 0 1}
⊢ ↑p ((fun x => r • x) y) ≤ r

tactic: rw [map_smul_eq_mul, Real.norm_eq_abs, abs_of_pos hr]
state_before: case h.inr.refine'_1.intro.intro.intro
𝕜 : Type ?u.260696
E : Type u_1
F : Type ?u.260702
inst✝¹ : AddCommGroup E
inst✝ : Module ℝ E
s t : Set E
a : ℝ
p : Seminorm ℝ E
r : ℝ
hr : 0 < r
y : E
hy : ↑p y < 1
hp : Set.Nonempty {r_1 | 0 < r_1 ∧ (fun x => r • x) y ∈ r_1 • ball p 0 1}
⊢ ↑p ((fun x => r • x) y) ≤ r

tactic: exact mul_le_of_le_one_right hr.le hy.le
state_before: case h.inr.refine'_1.intro.intro.intro
𝕜 : Type ?u.260696
E : Type u_1
F : Type ?u.260702
inst✝¹ : AddCommGroup E
inst✝ : Module ℝ E
s t : Set E
a : ℝ
p : Seminorm ℝ E
r : ℝ
hr : 0 < r
y : E
hy : ↑p y < 1
hp : Set.Nonempty {r_1 | 0 < r_1 ∧ (fun x => r • x) y ∈ r_1 • ball p 0 1}
⊢ r * ↑p y ≤ r

tactic: have hpε : 0 < p x + ε :=
  add_pos_of_nonneg_of_pos (map_nonneg _ _) hε
state_before: case h.inr.refine'_2
𝕜 : Type ?u.260696
E : Type u_1
F : Type ?u.260702
inst✝¹ : AddCommGroup E
inst✝ : Module ℝ E
s t : Set E
a : ℝ
p : Seminorm ℝ E
x : E
hp : Set.Nonempty {r | 0 < r ∧ x ∈ r • ball p 0 1}
r : ℝ
hr : r ∈ lowerBounds {r | 0 < r ∧ x ∈ r • ball p 0 1}
ε : ℝ
hε : 0 < ε
⊢ r ≤ ↑p x + ε

tactic: refine' hr ⟨hpε, (p x + ε)⁻¹ • x, _, smul_inv_smul₀ hpε.ne' _⟩
state_before: case h.inr.refine'_2
𝕜 : Type ?u.260696
E : Type u_1
F : Type ?u.260702
inst✝¹ : AddCommGroup E
inst✝ : Module ℝ E
s t : Set E
a : ℝ
p : Seminorm ℝ E
x : E
hp : Set.Nonempty {r | 0 < r ∧ x ∈ r • ball p 0 1}
r : ℝ
hr : r ∈ lowerBounds {r | 0 < r ∧ x ∈ r • ball p 0 1}
ε : ℝ
hε : 0 < ε
hpε : 0 < ↑p x + ε
⊢ r ≤ ↑p x + ε

tactic: rw [p.mem_ball_zero, map_smul_eq_mul, Real.norm_eq_abs, abs_of_pos (inv_pos.2 hpε),
  inv_mul_lt_iff hpε, mul_one]
state_before: case h.inr.refine'_2
𝕜 : Type ?u.260696
E : Type u_1
F : Type ?u.260702
inst✝¹ : AddCommGroup E
inst✝ : Module ℝ E
s t : Set E
a : ℝ
p : Seminorm ℝ E
x : E
hp : Set.Nonempty {r | 0 < r ∧ x ∈ r • ball p 0 1}
r : ℝ
hr : r ∈ lowerBounds {r | 0 < r ∧ x ∈ r • ball p 0 1}
ε : ℝ
hε : 0 < ε
hpε : 0 < ↑p x + ε
⊢ (↑p x + ε)⁻¹ • x ∈ ball p 0 1

tactic: exact lt_add_of_pos_right _ hε
state_before: case h.inr.refine'_2
𝕜 : Type ?u.260696
E : Type u_1
F : Type ?u.260702
inst✝¹ : AddCommGroup E
inst✝ : Module ℝ E
s t : Set E
a : ℝ
p : Seminorm ℝ E
x : E
hp : Set.Nonempty {r | 0 < r ∧ x ∈ r • ball p 0 1}
r : ℝ
hr : r ∈ lowerBounds {r | 0 < r ∧ x ∈ r • ball p 0 1}
ε : ℝ
hε : 0 < ε
hpε : 0 < ↑p x + ε
⊢ ↑p x < ↑p x + ε