[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : P →A[R] Q
src✝ : V →ₗ[R] W := f.linear
⊢ Continuous
    {
          toAddHom :=
            { toFun := ↑f.linear,
              map_add' :=
                (_ :
                  ∀ (x y : V),
                    AddHom.toFun src✝.toAddHom (x + y) = AddHom.toFun src✝.toAddHom x + AddHom.toFun src✝.toAddHom y) },
          map_smul' :=
            (_ :
              ∀ (r : R) (x : V),
                AddHom.toFun src✝.toAddHom (r • x) = ↑(RingHom.id R) r • AddHom.toFun src✝.toAddHom x) }.toAddHom.toFun
[PROOFSTEP]
rw [AffineMap.continuous_linear_iff]
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : P →A[R] Q
src✝ : V →ₗ[R] W := f.linear
⊢ Continuous ↑f.toAffineMap
[PROOFSTEP]
exact f.cont
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : P →A[R] Q
⊢ ↑(contLinear f) = f.linear
[PROOFSTEP]
ext
[GOAL]
case h
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : P →A[R] Q
x✝ : V
⊢ ↑↑(contLinear f) x✝ = ↑f.linear x✝
[PROOFSTEP]
rfl
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : P →A[R] Q
⊢ contLinear f = 0 ↔ ∃ q, f = const R P q
[PROOFSTEP]
have h₁ : f.contLinear = 0 ↔ (f : P →ᵃ[R] Q).linear = 0 :=
  by
  refine' ⟨fun h => _, fun h => _⟩ <;> ext
  · rw [← coe_contLinear_eq_linear, h]; rfl
  · rw [← coe_linear_eq_coe_contLinear, h]; rfl
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : P →A[R] Q
⊢ contLinear f = 0 ↔ f.linear = 0
[PROOFSTEP]
refine' ⟨fun h => _, fun h => _⟩
[GOAL]
case refine'_1
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : P →A[R] Q
h : contLinear f = 0
⊢ f.linear = 0
[PROOFSTEP]
ext
[GOAL]
case refine'_2
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : P →A[R] Q
h : f.linear = 0
⊢ contLinear f = 0
[PROOFSTEP]
ext
[GOAL]
case refine'_1.h
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : P →A[R] Q
h : contLinear f = 0
x✝ : V
⊢ ↑f.linear x✝ = ↑0 x✝
[PROOFSTEP]
rw [← coe_contLinear_eq_linear, h]
[GOAL]
case refine'_1.h
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : P →A[R] Q
h : contLinear f = 0
x✝ : V
⊢ ↑↑0 x✝ = ↑0 x✝
[PROOFSTEP]
rfl
[GOAL]
case refine'_2.h
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : P →A[R] Q
h : f.linear = 0
x✝ : V
⊢ ↑(contLinear f) x✝ = ↑0 x✝
[PROOFSTEP]
rw [← coe_linear_eq_coe_contLinear, h]
[GOAL]
case refine'_2.h
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : P →A[R] Q
h : f.linear = 0
x✝ : V
⊢ ↑0 x✝ = ↑0 x✝
[PROOFSTEP]
rfl
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : P →A[R] Q
h₁ : contLinear f = 0 ↔ f.linear = 0
⊢ contLinear f = 0 ↔ ∃ q, f = const R P q
[PROOFSTEP]
have h₂ : ∀ q : Q, f = const R P q ↔ (f : P →ᵃ[R] Q) = AffineMap.const R P q :=
  by
  intro q
  refine' ⟨fun h => _, fun h => _⟩ <;> ext
  · rw [h]; rfl
  · rw [← coe_to_affineMap, h]; rfl
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : P →A[R] Q
h₁ : contLinear f = 0 ↔ f.linear = 0
⊢ ∀ (q : Q), f = const R P q ↔ f.toAffineMap = AffineMap.const R P q
[PROOFSTEP]
intro q
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : P →A[R] Q
h₁ : contLinear f = 0 ↔ f.linear = 0
q : Q
⊢ f = const R P q ↔ f.toAffineMap = AffineMap.const R P q
[PROOFSTEP]
refine' ⟨fun h => _, fun h => _⟩
[GOAL]
case refine'_1
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : P →A[R] Q
h₁ : contLinear f = 0 ↔ f.linear = 0
q : Q
h : f = const R P q
⊢ f.toAffineMap = AffineMap.const R P q
[PROOFSTEP]
ext
[GOAL]
case refine'_2
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : P →A[R] Q
h₁ : contLinear f = 0 ↔ f.linear = 0
q : Q
h : f.toAffineMap = AffineMap.const R P q
⊢ f = const R P q
[PROOFSTEP]
ext
[GOAL]
case refine'_1.h
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : P →A[R] Q
h₁ : contLinear f = 0 ↔ f.linear = 0
q : Q
h : f = const R P q
p✝ : P
⊢ ↑f.toAffineMap p✝ = ↑(AffineMap.const R P q) p✝
[PROOFSTEP]
rw [h]
[GOAL]
case refine'_1.h
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : P →A[R] Q
h₁ : contLinear f = 0 ↔ f.linear = 0
q : Q
h : f = const R P q
p✝ : P
⊢ ↑(const R P q).toAffineMap p✝ = ↑(AffineMap.const R P q) p✝
[PROOFSTEP]
rfl
[GOAL]
case refine'_2.h
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : P →A[R] Q
h₁ : contLinear f = 0 ↔ f.linear = 0
q : Q
h : f.toAffineMap = AffineMap.const R P q
x✝ : P
⊢ ↑f x✝ = ↑(const R P q) x✝
[PROOFSTEP]
rw [← coe_to_affineMap, h]
[GOAL]
case refine'_2.h
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : P →A[R] Q
h₁ : contLinear f = 0 ↔ f.linear = 0
q : Q
h : f.toAffineMap = AffineMap.const R P q
x✝ : P
⊢ ↑(AffineMap.const R P q) x✝ = ↑(const R P q) x✝
[PROOFSTEP]
rfl
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : P →A[R] Q
h₁ : contLinear f = 0 ↔ f.linear = 0
h₂ : ∀ (q : Q), f = const R P q ↔ f.toAffineMap = AffineMap.const R P q
⊢ contLinear f = 0 ↔ ∃ q, f = const R P q
[PROOFSTEP]
simp_rw [h₁, h₂]
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : P →A[R] Q
h₁ : contLinear f = 0 ↔ f.linear = 0
h₂ : ∀ (q : Q), f = const R P q ↔ f.toAffineMap = AffineMap.const R P q
⊢ f.linear = 0 ↔ ∃ q, f.toAffineMap = AffineMap.const R P q
[PROOFSTEP]
exact (f : P →ᵃ[R] Q).linear_eq_zero_iff_exists_const
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : V →L[R] W
⊢ contLinear (ContinuousLinearMap.toContinuousAffineMap f) = f
[PROOFSTEP]
ext
[GOAL]
case h
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : V →L[R] W
x✝ : V
⊢ ↑(contLinear (ContinuousLinearMap.toContinuousAffineMap f)) x✝ = ↑f x✝
[PROOFSTEP]
rfl
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : V →A[R] W
⊢ ↑f = ↑(contLinear f) + Function.const V (↑f 0)
[PROOFSTEP]
rcases f with ⟨f, h⟩
[GOAL]
case mk
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : V →ᵃ[R] W
h : Continuous f.toFun
⊢ ↑{ toAffineMap := f, cont := h } =
    ↑(contLinear { toAffineMap := f, cont := h }) + Function.const V (↑{ toAffineMap := f, cont := h } 0)
[PROOFSTEP]
rw [coe_mk_const_linear_eq_linear, coe_mk, f.decomp, Pi.add_apply, LinearMap.map_zero, zero_add, ← Function.const_def]
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : V →A[𝕜] W
h : ↑f 0 = 0
⊢ ‖f‖ = max ‖↑f 0‖ ‖contLinear f‖
[PROOFSTEP]
rw [norm_def]
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : V →A[𝕜] W
h : ↑f 0 = 0
⊢ max ‖↑f 0‖ ‖contLinear f‖ = max 0 ‖contLinear f‖
[PROOFSTEP]
rw [h, norm_zero]
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : V →A[𝕜] W
⊢ (fun f => max ‖↑f 0‖ ‖contLinear f‖) 0 = 0
[PROOFSTEP]
simp [(ContinuousAffineMap.zero_apply)]
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f✝ f g : V →A[𝕜] W
⊢ (fun f => max ‖↑f 0‖ ‖contLinear f‖) (f + g) ≤
    (fun f => max ‖↑f 0‖ ‖contLinear f‖) f + (fun f => max ‖↑f 0‖ ‖contLinear f‖) g
[PROOFSTEP]
simp only [coe_add, max_le_iff]
  -- Porting note: previously `Pi.add_apply, add_contLinear, ` in the previous `simp only`
          -- suffices, but now they don't fire.
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f✝ f g : V →A[𝕜] W
⊢ ‖(↑f + ↑g) 0‖ ≤ max ‖↑f 0‖ ‖contLinear f‖ + max ‖↑g 0‖ ‖contLinear g‖ ∧
    ‖contLinear (f + g)‖ ≤ max ‖↑f 0‖ ‖contLinear f‖ + max ‖↑g 0‖ ‖contLinear g‖
[PROOFSTEP]
rw [add_contLinear]
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f✝ f g : V →A[𝕜] W
⊢ ‖(↑f + ↑g) 0‖ ≤ max ‖↑f 0‖ ‖contLinear f‖ + max ‖↑g 0‖ ‖contLinear g‖ ∧
    ‖contLinear f + contLinear g‖ ≤ max ‖↑f 0‖ ‖contLinear f‖ + max ‖↑g 0‖ ‖contLinear g‖
[PROOFSTEP]
exact
  ⟨(norm_add_le _ _).trans (add_le_add (le_max_left _ _) (le_max_left _ _)),
    (norm_add_le _ _).trans (add_le_add (le_max_right _ _) (le_max_right _ _))⟩
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f✝ f : V →A[𝕜] W
⊢ (fun f => max ‖↑f 0‖ ‖contLinear f‖) (-f) = (fun f => max ‖↑f 0‖ ‖contLinear f‖) f
[PROOFSTEP]
simp [(ContinuousAffineMap.neg_apply)]
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f✝ f : V →A[𝕜] W
h₀ :
  AddGroupSeminorm.toFun
      { toFun := fun f => max ‖↑f 0‖ ‖contLinear f‖, map_zero' := (_ : max ‖↑0 0‖ ‖0‖ = 0),
        add_le' :=
          (_ :
            ∀ (f g : V →A[𝕜] W),
              (fun f => max ‖↑f 0‖ ‖contLinear f‖) (f + g) ≤
                (fun f => max ‖↑f 0‖ ‖contLinear f‖) f + (fun f => max ‖↑f 0‖ ‖contLinear f‖) g),
        neg' := (_ : ∀ (f : V →A[𝕜] W), max ‖↑(-f) 0‖ ‖-contLinear f‖ = max ‖↑f 0‖ ‖contLinear f‖) }
      f =
    0
⊢ f = 0
[PROOFSTEP]
rcases max_eq_iff.mp h₀ with (⟨h₁, h₂⟩ | ⟨h₁, h₂⟩)
[GOAL]
case inl.intro
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f✝ f : V →A[𝕜] W
h₀ :
  AddGroupSeminorm.toFun
      { toFun := fun f => max ‖↑f 0‖ ‖contLinear f‖, map_zero' := (_ : max ‖↑0 0‖ ‖0‖ = 0),
        add_le' :=
          (_ :
            ∀ (f g : V →A[𝕜] W),
              (fun f => max ‖↑f 0‖ ‖contLinear f‖) (f + g) ≤
                (fun f => max ‖↑f 0‖ ‖contLinear f‖) f + (fun f => max ‖↑f 0‖ ‖contLinear f‖) g),
        neg' := (_ : ∀ (f : V →A[𝕜] W), max ‖↑(-f) 0‖ ‖-contLinear f‖ = max ‖↑f 0‖ ‖contLinear f‖) }
      f =
    0
h₁ : ‖↑f 0‖ = 0
h₂ : ‖contLinear f‖ ≤ ‖↑f 0‖
⊢ f = 0
[PROOFSTEP]
rw [h₁] at h₂ 
[GOAL]
case inr.intro
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f✝ f : V →A[𝕜] W
h₀ :
  AddGroupSeminorm.toFun
      { toFun := fun f => max ‖↑f 0‖ ‖contLinear f‖, map_zero' := (_ : max ‖↑0 0‖ ‖0‖ = 0),
        add_le' :=
          (_ :
            ∀ (f g : V →A[𝕜] W),
              (fun f => max ‖↑f 0‖ ‖contLinear f‖) (f + g) ≤
                (fun f => max ‖↑f 0‖ ‖contLinear f‖) f + (fun f => max ‖↑f 0‖ ‖contLinear f‖) g),
        neg' := (_ : ∀ (f : V →A[𝕜] W), max ‖↑(-f) 0‖ ‖-contLinear f‖ = max ‖↑f 0‖ ‖contLinear f‖) }
      f =
    0
h₁ : ‖contLinear f‖ = 0
h₂ : ‖↑f 0‖ ≤ ‖contLinear f‖
⊢ f = 0
[PROOFSTEP]
rw [h₁] at h₂ 
[GOAL]
case inl.intro
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f✝ f : V →A[𝕜] W
h₀ :
  AddGroupSeminorm.toFun
      { toFun := fun f => max ‖↑f 0‖ ‖contLinear f‖, map_zero' := (_ : max ‖↑0 0‖ ‖0‖ = 0),
        add_le' :=
          (_ :
            ∀ (f g : V →A[𝕜] W),
              (fun f => max ‖↑f 0‖ ‖contLinear f‖) (f + g) ≤
                (fun f => max ‖↑f 0‖ ‖contLinear f‖) f + (fun f => max ‖↑f 0‖ ‖contLinear f‖) g),
        neg' := (_ : ∀ (f : V →A[𝕜] W), max ‖↑(-f) 0‖ ‖-contLinear f‖ = max ‖↑f 0‖ ‖contLinear f‖) }
      f =
    0
h₁ : ‖↑f 0‖ = 0
h₂ : ‖contLinear f‖ ≤ 0
⊢ f = 0
[PROOFSTEP]
rw [norm_le_zero_iff, contLinear_eq_zero_iff_exists_const] at h₂ 
[GOAL]
case inl.intro
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f✝ f : V →A[𝕜] W
h₀ :
  AddGroupSeminorm.toFun
      { toFun := fun f => max ‖↑f 0‖ ‖contLinear f‖, map_zero' := (_ : max ‖↑0 0‖ ‖0‖ = 0),
        add_le' :=
          (_ :
            ∀ (f g : V →A[𝕜] W),
              (fun f => max ‖↑f 0‖ ‖contLinear f‖) (f + g) ≤
                (fun f => max ‖↑f 0‖ ‖contLinear f‖) f + (fun f => max ‖↑f 0‖ ‖contLinear f‖) g),
        neg' := (_ : ∀ (f : V →A[𝕜] W), max ‖↑(-f) 0‖ ‖-contLinear f‖ = max ‖↑f 0‖ ‖contLinear f‖) }
      f =
    0
h₁ : ‖↑f 0‖ = 0
h₂ : ∃ q, f = const 𝕜 V q
⊢ f = 0
[PROOFSTEP]
obtain ⟨q, rfl⟩ := h₂
[GOAL]
case inl.intro.intro
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : V →A[𝕜] W
q : W
h₀ :
  AddGroupSeminorm.toFun
      { toFun := fun f => max ‖↑f 0‖ ‖contLinear f‖, map_zero' := (_ : max ‖↑0 0‖ ‖0‖ = 0),
        add_le' :=
          (_ :
            ∀ (f g : V →A[𝕜] W),
              (fun f => max ‖↑f 0‖ ‖contLinear f‖) (f + g) ≤
                (fun f => max ‖↑f 0‖ ‖contLinear f‖) f + (fun f => max ‖↑f 0‖ ‖contLinear f‖) g),
        neg' := (_ : ∀ (f : V →A[𝕜] W), max ‖↑(-f) 0‖ ‖-contLinear f‖ = max ‖↑f 0‖ ‖contLinear f‖) }
      (const 𝕜 V q) =
    0
h₁ : ‖↑(const 𝕜 V q) 0‖ = 0
⊢ const 𝕜 V q = 0
[PROOFSTEP]
simp only [norm_eq_zero] at h₁ 
[GOAL]
case inl.intro.intro
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : V →A[𝕜] W
q : W
h₀ :
  AddGroupSeminorm.toFun
      { toFun := fun f => max ‖↑f 0‖ ‖contLinear f‖, map_zero' := (_ : max ‖↑0 0‖ ‖0‖ = 0),
        add_le' :=
          (_ :
            ∀ (f g : V →A[𝕜] W),
              (fun f => max ‖↑f 0‖ ‖contLinear f‖) (f + g) ≤
                (fun f => max ‖↑f 0‖ ‖contLinear f‖) f + (fun f => max ‖↑f 0‖ ‖contLinear f‖) g),
        neg' := (_ : ∀ (f : V →A[𝕜] W), max ‖↑(-f) 0‖ ‖-contLinear f‖ = max ‖↑f 0‖ ‖contLinear f‖) }
      (const 𝕜 V q) =
    0
h₁ : ↑(const 𝕜 V q) 0 = 0
⊢ const 𝕜 V q = 0
[PROOFSTEP]
rw [coe_const, Function.const_apply] at h₁ 
[GOAL]
case inl.intro.intro
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : V →A[𝕜] W
q : W
h₀ :
  AddGroupSeminorm.toFun
      { toFun := fun f => max ‖↑f 0‖ ‖contLinear f‖, map_zero' := (_ : max ‖↑0 0‖ ‖0‖ = 0),
        add_le' :=
          (_ :
            ∀ (f g : V →A[𝕜] W),
              (fun f => max ‖↑f 0‖ ‖contLinear f‖) (f + g) ≤
                (fun f => max ‖↑f 0‖ ‖contLinear f‖) f + (fun f => max ‖↑f 0‖ ‖contLinear f‖) g),
        neg' := (_ : ∀ (f : V →A[𝕜] W), max ‖↑(-f) 0‖ ‖-contLinear f‖ = max ‖↑f 0‖ ‖contLinear f‖) }
      (const 𝕜 V q) =
    0
h₁ : q = 0
⊢ const 𝕜 V q = 0
[PROOFSTEP]
rw [h₁]
[GOAL]
case inl.intro.intro
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : V →A[𝕜] W
q : W
h₀ :
  AddGroupSeminorm.toFun
      { toFun := fun f => max ‖↑f 0‖ ‖contLinear f‖, map_zero' := (_ : max ‖↑0 0‖ ‖0‖ = 0),
        add_le' :=
          (_ :
            ∀ (f g : V →A[𝕜] W),
              (fun f => max ‖↑f 0‖ ‖contLinear f‖) (f + g) ≤
                (fun f => max ‖↑f 0‖ ‖contLinear f‖) f + (fun f => max ‖↑f 0‖ ‖contLinear f‖) g),
        neg' := (_ : ∀ (f : V →A[𝕜] W), max ‖↑(-f) 0‖ ‖-contLinear f‖ = max ‖↑f 0‖ ‖contLinear f‖) }
      (const 𝕜 V q) =
    0
h₁ : q = 0
⊢ const 𝕜 V 0 = 0
[PROOFSTEP]
rfl
[GOAL]
case inr.intro
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f✝ f : V →A[𝕜] W
h₀ :
  AddGroupSeminorm.toFun
      { toFun := fun f => max ‖↑f 0‖ ‖contLinear f‖, map_zero' := (_ : max ‖↑0 0‖ ‖0‖ = 0),
        add_le' :=
          (_ :
            ∀ (f g : V →A[𝕜] W),
              (fun f => max ‖↑f 0‖ ‖contLinear f‖) (f + g) ≤
                (fun f => max ‖↑f 0‖ ‖contLinear f‖) f + (fun f => max ‖↑f 0‖ ‖contLinear f‖) g),
        neg' := (_ : ∀ (f : V →A[𝕜] W), max ‖↑(-f) 0‖ ‖-contLinear f‖ = max ‖↑f 0‖ ‖contLinear f‖) }
      f =
    0
h₁ : ‖contLinear f‖ = 0
h₂ : ‖↑f 0‖ ≤ 0
⊢ f = 0
[PROOFSTEP]
rw [norm_eq_zero', contLinear_eq_zero_iff_exists_const] at h₁ 
[GOAL]
case inr.intro
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f✝ f : V →A[𝕜] W
h₀ :
  AddGroupSeminorm.toFun
      { toFun := fun f => max ‖↑f 0‖ ‖contLinear f‖, map_zero' := (_ : max ‖↑0 0‖ ‖0‖ = 0),
        add_le' :=
          (_ :
            ∀ (f g : V →A[𝕜] W),
              (fun f => max ‖↑f 0‖ ‖contLinear f‖) (f + g) ≤
                (fun f => max ‖↑f 0‖ ‖contLinear f‖) f + (fun f => max ‖↑f 0‖ ‖contLinear f‖) g),
        neg' := (_ : ∀ (f : V →A[𝕜] W), max ‖↑(-f) 0‖ ‖-contLinear f‖ = max ‖↑f 0‖ ‖contLinear f‖) }
      f =
    0
h₁ : ∃ q, f = const 𝕜 V q
h₂ : ‖↑f 0‖ ≤ 0
⊢ f = 0
[PROOFSTEP]
obtain ⟨q, rfl⟩ := h₁
[GOAL]
case inr.intro.intro
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : V →A[𝕜] W
q : W
h₀ :
  AddGroupSeminorm.toFun
      { toFun := fun f => max ‖↑f 0‖ ‖contLinear f‖, map_zero' := (_ : max ‖↑0 0‖ ‖0‖ = 0),
        add_le' :=
          (_ :
            ∀ (f g : V →A[𝕜] W),
              (fun f => max ‖↑f 0‖ ‖contLinear f‖) (f + g) ≤
                (fun f => max ‖↑f 0‖ ‖contLinear f‖) f + (fun f => max ‖↑f 0‖ ‖contLinear f‖) g),
        neg' := (_ : ∀ (f : V →A[𝕜] W), max ‖↑(-f) 0‖ ‖-contLinear f‖ = max ‖↑f 0‖ ‖contLinear f‖) }
      (const 𝕜 V q) =
    0
h₂ : ‖↑(const 𝕜 V q) 0‖ ≤ 0
⊢ const 𝕜 V q = 0
[PROOFSTEP]
simp only [norm_le_zero_iff] at h₂ 
[GOAL]
case inr.intro.intro
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : V →A[𝕜] W
q : W
h₀ :
  AddGroupSeminorm.toFun
      { toFun := fun f => max ‖↑f 0‖ ‖contLinear f‖, map_zero' := (_ : max ‖↑0 0‖ ‖0‖ = 0),
        add_le' :=
          (_ :
            ∀ (f g : V →A[𝕜] W),
              (fun f => max ‖↑f 0‖ ‖contLinear f‖) (f + g) ≤
                (fun f => max ‖↑f 0‖ ‖contLinear f‖) f + (fun f => max ‖↑f 0‖ ‖contLinear f‖) g),
        neg' := (_ : ∀ (f : V →A[𝕜] W), max ‖↑(-f) 0‖ ‖-contLinear f‖ = max ‖↑f 0‖ ‖contLinear f‖) }
      (const 𝕜 V q) =
    0
h₂ : ↑(const 𝕜 V q) 0 = 0
⊢ const 𝕜 V q = 0
[PROOFSTEP]
rw [coe_const, Function.const_apply] at h₂ 
[GOAL]
case inr.intro.intro
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : V →A[𝕜] W
q : W
h₀ :
  AddGroupSeminorm.toFun
      { toFun := fun f => max ‖↑f 0‖ ‖contLinear f‖, map_zero' := (_ : max ‖↑0 0‖ ‖0‖ = 0),
        add_le' :=
          (_ :
            ∀ (f g : V →A[𝕜] W),
              (fun f => max ‖↑f 0‖ ‖contLinear f‖) (f + g) ≤
                (fun f => max ‖↑f 0‖ ‖contLinear f‖) f + (fun f => max ‖↑f 0‖ ‖contLinear f‖) g),
        neg' := (_ : ∀ (f : V →A[𝕜] W), max ‖↑(-f) 0‖ ‖-contLinear f‖ = max ‖↑f 0‖ ‖contLinear f‖) }
      (const 𝕜 V q) =
    0
h₂ : q = 0
⊢ const 𝕜 V q = 0
[PROOFSTEP]
rw [h₂]
[GOAL]
case inr.intro.intro
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : V →A[𝕜] W
q : W
h₀ :
  AddGroupSeminorm.toFun
      { toFun := fun f => max ‖↑f 0‖ ‖contLinear f‖, map_zero' := (_ : max ‖↑0 0‖ ‖0‖ = 0),
        add_le' :=
          (_ :
            ∀ (f g : V →A[𝕜] W),
              (fun f => max ‖↑f 0‖ ‖contLinear f‖) (f + g) ≤
                (fun f => max ‖↑f 0‖ ‖contLinear f‖) f + (fun f => max ‖↑f 0‖ ‖contLinear f‖) g),
        neg' := (_ : ∀ (f : V →A[𝕜] W), max ‖↑(-f) 0‖ ‖-contLinear f‖ = max ‖↑f 0‖ ‖contLinear f‖) }
      (const 𝕜 V q) =
    0
h₂ : q = 0
⊢ const 𝕜 V 0 = 0
[PROOFSTEP]
rfl
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f✝ : V →A[𝕜] W
t : 𝕜
f : V →A[𝕜] W
⊢ ‖t • f‖ ≤ ‖t‖ * ‖f‖
[PROOFSTEP]
simp only [norm_def, (smul_contLinear), norm_smul]
  -- Porting note: previously all these rewrites were in the `simp only`,
      -- but now they don't fire.
      -- (in fact, `norm_smul` fires, but only once rather than twice!)
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f✝ : V →A[𝕜] W
t : 𝕜
f : V →A[𝕜] W
⊢ max ‖↑(t • f) 0‖ (‖t‖ * ‖contLinear f‖) ≤ ‖t‖ * max ‖↑f 0‖ ‖contLinear f‖
[PROOFSTEP]
rw [coe_smul, Pi.smul_apply, norm_smul, ← mul_max_of_nonneg _ _ (norm_nonneg t)]
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : V →A[𝕜] W
g : W₂ →A[𝕜] V
⊢ ‖comp f g‖ ≤ ‖f‖ * ‖g‖ + ‖↑f 0‖
[PROOFSTEP]
rw [norm_def, max_le_iff]
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : V →A[𝕜] W
g : W₂ →A[𝕜] V
⊢ ‖↑(comp f g) 0‖ ≤ ‖f‖ * ‖g‖ + ‖↑f 0‖ ∧ ‖contLinear (comp f g)‖ ≤ ‖f‖ * ‖g‖ + ‖↑f 0‖
[PROOFSTEP]
constructor
[GOAL]
case left
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : V →A[𝕜] W
g : W₂ →A[𝕜] V
⊢ ‖↑(comp f g) 0‖ ≤ ‖f‖ * ‖g‖ + ‖↑f 0‖
[PROOFSTEP]
calc
  ‖f.comp g 0‖ = ‖f (g 0)‖ := by simp
  _ = ‖f.contLinear (g 0) + f 0‖ := by rw [f.decomp]; simp
  _ ≤ ‖f.contLinear‖ * ‖g 0‖ + ‖f 0‖ := ((norm_add_le _ _).trans (add_le_add_right (f.contLinear.le_op_norm _) _))
  _ ≤ ‖f‖ * ‖g‖ + ‖f 0‖ :=
    add_le_add_right (mul_le_mul f.norm_contLinear_le g.norm_image_zero_le (norm_nonneg _) (norm_nonneg _)) _
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : V →A[𝕜] W
g : W₂ →A[𝕜] V
⊢ ‖↑(comp f g) 0‖ = ‖↑f (↑g 0)‖
[PROOFSTEP]
simp
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : V →A[𝕜] W
g : W₂ →A[𝕜] V
⊢ ‖↑f (↑g 0)‖ = ‖↑(contLinear f) (↑g 0) + ↑f 0‖
[PROOFSTEP]
rw [f.decomp]
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : V →A[𝕜] W
g : W₂ →A[𝕜] V
⊢ ‖(↑(contLinear f) + Function.const V (↑f 0)) (↑g 0)‖ =
    ‖↑(contLinear f) (↑g 0) + (↑(contLinear f) + Function.const V (↑f 0)) 0‖
[PROOFSTEP]
simp
[GOAL]
case right
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : V →A[𝕜] W
g : W₂ →A[𝕜] V
⊢ ‖contLinear (comp f g)‖ ≤ ‖f‖ * ‖g‖ + ‖↑f 0‖
[PROOFSTEP]
calc
  ‖(f.comp g).contLinear‖ ≤ ‖f.contLinear‖ * ‖g.contLinear‖ :=
    (g.comp_contLinear f).symm ▸ f.contLinear.op_norm_comp_le _
  _ ≤ ‖f‖ * ‖g‖ := (mul_le_mul f.norm_contLinear_le g.norm_contLinear_le (norm_nonneg _) (norm_nonneg _))
  _ ≤ ‖f‖ * ‖g‖ + ‖f 0‖ := by rw [le_add_iff_nonneg_right]; apply norm_nonneg
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : V →A[𝕜] W
g : W₂ →A[𝕜] V
⊢ ‖f‖ * ‖g‖ ≤ ‖f‖ * ‖g‖ + ‖↑f 0‖
[PROOFSTEP]
rw [le_add_iff_nonneg_right]
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : V →A[𝕜] W
g : W₂ →A[𝕜] V
⊢ 0 ≤ ‖↑f 0‖
[PROOFSTEP]
apply norm_nonneg
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f✝ f : V →A[𝕜] W
⊢ (fun p => ContinuousLinearMap.toContinuousAffineMap p.snd + const 𝕜 V p.fst)
      (AddHom.toFun
        {
            toAddHom :=
              { toFun := fun f => (↑f 0, contLinear f),
                map_add' :=
                  (_ :
                    ∀ (x x_1 : V →A[𝕜] W),
                      (fun f => (↑f 0, contLinear f)) (x + x_1) = (fun f => (↑f 0, contLinear f)) (x + x_1)) },
            map_smul' :=
              (_ :
                ∀ (x : 𝕜) (x_1 : V →A[𝕜] W),
                  AddHom.toFun
                      { toFun := fun f => (↑f 0, contLinear f),
                        map_add' :=
                          (_ :
                            ∀ (x x_2 : V →A[𝕜] W),
                              (fun f => (↑f 0, contLinear f)) (x + x_2) = (fun f => (↑f 0, contLinear f)) (x + x_2)) }
                      (x • x_1) =
                    AddHom.toFun
                      { toFun := fun f => (↑f 0, contLinear f),
                        map_add' :=
                          (_ :
                            ∀ (x x_2 : V →A[𝕜] W),
                              (fun f => (↑f 0, contLinear f)) (x + x_2) = (fun f => (↑f 0, contLinear f)) (x + x_2)) }
                      (x • x_1)) }.toAddHom
        f) =
    f
[PROOFSTEP]
ext
[GOAL]
case h
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f✝ f : V →A[𝕜] W
x✝ : V
⊢ ↑((fun p => ContinuousLinearMap.toContinuousAffineMap p.snd + const 𝕜 V p.fst)
          (AddHom.toFun
            {
                toAddHom :=
                  { toFun := fun f => (↑f 0, contLinear f),
                    map_add' :=
                      (_ :
                        ∀ (x x_1 : V →A[𝕜] W),
                          (fun f => (↑f 0, contLinear f)) (x + x_1) = (fun f => (↑f 0, contLinear f)) (x + x_1)) },
                map_smul' :=
                  (_ :
                    ∀ (x : 𝕜) (x_1 : V →A[𝕜] W),
                      AddHom.toFun
                          { toFun := fun f => (↑f 0, contLinear f),
                            map_add' :=
                              (_ :
                                ∀ (x x_2 : V →A[𝕜] W),
                                  (fun f => (↑f 0, contLinear f)) (x + x_2) =
                                    (fun f => (↑f 0, contLinear f)) (x + x_2)) }
                          (x • x_1) =
                        AddHom.toFun
                          { toFun := fun f => (↑f 0, contLinear f),
                            map_add' :=
                              (_ :
                                ∀ (x x_2 : V →A[𝕜] W),
                                  (fun f => (↑f 0, contLinear f)) (x + x_2) =
                                    (fun f => (↑f 0, contLinear f)) (x + x_2)) }
                          (x • x_1)) }.toAddHom
            f))
      x✝ =
    ↑f x✝
[PROOFSTEP]
rw [f.decomp]
  -- Porting note: previously `simp` closed the goal, but now we need to rewrite:
[GOAL]
case h
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f✝ f : V →A[𝕜] W
x✝ : V
⊢ ↑((fun p => ContinuousLinearMap.toContinuousAffineMap p.snd + const 𝕜 V p.fst)
          (AddHom.toFun
            {
                toAddHom :=
                  { toFun := fun f => (↑f 0, contLinear f),
                    map_add' :=
                      (_ :
                        ∀ (x x_1 : V →A[𝕜] W),
                          (fun f => (↑f 0, contLinear f)) (x + x_1) = (fun f => (↑f 0, contLinear f)) (x + x_1)) },
                map_smul' :=
                  (_ :
                    ∀ (x : 𝕜) (x_1 : V →A[𝕜] W),
                      AddHom.toFun
                          { toFun := fun f => (↑f 0, contLinear f),
                            map_add' :=
                              (_ :
                                ∀ (x x_2 : V →A[𝕜] W),
                                  (fun f => (↑f 0, contLinear f)) (x + x_2) =
                                    (fun f => (↑f 0, contLinear f)) (x + x_2)) }
                          (x • x_1) =
                        AddHom.toFun
                          { toFun := fun f => (↑f 0, contLinear f),
                            map_add' :=
                              (_ :
                                ∀ (x x_2 : V →A[𝕜] W),
                                  (fun f => (↑f 0, contLinear f)) (x + x_2) =
                                    (fun f => (↑f 0, contLinear f)) (x + x_2)) }
                          (x • x_1)) }.toAddHom
            f))
      x✝ =
    (↑(contLinear f) + Function.const V (↑f 0)) x✝
[PROOFSTEP]
simp only [coe_add, ContinuousLinearMap.coe_toContinuousAffineMap, Pi.add_apply]
[GOAL]
case h
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f✝ f : V →A[𝕜] W
x✝ : V
⊢ ↑(contLinear f) x✝ + ↑(const 𝕜 V (↑f 0)) x✝ = ↑(contLinear f) x✝ + Function.const V (↑f 0) x✝
[PROOFSTEP]
rw [ContinuousAffineMap.coe_const, Function.const_apply]
[GOAL]
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f : V →A[𝕜] W
⊢ Function.RightInverse (fun p => ContinuousLinearMap.toContinuousAffineMap p.snd + const 𝕜 V p.fst)
    {
          toAddHom :=
            { toFun := fun f => (↑f 0, contLinear f),
              map_add' :=
                (_ :
                  ∀ (x x_1 : V →A[𝕜] W),
                    (fun f => (↑f 0, contLinear f)) (x + x_1) = (fun f => (↑f 0, contLinear f)) (x + x_1)) },
          map_smul' :=
            (_ :
              ∀ (x : 𝕜) (x_1 : V →A[𝕜] W),
                AddHom.toFun
                    { toFun := fun f => (↑f 0, contLinear f),
                      map_add' :=
                        (_ :
                          ∀ (x x_2 : V →A[𝕜] W),
                            (fun f => (↑f 0, contLinear f)) (x + x_2) = (fun f => (↑f 0, contLinear f)) (x + x_2)) }
                    (x • x_1) =
                  AddHom.toFun
                    { toFun := fun f => (↑f 0, contLinear f),
                      map_add' :=
                        (_ :
                          ∀ (x x_2 : V →A[𝕜] W),
                            (fun f => (↑f 0, contLinear f)) (x + x_2) = (fun f => (↑f 0, contLinear f)) (x + x_2)) }
                    (x • x_1)) }.toAddHom.toFun
[PROOFSTEP]
rintro ⟨v, f⟩
[GOAL]
case mk
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f✝ : V →A[𝕜] W
v : W
f : V →L[𝕜] W
⊢ AddHom.toFun
      {
          toAddHom :=
            { toFun := fun f => (↑f 0, contLinear f),
              map_add' :=
                (_ :
                  ∀ (x x_1 : V →A[𝕜] W),
                    (fun f => (↑f 0, contLinear f)) (x + x_1) = (fun f => (↑f 0, contLinear f)) (x + x_1)) },
          map_smul' :=
            (_ :
              ∀ (x : 𝕜) (x_1 : V →A[𝕜] W),
                AddHom.toFun
                    { toFun := fun f => (↑f 0, contLinear f),
                      map_add' :=
                        (_ :
                          ∀ (x x_2 : V →A[𝕜] W),
                            (fun f => (↑f 0, contLinear f)) (x + x_2) = (fun f => (↑f 0, contLinear f)) (x + x_2)) }
                    (x • x_1) =
                  AddHom.toFun
                    { toFun := fun f => (↑f 0, contLinear f),
                      map_add' :=
                        (_ :
                          ∀ (x x_2 : V →A[𝕜] W),
                            (fun f => (↑f 0, contLinear f)) (x + x_2) = (fun f => (↑f 0, contLinear f)) (x + x_2)) }
                    (x • x_1)) }.toAddHom
      ((fun p => ContinuousLinearMap.toContinuousAffineMap p.snd + const 𝕜 V p.fst) (v, f)) =
    (v, f)
[PROOFSTEP]
ext
[GOAL]
case mk.h₁
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f✝ : V →A[𝕜] W
v : W
f : V →L[𝕜] W
⊢ (AddHom.toFun
        {
            toAddHom :=
              { toFun := fun f => (↑f 0, contLinear f),
                map_add' :=
                  (_ :
                    ∀ (x x_1 : V →A[𝕜] W),
                      (fun f => (↑f 0, contLinear f)) (x + x_1) = (fun f => (↑f 0, contLinear f)) (x + x_1)) },
            map_smul' :=
              (_ :
                ∀ (x : 𝕜) (x_1 : V →A[𝕜] W),
                  AddHom.toFun
                      { toFun := fun f => (↑f 0, contLinear f),
                        map_add' :=
                          (_ :
                            ∀ (x x_2 : V →A[𝕜] W),
                              (fun f => (↑f 0, contLinear f)) (x + x_2) = (fun f => (↑f 0, contLinear f)) (x + x_2)) }
                      (x • x_1) =
                    AddHom.toFun
                      { toFun := fun f => (↑f 0, contLinear f),
                        map_add' :=
                          (_ :
                            ∀ (x x_2 : V →A[𝕜] W),
                              (fun f => (↑f 0, contLinear f)) (x + x_2) = (fun f => (↑f 0, contLinear f)) (x + x_2)) }
                      (x • x_1)) }.toAddHom
        ((fun p => ContinuousLinearMap.toContinuousAffineMap p.snd + const 𝕜 V p.fst) (v, f))).fst =
    (v, f).fst
[PROOFSTEP]
simp
[GOAL]
case mk.h₂.h
𝕜 : Type u_1
R : Type u_2
V : Type u_3
W : Type u_4
W₂ : Type u_5
P : Type u_6
Q : Type u_7
Q₂ : Type u_8
inst✝¹⁶ : NormedAddCommGroup V
inst✝¹⁵ : MetricSpace P
inst✝¹⁴ : NormedAddTorsor V P
inst✝¹³ : NormedAddCommGroup W
inst✝¹² : MetricSpace Q
inst✝¹¹ : NormedAddTorsor W Q
inst✝¹⁰ : NormedAddCommGroup W₂
inst✝⁹ : MetricSpace Q₂
inst✝⁸ : NormedAddTorsor W₂ Q₂
inst✝⁷ : NormedField R
inst✝⁶ : NormedSpace R V
inst✝⁵ : NormedSpace R W
inst✝⁴ : NormedSpace R W₂
inst✝³ : NontriviallyNormedField 𝕜
inst✝² : NormedSpace 𝕜 V
inst✝¹ : NormedSpace 𝕜 W
inst✝ : NormedSpace 𝕜 W₂
f✝ : V →A[𝕜] W
v : W
f : V →L[𝕜] W
x✝ : V
⊢ ↑(AddHom.toFun
            {
                toAddHom :=
                  { toFun := fun f => (↑f 0, contLinear f),
                    map_add' :=
                      (_ :
                        ∀ (x x_1 : V →A[𝕜] W),
                          (fun f => (↑f 0, contLinear f)) (x + x_1) = (fun f => (↑f 0, contLinear f)) (x + x_1)) },
                map_smul' :=
                  (_ :
                    ∀ (x : 𝕜) (x_1 : V →A[𝕜] W),
                      AddHom.toFun
                          { toFun := fun f => (↑f 0, contLinear f),
                            map_add' :=
                              (_ :
                                ∀ (x x_2 : V →A[𝕜] W),
                                  (fun f => (↑f 0, contLinear f)) (x + x_2) =
                                    (fun f => (↑f 0, contLinear f)) (x + x_2)) }
                          (x • x_1) =
                        AddHom.toFun
                          { toFun := fun f => (↑f 0, contLinear f),
                            map_add' :=
                              (_ :
                                ∀ (x x_2 : V →A[𝕜] W),
                                  (fun f => (↑f 0, contLinear f)) (x + x_2) =
                                    (fun f => (↑f 0, contLinear f)) (x + x_2)) }
                          (x • x_1)) }.toAddHom
            ((fun p => ContinuousLinearMap.toContinuousAffineMap p.snd + const 𝕜 V p.fst) (v, f))).snd
      x✝ =
    ↑(v, f).snd x✝
[PROOFSTEP]
simp
