l3lab/ntp-mathlib huggingface dataset:
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₁
          rw [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 0 = 0

Next tactic:
rfl
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₁
          rw [h₁]
          rfl
        · 

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‖ ≤ 0
⊢ f = 0

Next tactic:
rw [norm_eq_zero', 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₂
          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₁
          rw [h₁]
          rfl
        · rw [norm_eq_zero', contLinear_eq_zero_iff_exists_const] at 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₁ : ∃ q, f = const 𝕜 V q
h₂ : ‖f 0‖ ≤ 0
⊢ 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₂
          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₁
          rw [h₁]
          rfl
        · rw [norm_eq_zero', contLinear_eq_zero_iff_exists_const] at h₁
          obtain ⟨q, rfl⟩ := h₁
          

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

Next tactic:
simp only [norm_le_zero_iff] 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₁
          rw [h₁]
          rfl
        · rw [norm_eq_zero', contLinear_eq_zero_iff_exists_const] at h₁
          obtain ⟨q, rfl⟩ := h₁
          simp only [norm_le_zero_iff] 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 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

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₁
          rw [h₁]
          rfl
        · rw [norm_eq_zero', contLinear_eq_zero_iff_exists_const] at h₁
          obtain ⟨q, rfl⟩ := h₁
          simp only [norm_le_zero_iff] 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 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

Next tactic:
rw [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₁
          rw [h₁]
          rfl
        · rw [norm_eq_zero', contLinear_eq_zero_iff_exists_const] at h₁
          obtain ⟨q, rfl⟩ := h₁
          simp only [norm_le_zero_iff] 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₂
          rw [h₂]
          

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

Next tactic:
rfl
instance : NormedSpace 𝕜 (V →A[𝕜] W) where
  norm_smul_le t 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✝ : V →A[𝕜] W
t : 𝕜
f : V →A[𝕜] W
⊢ ‖t • f‖ ≤ ‖t‖ * ‖f‖

Next tactic:
simp only [norm_def, (smul_contLinear), norm_smul]
instance : NormedSpace 𝕜 (V →A[𝕜] W) where
  norm_smul_le t f := by
    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!)
    

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
t : 𝕜
f : V →A[𝕜] W
⊢ max ‖(t • f) 0‖ (‖t‖ * ‖contLinear f‖) ≤ ‖t‖ * max ‖f 0‖ ‖contLinear f‖

Next tactic:
rw [coe_smul, Pi.smul_apply, norm_smul, ← mul_max_of_nonneg _ _ (norm_nonneg t)]
theorem norm_comp_le (g : W₂ →A[𝕜] V) : ‖f.comp g‖ ≤ ‖f‖ * ‖g‖ + ‖f 0‖ := 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
g : W₂ →A[𝕜] V
⊢ ‖comp f g‖ ≤ ‖f‖ * ‖g‖ + ‖f 0‖

Next tactic:
rw [norm_def, max_le_iff]
theorem norm_comp_le (g : W₂ →A[𝕜] V) : ‖f.comp g‖ ≤ ‖f‖ * ‖g‖ + ‖f 0‖ := by
  rw [norm_def, max_le_iff]
  

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
g : W₂ →A[𝕜] V
⊢ ‖(comp f g) 0‖ ≤ ‖f‖ * ‖g‖ + ‖f 0‖ ∧ ‖contLinear (comp f g)‖ ≤ ‖f‖ * ‖g‖ + ‖f 0‖

Next tactic:
constructor
theorem norm_comp_le (g : W₂ →A[𝕜] V) : ‖f.comp g‖ ≤ ‖f‖ * ‖g‖ + ‖f 0‖ := by
  rw [norm_def, max_le_iff]
  constructor
  · 

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

Next tactic:
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 _)) _
theorem norm_comp_le (g : W₂ →A[𝕜] V) : ‖f.comp g‖ ≤ ‖f‖ * ‖g‖ + ‖f 0‖ := by
  rw [norm_def, max_le_iff]
  constructor
  · calc
      ‖f.comp g 0‖ = ‖f (g 0)‖ := 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
g : W₂ →A[𝕜] V
⊢ ‖(comp f g) 0‖ = ‖f (g 0)‖

Next tactic:
simp
theorem norm_comp_le (g : W₂ →A[𝕜] V) : ‖f.comp g‖ ≤ ‖f‖ * ‖g‖ + ‖f 0‖ := by
  rw [norm_def, max_le_iff]
  constructor
  · calc
      ‖f.comp g 0‖ = ‖f (g 0)‖ := by simp
      _ = ‖f.contLinear (g 0) + f 0‖ := 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
g : W₂ →A[𝕜] V
⊢ ‖f (g 0)‖ = ‖(contLinear f) (g 0) + f 0‖

Next tactic:
rw [f.decomp]