l3lab/ntp-mathlib huggingface dataset:
noncomputable instance : NormedAddCommGroup (V →A[𝕜] W) :=
  AddGroupNorm.toNormedAddCommGroup
    { toFun := fun f => max ‖f 0‖ ‖f.contLinear‖
      map_zero' := by 

Proof state:
𝕜 : 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

Next tactic:
simp [(ContinuousAffineMap.zero_apply)]
noncomputable instance : NormedAddCommGroup (V →A[𝕜] W) :=
  AddGroupNorm.toNormedAddCommGroup
    { toFun := fun f => max ‖f 0‖ ‖f.contLinear‖
      map_zero' := by simp [(ContinuousAffineMap.zero_apply)]
      neg' := fun f => by
        simp [(ContinuousAffineMap.neg_apply)]
      add_le' := fun f g => by
        

Proof state:
𝕜 : 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

Next tactic:
simp only [coe_add, max_le_iff]
noncomputable instance : NormedAddCommGroup (V →A[𝕜] W) :=
  AddGroupNorm.toNormedAddCommGroup
    { toFun := fun f => max ‖f 0‖ ‖f.contLinear‖
      map_zero' := by simp [(ContinuousAffineMap.zero_apply)]
      neg' := fun f => by
        simp [(ContinuousAffineMap.neg_apply)]
      add_le' := fun f g => by
        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.
        

Proof state:
𝕜 : 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‖

Next tactic:
rw [add_contLinear]
noncomputable instance : NormedAddCommGroup (V →A[𝕜] W) :=
  AddGroupNorm.toNormedAddCommGroup
    { toFun := fun f => max ‖f 0‖ ‖f.contLinear‖
      map_zero' := by simp [(ContinuousAffineMap.zero_apply)]
      neg' := fun f => by
        simp [(ContinuousAffineMap.neg_apply)]
      add_le' := fun f g => by
        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.
        rw [add_contLinear]
        

Proof state:
𝕜 : 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‖

Next tactic:
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 _ _))⟩
noncomputable instance : NormedAddCommGroup (V →A[𝕜] W) :=
  AddGroupNorm.toNormedAddCommGroup
    { toFun := fun f => max ‖f 0‖ ‖f.contLinear‖
      map_zero' := by simp [(ContinuousAffineMap.zero_apply)]
      neg' := fun f => by
        

Proof state:
𝕜 : 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

Next tactic:
simp [(ContinuousAffineMap.neg_apply)]
noncomputable instance : NormedAddCommGroup (V →A[𝕜] W) :=
  AddGroupNorm.toNormedAddCommGroup
    { toFun := fun f => max ‖f 0‖ ‖f.contLinear‖
      map_zero' := by simp [(ContinuousAffineMap.zero_apply)]
      neg' := fun f => by
        simp [(ContinuousAffineMap.neg_apply)]
      add_le' := fun f g => by
        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.
        rw [add_contLinear]
        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 _ _))⟩
      eq_zero_of_map_eq_zero' := fun f h₀ => by
        

Proof state:
𝕜 : 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

Next tactic:
rcases max_eq_iff.mp h₀ with (⟨h₁, h₂⟩ | ⟨h₁, h₂⟩)
noncomputable instance : NormedAddCommGroup (V →A[𝕜] W) :=
  AddGroupNorm.toNormedAddCommGroup
    { toFun := fun f => max ‖f 0‖ ‖f.contLinear‖
      map_zero' := by simp [(ContinuousAffineMap.zero_apply)]
      neg' := fun f => by
        simp [(ContinuousAffineMap.neg_apply)]
      add_le' := fun f g => by
        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.
        rw [add_contLinear]
        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 _ _))⟩
      eq_zero_of_map_eq_zero' := fun f h₀ => by
        rcases max_eq_iff.mp h₀ with (⟨h₁, h₂⟩ | ⟨h₁, h₂⟩) <;> 

Proof state:
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

Next tactic:
rw [h₁] at h₂
noncomputable instance : NormedAddCommGroup (V →A[𝕜] W) :=
  AddGroupNorm.toNormedAddCommGroup
    { toFun := fun f => max ‖f 0‖ ‖f.contLinear‖
      map_zero' := by simp [(ContinuousAffineMap.zero_apply)]
      neg' := fun f => by
        simp [(ContinuousAffineMap.neg_apply)]
      add_le' := fun f g => by
        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.
        rw [add_contLinear]
        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 _ _))⟩
      eq_zero_of_map_eq_zero' := fun f h₀ => by
        rcases max_eq_iff.mp h₀ with (⟨h₁, h₂⟩ | ⟨h₁, h₂⟩) <;> 

Proof state:
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

