l3lab/ntp-mathlib huggingface dataset:
instance ringSeminormClass : RingSeminormClass (RingSeminorm R) R ℝ where
  coe f := f.toFun
  coe_injective' f g h := by
    cases f
    cases g
    congr
    ext x
    

Proof state:
case mk.mk.e_toAddGroupSeminorm.a
F : Type u_1
R : Type u_2
S : Type u_3
x✝ y : R
r : ℝ
inst✝ : NonUnitalRing R
toAddGroupSeminorm✝¹ : AddGroupSeminorm R
mul_le'✝¹ :
  ∀ (x y : R),
    AddGroupSeminorm.toFun toAddGroupSeminorm✝¹ (x * y) ≤
      AddGroupSeminorm.toFun toAddGroupSeminorm✝¹ x * AddGroupSeminorm.toFun toAddGroupSeminorm✝¹ y
toAddGroupSeminorm✝ : AddGroupSeminorm R
mul_le'✝ :
  ∀ (x y : R),
    AddGroupSeminorm.toFun toAddGroupSeminorm✝ (x * y) ≤
      AddGroupSeminorm.toFun toAddGroupSeminorm✝ x * AddGroupSeminorm.toFun toAddGroupSeminorm✝ y
h :
  (fun f => f.toFun) { toAddGroupSeminorm := toAddGroupSeminorm✝¹, mul_le' := mul_le'✝¹ } =
    (fun f => f.toFun) { toAddGroupSeminorm := toAddGroupSeminorm✝, mul_le' := mul_le'✝ }
x : R
⊢ toAddGroupSeminorm✝¹ x = toAddGroupSeminorm✝ x

Next tactic:
exact congr_fun h x
theorem ne_zero_iff {p : RingSeminorm R} : p ≠ 0 ↔ ∃ x, p x ≠ 0 := by 

Proof state:
F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : NonUnitalRing R
p : RingSeminorm R
⊢ p ≠ 0 ↔ ∃ x, p x ≠ 0

