[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝¹ : AddGroup E
inst✝ : NonarchAddGroupSeminormClass F E
f : F
x y : E
⊢ ↑f (x - y) ≤ max (↑f x) (↑f y)
[PROOFSTEP]
rw [sub_eq_add_neg, ← NonarchAddGroupSeminormClass.map_neg_eq_map' f y]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝¹ : AddGroup E
inst✝ : NonarchAddGroupSeminormClass F E
f : F
x y : E
⊢ ↑f (x + -y) ≤ max (↑f x) (↑f (-y))
[PROOFSTEP]
exact map_add_le_max _ _ _
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝¹ : AddGroup E
inst✝ : NonarchAddGroupSeminormClass F E
src✝ : NonarchAddGroupSeminormClass F E := inst✝
f : F
x y : E
⊢ ∀ (a : E), 0 ≤ ↑f a
[PROOFSTEP]
intro a
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝¹ : AddGroup E
inst✝ : NonarchAddGroupSeminormClass F E
src✝ : NonarchAddGroupSeminormClass F E := inst✝
f : F
x y a : E
⊢ 0 ≤ ↑f a
[PROOFSTEP]
rw [← NonarchAddGroupSeminormClass.map_zero f, ← sub_self a]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝¹ : AddGroup E
inst✝ : NonarchAddGroupSeminormClass F E
src✝ : NonarchAddGroupSeminormClass F E := inst✝
f : F
x y a : E
⊢ ↑f (a - a) ≤ ↑f a
[PROOFSTEP]
exact le_trans (map_sub_le_max _ _ _) (by rw [max_self (f a)])
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝¹ : AddGroup E
inst✝ : NonarchAddGroupSeminormClass F E
src✝ : NonarchAddGroupSeminormClass F E := inst✝
f : F
x y a : E
⊢ max (↑f a) (↑f a) ≤ ↑f a
[PROOFSTEP]
rw [max_self (f a)]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝² : Group E
inst✝¹ : Group F
inst✝ : Group G
p q f g : GroupSeminorm E
h : (fun f => f.toFun) f = (fun f => f.toFun) g
⊢ f = g
[PROOFSTEP]
cases f
[GOAL]
case mk
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝² : Group E
inst✝¹ : Group F
inst✝ : Group G
p q g : GroupSeminorm E
toFun✝ : E → ℝ
map_one'✝ : toFun✝ 1 = 0
mul_le'✝ : ∀ (x y : E), toFun✝ (x * y) ≤ toFun✝ x + toFun✝ y
inv'✝ : ∀ (x : E), toFun✝ x⁻¹ = toFun✝ x
h :
  (fun f => f.toFun) { toFun := toFun✝, map_one' := map_one'✝, mul_le' := mul_le'✝, inv' := inv'✝ } =
    (fun f => f.toFun) g
⊢ { toFun := toFun✝, map_one' := map_one'✝, mul_le' := mul_le'✝, inv' := inv'✝ } = g
[PROOFSTEP]
cases g
[GOAL]
case mk.mk
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝² : Group E
inst✝¹ : Group F
inst✝ : Group G
p q : GroupSeminorm E
toFun✝¹ : E → ℝ
map_one'✝¹ : toFun✝¹ 1 = 0
mul_le'✝¹ : ∀ (x y : E), toFun✝¹ (x * y) ≤ toFun✝¹ x + toFun✝¹ y
inv'✝¹ : ∀ (x : E), toFun✝¹ x⁻¹ = toFun✝¹ x
toFun✝ : E → ℝ
map_one'✝ : toFun✝ 1 = 0
mul_le'✝ : ∀ (x y : E), toFun✝ (x * y) ≤ toFun✝ x + toFun✝ y
inv'✝ : ∀ (x : E), toFun✝ x⁻¹ = toFun✝ x
h :
  (fun f => f.toFun) { toFun := toFun✝¹, map_one' := map_one'✝¹, mul_le' := mul_le'✝¹, inv' := inv'✝¹ } =
    (fun f => f.toFun) { toFun := toFun✝, map_one' := map_one'✝, mul_le' := mul_le'✝, inv' := inv'✝ }
⊢ { toFun := toFun✝¹, map_one' := map_one'✝¹, mul_le' := mul_le'✝¹, inv' := inv'✝¹ } =
    { toFun := toFun✝, map_one' := map_one'✝, mul_le' := mul_le'✝, inv' := inv'✝ }
[PROOFSTEP]
congr
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝² : Group E
inst✝¹ : Group F
inst✝ : Group G
p✝ q✝ : GroupSeminorm E
f : F →* E
p q : GroupSeminorm E
⊢ (fun x => ↑p x + ↑q x) 1 = 0
[PROOFSTEP]
simp_rw [map_one_eq_zero p, map_one_eq_zero q, zero_add]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝² : Group E
inst✝¹ : Group F
inst✝ : Group G
p✝ q✝ : GroupSeminorm E
f : F →* E
p q : GroupSeminorm E
x : E
⊢ (fun x => ↑p x + ↑q x) x⁻¹ = (fun x => ↑p x + ↑q x) x
[PROOFSTEP]
simp_rw [map_inv_eq_map p, map_inv_eq_map q]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝² : Group E
inst✝¹ : Group F
inst✝ : Group G
p✝ q✝ : GroupSeminorm E
f : F →* E
p q : GroupSeminorm E
⊢ (↑p ⊔ ↑q) 1 = 0
[PROOFSTEP]
rw [Pi.sup_apply, ← map_one_eq_zero p, sup_eq_left, map_one_eq_zero p, map_one_eq_zero q]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝² : Group E
inst✝¹ : Group F
inst✝ : Group G
p✝ q✝ : GroupSeminorm E
f : F →* E
p q : GroupSeminorm E
x : E
⊢ (↑p ⊔ ↑q) x⁻¹ = (↑p ⊔ ↑q) x
[PROOFSTEP]
rw [Pi.sup_apply, Pi.sup_apply, map_inv_eq_map p, map_inv_eq_map q]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝² : Group E
inst✝¹ : Group F
inst✝ : Group G
p✝ q : GroupSeminorm E
f✝ : F →* E
p : GroupSeminorm E
f : F →* E
⊢ (fun x => ↑p (↑f x)) 1 = 0
[PROOFSTEP]
simp_rw [f.map_one, map_one_eq_zero p]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝² : Group E
inst✝¹ : Group F
inst✝ : Group G
p✝ q : GroupSeminorm E
f✝ : F →* E
p : GroupSeminorm E
f : F →* E
x : F
⊢ (fun x => ↑p (↑f x)) x⁻¹ = (fun x => ↑p (↑f x)) x
[PROOFSTEP]
simp_rw [map_inv, map_inv_eq_map p]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝¹ : CommGroup E
inst✝ : CommGroup F
p✝ q✝ : GroupSeminorm E
x✝ y : E
p q : GroupSeminorm E
x : E
⊢ 0 ∈ lowerBounds (range fun y => ↑p y + ↑q (x / y))
[PROOFSTEP]
rintro _ ⟨x, rfl⟩
[GOAL]
case intro
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝¹ : CommGroup E
inst✝ : CommGroup F
p✝ q✝ : GroupSeminorm E
x✝¹ y : E
p q : GroupSeminorm E
x✝ x : E
⊢ 0 ≤ (fun y => ↑p y + ↑q (x✝ / y)) x
[PROOFSTEP]
dsimp
[GOAL]
case intro
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝¹ : CommGroup E
inst✝ : CommGroup F
p✝ q✝ : GroupSeminorm E
x✝¹ y : E
p q : GroupSeminorm E
x✝ x : E
⊢ 0 ≤ ↑p x + ↑q (x✝ / x)
[PROOFSTEP]
positivity
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝¹ : CommGroup E
inst✝ : CommGroup F
p✝ q✝ : GroupSeminorm E
x y : E
p q : GroupSeminorm E
r : ℝ
hr : 0 < r
⊢ ↑p 1 + ↑q (1 / 1) < r
[PROOFSTEP]
rwa [div_one, map_one_eq_zero p, map_one_eq_zero q, add_zero]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝¹ : CommGroup E
inst✝ : CommGroup F
p✝ q✝ : GroupSeminorm E
x✝ y✝ : E
p q : GroupSeminorm E
x y u v : E
⊢ (fun x => ⨅ (y : E), ↑p y + ↑q (x / y)) (x * y) ≤ ↑p u + ↑q (x / u) + (↑p v + ↑q (y / v))
[PROOFSTEP]
refine' ciInf_le_of_le mul_bddBelow_range_add (u * v) _
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝¹ : CommGroup E
inst✝ : CommGroup F
p✝ q✝ : GroupSeminorm E
x✝ y✝ : E
p q : GroupSeminorm E
x y u v : E
⊢ ↑p (u * v) + ↑q (x * y / (u * v)) ≤ ↑p u + ↑q (x / u) + (↑p v + ↑q (y / v))
[PROOFSTEP]
rw [mul_div_mul_comm, add_add_add_comm]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝¹ : CommGroup E
inst✝ : CommGroup F
p✝ q✝ : GroupSeminorm E
x✝ y✝ : E
p q : GroupSeminorm E
x y u v : E
⊢ ↑p (u * v) + ↑q (x / u * (y / v)) ≤ ↑p u + ↑p v + (↑q (x / u) + ↑q (y / v))
[PROOFSTEP]
exact add_le_add (map_mul_le_add p _ _) (map_mul_le_add q _ _)
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝¹ : CommGroup E
inst✝ : CommGroup F
p✝ q✝ : GroupSeminorm E
x✝ y : E
p q : GroupSeminorm E
x : E
⊢ ⨅ (x_1 : E), ↑p x_1⁻¹ + ↑q (x⁻¹ / x_1⁻¹) = (fun x => ⨅ (y : E), ↑p y + ↑q (x / y)) x
[PROOFSTEP]
simp_rw [map_inv_eq_map p, ← inv_div', map_inv_eq_map q]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝¹ : CommGroup E
inst✝ : CommGroup F
p✝ q✝ : GroupSeminorm E
x✝ y : E
src✝ : SemilatticeSup (GroupSeminorm E) := semilatticeSup
p q : GroupSeminorm E
x : E
⊢ ↑p x + ↑q (x / x) ≤ (fun f => ↑f) p x
[PROOFSTEP]
rw [div_self', map_one_eq_zero q, add_zero]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝¹ : CommGroup E
inst✝ : CommGroup F
p✝ q✝ : GroupSeminorm E
x✝ y : E
src✝ : SemilatticeSup (GroupSeminorm E) := semilatticeSup
p q : GroupSeminorm E
x : E
⊢ ↑p 1 + ↑q (x / 1) ≤ (fun f => ↑f) q x
[PROOFSTEP]
simpa only [div_one x, map_one_eq_zero p, zero_add (q x)] using le_rfl
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : AddGroup E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
p : AddGroupSeminorm E
inst✝ : DecidableEq E
x y : E
⊢ (fun x => if x = 0 then 0 else 1) (x + y) ≤ (fun x => if x = 0 then 0 else 1) x + (fun x => if x = 0 then 0 else 1) y
[PROOFSTEP]
by_cases hx : x = 0
[GOAL]
case pos
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : AddGroup E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
p : AddGroupSeminorm E
inst✝ : DecidableEq E
x y : E
hx : x = 0
⊢ (fun x => if x = 0 then 0 else 1) (x + y) ≤ (fun x => if x = 0 then 0 else 1) x + (fun x => if x = 0 then 0 else 1) y
[PROOFSTEP]
simp only
[GOAL]
case pos
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : AddGroup E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
p : AddGroupSeminorm E
inst✝ : DecidableEq E
x y : E
hx : x = 0
⊢ (if x + y = 0 then 0 else 1) ≤ (if x = 0 then 0 else 1) + if y = 0 then 0 else 1
[PROOFSTEP]
rw [if_pos hx, hx, zero_add, zero_add]
[GOAL]
case neg
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : AddGroup E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
p : AddGroupSeminorm E
inst✝ : DecidableEq E
x y : E
hx : ¬x = 0
⊢ (fun x => if x = 0 then 0 else 1) (x + y) ≤ (fun x => if x = 0 then 0 else 1) x + (fun x => if x = 0 then 0 else 1) y
[PROOFSTEP]
simp only
[GOAL]
case neg
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : AddGroup E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
p : AddGroupSeminorm E
inst✝ : DecidableEq E
x y : E
hx : ¬x = 0
⊢ (if x + y = 0 then 0 else 1) ≤ (if x = 0 then 0 else 1) + if y = 0 then 0 else 1
[PROOFSTEP]
rw [if_neg hx]
[GOAL]
case neg
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : AddGroup E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
p : AddGroupSeminorm E
inst✝ : DecidableEq E
x y : E
hx : ¬x = 0
⊢ (if x + y = 0 then 0 else 1) ≤ 1 + if y = 0 then 0 else 1
[PROOFSTEP]
refine' le_add_of_le_of_nonneg _ _
[GOAL]
case neg.refine'_1
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : AddGroup E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
p : AddGroupSeminorm E
inst✝ : DecidableEq E
x y : E
hx : ¬x = 0
⊢ (if x + y = 0 then 0 else 1) ≤ 1
[PROOFSTEP]
split_ifs
[GOAL]
case neg.refine'_2
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : AddGroup E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
p : AddGroupSeminorm E
inst✝ : DecidableEq E
x y : E
hx : ¬x = 0
⊢ 0 ≤ if y = 0 then 0 else 1
[PROOFSTEP]
split_ifs
[GOAL]
case pos
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : AddGroup E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
p : AddGroupSeminorm E
inst✝ : DecidableEq E
x y : E
hx : ¬x = 0
h✝ : x + y = 0
⊢ 0 ≤ 1
[PROOFSTEP]
norm_num
[GOAL]
case neg
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : AddGroup E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
p : AddGroupSeminorm E
inst✝ : DecidableEq E
x y : E
hx : ¬x = 0
h✝ : ¬x + y = 0
⊢ 1 ≤ 1
[PROOFSTEP]
norm_num
[GOAL]
case pos
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : AddGroup E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
p : AddGroupSeminorm E
inst✝ : DecidableEq E
x y : E
hx : ¬x = 0
h✝ : y = 0
⊢ 0 ≤ 0
[PROOFSTEP]
norm_num
[GOAL]
case neg
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : AddGroup E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
p : AddGroupSeminorm E
inst✝ : DecidableEq E
x y : E
hx : ¬x = 0
h✝ : ¬y = 0
⊢ 0 ≤ 1
[PROOFSTEP]
norm_num
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : AddGroup E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
p : AddGroupSeminorm E
inst✝ : DecidableEq E
x : E
⊢ (fun x => if x = 0 then 0 else 1) (-x) = (fun x => if x = 0 then 0 else 1) x
[PROOFSTEP]
simp_rw [neg_eq_zero]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝³ : AddGroup E
inst✝² : SMul R ℝ
inst✝¹ : SMul R ℝ≥0
inst✝ : IsScalarTower R ℝ≥0 ℝ
p✝ : AddGroupSeminorm E
r : R
p : AddGroupSeminorm E
⊢ (fun x => r • ↑p x) 0 = 0
[PROOFSTEP]
simp only [← smul_one_smul ℝ≥0 r (_ : ℝ), NNReal.smul_def, smul_eq_mul, map_zero, mul_zero]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝³ : AddGroup E
inst✝² : SMul R ℝ
inst✝¹ : SMul R ℝ≥0
inst✝ : IsScalarTower R ℝ≥0 ℝ
p✝ : AddGroupSeminorm E
r : R
p : AddGroupSeminorm E
x✝¹ x✝ : E
⊢ (fun x => r • ↑p x) (x✝¹ + x✝) ≤ (fun x => r • ↑p x) x✝¹ + (fun x => r • ↑p x) x✝
[PROOFSTEP]
simp only [← smul_one_smul ℝ≥0 r (_ : ℝ), NNReal.smul_def, smul_eq_mul, ← mul_add]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝³ : AddGroup E
inst✝² : SMul R ℝ
inst✝¹ : SMul R ℝ≥0
inst✝ : IsScalarTower R ℝ≥0 ℝ
p✝ : AddGroupSeminorm E
r : R
p : AddGroupSeminorm E
x✝¹ x✝ : E
⊢ ↑(r • 1) * ↑p (x✝¹ + x✝) ≤ ↑(r • 1) * (↑p x✝¹ + ↑p x✝)
[PROOFSTEP]
gcongr
[GOAL]
case h
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝³ : AddGroup E
inst✝² : SMul R ℝ
inst✝¹ : SMul R ℝ≥0
inst✝ : IsScalarTower R ℝ≥0 ℝ
p✝ : AddGroupSeminorm E
r : R
p : AddGroupSeminorm E
x✝¹ x✝ : E
⊢ ↑p (x✝¹ + x✝) ≤ ↑p x✝¹ + ↑p x✝
[PROOFSTEP]
apply map_add_le_add
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝³ : AddGroup E
inst✝² : SMul R ℝ
inst✝¹ : SMul R ℝ≥0
inst✝ : IsScalarTower R ℝ≥0 ℝ
p✝ : AddGroupSeminorm E
r : R
p : AddGroupSeminorm E
x : E
⊢ (fun x => r • ↑p x) (-x) = (fun x => r • ↑p x) x
[PROOFSTEP]
simp_rw [map_neg_eq_map]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝³ : AddGroup E
inst✝² : SMul R ℝ
inst✝¹ : SMul R ℝ≥0
inst✝ : IsScalarTower R ℝ≥0 ℝ
p✝ : AddGroupSeminorm E
r : R
p q : AddGroupSeminorm E
x y : ℝ
⊢ r • max x y = max (r • x) (r • y)
[PROOFSTEP]
simpa only [← smul_eq_mul, ← NNReal.smul_def, smul_one_smul ℝ≥0 r (_ : ℝ)] using
  mul_max_of_nonneg x y (r • (1 : ℝ≥0) : ℝ≥0).coe_nonneg
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝² : AddGroup E
inst✝¹ : AddGroup F
inst✝ : AddGroup G
p q f g : NonarchAddGroupSeminorm E
h : (fun f => f.toFun) f = (fun f => f.toFun) g
⊢ f = g
[PROOFSTEP]
obtain ⟨⟨_, _⟩, _, _⟩ := f
[GOAL]
case mk.mk
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝² : AddGroup E
inst✝¹ : AddGroup F
inst✝ : AddGroup G
p q g : NonarchAddGroupSeminorm E
toFun✝ : E → ℝ
map_zero'✝ : toFun✝ 0 = 0
add_le_max'✝ :
  ∀ (r s : E),
    ZeroHom.toFun { toFun := toFun✝, map_zero' := map_zero'✝ } (r + s) ≤
      max (ZeroHom.toFun { toFun := toFun✝, map_zero' := map_zero'✝ } r)
        (ZeroHom.toFun { toFun := toFun✝, map_zero' := map_zero'✝ } s)
neg'✝ :
  ∀ (r : E),
    ZeroHom.toFun { toFun := toFun✝, map_zero' := map_zero'✝ } (-r) =
      ZeroHom.toFun { toFun := toFun✝, map_zero' := map_zero'✝ } r
h :
  (fun f => f.toFun)
      { toZeroHom := { toFun := toFun✝, map_zero' := map_zero'✝ }, add_le_max' := add_le_max'✝, neg' := neg'✝ } =
    (fun f => f.toFun) g
⊢ { toZeroHom := { toFun := toFun✝, map_zero' := map_zero'✝ }, add_le_max' := add_le_max'✝, neg' := neg'✝ } = g
[PROOFSTEP]
cases g
[GOAL]
case mk.mk.mk
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝² : AddGroup E
inst✝¹ : AddGroup F
inst✝ : AddGroup G
p q : NonarchAddGroupSeminorm E
toFun✝ : E → ℝ
map_zero'✝ : toFun✝ 0 = 0
add_le_max'✝¹ :
  ∀ (r s : E),
    ZeroHom.toFun { toFun := toFun✝, map_zero' := map_zero'✝ } (r + s) ≤
      max (ZeroHom.toFun { toFun := toFun✝, map_zero' := map_zero'✝ } r)
        (ZeroHom.toFun { toFun := toFun✝, map_zero' := map_zero'✝ } s)
neg'✝¹ :
  ∀ (r : E),
    ZeroHom.toFun { toFun := toFun✝, map_zero' := map_zero'✝ } (-r) =
      ZeroHom.toFun { toFun := toFun✝, map_zero' := map_zero'✝ } r
toZeroHom✝ : ZeroHom E ℝ
add_le_max'✝ :
  ∀ (r s : E), ZeroHom.toFun toZeroHom✝ (r + s) ≤ max (ZeroHom.toFun toZeroHom✝ r) (ZeroHom.toFun toZeroHom✝ s)
neg'✝ : ∀ (r : E), ZeroHom.toFun toZeroHom✝ (-r) = ZeroHom.toFun toZeroHom✝ r
h :
  (fun f => f.toFun)
      { toZeroHom := { toFun := toFun✝, map_zero' := map_zero'✝ }, add_le_max' := add_le_max'✝¹, neg' := neg'✝¹ } =
    (fun f => f.toFun) { toZeroHom := toZeroHom✝, add_le_max' := add_le_max'✝, neg' := neg'✝ }
⊢ { toZeroHom := { toFun := toFun✝, map_zero' := map_zero'✝ }, add_le_max' := add_le_max'✝¹, neg' := neg'✝¹ } =
    { toZeroHom := toZeroHom✝, add_le_max' := add_le_max'✝, neg' := neg'✝ }
[PROOFSTEP]
congr
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝² : AddGroup E
inst✝¹ : AddGroup F
inst✝ : AddGroup G
p q : NonarchAddGroupSeminorm E
⊢ ↑p.toZeroHom = ↑p
[PROOFSTEP]
rfl
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝² : AddGroup E
inst✝¹ : AddGroup F
inst✝ : AddGroup G
p q : NonarchAddGroupSeminorm E
f : F →+ E
r s : E
⊢ ZeroHom.toFun { toFun := 0, map_zero' := (_ : OfNat.ofNat 0 0 = 0) } (r + s) ≤
    max (ZeroHom.toFun { toFun := 0, map_zero' := (_ : OfNat.ofNat 0 0 = 0) } r)
      (ZeroHom.toFun { toFun := 0, map_zero' := (_ : OfNat.ofNat 0 0 = 0) } s)
[PROOFSTEP]
simp only [Pi.zero_apply]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝² : AddGroup E
inst✝¹ : AddGroup F
inst✝ : AddGroup G
p q : NonarchAddGroupSeminorm E
f : F →+ E
r s : E
⊢ 0 ≤ max 0 0
[PROOFSTEP]
rw [max_eq_right]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝² : AddGroup E
inst✝¹ : AddGroup F
inst✝ : AddGroup G
p q : NonarchAddGroupSeminorm E
f : F →+ E
r s : E
⊢ 0 ≤ 0
[PROOFSTEP]
rfl
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝² : AddGroup E
inst✝¹ : AddGroup F
inst✝ : AddGroup G
p✝ q✝ : NonarchAddGroupSeminorm E
f : F →+ E
p q : NonarchAddGroupSeminorm E
⊢ (↑p ⊔ ↑q) 0 = 0
[PROOFSTEP]
rw [Pi.sup_apply, ← map_zero p, sup_eq_left, map_zero p, map_zero q]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝² : AddGroup E
inst✝¹ : AddGroup F
inst✝ : AddGroup G
p✝ q✝ : NonarchAddGroupSeminorm E
f : F →+ E
p q : NonarchAddGroupSeminorm E
x : E
⊢ ZeroHom.toFun { toFun := ↑p ⊔ ↑q, map_zero' := (_ : (↑p ⊔ ↑q) 0 = 0) } (-x) =
    ZeroHom.toFun { toFun := ↑p ⊔ ↑q, map_zero' := (_ : (↑p ⊔ ↑q) 0 = 0) } x
[PROOFSTEP]
simp_rw [Pi.sup_apply, map_neg_eq_map p, map_neg_eq_map q]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝¹ : AddCommGroup E
inst✝ : AddCommGroup F
p✝ q✝ : NonarchAddGroupSeminorm E
x✝ y : E
p q : NonarchAddGroupSeminorm E
x : E
⊢ 0 ∈ lowerBounds (range fun y => ↑p y + ↑q (x - y))
[PROOFSTEP]
rintro _ ⟨x, rfl⟩
[GOAL]
case intro
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝¹ : AddCommGroup E
inst✝ : AddCommGroup F
p✝ q✝ : NonarchAddGroupSeminorm E
x✝¹ y : E
p q : NonarchAddGroupSeminorm E
x✝ x : E
⊢ 0 ≤ (fun y => ↑p y + ↑q (x✝ - y)) x
[PROOFSTEP]
dsimp
[GOAL]
case intro
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝¹ : AddCommGroup E
inst✝ : AddCommGroup F
p✝ q✝ : NonarchAddGroupSeminorm E
x✝¹ y : E
p q : NonarchAddGroupSeminorm E
x✝ x : E
⊢ 0 ≤ ↑p x + ↑q (x✝ - x)
[PROOFSTEP]
positivity
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : Group E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
inst✝ : DecidableEq E
x y : E
⊢ (fun x => if x = 1 then 0 else 1) (x * y) ≤ (fun x => if x = 1 then 0 else 1) x + (fun x => if x = 1 then 0 else 1) y
[PROOFSTEP]
by_cases hx : x = 1
[GOAL]
case pos
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : Group E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
inst✝ : DecidableEq E
x y : E
hx : x = 1
⊢ (fun x => if x = 1 then 0 else 1) (x * y) ≤ (fun x => if x = 1 then 0 else 1) x + (fun x => if x = 1 then 0 else 1) y
[PROOFSTEP]
simp only
[GOAL]
case pos
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : Group E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
inst✝ : DecidableEq E
x y : E
hx : x = 1
⊢ (if x * y = 1 then 0 else 1) ≤ (if x = 1 then 0 else 1) + if y = 1 then 0 else 1
[PROOFSTEP]
rw [if_pos hx, hx, one_mul, zero_add]
[GOAL]
case neg
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : Group E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
inst✝ : DecidableEq E
x y : E
hx : ¬x = 1
⊢ (fun x => if x = 1 then 0 else 1) (x * y) ≤ (fun x => if x = 1 then 0 else 1) x + (fun x => if x = 1 then 0 else 1) y
[PROOFSTEP]
simp only
[GOAL]
case neg
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : Group E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
inst✝ : DecidableEq E
x y : E
hx : ¬x = 1
⊢ (if x * y = 1 then 0 else 1) ≤ (if x = 1 then 0 else 1) + if y = 1 then 0 else 1
[PROOFSTEP]
rw [if_neg hx]
[GOAL]
case neg
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : Group E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
inst✝ : DecidableEq E
x y : E
hx : ¬x = 1
⊢ (if x * y = 1 then 0 else 1) ≤ 1 + if y = 1 then 0 else 1
[PROOFSTEP]
refine' le_add_of_le_of_nonneg _ _
[GOAL]
case neg.refine'_1
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : Group E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
inst✝ : DecidableEq E
x y : E
hx : ¬x = 1
⊢ (if x * y = 1 then 0 else 1) ≤ 1
[PROOFSTEP]
split_ifs
[GOAL]
case neg.refine'_2
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : Group E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
inst✝ : DecidableEq E
x y : E
hx : ¬x = 1
⊢ 0 ≤ if y = 1 then 0 else 1
[PROOFSTEP]
split_ifs
[GOAL]
case pos
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : Group E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
inst✝ : DecidableEq E
x y : E
hx : ¬x = 1
h✝ : x * y = 1
⊢ 0 ≤ 1
[PROOFSTEP]
norm_num
[GOAL]
case neg
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : Group E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
inst✝ : DecidableEq E
x y : E
hx : ¬x = 1
h✝ : ¬x * y = 1
⊢ 1 ≤ 1
[PROOFSTEP]
norm_num
[GOAL]
case pos
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : Group E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
inst✝ : DecidableEq E
x y : E
hx : ¬x = 1
h✝ : y = 1
⊢ 0 ≤ 0
[PROOFSTEP]
norm_num
[GOAL]
case neg
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : Group E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
inst✝ : DecidableEq E
x y : E
hx : ¬x = 1
h✝ : ¬y = 1
⊢ 0 ≤ 1
[PROOFSTEP]
norm_num
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : Group E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
inst✝ : DecidableEq E
x : E
⊢ (fun x => if x = 1 then 0 else 1) x⁻¹ = (fun x => if x = 1 then 0 else 1) x
[PROOFSTEP]
simp_rw [inv_eq_one]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝³ : Group E
inst✝² : SMul R ℝ
inst✝¹ : SMul R ℝ≥0
inst✝ : IsScalarTower R ℝ≥0 ℝ
r : R
p : GroupSeminorm E
⊢ (fun x => r • ↑p x) 1 = 0
[PROOFSTEP]
simp only [← smul_one_smul ℝ≥0 r (_ : ℝ), NNReal.smul_def, smul_eq_mul, map_one_eq_zero p, mul_zero]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝³ : Group E
inst✝² : SMul R ℝ
inst✝¹ : SMul R ℝ≥0
inst✝ : IsScalarTower R ℝ≥0 ℝ
r : R
p : GroupSeminorm E
x✝¹ x✝ : E
⊢ (fun x => r • ↑p x) (x✝¹ * x✝) ≤ (fun x => r • ↑p x) x✝¹ + (fun x => r • ↑p x) x✝
[PROOFSTEP]
simp only [← smul_one_smul ℝ≥0 r (_ : ℝ), NNReal.smul_def, smul_eq_mul, ← mul_add]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝³ : Group E
inst✝² : SMul R ℝ
inst✝¹ : SMul R ℝ≥0
inst✝ : IsScalarTower R ℝ≥0 ℝ
r : R
p : GroupSeminorm E
x✝¹ x✝ : E
⊢ ↑(r • 1) * ↑p (x✝¹ * x✝) ≤ ↑(r • 1) * (↑p x✝¹ + ↑p x✝)
[PROOFSTEP]
gcongr
[GOAL]
case h
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝³ : Group E
inst✝² : SMul R ℝ
inst✝¹ : SMul R ℝ≥0
inst✝ : IsScalarTower R ℝ≥0 ℝ
r : R
p : GroupSeminorm E
x✝¹ x✝ : E
⊢ ↑p (x✝¹ * x✝) ≤ ↑p x✝¹ + ↑p x✝
[PROOFSTEP]
apply map_mul_le_add
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝³ : Group E
inst✝² : SMul R ℝ
inst✝¹ : SMul R ℝ≥0
inst✝ : IsScalarTower R ℝ≥0 ℝ
r : R
p : GroupSeminorm E
x : E
⊢ (fun x => r • ↑p x) x⁻¹ = (fun x => r • ↑p x) x
[PROOFSTEP]
simp_rw [map_inv_eq_map p]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝³ : Group E
inst✝² : SMul R ℝ
inst✝¹ : SMul R ℝ≥0
inst✝ : IsScalarTower R ℝ≥0 ℝ
r : R
p q : GroupSeminorm E
x y : ℝ
⊢ r • max x y = max (r • x) (r • y)
[PROOFSTEP]
simpa only [← smul_eq_mul, ← NNReal.smul_def, smul_one_smul ℝ≥0 r (_ : ℝ)] using
  mul_max_of_nonneg x y (r • (1 : ℝ≥0) : ℝ≥0).coe_nonneg
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : AddGroup E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
inst✝ : DecidableEq E
x y : E
⊢ ZeroHom.toFun { toFun := fun x => if x = 0 then 0 else 1, map_zero' := (_ : (if 0 = 0 then 0 else 1) = 0) } (x + y) ≤
    max (ZeroHom.toFun { toFun := fun x => if x = 0 then 0 else 1, map_zero' := (_ : (if 0 = 0 then 0 else 1) = 0) } x)
      (ZeroHom.toFun { toFun := fun x => if x = 0 then 0 else 1, map_zero' := (_ : (if 0 = 0 then 0 else 1) = 0) } y)
[PROOFSTEP]
by_cases hx : x = 0
[GOAL]
case pos
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : AddGroup E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
inst✝ : DecidableEq E
x y : E
hx : x = 0
⊢ ZeroHom.toFun { toFun := fun x => if x = 0 then 0 else 1, map_zero' := (_ : (if 0 = 0 then 0 else 1) = 0) } (x + y) ≤
    max (ZeroHom.toFun { toFun := fun x => if x = 0 then 0 else 1, map_zero' := (_ : (if 0 = 0 then 0 else 1) = 0) } x)
      (ZeroHom.toFun { toFun := fun x => if x = 0 then 0 else 1, map_zero' := (_ : (if 0 = 0 then 0 else 1) = 0) } y)
[PROOFSTEP]
simp_rw [if_pos hx, hx, zero_add]
[GOAL]
case pos
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : AddGroup E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
inst✝ : DecidableEq E
x y : E
hx : x = 0
⊢ (if y = 0 then 0 else 1) ≤ max 0 (if y = 0 then 0 else 1)
[PROOFSTEP]
exact le_max_of_le_right (le_refl _)
[GOAL]
case neg
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : AddGroup E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
inst✝ : DecidableEq E
x y : E
hx : ¬x = 0
⊢ ZeroHom.toFun { toFun := fun x => if x = 0 then 0 else 1, map_zero' := (_ : (if 0 = 0 then 0 else 1) = 0) } (x + y) ≤
    max (ZeroHom.toFun { toFun := fun x => if x = 0 then 0 else 1, map_zero' := (_ : (if 0 = 0 then 0 else 1) = 0) } x)
      (ZeroHom.toFun { toFun := fun x => if x = 0 then 0 else 1, map_zero' := (_ : (if 0 = 0 then 0 else 1) = 0) } y)
[PROOFSTEP]
simp_rw [if_neg hx]
[GOAL]
case neg
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : AddGroup E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
inst✝ : DecidableEq E
x y : E
hx : ¬x = 0
⊢ (if x + y = 0 then 0 else 1) ≤ max 1 (if y = 0 then 0 else 1)
[PROOFSTEP]
split_ifs
[GOAL]
case pos
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : AddGroup E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
inst✝ : DecidableEq E
x y : E
hx : ¬x = 0
h✝¹ : x + y = 0
h✝ : y = 0
⊢ 0 ≤ max 1 0
[PROOFSTEP]
norm_num
[GOAL]
case neg
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : AddGroup E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
inst✝ : DecidableEq E
x y : E
hx : ¬x = 0
h✝¹ : x + y = 0
h✝ : ¬y = 0
⊢ 0 ≤ max 1 1
[PROOFSTEP]
norm_num
[GOAL]
case pos
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : AddGroup E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
inst✝ : DecidableEq E
x y : E
hx : ¬x = 0
h✝¹ : ¬x + y = 0
h✝ : y = 0
⊢ 1 ≤ max 1 0
[PROOFSTEP]
norm_num
[GOAL]
case neg
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : AddGroup E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
inst✝ : DecidableEq E
x y : E
hx : ¬x = 0
h✝¹ : ¬x + y = 0
h✝ : ¬y = 0
⊢ 1 ≤ max 1 1
[PROOFSTEP]
norm_num
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝⁴ : AddGroup E
inst✝³ : SMul R ℝ
inst✝² : SMul R ℝ≥0
inst✝¹ : IsScalarTower R ℝ≥0 ℝ
inst✝ : DecidableEq E
x : E
⊢ ZeroHom.toFun { toFun := fun x => if x = 0 then 0 else 1, map_zero' := (_ : (if 0 = 0 then 0 else 1) = 0) } (-x) =
    ZeroHom.toFun { toFun := fun x => if x = 0 then 0 else 1, map_zero' := (_ : (if 0 = 0 then 0 else 1) = 0) } x
[PROOFSTEP]
simp_rw [neg_eq_zero]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝³ : AddGroup E
inst✝² : SMul R ℝ
inst✝¹ : SMul R ℝ≥0
inst✝ : IsScalarTower R ℝ≥0 ℝ
r : R
p : NonarchAddGroupSeminorm E
⊢ (fun x => r • ↑p x) 0 = 0
[PROOFSTEP]
simp only [← smul_one_smul ℝ≥0 r (_ : ℝ), NNReal.smul_def, smul_eq_mul, map_zero p, mul_zero]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝³ : AddGroup E
inst✝² : SMul R ℝ
inst✝¹ : SMul R ℝ≥0
inst✝ : IsScalarTower R ℝ≥0 ℝ
r : R
p : NonarchAddGroupSeminorm E
x y : E
⊢ ZeroHom.toFun { toFun := fun x => r • ↑p x, map_zero' := (_ : r • ↑p 0 = 0) } (x + y) ≤
    max (ZeroHom.toFun { toFun := fun x => r • ↑p x, map_zero' := (_ : r • ↑p 0 = 0) } x)
      (ZeroHom.toFun { toFun := fun x => r • ↑p x, map_zero' := (_ : r • ↑p 0 = 0) } y)
[PROOFSTEP]
simp only [← smul_one_smul ℝ≥0 r (_ : ℝ), NNReal.smul_def, smul_eq_mul, ← mul_max_of_nonneg _ _ NNReal.zero_le_coe]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝³ : AddGroup E
inst✝² : SMul R ℝ
inst✝¹ : SMul R ℝ≥0
inst✝ : IsScalarTower R ℝ≥0 ℝ
r : R
p : NonarchAddGroupSeminorm E
x y : E
⊢ ↑(r • 1) * ↑p (x + y) ≤ ↑(r • 1) * max (↑p x) (↑p y)
[PROOFSTEP]
gcongr
[GOAL]
case h
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝³ : AddGroup E
inst✝² : SMul R ℝ
inst✝¹ : SMul R ℝ≥0
inst✝ : IsScalarTower R ℝ≥0 ℝ
r : R
p : NonarchAddGroupSeminorm E
x y : E
⊢ ↑p (x + y) ≤ max (↑p x) (↑p y)
[PROOFSTEP]
apply map_add_le_max
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝³ : AddGroup E
inst✝² : SMul R ℝ
inst✝¹ : SMul R ℝ≥0
inst✝ : IsScalarTower R ℝ≥0 ℝ
r : R
p : NonarchAddGroupSeminorm E
x : E
⊢ ZeroHom.toFun { toFun := fun x => r • ↑p x, map_zero' := (_ : r • ↑p 0 = 0) } (-x) =
    ZeroHom.toFun { toFun := fun x => r • ↑p x, map_zero' := (_ : r • ↑p 0 = 0) } x
[PROOFSTEP]
simp_rw [map_neg_eq_map p]
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝³ : AddGroup E
inst✝² : SMul R ℝ
inst✝¹ : SMul R ℝ≥0
inst✝ : IsScalarTower R ℝ≥0 ℝ
r : R
p q : NonarchAddGroupSeminorm E
x y : ℝ
⊢ r • max x y = max (r • x) (r • y)
[PROOFSTEP]
simpa only [← smul_eq_mul, ← NNReal.smul_def, smul_one_smul ℝ≥0 r (_ : ℝ)] using
  mul_max_of_nonneg x y (r • (1 : ℝ≥0) : ℝ≥0).coe_nonneg
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝² : Group E
inst✝¹ : Group F
inst✝ : Group G
p q f g : GroupNorm E
h : (fun f => f.toFun) f = (fun f => f.toFun) g
⊢ f = g
[PROOFSTEP]
obtain ⟨⟨_, _, _, _⟩, _⟩ := f
[GOAL]
case mk.mk
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝² : Group E
inst✝¹ : Group F
inst✝ : Group G
p q g : GroupNorm E
toFun✝ : E → ℝ
map_one'✝ : toFun✝ 1 = 0
mul_le'✝ : ∀ (x y : E), toFun✝ (x * y) ≤ toFun✝ x + toFun✝ y
inv'✝ : ∀ (x : E), toFun✝ x⁻¹ = toFun✝ x
eq_one_of_map_eq_zero'✝ :
  ∀ (x : E),
    GroupSeminorm.toFun { toFun := toFun✝, map_one' := map_one'✝, mul_le' := mul_le'✝, inv' := inv'✝ } x = 0 → x = 1
h :
  (fun f => f.toFun)
      { toGroupSeminorm := { toFun := toFun✝, map_one' := map_one'✝, mul_le' := mul_le'✝, inv' := inv'✝ },
        eq_one_of_map_eq_zero' := eq_one_of_map_eq_zero'✝ } =
    (fun f => f.toFun) g
⊢ { toGroupSeminorm := { toFun := toFun✝, map_one' := map_one'✝, mul_le' := mul_le'✝, inv' := inv'✝ },
      eq_one_of_map_eq_zero' := eq_one_of_map_eq_zero'✝ } =
    g
[PROOFSTEP]
cases g
[GOAL]
case mk.mk.mk
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝² : Group E
inst✝¹ : Group F
inst✝ : Group G
p q : GroupNorm E
toFun✝ : E → ℝ
map_one'✝ : toFun✝ 1 = 0
mul_le'✝ : ∀ (x y : E), toFun✝ (x * y) ≤ toFun✝ x + toFun✝ y
inv'✝ : ∀ (x : E), toFun✝ x⁻¹ = toFun✝ x
eq_one_of_map_eq_zero'✝¹ :
  ∀ (x : E),
    GroupSeminorm.toFun { toFun := toFun✝, map_one' := map_one'✝, mul_le' := mul_le'✝, inv' := inv'✝ } x = 0 → x = 1
toGroupSeminorm✝ : GroupSeminorm E
eq_one_of_map_eq_zero'✝ : ∀ (x : E), GroupSeminorm.toFun toGroupSeminorm✝ x = 0 → x = 1
h :
  (fun f => f.toFun)
      { toGroupSeminorm := { toFun := toFun✝, map_one' := map_one'✝, mul_le' := mul_le'✝, inv' := inv'✝ },
        eq_one_of_map_eq_zero' := eq_one_of_map_eq_zero'✝¹ } =
    (fun f => f.toFun) { toGroupSeminorm := toGroupSeminorm✝, eq_one_of_map_eq_zero' := eq_one_of_map_eq_zero'✝ }
⊢ { toGroupSeminorm := { toFun := toFun✝, map_one' := map_one'✝, mul_le' := mul_le'✝, inv' := inv'✝ },
      eq_one_of_map_eq_zero' := eq_one_of_map_eq_zero'✝¹ } =
    { toGroupSeminorm := toGroupSeminorm✝, eq_one_of_map_eq_zero' := eq_one_of_map_eq_zero'✝ }
[PROOFSTEP]
congr
[GOAL]
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝¹ : AddGroup E
inst✝ : AddGroup F
p q f g : NonarchAddGroupNorm E
h : (fun f => f.toFun) f = (fun f => f.toFun) g
⊢ f = g
[PROOFSTEP]
obtain ⟨⟨⟨_, _⟩, _, _⟩, _⟩ := f
[GOAL]
case mk.mk.mk
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝¹ : AddGroup E
inst✝ : AddGroup F
p q g : NonarchAddGroupNorm E
toFun✝ : E → ℝ
map_zero'✝ : toFun✝ 0 = 0
add_le_max'✝ :
  ∀ (r s : E),
    ZeroHom.toFun { toFun := toFun✝, map_zero' := map_zero'✝ } (r + s) ≤
      max (ZeroHom.toFun { toFun := toFun✝, map_zero' := map_zero'✝ } r)
        (ZeroHom.toFun { toFun := toFun✝, map_zero' := map_zero'✝ } s)
neg'✝ :
  ∀ (r : E),
    ZeroHom.toFun { toFun := toFun✝, map_zero' := map_zero'✝ } (-r) =
      ZeroHom.toFun { toFun := toFun✝, map_zero' := map_zero'✝ } r
eq_zero_of_map_eq_zero'✝ :
  ∀ (x : E),
    ZeroHom.toFun
          { toZeroHom := { toFun := toFun✝, map_zero' := map_zero'✝ }, add_le_max' := add_le_max'✝,
              neg' := neg'✝ }.toZeroHom
          x =
        0 →
      x = 0
h :
  (fun f => f.toFun)
      {
        toNonarchAddGroupSeminorm :=
          { toZeroHom := { toFun := toFun✝, map_zero' := map_zero'✝ }, add_le_max' := add_le_max'✝, neg' := neg'✝ },
        eq_zero_of_map_eq_zero' := eq_zero_of_map_eq_zero'✝ } =
    (fun f => f.toFun) g
⊢ {
      toNonarchAddGroupSeminorm :=
        { toZeroHom := { toFun := toFun✝, map_zero' := map_zero'✝ }, add_le_max' := add_le_max'✝, neg' := neg'✝ },
      eq_zero_of_map_eq_zero' := eq_zero_of_map_eq_zero'✝ } =
    g
[PROOFSTEP]
cases g
[GOAL]
case mk.mk.mk.mk
ι : Type u_1
R : Type u_2
R' : Type u_3
E : Type u_4
F : Type u_5
G : Type u_6
inst✝¹ : AddGroup E
inst✝ : AddGroup F
p q : NonarchAddGroupNorm E
toFun✝ : E → ℝ
map_zero'✝ : toFun✝ 0 = 0
add_le_max'✝ :
  ∀ (r s : E),
    ZeroHom.toFun { toFun := toFun✝, map_zero' := map_zero'✝ } (r + s) ≤
      max (ZeroHom.toFun { toFun := toFun✝, map_zero' := map_zero'✝ } r)
        (ZeroHom.toFun { toFun := toFun✝, map_zero' := map_zero'✝ } s)
neg'✝ :
  ∀ (r : E),
    ZeroHom.toFun { toFun := toFun✝, map_zero' := map_zero'✝ } (-r) =
      ZeroHom.toFun { toFun := toFun✝, map_zero' := map_zero'✝ } r
eq_zero_of_map_eq_zero'✝¹ :
  ∀ (x : E),
    ZeroHom.toFun
          { toZeroHom := { toFun := toFun✝, map_zero' := map_zero'✝ }, add_le_max' := add_le_max'✝,
              neg' := neg'✝ }.toZeroHom
          x =
        0 →
      x = 0
toNonarchAddGroupSeminorm✝ : NonarchAddGroupSeminorm E
eq_zero_of_map_eq_zero'✝ : ∀ (x : E), ZeroHom.toFun toNonarchAddGroupSeminorm✝.toZeroHom x = 0 → x = 0
h :
  (fun f => f.toFun)
      {
        toNonarchAddGroupSeminorm :=
          { toZeroHom := { toFun := toFun✝, map_zero' := map_zero'✝ }, add_le_max' := add_le_max'✝, neg' := neg'✝ },
        eq_zero_of_map_eq_zero' := eq_zero_of_map_eq_zero'✝¹ } =
    (fun f => f.toFun)
      { toNonarchAddGroupSeminorm := toNonarchAddGroupSeminorm✝, eq_zero_of_map_eq_zero' := eq_zero_of_map_eq_zero'✝ }
⊢ {
      toNonarchAddGroupSeminorm :=
        { toZeroHom := { toFun := toFun✝, map_zero' := map_zero'✝ }, add_le_max' := add_le_max'✝, neg' := neg'✝ },
      eq_zero_of_map_eq_zero' := eq_zero_of_map_eq_zero'✝¹ } =
    { toNonarchAddGroupSeminorm := toNonarchAddGroupSeminorm✝, eq_zero_of_map_eq_zero' := eq_zero_of_map_eq_zero'✝ }
[PROOFSTEP]
congr