Next tactic:
rw [h₁] at h₂
noncomputable instance : NormedAddCommGroup (V →A[𝕜] W) :=
  AddGroupNorm.toNormedAddCommGroup
    { toFun := fun f => max ‖f 0‖ ‖f.contLinear‖
      map_zero' := by simp [(ContinuousAffineMap.zero_apply)]
      neg' := fun f => by
        simp [(ContinuousAffineMap.neg_apply)]
      add_le' := fun f g => by
        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.
        rw [add_contLinear]
        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 _ _))⟩
      eq_zero_of_map_eq_zero' := fun f h₀ => by
        rcases max_eq_iff.mp h₀ with (⟨h₁, h₂⟩ | ⟨h₁, h₂⟩) <;> rw [h₁] at h₂
        · 

Proof state:
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

Next tactic:
rw [norm_le_zero_iff, contLinear_eq_zero_iff_exists_const] at h₂
noncomputable instance : NormedAddCommGroup (V →A[𝕜] W) :=
  AddGroupNorm.toNormedAddCommGroup
    { toFun := fun f => max ‖f 0‖ ‖f.contLinear‖
      map_zero' := by simp [(ContinuousAffineMap.zero_apply)]
      neg' := fun f => by
        simp [(ContinuousAffineMap.neg_apply)]
      add_le' := fun f g => by
        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.
        rw [add_contLinear]
        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 _ _))⟩
      eq_zero_of_map_eq_zero' := fun f h₀ => by
        rcases max_eq_iff.mp h₀ with (⟨h₁, h₂⟩ | ⟨h₁, h₂⟩) <;> rw [h₁] at h₂
        · rw [norm_le_zero_iff, contLinear_eq_zero_iff_exists_const] at h₂
          

Proof state:
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

Next tactic:
obtain ⟨q, rfl⟩ := h₂
noncomputable instance : NormedAddCommGroup (V →A[𝕜] W) :=
  AddGroupNorm.toNormedAddCommGroup
    { toFun := fun f => max ‖f 0‖ ‖f.contLinear‖
      map_zero' := by simp [(ContinuousAffineMap.zero_apply)]
      neg' := fun f => by
        simp [(ContinuousAffineMap.neg_apply)]
      add_le' := fun f g => by
        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.
        rw [add_contLinear]
        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 _ _))⟩
      eq_zero_of_map_eq_zero' := fun f h₀ => by
        rcases max_eq_iff.mp h₀ with (⟨h₁, h₂⟩ | ⟨h₁, h₂⟩) <;> rw [h₁] at h₂
        · rw [norm_le_zero_iff, contLinear_eq_zero_iff_exists_const] at h₂
          obtain ⟨q, rfl⟩ := h₂
          

Proof state:
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

Next tactic:
simp only [norm_eq_zero] at h₁
noncomputable instance : NormedAddCommGroup (V →A[𝕜] W) :=
  AddGroupNorm.toNormedAddCommGroup
    { toFun := fun f => max ‖f 0‖ ‖f.contLinear‖
      map_zero' := by simp [(ContinuousAffineMap.zero_apply)]
      neg' := fun f => by
        simp [(ContinuousAffineMap.neg_apply)]
      add_le' := fun f g => by
        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.
        rw [add_contLinear]
        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 _ _))⟩
      eq_zero_of_map_eq_zero' := fun f h₀ => by
        rcases max_eq_iff.mp h₀ with (⟨h₁, h₂⟩ | ⟨h₁, h₂⟩) <;> rw [h₁] at h₂
        · rw [norm_le_zero_iff, contLinear_eq_zero_iff_exists_const] at h₂
          obtain ⟨q, rfl⟩ := h₂
          simp only [norm_eq_zero] at h₁
          -- Porting note: prevously `coe_const, Function.const_apply` were in the previous
          -- `simp only`, but now they don't fire.
          

Proof state:
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

Next tactic:
rw [coe_const, Function.const_apply] at h₁
noncomputable instance : NormedAddCommGroup (V →A[𝕜] W) :=
  AddGroupNorm.toNormedAddCommGroup
    { toFun := fun f => max ‖f 0‖ ‖f.contLinear‖
      map_zero' := by simp [(ContinuousAffineMap.zero_apply)]
      neg' := fun f => by
        simp [(ContinuousAffineMap.neg_apply)]
      add_le' := fun f g => by
        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.
        rw [add_contLinear]
        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 _ _))⟩
      eq_zero_of_map_eq_zero' := fun f h₀ => by
        rcases max_eq_iff.mp h₀ with (⟨h₁, h₂⟩ | ⟨h₁, h₂⟩) <;> rw [h₁] at h₂
        · rw [norm_le_zero_iff, contLinear_eq_zero_iff_exists_const] at h₂
          obtain ⟨q, rfl⟩ := h₂
          simp only [norm_eq_zero] at h₁
          -- Porting note: prevously `coe_const, Function.const_apply` were in the previous
          -- `simp only`, but now they don't fire.
          rw [coe_const, Function.const_apply] at h₁
          

Proof state:
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

Next tactic:
rw [h₁]