Next tactic:
simp [eq_zero_iff]
/-- The trivial seminorm on a ring `R` is the `RingSeminorm` taking value `0` at `0` and `1` at
every other element. -/
instance [DecidableEq R] : One (RingSeminorm R) :=
  ⟨{ (1 : AddGroupSeminorm R) with
      mul_le' := fun x y => by
        

Proof state:
F : Type u_1
R : Type u_2
S : Type u_3
x✝ y✝ : R
r : ℝ
inst✝¹ : NonUnitalRing R
inst✝ : DecidableEq R
src✝ : AddGroupSeminorm R := 1
x y : R
⊢ AddGroupSeminorm.toFun
      { toFun := src✝.toFun, map_zero' := (_ : AddGroupSeminorm.toFun src✝ 0 = 0),
        add_le' :=
          (_ :
            ∀ (r s : R),
              AddGroupSeminorm.toFun src✝ (r + s) ≤ AddGroupSeminorm.toFun src✝ r + AddGroupSeminorm.toFun src✝ s),
        neg' := (_ : ∀ (r : R), AddGroupSeminorm.toFun src✝ (-r) = AddGroupSeminorm.toFun src✝ r) }
      (x * y) ≤
    AddGroupSeminorm.toFun
        { toFun := src✝.toFun, map_zero' := (_ : AddGroupSeminorm.toFun src✝ 0 = 0),
          add_le' :=
            (_ :
              ∀ (r s : R),
                AddGroupSeminorm.toFun src✝ (r + s) ≤ AddGroupSeminorm.toFun src✝ r + AddGroupSeminorm.toFun src✝ s),
          neg' := (_ : ∀ (r : R), AddGroupSeminorm.toFun src✝ (-r) = AddGroupSeminorm.toFun src✝ r) }
        x *
      AddGroupSeminorm.toFun
        { toFun := src✝.toFun, map_zero' := (_ : AddGroupSeminorm.toFun src✝ 0 = 0),
          add_le' :=
            (_ :
              ∀ (r s : R),
                AddGroupSeminorm.toFun src✝ (r + s) ≤ AddGroupSeminorm.toFun src✝ r + AddGroupSeminorm.toFun src✝ s),
          neg' := (_ : ∀ (r : R), AddGroupSeminorm.toFun src✝ (-r) = AddGroupSeminorm.toFun src✝ r) }
        y

Next tactic:
by_cases h : x * y = 0
/-- The trivial seminorm on a ring `R` is the `RingSeminorm` taking value `0` at `0` and `1` at
every other element. -/
instance [DecidableEq R] : One (RingSeminorm R) :=
  ⟨{ (1 : AddGroupSeminorm R) with
      mul_le' := fun x y => by
        by_cases h : x * y = 0
        · 

Proof state:
case pos
F : Type u_1
R : Type u_2
S : Type u_3
x✝ y✝ : R
r : ℝ
inst✝¹ : NonUnitalRing R
inst✝ : DecidableEq R
src✝ : AddGroupSeminorm R := 1
x y : R
h : x * y = 0
⊢ AddGroupSeminorm.toFun
      { toFun := src✝.toFun, map_zero' := (_ : AddGroupSeminorm.toFun src✝ 0 = 0),
        add_le' :=
          (_ :
            ∀ (r s : R),
              AddGroupSeminorm.toFun src✝ (r + s) ≤ AddGroupSeminorm.toFun src✝ r + AddGroupSeminorm.toFun src✝ s),
        neg' := (_ : ∀ (r : R), AddGroupSeminorm.toFun src✝ (-r) = AddGroupSeminorm.toFun src✝ r) }
      (x * y) ≤
    AddGroupSeminorm.toFun
        { toFun := src✝.toFun, map_zero' := (_ : AddGroupSeminorm.toFun src✝ 0 = 0),
          add_le' :=
            (_ :
              ∀ (r s : R),
                AddGroupSeminorm.toFun src✝ (r + s) ≤ AddGroupSeminorm.toFun src✝ r + AddGroupSeminorm.toFun src✝ s),
          neg' := (_ : ∀ (r : R), AddGroupSeminorm.toFun src✝ (-r) = AddGroupSeminorm.toFun src✝ r) }
        x *
      AddGroupSeminorm.toFun
        { toFun := src✝.toFun, map_zero' := (_ : AddGroupSeminorm.toFun src✝ 0 = 0),
          add_le' :=
            (_ :
              ∀ (r s : R),
                AddGroupSeminorm.toFun src✝ (r + s) ≤ AddGroupSeminorm.toFun src✝ r + AddGroupSeminorm.toFun src✝ s),
          neg' := (_ : ∀ (r : R), AddGroupSeminorm.toFun src✝ (-r) = AddGroupSeminorm.toFun src✝ r) }
        y

Next tactic:
refine' (if_pos h).trans_le (mul_nonneg _ _)
/-- The trivial seminorm on a ring `R` is the `RingSeminorm` taking value `0` at `0` and `1` at
every other element. -/
instance [DecidableEq R] : One (RingSeminorm R) :=
  ⟨{ (1 : AddGroupSeminorm R) with
      mul_le' := fun x y => by
        by_cases h : x * y = 0
        · refine' (if_pos h).trans_le (mul_nonneg _ _) <;>
            · 

Proof state:
case pos.refine'_1
F : Type u_1
R : Type u_2
S : Type u_3
x✝ y✝ : R
r : ℝ
inst✝¹ : NonUnitalRing R
inst✝ : DecidableEq R
src✝ : AddGroupSeminorm R := 1
x y : R
h : x * y = 0
⊢ 0 ≤
    AddGroupSeminorm.toFun
      { toFun := src✝.toFun, map_zero' := (_ : AddGroupSeminorm.toFun src✝ 0 = 0),
        add_le' :=
          (_ :
            ∀ (r s : R),
              AddGroupSeminorm.toFun src✝ (r + s) ≤ AddGroupSeminorm.toFun src✝ r + AddGroupSeminorm.toFun src✝ s),
        neg' := (_ : ∀ (r : R), AddGroupSeminorm.toFun src✝ (-r) = AddGroupSeminorm.toFun src✝ r) }
      x

Next tactic:
change _ ≤ ite _ _ _
/-- The trivial seminorm on a ring `R` is the `RingSeminorm` taking value `0` at `0` and `1` at
every other element. -/
instance [DecidableEq R] : One (RingSeminorm R) :=
  ⟨{ (1 : AddGroupSeminorm R) with
      mul_le' := fun x y => by
        by_cases h : x * y = 0
        · refine' (if_pos h).trans_le (mul_nonneg _ _) <;>
            · change _ ≤ ite _ _ _
              

Proof state:
case pos.refine'_1
F : Type u_1
R : Type u_2
S : Type u_3
x✝ y✝ : R
r : ℝ
inst✝¹ : NonUnitalRing R
inst✝ : DecidableEq R
src✝ : AddGroupSeminorm R := 1
x y : R
h : x * y = 0
⊢ 0 ≤ if x = 0 then 0 else 1

Next tactic:
split_ifs
/-- The trivial seminorm on a ring `R` is the `RingSeminorm` taking value `0` at `0` and `1` at
every other element. -/
instance [DecidableEq R] : One (RingSeminorm R) :=
  ⟨{ (1 : AddGroupSeminorm R) with
      mul_le' := fun x y => by
        by_cases h : x * y = 0
        · refine' (if_pos h).trans_le (mul_nonneg _ _) <;>
            · change _ ≤ ite _ _ _
              split_ifs
              

Proof state:
case pos
F : Type u_1
R : Type u_2
S : Type u_3
x✝ y✝ : R
r : ℝ
inst✝¹ : NonUnitalRing R
inst✝ : DecidableEq R
src✝ : AddGroupSeminorm R := 1
x y : R
h : x * y = 0
h✝ : x = 0
⊢ 0 ≤ 0
case neg
F : Type u_1
R : Type u_2
S : Type u_3
x✝ y✝ : R
r : ℝ
inst✝¹ : NonUnitalRing R
inst✝ : DecidableEq R
src✝ : AddGroupSeminorm R := 1
x y : R
h : x * y = 0
h✝ : ¬x = 0
⊢ 0 ≤ 1

Next tactic:
exacts [le_rfl, zero_le_one]
/-- The trivial seminorm on a ring `R` is the `RingSeminorm` taking value `0` at `0` and `1` at
every other element. -/
instance [DecidableEq R] : One (RingSeminorm R) :=
  ⟨{ (1 : AddGroupSeminorm R) with
      mul_le' := fun x y => by
        by_cases h : x * y = 0
        · refine' (if_pos h).trans_le (mul_nonneg _ _) <;>
            · 

Proof state:
case pos.refine'_2
F : Type u_1
R : Type u_2
S : Type u_3
x✝ y✝ : R
r : ℝ
inst✝¹ : NonUnitalRing R
inst✝ : DecidableEq R
src✝ : AddGroupSeminorm R := 1
x y : R
h : x * y = 0
⊢ 0 ≤
    AddGroupSeminorm.toFun
      { toFun := src✝.toFun, map_zero' := (_ : AddGroupSeminorm.toFun src✝ 0 = 0),
        add_le' :=
          (_ :
            ∀ (r s : R),
              AddGroupSeminorm.toFun src✝ (r + s) ≤ AddGroupSeminorm.toFun src✝ r + AddGroupSeminorm.toFun src✝ s),
        neg' := (_ : ∀ (r : R), AddGroupSeminorm.toFun src✝ (-r) = AddGroupSeminorm.toFun src✝ r) }
      y

Next tactic:
change _ ≤ ite _ _ _
/-- The trivial seminorm on a ring `R` is the `RingSeminorm` taking value `0` at `0` and `1` at
every other element. -/
instance [DecidableEq R] : One (RingSeminorm R) :=
  ⟨{ (1 : AddGroupSeminorm R) with
      mul_le' := fun x y => by
        by_cases h : x * y = 0
        · refine' (if_pos h).trans_le (mul_nonneg _ _) <;>
            · change _ ≤ ite _ _ _
              

Proof state:
case pos.refine'_2
F : Type u_1
R : Type u_2
S : Type u_3
x✝ y✝ : R
r : ℝ
inst✝¹ : NonUnitalRing R
inst✝ : DecidableEq R
src✝ : AddGroupSeminorm R := 1
x y : R
h : x * y = 0
⊢ 0 ≤ if y = 0 then 0 else 1

Next tactic:
split_ifs
/-- The trivial seminorm on a ring `R` is the `RingSeminorm` taking value `0` at `0` and `1` at
every other element. -/
instance [DecidableEq R] : One (RingSeminorm R) :=
  ⟨{ (1 : AddGroupSeminorm R) with
      mul_le' := fun x y => by
        by_cases h : x * y = 0
        · refine' (if_pos h).trans_le (mul_nonneg _ _) <;>
            · change _ ≤ ite _ _ _
              split_ifs
              

Proof state:
case pos
F : Type u_1
R : Type u_2
S : Type u_3
x✝ y✝ : R
r : ℝ
inst✝¹ : NonUnitalRing R
inst✝ : DecidableEq R
src✝ : AddGroupSeminorm R := 1
x y : R
h : x * y = 0
h✝ : y = 0
⊢ 0 ≤ 0
case neg
F : Type u_1
R : Type u_2
S : Type u_3
x✝ y✝ : R
r : ℝ
inst✝¹ : NonUnitalRing R
inst✝ : DecidableEq R
src✝ : AddGroupSeminorm R := 1
x y : R
h : x * y = 0
h✝ : ¬y = 0
⊢ 0 ≤ 1

Next tactic:
exacts [le_rfl, zero_le_one]
/-- The trivial seminorm on a ring `R` is the `RingSeminorm` taking value `0` at `0` and `1` at
every other element. -/
instance [DecidableEq R] : One (RingSeminorm R) :=
  ⟨{ (1 : AddGroupSeminorm R) with
      mul_le' := fun x y => by
        by_cases h : x * y = 0
        · refine' (if_pos h).trans_le (mul_nonneg _ _) <;>
            · change _ ≤ ite _ _ _
              split_ifs
              exacts [le_rfl, zero_le_one]
        · 

Proof state:
case neg
F : Type u_1
R : Type u_2
S : Type u_3
x✝ y✝ : R
r : ℝ
inst✝¹ : NonUnitalRing R
inst✝ : DecidableEq R
src✝ : AddGroupSeminorm R := 1
x y : R
h : ¬x * y = 0
⊢ AddGroupSeminorm.toFun
      { toFun := src✝.toFun, map_zero' := (_ : AddGroupSeminorm.toFun src✝ 0 = 0),
        add_le' :=
          (_ :
            ∀ (r s : R),
              AddGroupSeminorm.toFun src✝ (r + s) ≤ AddGroupSeminorm.toFun src✝ r + AddGroupSeminorm.toFun src✝ s),
        neg' := (_ : ∀ (r : R), AddGroupSeminorm.toFun src✝ (-r) = AddGroupSeminorm.toFun src✝ r) }
      (x * y) ≤
    AddGroupSeminorm.toFun
        { toFun := src✝.toFun, map_zero' := (_ : AddGroupSeminorm.toFun src✝ 0 = 0),
          add_le' :=
            (_ :
              ∀ (r s : R),
                AddGroupSeminorm.toFun src✝ (r + s) ≤ AddGroupSeminorm.toFun src✝ r + AddGroupSeminorm.toFun src✝ s),
          neg' := (_ : ∀ (r : R), AddGroupSeminorm.toFun src✝ (-r) = AddGroupSeminorm.toFun src✝ r) }
        x *
      AddGroupSeminorm.toFun
        { toFun := src✝.toFun, map_zero' := (_ : AddGroupSeminorm.toFun src✝ 0 = 0),
          add_le' :=
            (_ :
              ∀ (r s : R),
                AddGroupSeminorm.toFun src✝ (r + s) ≤ AddGroupSeminorm.toFun src✝ r + AddGroupSeminorm.toFun src✝ s),
          neg' := (_ : ∀ (r : R), AddGroupSeminorm.toFun src✝ (-r) = AddGroupSeminorm.toFun src✝ r) }
        y

Next tactic:
change ite _ _ _ ≤ ite _ _ _ * ite _ _ _
/-- The trivial seminorm on a ring `R` is the `RingSeminorm` taking value `0` at `0` and `1` at
every other element. -/
instance [DecidableEq R] : One (RingSeminorm R) :=
  ⟨{ (1 : AddGroupSeminorm R) with
      mul_le' := fun x y => by
        by_cases h : x * y = 0
        · refine' (if_pos h).trans_le (mul_nonneg _ _) <;>
            · change _ ≤ ite _ _ _
              split_ifs
              exacts [le_rfl, zero_le_one]
        · change ite _ _ _ ≤ ite _ _ _ * ite _ _ _
          

Proof state:
case neg
F : Type u_1
R : Type u_2
S : Type u_3
x✝ y✝ : R
r : ℝ
inst✝¹ : NonUnitalRing R
inst✝ : DecidableEq R
src✝ : AddGroupSeminorm R := 1
x y : R
h : ¬x * y = 0
⊢ (if x * y = 0 then 0 else 1) ≤ (if x = 0 then 0 else 1) * if y = 0 then 0 else 1

Next tactic:
simp only [if_false, h, left_ne_zero_of_mul h, right_ne_zero_of_mul h, mul_one,
            le_refl]
theorem seminorm_one_eq_one_iff_ne_zero (hp : p 1 ≤ 1) : p 1 = 1 ↔ p ≠ 0 := by
  

Proof state:
F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : Ring R
p : RingSeminorm R
hp : p 1 ≤ 1
⊢ p 1 = 1 ↔ p ≠ 0

Next tactic:
refine'
    ⟨fun h =>
      ne_zero_iff.mpr
        ⟨1, by
          rw [h]
          exact one_ne_zero⟩,
      fun h => ?_⟩
theorem seminorm_one_eq_one_iff_ne_zero (hp : p 1 ≤ 1) : p 1 = 1 ↔ p ≠ 0 := by
  refine'
    ⟨fun h =>
      ne_zero_iff.mpr
        ⟨1, by
          

Proof state:
F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : Ring R
p : RingSeminorm R
hp : p 1 ≤ 1
h : p 1 = 1
⊢ p 1 ≠ 0

Next tactic:
rw [h]
theorem seminorm_one_eq_one_iff_ne_zero (hp : p 1 ≤ 1) : p 1 = 1 ↔ p ≠ 0 := by
  refine'
    ⟨fun h =>
      ne_zero_iff.mpr
        ⟨1, by
          rw [h]
          

Proof state:
F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : Ring R
p : RingSeminorm R
hp : p 1 ≤ 1
h : p 1 = 1
⊢ 1 ≠ 0

Next tactic:
exact one_ne_zero
theorem seminorm_one_eq_one_iff_ne_zero (hp : p 1 ≤ 1) : p 1 = 1 ↔ p ≠ 0 := by
  refine'
    ⟨fun h =>
      ne_zero_iff.mpr
        ⟨1, by
          rw [h]
          exact one_ne_zero⟩,
      fun h => ?_⟩
  

Proof state:
F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : Ring R
p : RingSeminorm R
hp : p 1 ≤ 1
h : p ≠ 0
⊢ p 1 = 1

Next tactic:
obtain hp0 | hp0 := (map_nonneg p (1 : R)).eq_or_gt
theorem seminorm_one_eq_one_iff_ne_zero (hp : p 1 ≤ 1) : p 1 = 1 ↔ p ≠ 0 := by
  refine'
    ⟨fun h =>
      ne_zero_iff.mpr
        ⟨1, by
          rw [h]
          exact one_ne_zero⟩,
      fun h => ?_⟩
  obtain hp0 | hp0 := (map_nonneg p (1 : R)).eq_or_gt
  · 

Proof state:
case inl
F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : Ring R
p : RingSeminorm R
hp : p 1 ≤ 1
h : p ≠ 0
hp0 : p 1 = 0
⊢ p 1 = 1

Next tactic:
exfalso
theorem seminorm_one_eq_one_iff_ne_zero (hp : p 1 ≤ 1) : p 1 = 1 ↔ p ≠ 0 := by
  refine'
    ⟨fun h =>
      ne_zero_iff.mpr
        ⟨1, by
          rw [h]
          exact one_ne_zero⟩,
      fun h => ?_⟩
  obtain hp0 | hp0 := (map_nonneg p (1 : R)).eq_or_gt
  · exfalso
    

Proof state:
case inl.h
F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : Ring R
p : RingSeminorm R
hp : p 1 ≤ 1
h : p ≠ 0
hp0 : p 1 = 0
⊢ False

Next tactic:
refine h (ext fun x => (map_nonneg _ _).antisymm' ?_)
theorem seminorm_one_eq_one_iff_ne_zero (hp : p 1 ≤ 1) : p 1 = 1 ↔ p ≠ 0 := by
  refine'
    ⟨fun h =>
      ne_zero_iff.mpr
        ⟨1, by
          rw [h]
          exact one_ne_zero⟩,
      fun h => ?_⟩
  obtain hp0 | hp0 := (map_nonneg p (1 : R)).eq_or_gt
  · exfalso
    refine h (ext fun x => (map_nonneg _ _).antisymm' ?_)
    

Proof state:
case inl.h
F : Type u_1
R : Type u_2
S : Type u_3
x✝ y : R
r : ℝ
inst✝ : Ring R
p : RingSeminorm R
hp : p 1 ≤ 1
h : p ≠ 0
hp0 : p 1 = 0
x : R
⊢ p x ≤ 0

Next tactic:
simpa only [hp0, mul_one, mul_zero] using map_mul_le_mul p x 1
theorem seminorm_one_eq_one_iff_ne_zero (hp : p 1 ≤ 1) : p 1 = 1 ↔ p ≠ 0 := by
  refine'
    ⟨fun h =>
      ne_zero_iff.mpr
        ⟨1, by
          rw [h]
          exact one_ne_zero⟩,
      fun h => ?_⟩
  obtain hp0 | hp0 := (map_nonneg p (1 : R)).eq_or_gt
  · exfalso
    refine h (ext fun x => (map_nonneg _ _).antisymm' ?_)
    simpa only [hp0, mul_one, mul_zero] using map_mul_le_mul p x 1
  · 

Proof state:
case inr
F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : Ring R
p : RingSeminorm R
hp : p 1 ≤ 1
h : p ≠ 0
hp0 : 0 < p 1
⊢ p 1 = 1

Next tactic:
refine' hp.antisymm ((le_mul_iff_one_le_left hp0).1 _)
theorem seminorm_one_eq_one_iff_ne_zero (hp : p 1 ≤ 1) : p 1 = 1 ↔ p ≠ 0 := by
  refine'
    ⟨fun h =>
      ne_zero_iff.mpr
        ⟨1, by
          rw [h]
          exact one_ne_zero⟩,
      fun h => ?_⟩
  obtain hp0 | hp0 := (map_nonneg p (1 : R)).eq_or_gt
  · exfalso
    refine h (ext fun x => (map_nonneg _ _).antisymm' ?_)
    simpa only [hp0, mul_one, mul_zero] using map_mul_le_mul p x 1
  · refine' hp.antisymm ((le_mul_iff_one_le_left hp0).1 _)
    

Proof state:
case inr
F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : Ring R
p : RingSeminorm R
hp : p 1 ≤ 1
h : p ≠ 0
hp0 : 0 < p 1
⊢ p 1 ≤ p 1 * p 1

Next tactic:
simpa only [one_mul] using map_mul_le_mul p (1 : R) _
instance ringNormClass : RingNormClass (RingNorm R) R ℝ where
  coe f := f.toFun
  coe_injective' f g h := by
    

Proof state:
F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : NonUnitalRing R
f g : RingNorm R
h : (fun f => f.toFun) f = (fun f => f.toFun) g
⊢ f = g

Next tactic:
cases f
instance ringNormClass : RingNormClass (RingNorm R) R ℝ where
  coe f := f.toFun
  coe_injective' f g h := by
    cases f
    

Proof state:
case mk
F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : NonUnitalRing R
g : RingNorm R
toRingSeminorm✝ : RingSeminorm R
eq_zero_of_map_eq_zero'✝ : ∀ (x : R), AddGroupSeminorm.toFun toRingSeminorm✝.toAddGroupSeminorm x = 0 → x = 0
h :
  (fun f => f.toFun) { toRingSeminorm := toRingSeminorm✝, eq_zero_of_map_eq_zero' := eq_zero_of_map_eq_zero'✝ } =
    (fun f => f.toFun) g
⊢ { toRingSeminorm := toRingSeminorm✝, eq_zero_of_map_eq_zero' := eq_zero_of_map_eq_zero'✝ } = g

Next tactic:
cases g
instance ringNormClass : RingNormClass (RingNorm R) R ℝ where
  coe f := f.toFun
  coe_injective' f g h := by
    cases f
    cases g
    

Proof state:
case mk.mk
F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : NonUnitalRing R
toRingSeminorm✝¹ : RingSeminorm R
eq_zero_of_map_eq_zero'✝¹ : ∀ (x : R), AddGroupSeminorm.toFun toRingSeminorm✝¹.toAddGroupSeminorm x = 0 → x = 0
toRingSeminorm✝ : RingSeminorm R
eq_zero_of_map_eq_zero'✝ : ∀ (x : R), AddGroupSeminorm.toFun toRingSeminorm✝.toAddGroupSeminorm x = 0 → x = 0
h :
  (fun f => f.toFun) { toRingSeminorm := toRingSeminorm✝¹, eq_zero_of_map_eq_zero' := eq_zero_of_map_eq_zero'✝¹ } =
    (fun f => f.toFun) { toRingSeminorm := toRingSeminorm✝, eq_zero_of_map_eq_zero' := eq_zero_of_map_eq_zero'✝ }
⊢ { toRingSeminorm := toRingSeminorm✝¹, eq_zero_of_map_eq_zero' := eq_zero_of_map_eq_zero'✝¹ } =
    { toRingSeminorm := toRingSeminorm✝, eq_zero_of_map_eq_zero' := eq_zero_of_map_eq_zero'✝ }

Next tactic:
congr
instance ringNormClass : RingNormClass (RingNorm R) R ℝ where
  coe f := f.toFun
  coe_injective' f g h := by
    cases f
    cases g
    congr
    

Proof state:
case mk.mk.e_toRingSeminorm
F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : NonUnitalRing R
toRingSeminorm✝¹ : RingSeminorm R
eq_zero_of_map_eq_zero'✝¹ : ∀ (x : R), AddGroupSeminorm.toFun toRingSeminorm✝¹.toAddGroupSeminorm x = 0 → x = 0
toRingSeminorm✝ : RingSeminorm R
eq_zero_of_map_eq_zero'✝ : ∀ (x : R), AddGroupSeminorm.toFun toRingSeminorm✝.toAddGroupSeminorm x = 0 → x = 0
h :
  (fun f => f.toFun) { toRingSeminorm := toRingSeminorm✝¹, eq_zero_of_map_eq_zero' := eq_zero_of_map_eq_zero'✝¹ } =
    (fun f => f.toFun) { toRingSeminorm := toRingSeminorm✝, eq_zero_of_map_eq_zero' := eq_zero_of_map_eq_zero'✝ }
⊢ toRingSeminorm✝¹ = toRingSeminorm✝

Next tactic:
ext x
instance ringNormClass : RingNormClass (RingNorm R) R ℝ where
  coe f := f.toFun
  coe_injective' f g h := by
    cases f
    cases g
    congr
    ext x
    

Proof state:
case mk.mk.e_toRingSeminorm.a
F : Type u_1
R : Type u_2
S : Type u_3
x✝ y : R
r : ℝ
inst✝ : NonUnitalRing R
toRingSeminorm✝¹ : RingSeminorm R
eq_zero_of_map_eq_zero'✝¹ : ∀ (x : R), AddGroupSeminorm.toFun toRingSeminorm✝¹.toAddGroupSeminorm x = 0 → x = 0
toRingSeminorm✝ : RingSeminorm R
eq_zero_of_map_eq_zero'✝ : ∀ (x : R), AddGroupSeminorm.toFun toRingSeminorm✝.toAddGroupSeminorm x = 0 → x = 0
h :
  (fun f => f.toFun) { toRingSeminorm := toRingSeminorm✝¹, eq_zero_of_map_eq_zero' := eq_zero_of_map_eq_zero'✝¹ } =
    (fun f => f.toFun) { toRingSeminorm := toRingSeminorm✝, eq_zero_of_map_eq_zero' := eq_zero_of_map_eq_zero'✝ }
x : R
⊢ toRingSeminorm✝¹ x = toRingSeminorm✝ x

Next tactic:
exact congr_fun h x
instance mulRingSeminormClass : MulRingSeminormClass (MulRingSeminorm R) R ℝ where
  coe f := f.toFun
  coe_injective' f g h := by
    

Proof state:
F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : NonAssocRing R
f g : MulRingSeminorm R
h : (fun f => f.toFun) f = (fun f => f.toFun) g
⊢ f = g

Next tactic:
cases f
instance mulRingSeminormClass : MulRingSeminormClass (MulRingSeminorm R) R ℝ where
  coe f := f.toFun
  coe_injective' f g h := by
    cases f
    

Proof state:
case mk
F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : NonAssocRing R
g : MulRingSeminorm R
toAddGroupSeminorm✝ : AddGroupSeminorm R
map_one'✝ : AddGroupSeminorm.toFun toAddGroupSeminorm✝ 1 = 1
map_mul'✝ :
  ∀ (x y : R),
    AddGroupSeminorm.toFun toAddGroupSeminorm✝ (x * y) =
      AddGroupSeminorm.toFun toAddGroupSeminorm✝ x * AddGroupSeminorm.toFun toAddGroupSeminorm✝ y
h :
  (fun f => f.toFun) { toAddGroupSeminorm := toAddGroupSeminorm✝, map_one' := map_one'✝, map_mul' := map_mul'✝ } =
    (fun f => f.toFun) g
⊢ { toAddGroupSeminorm := toAddGroupSeminorm✝, map_one' := map_one'✝, map_mul' := map_mul'✝ } = g

Next tactic:
cases g
instance mulRingSeminormClass : MulRingSeminormClass (MulRingSeminorm R) R ℝ where
  coe f := f.toFun
  coe_injective' f g h := by
    cases f
    cases g
    

Proof state:
case mk.mk
F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : NonAssocRing R
toAddGroupSeminorm✝¹ : AddGroupSeminorm R
map_one'✝¹ : AddGroupSeminorm.toFun toAddGroupSeminorm✝¹ 1 = 1
map_mul'✝¹ :
  ∀ (x y : R),
    AddGroupSeminorm.toFun toAddGroupSeminorm✝¹ (x * y) =
      AddGroupSeminorm.toFun toAddGroupSeminorm✝¹ x * AddGroupSeminorm.toFun toAddGroupSeminorm✝¹ y
toAddGroupSeminorm✝ : AddGroupSeminorm R
map_one'✝ : AddGroupSeminorm.toFun toAddGroupSeminorm✝ 1 = 1
map_mul'✝ :
  ∀ (x y : R),
    AddGroupSeminorm.toFun toAddGroupSeminorm✝ (x * y) =
      AddGroupSeminorm.toFun toAddGroupSeminorm✝ x * AddGroupSeminorm.toFun toAddGroupSeminorm✝ y
h :
  (fun f => f.toFun) { toAddGroupSeminorm := toAddGroupSeminorm✝¹, map_one' := map_one'✝¹, map_mul' := map_mul'✝¹ } =
    (fun f => f.toFun) { toAddGroupSeminorm := toAddGroupSeminorm✝, map_one' := map_one'✝, map_mul' := map_mul'✝ }
⊢ { toAddGroupSeminorm := toAddGroupSeminorm✝¹, map_one' := map_one'✝¹, map_mul' := map_mul'✝¹ } =
    { toAddGroupSeminorm := toAddGroupSeminorm✝, map_one' := map_one'✝, map_mul' := map_mul'✝ }

Next tactic:
congr
instance mulRingSeminormClass : MulRingSeminormClass (MulRingSeminorm R) R ℝ where
  coe f := f.toFun
  coe_injective' f g h := by
    cases f
    cases g
    congr
    

Proof state:
case mk.mk.e_toAddGroupSeminorm
F : Type u_1
R : Type u_2
S : Type u_3
x y : R
r : ℝ
inst✝ : NonAssocRing R
toAddGroupSeminorm✝¹ : AddGroupSeminorm R
map_one'✝¹ : AddGroupSeminorm.toFun toAddGroupSeminorm✝¹ 1 = 1
map_mul'✝¹ :
  ∀ (x y : R),
    AddGroupSeminorm.toFun toAddGroupSeminorm✝¹ (x * y) =
      AddGroupSeminorm.toFun toAddGroupSeminorm✝¹ x * AddGroupSeminorm.toFun toAddGroupSeminorm✝¹ y
toAddGroupSeminorm✝ : AddGroupSeminorm R
map_one'✝ : AddGroupSeminorm.toFun toAddGroupSeminorm✝ 1 = 1
map_mul'✝ :
  ∀ (x y : R),
    AddGroupSeminorm.toFun toAddGroupSeminorm✝ (x * y) =
      AddGroupSeminorm.toFun toAddGroupSeminorm✝ x * AddGroupSeminorm.toFun toAddGroupSeminorm✝ y
h :
  (fun f => f.toFun) { toAddGroupSeminorm := toAddGroupSeminorm✝¹, map_one' := map_one'✝¹, map_mul' := map_mul'✝¹ } =
    (fun f => f.toFun) { toAddGroupSeminorm := toAddGroupSeminorm✝, map_one' := map_one'✝, map_mul' := map_mul'✝ }
⊢ toAddGroupSeminorm✝¹ = toAddGroupSeminorm✝

Next tactic:
ext x