analysis.normed.ring.seminorm
⟷
Mathlib.Analysis.Normed.Ring.Seminorm
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -206,10 +206,12 @@ instance ringNormClass : RingNormClass (RingNorm R) R ℝ
instance : CoeFun (RingNorm R) fun _ => R → ℝ :=
⟨fun p => p.toFun⟩
+#print RingNorm.toFun_eq_coe /-
@[simp]
theorem toFun_eq_coe (p : RingNorm R) : p.toFun = p :=
rfl
#align ring_norm.to_fun_eq_coe RingNorm.toFun_eq_coe
+-/
#print RingNorm.ext /-
@[ext]
@@ -320,10 +322,12 @@ instance mulRingNormClass : MulRingNormClass (MulRingNorm R) R ℝ
instance : CoeFun (MulRingNorm R) fun _ => R → ℝ :=
⟨fun p => p.toFun⟩
+#print MulRingNorm.toFun_eq_coe /-
@[simp]
theorem toFun_eq_coe (p : MulRingNorm R) : p.toFun = p :=
rfl
#align mul_ring_norm.to_fun_eq_coe MulRingNorm.toFun_eq_coe
+-/
#print MulRingNorm.ext /-
@[ext]
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -100,7 +100,7 @@ instance ringSeminormClass : RingSeminormClass (RingSeminorm R) R ℝ
/-- Helper instance for when there's too many metavariables to apply `fun_like.has_coe_to_fun`. -/
instance : CoeFun (RingSeminorm R) fun _ => R → ℝ :=
- FunLike.hasCoeToFun
+ DFunLike.hasCoeToFun
#print RingSeminorm.toFun_eq_coe /-
@[simp]
@@ -112,7 +112,7 @@ theorem toFun_eq_coe (p : RingSeminorm R) : p.toFun = p :=
#print RingSeminorm.ext /-
@[ext]
theorem ext {p q : RingSeminorm R} : (∀ x, p x = q x) → p = q :=
- FunLike.ext p q
+ DFunLike.ext p q
#align ring_seminorm.ext RingSeminorm.ext
-/
@@ -121,7 +121,7 @@ instance : Zero (RingSeminorm R) :=
#print RingSeminorm.eq_zero_iff /-
theorem eq_zero_iff {p : RingSeminorm R} : p = 0 ↔ ∀ x, p x = 0 :=
- FunLike.ext_iff
+ DFunLike.ext_iff
#align ring_seminorm.eq_zero_iff RingSeminorm.eq_zero_iff
-/
@@ -214,7 +214,7 @@ theorem toFun_eq_coe (p : RingNorm R) : p.toFun = p :=
#print RingNorm.ext /-
@[ext]
theorem ext {p q : RingNorm R} : (∀ x, p x = q x) → p = q :=
- FunLike.ext p q
+ DFunLike.ext p q
#align ring_norm.ext RingNorm.ext
-/
@@ -256,7 +256,7 @@ instance mulRingSeminormClass : MulRingSeminormClass (MulRingSeminorm R) R ℝ
/-- Helper instance for when there's too many metavariables to apply `fun_like.has_coe_to_fun`. -/
instance : CoeFun (MulRingSeminorm R) fun _ => R → ℝ :=
- FunLike.hasCoeToFun
+ DFunLike.hasCoeToFun
#print MulRingSeminorm.toFun_eq_coe /-
@[simp]
@@ -268,7 +268,7 @@ theorem toFun_eq_coe (p : MulRingSeminorm R) : p.toFun = p :=
#print MulRingSeminorm.ext /-
@[ext]
theorem ext {p q : MulRingSeminorm R} : (∀ x, p x = q x) → p = q :=
- FunLike.ext p q
+ DFunLike.ext p q
#align mul_ring_seminorm.ext MulRingSeminorm.ext
-/
@@ -328,7 +328,7 @@ theorem toFun_eq_coe (p : MulRingNorm R) : p.toFun = p :=
#print MulRingNorm.ext /-
@[ext]
theorem ext {p q : MulRingNorm R} : (∀ x, p x = q x) → p = q :=
- FunLike.ext p q
+ DFunLike.ext p q
#align mul_ring_norm.ext MulRingNorm.ext
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,7 +3,7 @@ Copyright (c) 2022 María Inés de Frutos-Fernández. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: María Inés de Frutos-Fernández, Yaël Dillies
-/
-import Mathbin.Analysis.Normed.Field.Basic
+import Analysis.Normed.Field.Basic
#align_import analysis.normed.ring.seminorm from "leanprover-community/mathlib"@"ce38d86c0b2d427ce208c3cee3159cb421d2b3c4"
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -49,7 +49,7 @@ variable {F R S : Type _} (x y : R) (r : ℝ)
/-- A seminorm on a ring `R` is a function `f : R → ℝ` that preserves zero, takes nonnegative
values, is subadditive and submultiplicative and such that `f (-x) = f x` for all `x ∈ R`. -/
structure RingSeminorm (R : Type _) [NonUnitalNonAssocRing R] extends AddGroupSeminorm R where
- mul_le' : ∀ x y : R, to_fun (x * y) ≤ to_fun x * to_fun y
+ hMul_le' : ∀ x y : R, to_fun (x * y) ≤ to_fun x * to_fun y
#align ring_seminorm RingSeminorm
-/
@@ -93,7 +93,7 @@ instance ringSeminormClass : RingSeminormClass (RingSeminorm R) R ℝ
coe_injective' f g h := by cases f <;> cases g <;> congr
map_zero f := f.map_zero'
map_add_le_add f := f.add_le'
- map_mul_le_mul f := f.mul_le'
+ map_hMul_le_hMul f := f.hMul_le'
map_neg_eq_map f := f.neg'
#align ring_seminorm.ring_seminorm_class RingSeminorm.ringSeminormClass
-/
@@ -117,7 +117,7 @@ theorem ext {p q : RingSeminorm R} : (∀ x, p x = q x) → p = q :=
-/
instance : Zero (RingSeminorm R) :=
- ⟨{ AddGroupSeminorm.hasZero.zero with mul_le' := fun _ _ => (MulZeroClass.zero_mul _).ge }⟩
+ ⟨{ AddGroupSeminorm.hasZero.zero with hMul_le' := fun _ _ => (MulZeroClass.zero_mul _).ge }⟩
#print RingSeminorm.eq_zero_iff /-
theorem eq_zero_iff {p : RingSeminorm R} : p = 0 ↔ ∀ x, p x = 0 :=
@@ -137,7 +137,7 @@ instance : Inhabited (RingSeminorm R) :=
every other element. -/
instance [DecidableEq R] : One (RingSeminorm R) :=
⟨{ (1 : AddGroupSeminorm R) with
- mul_le' := fun x y => by
+ hMul_le' := fun x y => by
by_cases h : x * y = 0
·
refine' (if_pos h).trans_le (mul_nonneg _ _) <;>
@@ -181,7 +181,7 @@ end RingSeminorm
def normRingSeminorm (R : Type _) [NonUnitalSeminormedRing R] : RingSeminorm R :=
{ normAddGroupSeminorm R with
toFun := norm
- mul_le' := norm_mul_le }
+ hMul_le' := norm_mul_le }
#align norm_ring_seminorm normRingSeminorm
-/
@@ -196,7 +196,7 @@ instance ringNormClass : RingNormClass (RingNorm R) R ℝ
coe_injective' f g h := by cases f <;> cases g <;> congr
map_zero f := f.map_zero'
map_add_le_add f := f.add_le'
- map_mul_le_mul f := f.mul_le'
+ map_hMul_le_hMul f := f.hMul_le'
map_neg_eq_map f := f.neg'
eq_zero_of_map_eq_zero f := f.eq_zero_of_map_eq_zero'
#align ring_norm.ring_norm_class RingNorm.ringNormClass
@@ -249,7 +249,7 @@ instance mulRingSeminormClass : MulRingSeminormClass (MulRingSeminorm R) R ℝ
map_zero f := f.map_zero'
map_one f := f.map_one'
map_add_le_add f := f.add_le'
- map_mul f := f.map_mul'
+ map_hMul f := f.map_mul'
map_neg_eq_map f := f.neg'
#align mul_ring_seminorm.mul_ring_seminorm_class MulRingSeminorm.mulRingSeminormClass
-/
@@ -310,7 +310,7 @@ instance mulRingNormClass : MulRingNormClass (MulRingNorm R) R ℝ
map_zero f := f.map_zero'
map_one f := f.map_one'
map_add_le_add f := f.add_le'
- map_mul f := f.map_mul'
+ map_hMul f := f.map_mul'
map_neg_eq_map f := f.neg'
eq_zero_of_map_eq_zero f := f.eq_zero_of_map_eq_zero'
#align mul_ring_norm.mul_ring_norm_class MulRingNorm.mulRingNormClass
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,14 +2,11 @@
Copyright (c) 2022 María Inés de Frutos-Fernández. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: María Inés de Frutos-Fernández, Yaël Dillies
-
-! This file was ported from Lean 3 source module analysis.normed.ring.seminorm
-! leanprover-community/mathlib commit ce38d86c0b2d427ce208c3cee3159cb421d2b3c4
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Analysis.Normed.Field.Basic
+#align_import analysis.normed.ring.seminorm from "leanprover-community/mathlib"@"ce38d86c0b2d427ce208c3cee3159cb421d2b3c4"
+
/-!
# Seminorms and norms on rings
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -105,25 +105,33 @@ instance ringSeminormClass : RingSeminormClass (RingSeminorm R) R ℝ
instance : CoeFun (RingSeminorm R) fun _ => R → ℝ :=
FunLike.hasCoeToFun
+#print RingSeminorm.toFun_eq_coe /-
@[simp]
theorem toFun_eq_coe (p : RingSeminorm R) : p.toFun = p :=
rfl
#align ring_seminorm.to_fun_eq_coe RingSeminorm.toFun_eq_coe
+-/
+#print RingSeminorm.ext /-
@[ext]
theorem ext {p q : RingSeminorm R} : (∀ x, p x = q x) → p = q :=
FunLike.ext p q
#align ring_seminorm.ext RingSeminorm.ext
+-/
instance : Zero (RingSeminorm R) :=
⟨{ AddGroupSeminorm.hasZero.zero with mul_le' := fun _ _ => (MulZeroClass.zero_mul _).ge }⟩
+#print RingSeminorm.eq_zero_iff /-
theorem eq_zero_iff {p : RingSeminorm R} : p = 0 ↔ ∀ x, p x = 0 :=
FunLike.ext_iff
#align ring_seminorm.eq_zero_iff RingSeminorm.eq_zero_iff
+-/
+#print RingSeminorm.ne_zero_iff /-
theorem ne_zero_iff {p : RingSeminorm R} : p ≠ 0 ↔ ∃ x, p x ≠ 0 := by simp [eq_zero_iff]
#align ring_seminorm.ne_zero_iff RingSeminorm.ne_zero_iff
+-/
instance : Inhabited (RingSeminorm R) :=
⟨0⟩
@@ -142,10 +150,12 @@ instance [DecidableEq R] : One (RingSeminorm R) :=
· change ite _ _ _ ≤ ite _ _ _ * ite _ _ _
simp only [if_false, h, left_ne_zero_of_mul h, right_ne_zero_of_mul h, mul_one] }⟩
+#print RingSeminorm.apply_one /-
@[simp]
theorem apply_one [DecidableEq R] (x : R) : (1 : RingSeminorm R) x = if x = 0 then 0 else 1 :=
rfl
#align ring_seminorm.apply_one RingSeminorm.apply_one
+-/
end NonUnitalRing
@@ -153,6 +163,7 @@ section Ring
variable [Ring R] (p : RingSeminorm R)
+#print RingSeminorm.seminorm_one_eq_one_iff_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 => _⟩
@@ -162,6 +173,7 @@ theorem seminorm_one_eq_one_iff_ne_zero (hp : p 1 ≤ 1) : p 1 = 1 ↔ p ≠ 0 :
· refine' hp.antisymm ((le_mul_iff_one_le_left hp0).1 _)
simpa only [one_mul] using map_mul_le_mul p (1 : R) _
#align ring_seminorm.seminorm_one_eq_one_iff_ne_zero RingSeminorm.seminorm_one_eq_one_iff_ne_zero
+-/
end Ring
@@ -202,10 +214,12 @@ theorem toFun_eq_coe (p : RingNorm R) : p.toFun = p :=
rfl
#align ring_norm.to_fun_eq_coe RingNorm.toFun_eq_coe
+#print RingNorm.ext /-
@[ext]
theorem ext {p q : RingNorm R} : (∀ x, p x = q x) → p = q :=
FunLike.ext p q
#align ring_norm.ext RingNorm.ext
+-/
variable (R)
@@ -214,10 +228,12 @@ variable (R)
instance [DecidableEq R] : One (RingNorm R) :=
⟨{ (1 : RingSeminorm R), (1 : AddGroupNorm R) with }⟩
+#print RingNorm.apply_one /-
@[simp]
theorem apply_one [DecidableEq R] (x : R) : (1 : RingNorm R) x = if x = 0 then 0 else 1 :=
rfl
#align ring_norm.apply_one RingNorm.apply_one
+-/
instance [DecidableEq R] : Inhabited (RingNorm R) :=
⟨1⟩
@@ -245,15 +261,19 @@ instance mulRingSeminormClass : MulRingSeminormClass (MulRingSeminorm R) R ℝ
instance : CoeFun (MulRingSeminorm R) fun _ => R → ℝ :=
FunLike.hasCoeToFun
+#print MulRingSeminorm.toFun_eq_coe /-
@[simp]
theorem toFun_eq_coe (p : MulRingSeminorm R) : p.toFun = p :=
rfl
#align mul_ring_seminorm.to_fun_eq_coe MulRingSeminorm.toFun_eq_coe
+-/
+#print MulRingSeminorm.ext /-
@[ext]
theorem ext {p q : MulRingSeminorm R} : (∀ x, p x = q x) → p = q :=
FunLike.ext p q
#align mul_ring_seminorm.ext MulRingSeminorm.ext
+-/
variable [DecidableEq R] [NoZeroDivisors R] [Nontrivial R]
@@ -269,10 +289,12 @@ instance : One (MulRingSeminorm R) :=
· simp
· simp [hx, hy] }⟩
+#print MulRingSeminorm.apply_one /-
@[simp]
theorem apply_one (x : R) : (1 : MulRingSeminorm R) x = if x = 0 then 0 else 1 :=
rfl
#align mul_ring_seminorm.apply_one MulRingSeminorm.apply_one
+-/
instance : Inhabited (MulRingSeminorm R) :=
⟨1⟩
@@ -306,10 +328,12 @@ theorem toFun_eq_coe (p : MulRingNorm R) : p.toFun = p :=
rfl
#align mul_ring_norm.to_fun_eq_coe MulRingNorm.toFun_eq_coe
+#print MulRingNorm.ext /-
@[ext]
theorem ext {p q : MulRingNorm R} : (∀ x, p x = q x) → p = q :=
FunLike.ext p q
#align mul_ring_norm.ext MulRingNorm.ext
+-/
variable (R) [DecidableEq R] [NoZeroDivisors R] [Nontrivial R]
@@ -318,16 +342,19 @@ other element. -/
instance : One (MulRingNorm R) :=
⟨{ (1 : MulRingSeminorm R), (1 : AddGroupNorm R) with }⟩
+#print MulRingNorm.apply_one /-
@[simp]
theorem apply_one (x : R) : (1 : MulRingNorm R) x = if x = 0 then 0 else 1 :=
rfl
#align mul_ring_norm.apply_one MulRingNorm.apply_one
+-/
instance : Inhabited (MulRingNorm R) :=
⟨1⟩
end MulRingNorm
+#print RingSeminorm.toRingNorm /-
/-- A nonzero ring seminorm on a field `K` is a ring norm. -/
def RingSeminorm.toRingNorm {K : Type _} [Field K] (f : RingSeminorm K) (hnt : f ≠ 0) :
RingNorm K :=
@@ -346,6 +373,7 @@ def RingSeminorm.toRingNorm {K : Type _} [Field K] (f : RingSeminorm K) (hnt : f
(map_nonneg f _)
exact hc hc0 }
#align ring_seminorm.to_ring_norm RingSeminorm.toRingNorm
+-/
#print normRingNorm /-
/-- The norm of a normed_ring as a ring_norm. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -68,7 +68,7 @@ structure RingNorm (R : Type _) [NonUnitalNonAssocRing R] extends RingSeminorm R
multiplication, takes nonnegative values, is subadditive and such that `f (-x) = f x` for all `x`.
-/
structure MulRingSeminorm (R : Type _) [NonAssocRing R] extends AddGroupSeminorm R,
- MonoidWithZeroHom R ℝ
+ MonoidWithZeroHom R ℝ
#align mul_ring_seminorm MulRingSeminorm
-/
@@ -79,8 +79,9 @@ structure MulRingNorm (R : Type _) [NonAssocRing R] extends MulRingSeminorm R, A
#align mul_ring_norm MulRingNorm
-/
-attribute [nolint doc_blame]
- RingSeminorm.toAddGroupSeminorm RingNorm.toAddGroupNorm RingNorm.toRingSeminorm MulRingSeminorm.toAddGroupSeminorm MulRingSeminorm.toMonoidWithZeroHom MulRingNorm.toAddGroupNorm MulRingNorm.toMulRingSeminorm
+attribute [nolint doc_blame] RingSeminorm.toAddGroupSeminorm RingNorm.toAddGroupNorm
+ RingNorm.toRingSeminorm MulRingSeminorm.toAddGroupSeminorm MulRingSeminorm.toMonoidWithZeroHom
+ MulRingNorm.toAddGroupNorm MulRingNorm.toMulRingSeminorm
namespace RingSeminorm
@@ -137,7 +138,7 @@ instance [DecidableEq R] : One (RingSeminorm R) :=
refine' (if_pos h).trans_le (mul_nonneg _ _) <;>
· change _ ≤ ite _ _ _
split_ifs
- exacts[le_rfl, zero_le_one]
+ exacts [le_rfl, zero_le_one]
· change ite _ _ _ ≤ ite _ _ _ * ite _ _ _
simp only [if_false, h, left_ne_zero_of_mul h, right_ne_zero_of_mul h, mul_one] }⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -196,12 +196,10 @@ instance ringNormClass : RingNormClass (RingNorm R) R ℝ
instance : CoeFun (RingNorm R) fun _ => R → ℝ :=
⟨fun p => p.toFun⟩
-/- warning: ring_norm.to_fun_eq_coe clashes with [anonymous] -> [anonymous]
-Case conversion may be inaccurate. Consider using '#align ring_norm.to_fun_eq_coe [anonymous]ₓ'. -/
@[simp]
-theorem [anonymous] (p : RingNorm R) : p.toFun = p :=
+theorem toFun_eq_coe (p : RingNorm R) : p.toFun = p :=
rfl
-#align ring_norm.to_fun_eq_coe [anonymous]
+#align ring_norm.to_fun_eq_coe RingNorm.toFun_eq_coe
@[ext]
theorem ext {p q : RingNorm R} : (∀ x, p x = q x) → p = q :=
@@ -302,12 +300,10 @@ instance mulRingNormClass : MulRingNormClass (MulRingNorm R) R ℝ
instance : CoeFun (MulRingNorm R) fun _ => R → ℝ :=
⟨fun p => p.toFun⟩
-/- warning: mul_ring_norm.to_fun_eq_coe clashes with [anonymous] -> [anonymous]
-Case conversion may be inaccurate. Consider using '#align mul_ring_norm.to_fun_eq_coe [anonymous]ₓ'. -/
@[simp]
-theorem [anonymous] (p : MulRingNorm R) : p.toFun = p :=
+theorem toFun_eq_coe (p : MulRingNorm R) : p.toFun = p :=
rfl
-#align mul_ring_norm.to_fun_eq_coe [anonymous]
+#align mul_ring_norm.to_fun_eq_coe MulRingNorm.toFun_eq_coe
@[ext]
theorem ext {p q : MulRingNorm R} : (∀ x, p x = q x) → p = q :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -44,7 +44,7 @@ ring_seminorm, ring_norm
-/
-open NNReal
+open scoped NNReal
variable {F R S : Type _} (x y : R) (r : ℝ)
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -104,23 +104,11 @@ instance ringSeminormClass : RingSeminormClass (RingSeminorm R) R ℝ
instance : CoeFun (RingSeminorm R) fun _ => R → ℝ :=
FunLike.hasCoeToFun
-/- warning: ring_seminorm.to_fun_eq_coe -> RingSeminorm.toFun_eq_coe is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : NonUnitalRing.{u1} R] (p : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)), Eq.{succ u1} (R -> Real) (RingSeminorm.toFun.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) p) (coeFn.{succ u1, succ u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (fun (_x : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) => R -> Real) (RingSeminorm.hasCoeToFun.{u1} R _inst_1) p)
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : NonUnitalRing.{u1} R] (p : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)), Eq.{succ u1} (R -> Real) (FunLike.coe.{succ u1, succ u1, 1} (AddGroupSeminorm.{u1} R (AddCommGroup.toAddGroup.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))) R (fun (a._@.Mathlib.Analysis.Normed.Group.Seminorm._hyg.956 : R) => Real) (SubadditiveHomClass.toFunLike.{u1, u1, 0} (AddGroupSeminorm.{u1} R (AddCommGroup.toAddGroup.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))) R Real (AddZeroClass.toAdd.{u1} R (AddMonoid.toAddZeroClass.{u1} R (SubNegMonoid.toAddMonoid.{u1} R (AddGroup.toSubNegMonoid.{u1} R (AddCommGroup.toAddGroup.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1))))))) (AddZeroClass.toAdd.{0} Real (AddMonoid.toAddZeroClass.{0} Real (AddCommMonoid.toAddMonoid.{0} Real (OrderedAddCommMonoid.toAddCommMonoid.{0} Real Real.orderedAddCommMonoid)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedAddCommMonoid.toPartialOrder.{0} Real Real.orderedAddCommMonoid))) (AddGroupSeminormClass.toSubadditiveHomClass.{u1, u1, 0} (AddGroupSeminorm.{u1} R (AddCommGroup.toAddGroup.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))) R Real (AddCommGroup.toAddGroup.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1))) Real.orderedAddCommMonoid (AddGroupSeminorm.addGroupSeminormClass.{u1} R (AddCommGroup.toAddGroup.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))))) (RingSeminorm.toAddGroupSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) p)) (FunLike.coe.{succ u1, succ u1, 1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R Real (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) Real.orderedSemiring (RingSeminorm.ringSeminormClass.{u1} R _inst_1))) p)
-Case conversion may be inaccurate. Consider using '#align ring_seminorm.to_fun_eq_coe RingSeminorm.toFun_eq_coeₓ'. -/
@[simp]
theorem toFun_eq_coe (p : RingSeminorm R) : p.toFun = p :=
rfl
#align ring_seminorm.to_fun_eq_coe RingSeminorm.toFun_eq_coe
-/- warning: ring_seminorm.ext -> RingSeminorm.ext is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : NonUnitalRing.{u1} R] {p : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)} {q : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)}, (forall (x : R), Eq.{1} Real (coeFn.{succ u1, succ u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (fun (_x : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) => R -> Real) (RingSeminorm.hasCoeToFun.{u1} R _inst_1) p x) (coeFn.{succ u1, succ u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (fun (_x : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) => R -> Real) (RingSeminorm.hasCoeToFun.{u1} R _inst_1) q x)) -> (Eq.{succ u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) p q)
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : NonUnitalRing.{u1} R] {p : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)} {q : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)}, (forall (x : R), Eq.{1} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) x) (FunLike.coe.{succ u1, succ u1, 1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R Real (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) Real.orderedSemiring (RingSeminorm.ringSeminormClass.{u1} R _inst_1))) p x) (FunLike.coe.{succ u1, succ u1, 1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R Real (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) Real.orderedSemiring (RingSeminorm.ringSeminormClass.{u1} R _inst_1))) q x)) -> (Eq.{succ u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) p q)
-Case conversion may be inaccurate. Consider using '#align ring_seminorm.ext RingSeminorm.extₓ'. -/
@[ext]
theorem ext {p q : RingSeminorm R} : (∀ x, p x = q x) → p = q :=
FunLike.ext p q
@@ -129,22 +117,10 @@ theorem ext {p q : RingSeminorm R} : (∀ x, p x = q x) → p = q :=
instance : Zero (RingSeminorm R) :=
⟨{ AddGroupSeminorm.hasZero.zero with mul_le' := fun _ _ => (MulZeroClass.zero_mul _).ge }⟩
-/- warning: ring_seminorm.eq_zero_iff -> RingSeminorm.eq_zero_iff is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : NonUnitalRing.{u1} R] {p : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)}, Iff (Eq.{succ u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) p (OfNat.ofNat.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) 0 (OfNat.mk.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) 0 (Zero.zero.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (RingSeminorm.hasZero.{u1} R _inst_1))))) (forall (x : R), Eq.{1} Real (coeFn.{succ u1, succ u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (fun (_x : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) => R -> Real) (RingSeminorm.hasCoeToFun.{u1} R _inst_1) p x) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : NonUnitalRing.{u1} R] {p : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)}, Iff (Eq.{succ u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) p (OfNat.ofNat.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) 0 (Zero.toOfNat0.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (RingSeminorm.instZeroRingSeminormToNonUnitalNonAssocRing.{u1} R _inst_1)))) (forall (x : R), Eq.{1} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) x) (FunLike.coe.{succ u1, succ u1, 1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R Real (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) Real.orderedSemiring (RingSeminorm.ringSeminormClass.{u1} R _inst_1))) p x) (OfNat.ofNat.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) x) 0 (Zero.toOfNat0.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) x) Real.instZeroReal)))
-Case conversion may be inaccurate. Consider using '#align ring_seminorm.eq_zero_iff RingSeminorm.eq_zero_iffₓ'. -/
theorem eq_zero_iff {p : RingSeminorm R} : p = 0 ↔ ∀ x, p x = 0 :=
FunLike.ext_iff
#align ring_seminorm.eq_zero_iff RingSeminorm.eq_zero_iff
-/- warning: ring_seminorm.ne_zero_iff -> RingSeminorm.ne_zero_iff is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : NonUnitalRing.{u1} R] {p : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)}, Iff (Ne.{succ u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) p (OfNat.ofNat.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) 0 (OfNat.mk.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) 0 (Zero.zero.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (RingSeminorm.hasZero.{u1} R _inst_1))))) (Exists.{succ u1} R (fun (x : R) => Ne.{1} Real (coeFn.{succ u1, succ u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (fun (_x : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) => R -> Real) (RingSeminorm.hasCoeToFun.{u1} R _inst_1) p x) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : NonUnitalRing.{u1} R] {p : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)}, Iff (Ne.{succ u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) p (OfNat.ofNat.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) 0 (Zero.toOfNat0.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (RingSeminorm.instZeroRingSeminormToNonUnitalNonAssocRing.{u1} R _inst_1)))) (Exists.{succ u1} R (fun (x : R) => Ne.{1} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) x) (FunLike.coe.{succ u1, succ u1, 1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R Real (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) Real.orderedSemiring (RingSeminorm.ringSeminormClass.{u1} R _inst_1))) p x) (OfNat.ofNat.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) x) 0 (Zero.toOfNat0.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) x) Real.instZeroReal))))
-Case conversion may be inaccurate. Consider using '#align ring_seminorm.ne_zero_iff RingSeminorm.ne_zero_iffₓ'. -/
theorem ne_zero_iff {p : RingSeminorm R} : p ≠ 0 ↔ ∃ x, p x ≠ 0 := by simp [eq_zero_iff]
#align ring_seminorm.ne_zero_iff RingSeminorm.ne_zero_iff
@@ -165,12 +141,6 @@ instance [DecidableEq R] : One (RingSeminorm R) :=
· change ite _ _ _ ≤ ite _ _ _ * ite _ _ _
simp only [if_false, h, left_ne_zero_of_mul h, right_ne_zero_of_mul h, mul_one] }⟩
-/- warning: ring_seminorm.apply_one -> RingSeminorm.apply_one is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : NonUnitalRing.{u1} R] [_inst_2 : DecidableEq.{succ u1} R] (x : R), Eq.{1} Real (coeFn.{succ u1, succ u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (fun (_x : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) => R -> Real) (RingSeminorm.hasCoeToFun.{u1} R _inst_1) (OfNat.ofNat.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) 1 (OfNat.mk.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) 1 (One.one.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (RingSeminorm.hasOne.{u1} R _inst_1 (fun (a : R) (b : R) => _inst_2 a b))))) x) (ite.{1} Real (Eq.{succ u1} R x (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))))))) (_inst_2 x (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))))))) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : NonUnitalRing.{u1} R] [_inst_2 : DecidableEq.{succ u1} R] (x : R), Eq.{1} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) x) (FunLike.coe.{succ u1, succ u1, 1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R Real (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) Real.orderedSemiring (RingSeminorm.ringSeminormClass.{u1} R _inst_1))) (OfNat.ofNat.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) 1 (One.toOfNat1.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (RingSeminorm.instOneRingSeminormToNonUnitalNonAssocRing.{u1} R _inst_1 (fun (a : R) (b : R) => _inst_2 a b)))) x) (ite.{1} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) x) (Eq.{succ u1} R x (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (SemigroupWithZero.toZero.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_1)))))) (_inst_2 x (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (SemigroupWithZero.toZero.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_1)))))) (OfNat.ofNat.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) x) 0 (Zero.toOfNat0.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) x) Real.instZeroReal)) (OfNat.ofNat.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) x) 1 (One.toOfNat1.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) x) Real.instOneReal)))
-Case conversion may be inaccurate. Consider using '#align ring_seminorm.apply_one RingSeminorm.apply_oneₓ'. -/
@[simp]
theorem apply_one [DecidableEq R] (x : R) : (1 : RingSeminorm R) x = if x = 0 then 0 else 1 :=
rfl
@@ -182,12 +152,6 @@ section Ring
variable [Ring R] (p : RingSeminorm R)
-/- warning: ring_seminorm.seminorm_one_eq_one_iff_ne_zero -> RingSeminorm.seminorm_one_eq_one_iff_ne_zero is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : Ring.{u1} R] (p : RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))), (LE.le.{0} Real Real.hasLe (coeFn.{succ u1, succ u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) (fun (_x : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) => R -> Real) (RingSeminorm.hasCoeToFun.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1)) p (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R _inst_1)))))))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) -> (Iff (Eq.{1} Real (coeFn.{succ u1, succ u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) (fun (_x : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) => R -> Real) (RingSeminorm.hasCoeToFun.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1)) p (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R _inst_1)))))))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) (Ne.{succ u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) p (OfNat.ofNat.{u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) 0 (OfNat.mk.{u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) 0 (Zero.zero.{u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) (RingSeminorm.hasZero.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1)))))))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : Ring.{u1} R] (p : RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))), (LE.le.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R (Ring.toSemiring.{u1} R _inst_1))))) Real.instLEReal (FunLike.coe.{succ u1, succ u1, 1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) R Real (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1)) Real.orderedSemiring (RingSeminorm.ringSeminormClass.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1)))) p (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R (Ring.toSemiring.{u1} R _inst_1))))) (OfNat.ofNat.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R (Ring.toSemiring.{u1} R _inst_1))))) 1 (One.toOfNat1.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R (Ring.toSemiring.{u1} R _inst_1))))) Real.instOneReal))) -> (Iff (Eq.{1} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R (Ring.toSemiring.{u1} R _inst_1))))) (FunLike.coe.{succ u1, succ u1, 1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) R Real (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1)) Real.orderedSemiring (RingSeminorm.ringSeminormClass.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1)))) p (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R (Ring.toSemiring.{u1} R _inst_1))))) (OfNat.ofNat.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R (Ring.toSemiring.{u1} R _inst_1))))) 1 (One.toOfNat1.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R (Ring.toSemiring.{u1} R _inst_1))))) Real.instOneReal))) (Ne.{succ u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) p (OfNat.ofNat.{u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) 0 (Zero.toOfNat0.{u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) (RingSeminorm.instZeroRingSeminormToNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))))))
-Case conversion may be inaccurate. Consider using '#align ring_seminorm.seminorm_one_eq_one_iff_ne_zero RingSeminorm.seminorm_one_eq_one_iff_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 => _⟩
@@ -233,23 +197,12 @@ instance : CoeFun (RingNorm R) fun _ => R → ℝ :=
⟨fun p => p.toFun⟩
/- warning: ring_norm.to_fun_eq_coe clashes with [anonymous] -> [anonymous]
-warning: ring_norm.to_fun_eq_coe -> [anonymous] is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u_2}} [_inst_1 : NonUnitalRing.{u_2} R] (p : RingNorm.{u_2} R (NonUnitalRing.toNonUnitalNonAssocRing.{u_2} R _inst_1)), Eq.{max (succ u_2) 1} (R -> Real) (RingNorm.toFun.{u_2} R (NonUnitalRing.toNonUnitalNonAssocRing.{u_2} R _inst_1) p) (coeFn.{succ u_2, max (succ u_2) 1} (RingNorm.{u_2} R (NonUnitalRing.toNonUnitalNonAssocRing.{u_2} R _inst_1)) (fun (_x : RingNorm.{u_2} R (NonUnitalRing.toNonUnitalNonAssocRing.{u_2} R _inst_1)) => R -> Real) (RingNorm.hasCoeToFun.{u_2} R _inst_1) p)
-but is expected to have type
- forall {R : Type.{u}} {_inst_1 : Type.{v}}, (Nat -> R -> _inst_1) -> Nat -> (List.{u} R) -> (List.{v} _inst_1)
Case conversion may be inaccurate. Consider using '#align ring_norm.to_fun_eq_coe [anonymous]ₓ'. -/
@[simp]
theorem [anonymous] (p : RingNorm R) : p.toFun = p :=
rfl
#align ring_norm.to_fun_eq_coe [anonymous]
-/- warning: ring_norm.ext -> RingNorm.ext is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : NonUnitalRing.{u1} R] {p : RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)} {q : RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)}, (forall (x : R), Eq.{1} Real (coeFn.{succ u1, succ u1} (RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (fun (_x : RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) => R -> Real) (RingNorm.hasCoeToFun.{u1} R _inst_1) p x) (coeFn.{succ u1, succ u1} (RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (fun (_x : RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) => R -> Real) (RingNorm.hasCoeToFun.{u1} R _inst_1) q x)) -> (Eq.{succ u1} (RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) p q)
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : NonUnitalRing.{u1} R] {p : RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)} {q : RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)}, (forall (x : R), Eq.{1} Real (AddGroupSeminorm.toFun.{u1} R (AddCommGroup.toAddGroup.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1))) (RingSeminorm.toAddGroupSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) (RingNorm.toRingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) p)) x) (AddGroupSeminorm.toFun.{u1} R (AddCommGroup.toAddGroup.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1))) (RingSeminorm.toAddGroupSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) (RingNorm.toRingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) q)) x)) -> (Eq.{succ u1} (RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) p q)
-Case conversion may be inaccurate. Consider using '#align ring_norm.ext RingNorm.extₓ'. -/
@[ext]
theorem ext {p q : RingNorm R} : (∀ x, p x = q x) → p = q :=
FunLike.ext p q
@@ -262,12 +215,6 @@ variable (R)
instance [DecidableEq R] : One (RingNorm R) :=
⟨{ (1 : RingSeminorm R), (1 : AddGroupNorm R) with }⟩
-/- warning: ring_norm.apply_one -> RingNorm.apply_one is a dubious translation:
-lean 3 declaration is
- forall (R : Type.{u1}) [_inst_1 : NonUnitalRing.{u1} R] [_inst_2 : DecidableEq.{succ u1} R] (x : R), Eq.{1} Real (coeFn.{succ u1, succ u1} (RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (fun (_x : RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) => R -> Real) (RingNorm.hasCoeToFun.{u1} R _inst_1) (OfNat.ofNat.{u1} (RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) 1 (OfNat.mk.{u1} (RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) 1 (One.one.{u1} (RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (RingNorm.hasOne.{u1} R _inst_1 (fun (a : R) (b : R) => _inst_2 a b))))) x) (ite.{1} Real (Eq.{succ u1} R x (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))))))) (_inst_2 x (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))))))) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))))
-but is expected to have type
- forall (R : Type.{u1}) [_inst_1 : NonUnitalRing.{u1} R] [_inst_2 : DecidableEq.{succ u1} R] (x : R), Eq.{1} Real (AddGroupSeminorm.toFun.{u1} R (AddCommGroup.toAddGroup.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1))) (RingSeminorm.toAddGroupSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) (RingNorm.toRingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) (OfNat.ofNat.{u1} (RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) 1 (One.toOfNat1.{u1} (RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (RingNorm.instOneRingNormToNonUnitalNonAssocRing.{u1} R _inst_1 (fun (a : R) (b : R) => _inst_2 a b)))))) x) (ite.{1} Real (Eq.{succ u1} R x (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (SemigroupWithZero.toZero.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_1)))))) (_inst_2 x (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (SemigroupWithZero.toZero.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_1)))))) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)))
-Case conversion may be inaccurate. Consider using '#align ring_norm.apply_one RingNorm.apply_oneₓ'. -/
@[simp]
theorem apply_one [DecidableEq R] (x : R) : (1 : RingNorm R) x = if x = 0 then 0 else 1 :=
rfl
@@ -299,23 +246,11 @@ instance mulRingSeminormClass : MulRingSeminormClass (MulRingSeminorm R) R ℝ
instance : CoeFun (MulRingSeminorm R) fun _ => R → ℝ :=
FunLike.hasCoeToFun
-/- warning: mul_ring_seminorm.to_fun_eq_coe -> MulRingSeminorm.toFun_eq_coe is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : NonAssocRing.{u1} R] (p : MulRingSeminorm.{u1} R _inst_1), Eq.{succ u1} (R -> Real) (MulRingSeminorm.toFun.{u1} R _inst_1 p) (coeFn.{succ u1, succ u1} (MulRingSeminorm.{u1} R _inst_1) (fun (_x : MulRingSeminorm.{u1} R _inst_1) => R -> Real) (MulRingSeminorm.hasCoeToFun.{u1} R _inst_1) p)
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : NonAssocRing.{u1} R] (p : MulRingSeminorm.{u1} R _inst_1), Eq.{succ u1} (R -> Real) (FunLike.coe.{succ u1, succ u1, 1} (AddGroupSeminorm.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (NonAssocRing.toAddCommGroupWithOne.{u1} R _inst_1)))) R (fun (a._@.Mathlib.Analysis.Normed.Group.Seminorm._hyg.956 : R) => Real) (SubadditiveHomClass.toFunLike.{u1, u1, 0} (AddGroupSeminorm.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (NonAssocRing.toAddCommGroupWithOne.{u1} R _inst_1)))) R Real (AddZeroClass.toAdd.{u1} R (AddMonoid.toAddZeroClass.{u1} R (SubNegMonoid.toAddMonoid.{u1} R (AddGroup.toSubNegMonoid.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (NonAssocRing.toAddCommGroupWithOne.{u1} R _inst_1))))))) (AddZeroClass.toAdd.{0} Real (AddMonoid.toAddZeroClass.{0} Real (AddCommMonoid.toAddMonoid.{0} Real (OrderedAddCommMonoid.toAddCommMonoid.{0} Real Real.orderedAddCommMonoid)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedAddCommMonoid.toPartialOrder.{0} Real Real.orderedAddCommMonoid))) (AddGroupSeminormClass.toSubadditiveHomClass.{u1, u1, 0} (AddGroupSeminorm.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (NonAssocRing.toAddCommGroupWithOne.{u1} R _inst_1)))) R Real (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (NonAssocRing.toAddCommGroupWithOne.{u1} R _inst_1))) Real.orderedAddCommMonoid (AddGroupSeminorm.addGroupSeminormClass.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (NonAssocRing.toAddCommGroupWithOne.{u1} R _inst_1)))))) (MulRingSeminorm.toAddGroupSeminorm.{u1} R _inst_1 p)) (FunLike.coe.{succ u1, succ u1, 1} (MulRingSeminorm.{u1} R _inst_1) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.1434 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (MulRingSeminorm.{u1} R _inst_1) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (MulRingSeminorm.{u1} R _inst_1) R Real (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1) Real.orderedSemiring (MulRingSeminormClass.toRingSeminormClass.{u1, u1, 0} (MulRingSeminorm.{u1} R _inst_1) R Real _inst_1 Real.orderedSemiring (MulRingSeminorm.mulRingSeminormClass.{u1} R _inst_1)))) p)
-Case conversion may be inaccurate. Consider using '#align mul_ring_seminorm.to_fun_eq_coe MulRingSeminorm.toFun_eq_coeₓ'. -/
@[simp]
theorem toFun_eq_coe (p : MulRingSeminorm R) : p.toFun = p :=
rfl
#align mul_ring_seminorm.to_fun_eq_coe MulRingSeminorm.toFun_eq_coe
-/- warning: mul_ring_seminorm.ext -> MulRingSeminorm.ext is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : NonAssocRing.{u1} R] {p : MulRingSeminorm.{u1} R _inst_1} {q : MulRingSeminorm.{u1} R _inst_1}, (forall (x : R), Eq.{1} Real (coeFn.{succ u1, succ u1} (MulRingSeminorm.{u1} R _inst_1) (fun (_x : MulRingSeminorm.{u1} R _inst_1) => R -> Real) (MulRingSeminorm.hasCoeToFun.{u1} R _inst_1) p x) (coeFn.{succ u1, succ u1} (MulRingSeminorm.{u1} R _inst_1) (fun (_x : MulRingSeminorm.{u1} R _inst_1) => R -> Real) (MulRingSeminorm.hasCoeToFun.{u1} R _inst_1) q x)) -> (Eq.{succ u1} (MulRingSeminorm.{u1} R _inst_1) p q)
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : NonAssocRing.{u1} R] {p : MulRingSeminorm.{u1} R _inst_1} {q : MulRingSeminorm.{u1} R _inst_1}, (forall (x : R), Eq.{1} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.1434 : R) => Real) x) (FunLike.coe.{succ u1, succ u1, 1} (MulRingSeminorm.{u1} R _inst_1) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.1434 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (MulRingSeminorm.{u1} R _inst_1) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (MulRingSeminorm.{u1} R _inst_1) R Real (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1) Real.orderedSemiring (MulRingSeminormClass.toRingSeminormClass.{u1, u1, 0} (MulRingSeminorm.{u1} R _inst_1) R Real _inst_1 Real.orderedSemiring (MulRingSeminorm.mulRingSeminormClass.{u1} R _inst_1)))) p x) (FunLike.coe.{succ u1, succ u1, 1} (MulRingSeminorm.{u1} R _inst_1) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.1434 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (MulRingSeminorm.{u1} R _inst_1) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (MulRingSeminorm.{u1} R _inst_1) R Real (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1) Real.orderedSemiring (MulRingSeminormClass.toRingSeminormClass.{u1, u1, 0} (MulRingSeminorm.{u1} R _inst_1) R Real _inst_1 Real.orderedSemiring (MulRingSeminorm.mulRingSeminormClass.{u1} R _inst_1)))) q x)) -> (Eq.{succ u1} (MulRingSeminorm.{u1} R _inst_1) p q)
-Case conversion may be inaccurate. Consider using '#align mul_ring_seminorm.ext MulRingSeminorm.extₓ'. -/
@[ext]
theorem ext {p q : MulRingSeminorm R} : (∀ x, p x = q x) → p = q :=
FunLike.ext p q
@@ -335,12 +270,6 @@ instance : One (MulRingSeminorm R) :=
· simp
· simp [hx, hy] }⟩
-/- warning: mul_ring_seminorm.apply_one -> MulRingSeminorm.apply_one is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : NonAssocRing.{u1} R] [_inst_2 : DecidableEq.{succ u1} R] [_inst_3 : NoZeroDivisors.{u1} R (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1))))] [_inst_4 : Nontrivial.{u1} R] (x : R), Eq.{1} Real (coeFn.{succ u1, succ u1} (MulRingSeminorm.{u1} R _inst_1) (fun (_x : MulRingSeminorm.{u1} R _inst_1) => R -> Real) (MulRingSeminorm.hasCoeToFun.{u1} R _inst_1) (OfNat.ofNat.{u1} (MulRingSeminorm.{u1} R _inst_1) 1 (OfNat.mk.{u1} (MulRingSeminorm.{u1} R _inst_1) 1 (One.one.{u1} (MulRingSeminorm.{u1} R _inst_1) (MulRingSeminorm.hasOne.{u1} R _inst_1 (fun (a : R) (b : R) => _inst_2 a b) _inst_3 _inst_4)))) x) (ite.{1} Real (Eq.{succ u1} R x (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))))))) (_inst_2 x (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))))))) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : NonAssocRing.{u1} R] [_inst_2 : DecidableEq.{succ u1} R] [_inst_3 : NoZeroDivisors.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (MulZeroOneClass.toZero.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R _inst_1)))] [_inst_4 : Nontrivial.{u1} R] (x : R), Eq.{1} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.1434 : R) => Real) x) (FunLike.coe.{succ u1, succ u1, 1} (MulRingSeminorm.{u1} R _inst_1) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.1434 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (MulRingSeminorm.{u1} R _inst_1) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (MulRingSeminorm.{u1} R _inst_1) R Real (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1) Real.orderedSemiring (MulRingSeminormClass.toRingSeminormClass.{u1, u1, 0} (MulRingSeminorm.{u1} R _inst_1) R Real _inst_1 Real.orderedSemiring (MulRingSeminorm.mulRingSeminormClass.{u1} R _inst_1)))) (OfNat.ofNat.{u1} (MulRingSeminorm.{u1} R _inst_1) 1 (One.toOfNat1.{u1} (MulRingSeminorm.{u1} R _inst_1) (MulRingSeminorm.instOneMulRingSeminorm.{u1} R _inst_1 (fun (a : R) (b : R) => _inst_2 a b) _inst_3 _inst_4))) x) (ite.{1} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.1434 : R) => Real) x) (Eq.{succ u1} R x (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MulZeroOneClass.toZero.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R _inst_1)))))) (_inst_2 x (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MulZeroOneClass.toZero.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R _inst_1)))))) (OfNat.ofNat.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.1434 : R) => Real) x) 0 (Zero.toOfNat0.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.1434 : R) => Real) x) Real.instZeroReal)) (OfNat.ofNat.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.1434 : R) => Real) x) 1 (One.toOfNat1.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.1434 : R) => Real) x) Real.instOneReal)))
-Case conversion may be inaccurate. Consider using '#align mul_ring_seminorm.apply_one MulRingSeminorm.apply_oneₓ'. -/
@[simp]
theorem apply_one (x : R) : (1 : MulRingSeminorm R) x = if x = 0 then 0 else 1 :=
rfl
@@ -374,23 +303,12 @@ instance : CoeFun (MulRingNorm R) fun _ => R → ℝ :=
⟨fun p => p.toFun⟩
/- warning: mul_ring_norm.to_fun_eq_coe clashes with [anonymous] -> [anonymous]
-warning: mul_ring_norm.to_fun_eq_coe -> [anonymous] is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u_2}} [_inst_1 : NonAssocRing.{u_2} R] (p : MulRingNorm.{u_2} R _inst_1), Eq.{max (succ u_2) 1} (R -> Real) (MulRingNorm.toFun.{u_2} R _inst_1 p) (coeFn.{succ u_2, max (succ u_2) 1} (MulRingNorm.{u_2} R _inst_1) (fun (_x : MulRingNorm.{u_2} R _inst_1) => R -> Real) (MulRingNorm.hasCoeToFun.{u_2} R _inst_1) p)
-but is expected to have type
- forall {R : Type.{u}} {_inst_1 : Type.{v}}, (Nat -> R -> _inst_1) -> Nat -> (List.{u} R) -> (List.{v} _inst_1)
Case conversion may be inaccurate. Consider using '#align mul_ring_norm.to_fun_eq_coe [anonymous]ₓ'. -/
@[simp]
theorem [anonymous] (p : MulRingNorm R) : p.toFun = p :=
rfl
#align mul_ring_norm.to_fun_eq_coe [anonymous]
-/- warning: mul_ring_norm.ext -> MulRingNorm.ext is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : NonAssocRing.{u1} R] {p : MulRingNorm.{u1} R _inst_1} {q : MulRingNorm.{u1} R _inst_1}, (forall (x : R), Eq.{1} Real (coeFn.{succ u1, succ u1} (MulRingNorm.{u1} R _inst_1) (fun (_x : MulRingNorm.{u1} R _inst_1) => R -> Real) (MulRingNorm.hasCoeToFun.{u1} R _inst_1) p x) (coeFn.{succ u1, succ u1} (MulRingNorm.{u1} R _inst_1) (fun (_x : MulRingNorm.{u1} R _inst_1) => R -> Real) (MulRingNorm.hasCoeToFun.{u1} R _inst_1) q x)) -> (Eq.{succ u1} (MulRingNorm.{u1} R _inst_1) p q)
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : NonAssocRing.{u1} R] {p : MulRingNorm.{u1} R _inst_1} {q : MulRingNorm.{u1} R _inst_1}, (forall (x : R), Eq.{1} Real (AddGroupSeminorm.toFun.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (NonAssocRing.toAddCommGroupWithOne.{u1} R _inst_1))) (MulRingSeminorm.toAddGroupSeminorm.{u1} R _inst_1 (MulRingNorm.toMulRingSeminorm.{u1} R _inst_1 p)) x) (AddGroupSeminorm.toFun.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (NonAssocRing.toAddCommGroupWithOne.{u1} R _inst_1))) (MulRingSeminorm.toAddGroupSeminorm.{u1} R _inst_1 (MulRingNorm.toMulRingSeminorm.{u1} R _inst_1 q)) x)) -> (Eq.{succ u1} (MulRingNorm.{u1} R _inst_1) p q)
-Case conversion may be inaccurate. Consider using '#align mul_ring_norm.ext MulRingNorm.extₓ'. -/
@[ext]
theorem ext {p q : MulRingNorm R} : (∀ x, p x = q x) → p = q :=
FunLike.ext p q
@@ -403,12 +321,6 @@ other element. -/
instance : One (MulRingNorm R) :=
⟨{ (1 : MulRingSeminorm R), (1 : AddGroupNorm R) with }⟩
-/- warning: mul_ring_norm.apply_one -> MulRingNorm.apply_one is a dubious translation:
-lean 3 declaration is
- forall (R : Type.{u1}) [_inst_1 : NonAssocRing.{u1} R] [_inst_2 : DecidableEq.{succ u1} R] [_inst_3 : NoZeroDivisors.{u1} R (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1))))] [_inst_4 : Nontrivial.{u1} R] (x : R), Eq.{1} Real (coeFn.{succ u1, succ u1} (MulRingNorm.{u1} R _inst_1) (fun (_x : MulRingNorm.{u1} R _inst_1) => R -> Real) (MulRingNorm.hasCoeToFun.{u1} R _inst_1) (OfNat.ofNat.{u1} (MulRingNorm.{u1} R _inst_1) 1 (OfNat.mk.{u1} (MulRingNorm.{u1} R _inst_1) 1 (One.one.{u1} (MulRingNorm.{u1} R _inst_1) (MulRingNorm.hasOne.{u1} R _inst_1 (fun (a : R) (b : R) => _inst_2 a b) _inst_3 _inst_4)))) x) (ite.{1} Real (Eq.{succ u1} R x (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))))))) (_inst_2 x (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))))))) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))))
-but is expected to have type
- forall (R : Type.{u1}) [_inst_1 : NonAssocRing.{u1} R] [_inst_2 : DecidableEq.{succ u1} R] [_inst_3 : NoZeroDivisors.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (MulZeroOneClass.toZero.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R _inst_1)))] [_inst_4 : Nontrivial.{u1} R] (x : R), Eq.{1} Real (AddGroupSeminorm.toFun.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (NonAssocRing.toAddCommGroupWithOne.{u1} R _inst_1))) (MulRingSeminorm.toAddGroupSeminorm.{u1} R _inst_1 (MulRingNorm.toMulRingSeminorm.{u1} R _inst_1 (OfNat.ofNat.{u1} (MulRingNorm.{u1} R _inst_1) 1 (One.toOfNat1.{u1} (MulRingNorm.{u1} R _inst_1) (MulRingNorm.instOneMulRingNorm.{u1} R _inst_1 (fun (a : R) (b : R) => _inst_2 a b) _inst_3 _inst_4))))) x) (ite.{1} Real (Eq.{succ u1} R x (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MulZeroOneClass.toZero.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R _inst_1)))))) (_inst_2 x (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MulZeroOneClass.toZero.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R _inst_1)))))) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)))
-Case conversion may be inaccurate. Consider using '#align mul_ring_norm.apply_one MulRingNorm.apply_oneₓ'. -/
@[simp]
theorem apply_one (x : R) : (1 : MulRingNorm R) x = if x = 0 then 0 else 1 :=
rfl
@@ -419,12 +331,6 @@ instance : Inhabited (MulRingNorm R) :=
end MulRingNorm
-/- warning: ring_seminorm.to_ring_norm -> RingSeminorm.toRingNorm is a dubious translation:
-lean 3 declaration is
- forall {K : Type.{u1}} [_inst_1 : Field.{u1} K] (f : RingSeminorm.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))), (Ne.{succ u1} (RingSeminorm.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))) f (OfNat.ofNat.{u1} (RingSeminorm.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))) 0 (OfNat.mk.{u1} (RingSeminorm.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))) 0 (Zero.zero.{u1} (RingSeminorm.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))) (RingSeminorm.hasZero.{u1} K (NonUnitalCommRing.toNonUnitalRing.{u1} K (CommRing.toNonUnitalCommRing.{u1} K (EuclideanDomain.toCommRing.{u1} K (Field.toEuclideanDomain.{u1} K _inst_1))))))))) -> (RingNorm.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))))
-but is expected to have type
- forall {K : Type.{u1}} [_inst_1 : Field.{u1} K] (f : RingSeminorm.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))), (Ne.{succ u1} (RingSeminorm.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))) f (OfNat.ofNat.{u1} (RingSeminorm.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))) 0 (Zero.toOfNat0.{u1} (RingSeminorm.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))) (RingSeminorm.instZeroRingSeminormToNonUnitalNonAssocRing.{u1} K (NonUnitalCommRing.toNonUnitalRing.{u1} K (CommRing.toNonUnitalCommRing.{u1} K (EuclideanDomain.toCommRing.{u1} K (Field.toEuclideanDomain.{u1} K _inst_1)))))))) -> (RingNorm.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))))
-Case conversion may be inaccurate. Consider using '#align ring_seminorm.to_ring_norm RingSeminorm.toRingNormₓ'. -/
/-- A nonzero ring seminorm on a field `K` is a ring norm. -/
def RingSeminorm.toRingNorm {K : Type _} [Field K] (f : RingSeminorm K) (hnt : f ≠ 0) :
RingNorm K :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -190,13 +190,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align ring_seminorm.seminorm_one_eq_one_iff_ne_zero RingSeminorm.seminorm_one_eq_one_iff_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 => _⟩
+ 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
· cases h (ext fun x => (map_nonneg _ _).antisymm' _)
simpa only [hp0, mul_one, MulZeroClass.mul_zero] using map_mul_le_mul p x 1
mathlib commit https://github.com/leanprover-community/mathlib/commit/08e1d8d4d989df3a6df86f385e9053ec8a372cc1
@@ -186,7 +186,7 @@ variable [Ring R] (p : RingSeminorm R)
lean 3 declaration is
forall {R : Type.{u1}} [_inst_1 : Ring.{u1} R] (p : RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))), (LE.le.{0} Real Real.hasLe (coeFn.{succ u1, succ u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) (fun (_x : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) => R -> Real) (RingSeminorm.hasCoeToFun.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1)) p (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R _inst_1)))))))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) -> (Iff (Eq.{1} Real (coeFn.{succ u1, succ u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) (fun (_x : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) => R -> Real) (RingSeminorm.hasCoeToFun.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1)) p (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R _inst_1)))))))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) (Ne.{succ u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) p (OfNat.ofNat.{u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) 0 (OfNat.mk.{u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) 0 (Zero.zero.{u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) (RingSeminorm.hasZero.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1)))))))
but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : Ring.{u1} R] (p : RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))), (LE.le.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (NonAssocRing.toOne.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))))) Real.instLEReal (FunLike.coe.{succ u1, succ u1, 1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) R Real (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1)) Real.orderedSemiring (RingSeminorm.ringSeminormClass.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1)))) p (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (NonAssocRing.toOne.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))))) (OfNat.ofNat.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (NonAssocRing.toOne.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))))) 1 (One.toOfNat1.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (NonAssocRing.toOne.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))))) Real.instOneReal))) -> (Iff (Eq.{1} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (NonAssocRing.toOne.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))))) (FunLike.coe.{succ u1, succ u1, 1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) R Real (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1)) Real.orderedSemiring (RingSeminorm.ringSeminormClass.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1)))) p (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (NonAssocRing.toOne.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))))) (OfNat.ofNat.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (NonAssocRing.toOne.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))))) 1 (One.toOfNat1.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (NonAssocRing.toOne.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))))) Real.instOneReal))) (Ne.{succ u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) p (OfNat.ofNat.{u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) 0 (Zero.toOfNat0.{u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) (RingSeminorm.instZeroRingSeminormToNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))))))
+ forall {R : Type.{u1}} [_inst_1 : Ring.{u1} R] (p : RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))), (LE.le.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R (Ring.toSemiring.{u1} R _inst_1))))) Real.instLEReal (FunLike.coe.{succ u1, succ u1, 1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) R Real (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1)) Real.orderedSemiring (RingSeminorm.ringSeminormClass.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1)))) p (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R (Ring.toSemiring.{u1} R _inst_1))))) (OfNat.ofNat.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R (Ring.toSemiring.{u1} R _inst_1))))) 1 (One.toOfNat1.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R (Ring.toSemiring.{u1} R _inst_1))))) Real.instOneReal))) -> (Iff (Eq.{1} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R (Ring.toSemiring.{u1} R _inst_1))))) (FunLike.coe.{succ u1, succ u1, 1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) R Real (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1)) Real.orderedSemiring (RingSeminorm.ringSeminormClass.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1)))) p (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R (Ring.toSemiring.{u1} R _inst_1))))) (OfNat.ofNat.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R (Ring.toSemiring.{u1} R _inst_1))))) 1 (One.toOfNat1.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (Semiring.toOne.{u1} R (Ring.toSemiring.{u1} R _inst_1))))) Real.instOneReal))) (Ne.{succ u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) p (OfNat.ofNat.{u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) 0 (Zero.toOfNat0.{u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) (RingSeminorm.instZeroRingSeminormToNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))))))
Case conversion may be inaccurate. Consider using '#align ring_seminorm.seminorm_one_eq_one_iff_ne_zero RingSeminorm.seminorm_one_eq_one_iff_ne_zeroₓ'. -/
theorem seminorm_one_eq_one_iff_ne_zero (hp : p 1 ≤ 1) : p 1 = 1 ↔ p ≠ 0 :=
by
mathlib commit https://github.com/leanprover-community/mathlib/commit/cd8fafa2fac98e1a67097e8a91ad9901cfde48af
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: María Inés de Frutos-Fernández, Yaël Dillies
! This file was ported from Lean 3 source module analysis.normed.ring.seminorm
-! leanprover-community/mathlib commit 7ea604785a41a0681eac70c5a82372493dbefc68
+! leanprover-community/mathlib commit ce38d86c0b2d427ce208c3cee3159cb421d2b3c4
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -13,6 +13,9 @@ import Mathbin.Analysis.Normed.Field.Basic
/-!
# Seminorms and norms on rings
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
This file defines seminorms and norms on rings. These definitions are useful when one needs to
consider multiple (semi)norms on a given ring.
mathlib commit https://github.com/leanprover-community/mathlib/commit/17ad94b4953419f3e3ce3e77da3239c62d1d09f0
@@ -45,28 +45,36 @@ open NNReal
variable {F R S : Type _} (x y : R) (r : ℝ)
+#print RingSeminorm /-
/-- A seminorm on a ring `R` is a function `f : R → ℝ` that preserves zero, takes nonnegative
values, is subadditive and submultiplicative and such that `f (-x) = f x` for all `x ∈ R`. -/
structure RingSeminorm (R : Type _) [NonUnitalNonAssocRing R] extends AddGroupSeminorm R where
mul_le' : ∀ x y : R, to_fun (x * y) ≤ to_fun x * to_fun y
#align ring_seminorm RingSeminorm
+-/
+#print RingNorm /-
/-- A function `f : R → ℝ` is a norm on a (nonunital) ring if it is a seminorm and `f x = 0`
implies `x = 0`. -/
structure RingNorm (R : Type _) [NonUnitalNonAssocRing R] extends RingSeminorm R, AddGroupNorm R
#align ring_norm RingNorm
+-/
+#print MulRingSeminorm /-
/-- A multiplicative seminorm on a ring `R` is a function `f : R → ℝ` that preserves zero and
multiplication, takes nonnegative values, is subadditive and such that `f (-x) = f x` for all `x`.
-/
structure MulRingSeminorm (R : Type _) [NonAssocRing R] extends AddGroupSeminorm R,
MonoidWithZeroHom R ℝ
#align mul_ring_seminorm MulRingSeminorm
+-/
+#print MulRingNorm /-
/-- A multiplicative norm on a ring `R` is a multiplicative ring seminorm such that `f x = 0`
implies `x = 0`. -/
structure MulRingNorm (R : Type _) [NonAssocRing R] extends MulRingSeminorm R, AddGroupNorm R
#align mul_ring_norm MulRingNorm
+-/
attribute [nolint doc_blame]
RingSeminorm.toAddGroupSeminorm RingNorm.toAddGroupNorm RingNorm.toRingSeminorm MulRingSeminorm.toAddGroupSeminorm MulRingSeminorm.toMonoidWithZeroHom MulRingNorm.toAddGroupNorm MulRingNorm.toMulRingSeminorm
@@ -77,6 +85,7 @@ section NonUnitalRing
variable [NonUnitalRing R]
+#print RingSeminorm.ringSeminormClass /-
instance ringSeminormClass : RingSeminormClass (RingSeminorm R) R ℝ
where
coe f := f.toFun
@@ -86,16 +95,29 @@ instance ringSeminormClass : RingSeminormClass (RingSeminorm R) R ℝ
map_mul_le_mul f := f.mul_le'
map_neg_eq_map f := f.neg'
#align ring_seminorm.ring_seminorm_class RingSeminorm.ringSeminormClass
+-/
/-- Helper instance for when there's too many metavariables to apply `fun_like.has_coe_to_fun`. -/
instance : CoeFun (RingSeminorm R) fun _ => R → ℝ :=
FunLike.hasCoeToFun
+/- warning: ring_seminorm.to_fun_eq_coe -> RingSeminorm.toFun_eq_coe is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : NonUnitalRing.{u1} R] (p : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)), Eq.{succ u1} (R -> Real) (RingSeminorm.toFun.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) p) (coeFn.{succ u1, succ u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (fun (_x : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) => R -> Real) (RingSeminorm.hasCoeToFun.{u1} R _inst_1) p)
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : NonUnitalRing.{u1} R] (p : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)), Eq.{succ u1} (R -> Real) (FunLike.coe.{succ u1, succ u1, 1} (AddGroupSeminorm.{u1} R (AddCommGroup.toAddGroup.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))) R (fun (a._@.Mathlib.Analysis.Normed.Group.Seminorm._hyg.956 : R) => Real) (SubadditiveHomClass.toFunLike.{u1, u1, 0} (AddGroupSeminorm.{u1} R (AddCommGroup.toAddGroup.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))) R Real (AddZeroClass.toAdd.{u1} R (AddMonoid.toAddZeroClass.{u1} R (SubNegMonoid.toAddMonoid.{u1} R (AddGroup.toSubNegMonoid.{u1} R (AddCommGroup.toAddGroup.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1))))))) (AddZeroClass.toAdd.{0} Real (AddMonoid.toAddZeroClass.{0} Real (AddCommMonoid.toAddMonoid.{0} Real (OrderedAddCommMonoid.toAddCommMonoid.{0} Real Real.orderedAddCommMonoid)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedAddCommMonoid.toPartialOrder.{0} Real Real.orderedAddCommMonoid))) (AddGroupSeminormClass.toSubadditiveHomClass.{u1, u1, 0} (AddGroupSeminorm.{u1} R (AddCommGroup.toAddGroup.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))) R Real (AddCommGroup.toAddGroup.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1))) Real.orderedAddCommMonoid (AddGroupSeminorm.addGroupSeminormClass.{u1} R (AddCommGroup.toAddGroup.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))))) (RingSeminorm.toAddGroupSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) p)) (FunLike.coe.{succ u1, succ u1, 1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R Real (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) Real.orderedSemiring (RingSeminorm.ringSeminormClass.{u1} R _inst_1))) p)
+Case conversion may be inaccurate. Consider using '#align ring_seminorm.to_fun_eq_coe RingSeminorm.toFun_eq_coeₓ'. -/
@[simp]
theorem toFun_eq_coe (p : RingSeminorm R) : p.toFun = p :=
rfl
#align ring_seminorm.to_fun_eq_coe RingSeminorm.toFun_eq_coe
+/- warning: ring_seminorm.ext -> RingSeminorm.ext is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : NonUnitalRing.{u1} R] {p : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)} {q : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)}, (forall (x : R), Eq.{1} Real (coeFn.{succ u1, succ u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (fun (_x : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) => R -> Real) (RingSeminorm.hasCoeToFun.{u1} R _inst_1) p x) (coeFn.{succ u1, succ u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (fun (_x : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) => R -> Real) (RingSeminorm.hasCoeToFun.{u1} R _inst_1) q x)) -> (Eq.{succ u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) p q)
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : NonUnitalRing.{u1} R] {p : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)} {q : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)}, (forall (x : R), Eq.{1} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) x) (FunLike.coe.{succ u1, succ u1, 1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R Real (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) Real.orderedSemiring (RingSeminorm.ringSeminormClass.{u1} R _inst_1))) p x) (FunLike.coe.{succ u1, succ u1, 1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R Real (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) Real.orderedSemiring (RingSeminorm.ringSeminormClass.{u1} R _inst_1))) q x)) -> (Eq.{succ u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) p q)
+Case conversion may be inaccurate. Consider using '#align ring_seminorm.ext RingSeminorm.extₓ'. -/
@[ext]
theorem ext {p q : RingSeminorm R} : (∀ x, p x = q x) → p = q :=
FunLike.ext p q
@@ -104,10 +126,22 @@ theorem ext {p q : RingSeminorm R} : (∀ x, p x = q x) → p = q :=
instance : Zero (RingSeminorm R) :=
⟨{ AddGroupSeminorm.hasZero.zero with mul_le' := fun _ _ => (MulZeroClass.zero_mul _).ge }⟩
+/- warning: ring_seminorm.eq_zero_iff -> RingSeminorm.eq_zero_iff is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : NonUnitalRing.{u1} R] {p : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)}, Iff (Eq.{succ u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) p (OfNat.ofNat.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) 0 (OfNat.mk.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) 0 (Zero.zero.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (RingSeminorm.hasZero.{u1} R _inst_1))))) (forall (x : R), Eq.{1} Real (coeFn.{succ u1, succ u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (fun (_x : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) => R -> Real) (RingSeminorm.hasCoeToFun.{u1} R _inst_1) p x) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : NonUnitalRing.{u1} R] {p : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)}, Iff (Eq.{succ u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) p (OfNat.ofNat.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) 0 (Zero.toOfNat0.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (RingSeminorm.instZeroRingSeminormToNonUnitalNonAssocRing.{u1} R _inst_1)))) (forall (x : R), Eq.{1} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) x) (FunLike.coe.{succ u1, succ u1, 1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R Real (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) Real.orderedSemiring (RingSeminorm.ringSeminormClass.{u1} R _inst_1))) p x) (OfNat.ofNat.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) x) 0 (Zero.toOfNat0.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) x) Real.instZeroReal)))
+Case conversion may be inaccurate. Consider using '#align ring_seminorm.eq_zero_iff RingSeminorm.eq_zero_iffₓ'. -/
theorem eq_zero_iff {p : RingSeminorm R} : p = 0 ↔ ∀ x, p x = 0 :=
FunLike.ext_iff
#align ring_seminorm.eq_zero_iff RingSeminorm.eq_zero_iff
+/- warning: ring_seminorm.ne_zero_iff -> RingSeminorm.ne_zero_iff is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : NonUnitalRing.{u1} R] {p : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)}, Iff (Ne.{succ u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) p (OfNat.ofNat.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) 0 (OfNat.mk.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) 0 (Zero.zero.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (RingSeminorm.hasZero.{u1} R _inst_1))))) (Exists.{succ u1} R (fun (x : R) => Ne.{1} Real (coeFn.{succ u1, succ u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (fun (_x : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) => R -> Real) (RingSeminorm.hasCoeToFun.{u1} R _inst_1) p x) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : NonUnitalRing.{u1} R] {p : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)}, Iff (Ne.{succ u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) p (OfNat.ofNat.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) 0 (Zero.toOfNat0.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (RingSeminorm.instZeroRingSeminormToNonUnitalNonAssocRing.{u1} R _inst_1)))) (Exists.{succ u1} R (fun (x : R) => Ne.{1} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) x) (FunLike.coe.{succ u1, succ u1, 1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R Real (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) Real.orderedSemiring (RingSeminorm.ringSeminormClass.{u1} R _inst_1))) p x) (OfNat.ofNat.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) x) 0 (Zero.toOfNat0.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) x) Real.instZeroReal))))
+Case conversion may be inaccurate. Consider using '#align ring_seminorm.ne_zero_iff RingSeminorm.ne_zero_iffₓ'. -/
theorem ne_zero_iff {p : RingSeminorm R} : p ≠ 0 ↔ ∃ x, p x ≠ 0 := by simp [eq_zero_iff]
#align ring_seminorm.ne_zero_iff RingSeminorm.ne_zero_iff
@@ -128,6 +162,12 @@ instance [DecidableEq R] : One (RingSeminorm R) :=
· change ite _ _ _ ≤ ite _ _ _ * ite _ _ _
simp only [if_false, h, left_ne_zero_of_mul h, right_ne_zero_of_mul h, mul_one] }⟩
+/- warning: ring_seminorm.apply_one -> RingSeminorm.apply_one is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : NonUnitalRing.{u1} R] [_inst_2 : DecidableEq.{succ u1} R] (x : R), Eq.{1} Real (coeFn.{succ u1, succ u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (fun (_x : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) => R -> Real) (RingSeminorm.hasCoeToFun.{u1} R _inst_1) (OfNat.ofNat.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) 1 (OfNat.mk.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) 1 (One.one.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (RingSeminorm.hasOne.{u1} R _inst_1 (fun (a : R) (b : R) => _inst_2 a b))))) x) (ite.{1} Real (Eq.{succ u1} R x (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))))))) (_inst_2 x (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))))))) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : NonUnitalRing.{u1} R] [_inst_2 : DecidableEq.{succ u1} R] (x : R), Eq.{1} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) x) (FunLike.coe.{succ u1, succ u1, 1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) R Real (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) Real.orderedSemiring (RingSeminorm.ringSeminormClass.{u1} R _inst_1))) (OfNat.ofNat.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) 1 (One.toOfNat1.{u1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (RingSeminorm.instOneRingSeminormToNonUnitalNonAssocRing.{u1} R _inst_1 (fun (a : R) (b : R) => _inst_2 a b)))) x) (ite.{1} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) x) (Eq.{succ u1} R x (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (SemigroupWithZero.toZero.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_1)))))) (_inst_2 x (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (SemigroupWithZero.toZero.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_1)))))) (OfNat.ofNat.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) x) 0 (Zero.toOfNat0.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) x) Real.instZeroReal)) (OfNat.ofNat.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) x) 1 (One.toOfNat1.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) x) Real.instOneReal)))
+Case conversion may be inaccurate. Consider using '#align ring_seminorm.apply_one RingSeminorm.apply_oneₓ'. -/
@[simp]
theorem apply_one [DecidableEq R] (x : R) : (1 : RingSeminorm R) x = if x = 0 then 0 else 1 :=
rfl
@@ -139,6 +179,12 @@ section Ring
variable [Ring R] (p : RingSeminorm R)
+/- warning: ring_seminorm.seminorm_one_eq_one_iff_ne_zero -> RingSeminorm.seminorm_one_eq_one_iff_ne_zero is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : Ring.{u1} R] (p : RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))), (LE.le.{0} Real Real.hasLe (coeFn.{succ u1, succ u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) (fun (_x : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) => R -> Real) (RingSeminorm.hasCoeToFun.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1)) p (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R _inst_1)))))))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) -> (Iff (Eq.{1} Real (coeFn.{succ u1, succ u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) (fun (_x : RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) => R -> Real) (RingSeminorm.hasCoeToFun.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1)) p (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R _inst_1)))))))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) (Ne.{succ u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) p (OfNat.ofNat.{u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) 0 (OfNat.mk.{u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) 0 (Zero.zero.{u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) (RingSeminorm.hasZero.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1)))))))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : Ring.{u1} R] (p : RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))), (LE.le.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (NonAssocRing.toOne.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))))) Real.instLEReal (FunLike.coe.{succ u1, succ u1, 1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) R Real (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1)) Real.orderedSemiring (RingSeminorm.ringSeminormClass.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1)))) p (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (NonAssocRing.toOne.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))))) (OfNat.ofNat.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (NonAssocRing.toOne.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))))) 1 (One.toOfNat1.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (NonAssocRing.toOne.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))))) Real.instOneReal))) -> (Iff (Eq.{1} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (NonAssocRing.toOne.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))))) (FunLike.coe.{succ u1, succ u1, 1} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (RingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))) R Real (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1)) Real.orderedSemiring (RingSeminorm.ringSeminormClass.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1)))) p (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (NonAssocRing.toOne.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))))) (OfNat.ofNat.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (NonAssocRing.toOne.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))))) 1 (One.toOfNat1.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.319 : R) => Real) (OfNat.ofNat.{u1} R 1 (One.toOfNat1.{u1} R (NonAssocRing.toOne.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))))) Real.instOneReal))) (Ne.{succ u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) p (OfNat.ofNat.{u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) 0 (Zero.toOfNat0.{u1} (RingSeminorm.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R _inst_1))) (RingSeminorm.instZeroRingSeminormToNonUnitalNonAssocRing.{u1} R (Ring.toNonUnitalRing.{u1} R _inst_1))))))
+Case conversion may be inaccurate. Consider using '#align ring_seminorm.seminorm_one_eq_one_iff_ne_zero RingSeminorm.seminorm_one_eq_one_iff_ne_zeroₓ'. -/
theorem seminorm_one_eq_one_iff_ne_zero (hp : p 1 ≤ 1) : p 1 = 1 ↔ p ≠ 0 :=
by
refine'
@@ -159,17 +205,20 @@ end Ring
end RingSeminorm
+#print normRingSeminorm /-
/-- The norm of a `non_unital_semi_normed_ring` as a `ring_seminorm`. -/
def normRingSeminorm (R : Type _) [NonUnitalSeminormedRing R] : RingSeminorm R :=
{ normAddGroupSeminorm R with
toFun := norm
mul_le' := norm_mul_le }
#align norm_ring_seminorm normRingSeminorm
+-/
namespace RingNorm
variable [NonUnitalRing R]
+#print RingNorm.ringNormClass /-
instance ringNormClass : RingNormClass (RingNorm R) R ℝ
where
coe f := f.toFun
@@ -180,16 +229,30 @@ instance ringNormClass : RingNormClass (RingNorm R) R ℝ
map_neg_eq_map f := f.neg'
eq_zero_of_map_eq_zero f := f.eq_zero_of_map_eq_zero'
#align ring_norm.ring_norm_class RingNorm.ringNormClass
+-/
/-- Helper instance for when there's too many metavariables to apply `fun_like.has_coe_to_fun`. -/
instance : CoeFun (RingNorm R) fun _ => R → ℝ :=
⟨fun p => p.toFun⟩
+/- warning: ring_norm.to_fun_eq_coe clashes with [anonymous] -> [anonymous]
+warning: ring_norm.to_fun_eq_coe -> [anonymous] is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u_2}} [_inst_1 : NonUnitalRing.{u_2} R] (p : RingNorm.{u_2} R (NonUnitalRing.toNonUnitalNonAssocRing.{u_2} R _inst_1)), Eq.{max (succ u_2) 1} (R -> Real) (RingNorm.toFun.{u_2} R (NonUnitalRing.toNonUnitalNonAssocRing.{u_2} R _inst_1) p) (coeFn.{succ u_2, max (succ u_2) 1} (RingNorm.{u_2} R (NonUnitalRing.toNonUnitalNonAssocRing.{u_2} R _inst_1)) (fun (_x : RingNorm.{u_2} R (NonUnitalRing.toNonUnitalNonAssocRing.{u_2} R _inst_1)) => R -> Real) (RingNorm.hasCoeToFun.{u_2} R _inst_1) p)
+but is expected to have type
+ forall {R : Type.{u}} {_inst_1 : Type.{v}}, (Nat -> R -> _inst_1) -> Nat -> (List.{u} R) -> (List.{v} _inst_1)
+Case conversion may be inaccurate. Consider using '#align ring_norm.to_fun_eq_coe [anonymous]ₓ'. -/
@[simp]
-theorem toFun_eq_coe (p : RingNorm R) : p.toFun = p :=
+theorem [anonymous] (p : RingNorm R) : p.toFun = p :=
rfl
-#align ring_norm.to_fun_eq_coe RingNorm.toFun_eq_coe
-
+#align ring_norm.to_fun_eq_coe [anonymous]
+
+/- warning: ring_norm.ext -> RingNorm.ext is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : NonUnitalRing.{u1} R] {p : RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)} {q : RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)}, (forall (x : R), Eq.{1} Real (coeFn.{succ u1, succ u1} (RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (fun (_x : RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) => R -> Real) (RingNorm.hasCoeToFun.{u1} R _inst_1) p x) (coeFn.{succ u1, succ u1} (RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (fun (_x : RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) => R -> Real) (RingNorm.hasCoeToFun.{u1} R _inst_1) q x)) -> (Eq.{succ u1} (RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) p q)
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : NonUnitalRing.{u1} R] {p : RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)} {q : RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)}, (forall (x : R), Eq.{1} Real (AddGroupSeminorm.toFun.{u1} R (AddCommGroup.toAddGroup.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1))) (RingSeminorm.toAddGroupSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) (RingNorm.toRingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) p)) x) (AddGroupSeminorm.toFun.{u1} R (AddCommGroup.toAddGroup.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1))) (RingSeminorm.toAddGroupSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) (RingNorm.toRingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) q)) x)) -> (Eq.{succ u1} (RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) p q)
+Case conversion may be inaccurate. Consider using '#align ring_norm.ext RingNorm.extₓ'. -/
@[ext]
theorem ext {p q : RingNorm R} : (∀ x, p x = q x) → p = q :=
FunLike.ext p q
@@ -202,6 +265,12 @@ variable (R)
instance [DecidableEq R] : One (RingNorm R) :=
⟨{ (1 : RingSeminorm R), (1 : AddGroupNorm R) with }⟩
+/- warning: ring_norm.apply_one -> RingNorm.apply_one is a dubious translation:
+lean 3 declaration is
+ forall (R : Type.{u1}) [_inst_1 : NonUnitalRing.{u1} R] [_inst_2 : DecidableEq.{succ u1} R] (x : R), Eq.{1} Real (coeFn.{succ u1, succ u1} (RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (fun (_x : RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) => R -> Real) (RingNorm.hasCoeToFun.{u1} R _inst_1) (OfNat.ofNat.{u1} (RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) 1 (OfNat.mk.{u1} (RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) 1 (One.one.{u1} (RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (RingNorm.hasOne.{u1} R _inst_1 (fun (a : R) (b : R) => _inst_2 a b))))) x) (ite.{1} Real (Eq.{succ u1} R x (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))))))) (_inst_2 x (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))))))) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))))
+but is expected to have type
+ forall (R : Type.{u1}) [_inst_1 : NonUnitalRing.{u1} R] [_inst_2 : DecidableEq.{succ u1} R] (x : R), Eq.{1} Real (AddGroupSeminorm.toFun.{u1} R (AddCommGroup.toAddGroup.{u1} R (NonUnitalNonAssocRing.toAddCommGroup.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1))) (RingSeminorm.toAddGroupSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) (RingNorm.toRingSeminorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1) (OfNat.ofNat.{u1} (RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) 1 (One.toOfNat1.{u1} (RingNorm.{u1} R (NonUnitalRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (RingNorm.instOneRingNormToNonUnitalNonAssocRing.{u1} R _inst_1 (fun (a : R) (b : R) => _inst_2 a b)))))) x) (ite.{1} Real (Eq.{succ u1} R x (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (SemigroupWithZero.toZero.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_1)))))) (_inst_2 x (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (SemigroupWithZero.toZero.{u1} R (NonUnitalSemiring.toSemigroupWithZero.{u1} R (NonUnitalRing.toNonUnitalSemiring.{u1} R _inst_1)))))) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)))
+Case conversion may be inaccurate. Consider using '#align ring_norm.apply_one RingNorm.apply_oneₓ'. -/
@[simp]
theorem apply_one [DecidableEq R] (x : R) : (1 : RingNorm R) x = if x = 0 then 0 else 1 :=
rfl
@@ -216,6 +285,7 @@ namespace MulRingSeminorm
variable [NonAssocRing R]
+#print MulRingSeminorm.mulRingSeminormClass /-
instance mulRingSeminormClass : MulRingSeminormClass (MulRingSeminorm R) R ℝ
where
coe f := f.toFun
@@ -226,16 +296,29 @@ instance mulRingSeminormClass : MulRingSeminormClass (MulRingSeminorm R) R ℝ
map_mul f := f.map_mul'
map_neg_eq_map f := f.neg'
#align mul_ring_seminorm.mul_ring_seminorm_class MulRingSeminorm.mulRingSeminormClass
+-/
/-- Helper instance for when there's too many metavariables to apply `fun_like.has_coe_to_fun`. -/
instance : CoeFun (MulRingSeminorm R) fun _ => R → ℝ :=
FunLike.hasCoeToFun
+/- warning: mul_ring_seminorm.to_fun_eq_coe -> MulRingSeminorm.toFun_eq_coe is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : NonAssocRing.{u1} R] (p : MulRingSeminorm.{u1} R _inst_1), Eq.{succ u1} (R -> Real) (MulRingSeminorm.toFun.{u1} R _inst_1 p) (coeFn.{succ u1, succ u1} (MulRingSeminorm.{u1} R _inst_1) (fun (_x : MulRingSeminorm.{u1} R _inst_1) => R -> Real) (MulRingSeminorm.hasCoeToFun.{u1} R _inst_1) p)
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : NonAssocRing.{u1} R] (p : MulRingSeminorm.{u1} R _inst_1), Eq.{succ u1} (R -> Real) (FunLike.coe.{succ u1, succ u1, 1} (AddGroupSeminorm.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (NonAssocRing.toAddCommGroupWithOne.{u1} R _inst_1)))) R (fun (a._@.Mathlib.Analysis.Normed.Group.Seminorm._hyg.956 : R) => Real) (SubadditiveHomClass.toFunLike.{u1, u1, 0} (AddGroupSeminorm.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (NonAssocRing.toAddCommGroupWithOne.{u1} R _inst_1)))) R Real (AddZeroClass.toAdd.{u1} R (AddMonoid.toAddZeroClass.{u1} R (SubNegMonoid.toAddMonoid.{u1} R (AddGroup.toSubNegMonoid.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (NonAssocRing.toAddCommGroupWithOne.{u1} R _inst_1))))))) (AddZeroClass.toAdd.{0} Real (AddMonoid.toAddZeroClass.{0} Real (AddCommMonoid.toAddMonoid.{0} Real (OrderedAddCommMonoid.toAddCommMonoid.{0} Real Real.orderedAddCommMonoid)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedAddCommMonoid.toPartialOrder.{0} Real Real.orderedAddCommMonoid))) (AddGroupSeminormClass.toSubadditiveHomClass.{u1, u1, 0} (AddGroupSeminorm.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (NonAssocRing.toAddCommGroupWithOne.{u1} R _inst_1)))) R Real (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (NonAssocRing.toAddCommGroupWithOne.{u1} R _inst_1))) Real.orderedAddCommMonoid (AddGroupSeminorm.addGroupSeminormClass.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (NonAssocRing.toAddCommGroupWithOne.{u1} R _inst_1)))))) (MulRingSeminorm.toAddGroupSeminorm.{u1} R _inst_1 p)) (FunLike.coe.{succ u1, succ u1, 1} (MulRingSeminorm.{u1} R _inst_1) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.1434 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (MulRingSeminorm.{u1} R _inst_1) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (MulRingSeminorm.{u1} R _inst_1) R Real (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1) Real.orderedSemiring (MulRingSeminormClass.toRingSeminormClass.{u1, u1, 0} (MulRingSeminorm.{u1} R _inst_1) R Real _inst_1 Real.orderedSemiring (MulRingSeminorm.mulRingSeminormClass.{u1} R _inst_1)))) p)
+Case conversion may be inaccurate. Consider using '#align mul_ring_seminorm.to_fun_eq_coe MulRingSeminorm.toFun_eq_coeₓ'. -/
@[simp]
theorem toFun_eq_coe (p : MulRingSeminorm R) : p.toFun = p :=
rfl
#align mul_ring_seminorm.to_fun_eq_coe MulRingSeminorm.toFun_eq_coe
+/- warning: mul_ring_seminorm.ext -> MulRingSeminorm.ext is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : NonAssocRing.{u1} R] {p : MulRingSeminorm.{u1} R _inst_1} {q : MulRingSeminorm.{u1} R _inst_1}, (forall (x : R), Eq.{1} Real (coeFn.{succ u1, succ u1} (MulRingSeminorm.{u1} R _inst_1) (fun (_x : MulRingSeminorm.{u1} R _inst_1) => R -> Real) (MulRingSeminorm.hasCoeToFun.{u1} R _inst_1) p x) (coeFn.{succ u1, succ u1} (MulRingSeminorm.{u1} R _inst_1) (fun (_x : MulRingSeminorm.{u1} R _inst_1) => R -> Real) (MulRingSeminorm.hasCoeToFun.{u1} R _inst_1) q x)) -> (Eq.{succ u1} (MulRingSeminorm.{u1} R _inst_1) p q)
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : NonAssocRing.{u1} R] {p : MulRingSeminorm.{u1} R _inst_1} {q : MulRingSeminorm.{u1} R _inst_1}, (forall (x : R), Eq.{1} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.1434 : R) => Real) x) (FunLike.coe.{succ u1, succ u1, 1} (MulRingSeminorm.{u1} R _inst_1) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.1434 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (MulRingSeminorm.{u1} R _inst_1) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (MulRingSeminorm.{u1} R _inst_1) R Real (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1) Real.orderedSemiring (MulRingSeminormClass.toRingSeminormClass.{u1, u1, 0} (MulRingSeminorm.{u1} R _inst_1) R Real _inst_1 Real.orderedSemiring (MulRingSeminorm.mulRingSeminormClass.{u1} R _inst_1)))) p x) (FunLike.coe.{succ u1, succ u1, 1} (MulRingSeminorm.{u1} R _inst_1) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.1434 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (MulRingSeminorm.{u1} R _inst_1) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (MulRingSeminorm.{u1} R _inst_1) R Real (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1) Real.orderedSemiring (MulRingSeminormClass.toRingSeminormClass.{u1, u1, 0} (MulRingSeminorm.{u1} R _inst_1) R Real _inst_1 Real.orderedSemiring (MulRingSeminorm.mulRingSeminormClass.{u1} R _inst_1)))) q x)) -> (Eq.{succ u1} (MulRingSeminorm.{u1} R _inst_1) p q)
+Case conversion may be inaccurate. Consider using '#align mul_ring_seminorm.ext MulRingSeminorm.extₓ'. -/
@[ext]
theorem ext {p q : MulRingSeminorm R} : (∀ x, p x = q x) → p = q :=
FunLike.ext p q
@@ -255,6 +338,12 @@ instance : One (MulRingSeminorm R) :=
· simp
· simp [hx, hy] }⟩
+/- warning: mul_ring_seminorm.apply_one -> MulRingSeminorm.apply_one is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : NonAssocRing.{u1} R] [_inst_2 : DecidableEq.{succ u1} R] [_inst_3 : NoZeroDivisors.{u1} R (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1))))] [_inst_4 : Nontrivial.{u1} R] (x : R), Eq.{1} Real (coeFn.{succ u1, succ u1} (MulRingSeminorm.{u1} R _inst_1) (fun (_x : MulRingSeminorm.{u1} R _inst_1) => R -> Real) (MulRingSeminorm.hasCoeToFun.{u1} R _inst_1) (OfNat.ofNat.{u1} (MulRingSeminorm.{u1} R _inst_1) 1 (OfNat.mk.{u1} (MulRingSeminorm.{u1} R _inst_1) 1 (One.one.{u1} (MulRingSeminorm.{u1} R _inst_1) (MulRingSeminorm.hasOne.{u1} R _inst_1 (fun (a : R) (b : R) => _inst_2 a b) _inst_3 _inst_4)))) x) (ite.{1} Real (Eq.{succ u1} R x (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))))))) (_inst_2 x (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))))))) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : NonAssocRing.{u1} R] [_inst_2 : DecidableEq.{succ u1} R] [_inst_3 : NoZeroDivisors.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (MulZeroOneClass.toZero.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R _inst_1)))] [_inst_4 : Nontrivial.{u1} R] (x : R), Eq.{1} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.1434 : R) => Real) x) (FunLike.coe.{succ u1, succ u1, 1} (MulRingSeminorm.{u1} R _inst_1) R (fun (_x : R) => (fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.1434 : R) => Real) _x) (SubmultiplicativeHomClass.toFunLike.{u1, u1, 0} (MulRingSeminorm.{u1} R _inst_1) R Real (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (NonUnitalNonAssocSemiring.toMul.{0} Real (NonAssocSemiring.toNonUnitalNonAssocSemiring.{0} Real (Semiring.toNonAssocSemiring.{0} Real (OrderedSemiring.toSemiring.{0} Real Real.orderedSemiring)))) (Preorder.toLE.{0} Real (PartialOrder.toPreorder.{0} Real (OrderedSemiring.toPartialOrder.{0} Real Real.orderedSemiring))) (RingSeminormClass.toSubmultiplicativeHomClass.{u1, u1, 0} (MulRingSeminorm.{u1} R _inst_1) R Real (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1) Real.orderedSemiring (MulRingSeminormClass.toRingSeminormClass.{u1, u1, 0} (MulRingSeminorm.{u1} R _inst_1) R Real _inst_1 Real.orderedSemiring (MulRingSeminorm.mulRingSeminormClass.{u1} R _inst_1)))) (OfNat.ofNat.{u1} (MulRingSeminorm.{u1} R _inst_1) 1 (One.toOfNat1.{u1} (MulRingSeminorm.{u1} R _inst_1) (MulRingSeminorm.instOneMulRingSeminorm.{u1} R _inst_1 (fun (a : R) (b : R) => _inst_2 a b) _inst_3 _inst_4))) x) (ite.{1} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.1434 : R) => Real) x) (Eq.{succ u1} R x (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MulZeroOneClass.toZero.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R _inst_1)))))) (_inst_2 x (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MulZeroOneClass.toZero.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R _inst_1)))))) (OfNat.ofNat.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.1434 : R) => Real) x) 0 (Zero.toOfNat0.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.1434 : R) => Real) x) Real.instZeroReal)) (OfNat.ofNat.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.1434 : R) => Real) x) 1 (One.toOfNat1.{0} ((fun (a._@.Mathlib.Analysis.Normed.Ring.Seminorm._hyg.1434 : R) => Real) x) Real.instOneReal)))
+Case conversion may be inaccurate. Consider using '#align mul_ring_seminorm.apply_one MulRingSeminorm.apply_oneₓ'. -/
@[simp]
theorem apply_one (x : R) : (1 : MulRingSeminorm R) x = if x = 0 then 0 else 1 :=
rfl
@@ -269,6 +358,7 @@ namespace MulRingNorm
variable [NonAssocRing R]
+#print MulRingNorm.mulRingNormClass /-
instance mulRingNormClass : MulRingNormClass (MulRingNorm R) R ℝ
where
coe f := f.toFun
@@ -280,16 +370,30 @@ instance mulRingNormClass : MulRingNormClass (MulRingNorm R) R ℝ
map_neg_eq_map f := f.neg'
eq_zero_of_map_eq_zero f := f.eq_zero_of_map_eq_zero'
#align mul_ring_norm.mul_ring_norm_class MulRingNorm.mulRingNormClass
+-/
/-- Helper instance for when there's too many metavariables to apply `fun_like.has_coe_to_fun`. -/
instance : CoeFun (MulRingNorm R) fun _ => R → ℝ :=
⟨fun p => p.toFun⟩
+/- warning: mul_ring_norm.to_fun_eq_coe clashes with [anonymous] -> [anonymous]
+warning: mul_ring_norm.to_fun_eq_coe -> [anonymous] is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u_2}} [_inst_1 : NonAssocRing.{u_2} R] (p : MulRingNorm.{u_2} R _inst_1), Eq.{max (succ u_2) 1} (R -> Real) (MulRingNorm.toFun.{u_2} R _inst_1 p) (coeFn.{succ u_2, max (succ u_2) 1} (MulRingNorm.{u_2} R _inst_1) (fun (_x : MulRingNorm.{u_2} R _inst_1) => R -> Real) (MulRingNorm.hasCoeToFun.{u_2} R _inst_1) p)
+but is expected to have type
+ forall {R : Type.{u}} {_inst_1 : Type.{v}}, (Nat -> R -> _inst_1) -> Nat -> (List.{u} R) -> (List.{v} _inst_1)
+Case conversion may be inaccurate. Consider using '#align mul_ring_norm.to_fun_eq_coe [anonymous]ₓ'. -/
@[simp]
-theorem toFun_eq_coe (p : MulRingNorm R) : p.toFun = p :=
+theorem [anonymous] (p : MulRingNorm R) : p.toFun = p :=
rfl
-#align mul_ring_norm.to_fun_eq_coe MulRingNorm.toFun_eq_coe
-
+#align mul_ring_norm.to_fun_eq_coe [anonymous]
+
+/- warning: mul_ring_norm.ext -> MulRingNorm.ext is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : NonAssocRing.{u1} R] {p : MulRingNorm.{u1} R _inst_1} {q : MulRingNorm.{u1} R _inst_1}, (forall (x : R), Eq.{1} Real (coeFn.{succ u1, succ u1} (MulRingNorm.{u1} R _inst_1) (fun (_x : MulRingNorm.{u1} R _inst_1) => R -> Real) (MulRingNorm.hasCoeToFun.{u1} R _inst_1) p x) (coeFn.{succ u1, succ u1} (MulRingNorm.{u1} R _inst_1) (fun (_x : MulRingNorm.{u1} R _inst_1) => R -> Real) (MulRingNorm.hasCoeToFun.{u1} R _inst_1) q x)) -> (Eq.{succ u1} (MulRingNorm.{u1} R _inst_1) p q)
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : NonAssocRing.{u1} R] {p : MulRingNorm.{u1} R _inst_1} {q : MulRingNorm.{u1} R _inst_1}, (forall (x : R), Eq.{1} Real (AddGroupSeminorm.toFun.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (NonAssocRing.toAddCommGroupWithOne.{u1} R _inst_1))) (MulRingSeminorm.toAddGroupSeminorm.{u1} R _inst_1 (MulRingNorm.toMulRingSeminorm.{u1} R _inst_1 p)) x) (AddGroupSeminorm.toFun.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (NonAssocRing.toAddCommGroupWithOne.{u1} R _inst_1))) (MulRingSeminorm.toAddGroupSeminorm.{u1} R _inst_1 (MulRingNorm.toMulRingSeminorm.{u1} R _inst_1 q)) x)) -> (Eq.{succ u1} (MulRingNorm.{u1} R _inst_1) p q)
+Case conversion may be inaccurate. Consider using '#align mul_ring_norm.ext MulRingNorm.extₓ'. -/
@[ext]
theorem ext {p q : MulRingNorm R} : (∀ x, p x = q x) → p = q :=
FunLike.ext p q
@@ -302,6 +406,12 @@ other element. -/
instance : One (MulRingNorm R) :=
⟨{ (1 : MulRingSeminorm R), (1 : AddGroupNorm R) with }⟩
+/- warning: mul_ring_norm.apply_one -> MulRingNorm.apply_one is a dubious translation:
+lean 3 declaration is
+ forall (R : Type.{u1}) [_inst_1 : NonAssocRing.{u1} R] [_inst_2 : DecidableEq.{succ u1} R] [_inst_3 : NoZeroDivisors.{u1} R (Distrib.toHasMul.{u1} R (NonUnitalNonAssocSemiring.toDistrib.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))) (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1))))] [_inst_4 : Nontrivial.{u1} R] (x : R), Eq.{1} Real (coeFn.{succ u1, succ u1} (MulRingNorm.{u1} R _inst_1) (fun (_x : MulRingNorm.{u1} R _inst_1) => R -> Real) (MulRingNorm.hasCoeToFun.{u1} R _inst_1) (OfNat.ofNat.{u1} (MulRingNorm.{u1} R _inst_1) 1 (OfNat.mk.{u1} (MulRingNorm.{u1} R _inst_1) 1 (One.one.{u1} (MulRingNorm.{u1} R _inst_1) (MulRingNorm.hasOne.{u1} R _inst_1 (fun (a : R) (b : R) => _inst_2 a b) _inst_3 _inst_4)))) x) (ite.{1} Real (Eq.{succ u1} R x (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))))))) (_inst_2 x (OfNat.ofNat.{u1} R 0 (OfNat.mk.{u1} R 0 (Zero.zero.{u1} R (MulZeroClass.toHasZero.{u1} R (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} R (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1)))))))) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))))
+but is expected to have type
+ forall (R : Type.{u1}) [_inst_1 : NonAssocRing.{u1} R] [_inst_2 : DecidableEq.{succ u1} R] [_inst_3 : NoZeroDivisors.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R _inst_1)) (MulZeroOneClass.toZero.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R _inst_1)))] [_inst_4 : Nontrivial.{u1} R] (x : R), Eq.{1} Real (AddGroupSeminorm.toFun.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (NonAssocRing.toAddCommGroupWithOne.{u1} R _inst_1))) (MulRingSeminorm.toAddGroupSeminorm.{u1} R _inst_1 (MulRingNorm.toMulRingSeminorm.{u1} R _inst_1 (OfNat.ofNat.{u1} (MulRingNorm.{u1} R _inst_1) 1 (One.toOfNat1.{u1} (MulRingNorm.{u1} R _inst_1) (MulRingNorm.instOneMulRingNorm.{u1} R _inst_1 (fun (a : R) (b : R) => _inst_2 a b) _inst_3 _inst_4))))) x) (ite.{1} Real (Eq.{succ u1} R x (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MulZeroOneClass.toZero.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R _inst_1)))))) (_inst_2 x (OfNat.ofNat.{u1} R 0 (Zero.toOfNat0.{u1} R (MulZeroOneClass.toZero.{u1} R (NonAssocSemiring.toMulZeroOneClass.{u1} R (NonAssocRing.toNonAssocSemiring.{u1} R _inst_1)))))) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)))
+Case conversion may be inaccurate. Consider using '#align mul_ring_norm.apply_one MulRingNorm.apply_oneₓ'. -/
@[simp]
theorem apply_one (x : R) : (1 : MulRingNorm R) x = if x = 0 then 0 else 1 :=
rfl
@@ -312,6 +422,12 @@ instance : Inhabited (MulRingNorm R) :=
end MulRingNorm
+/- warning: ring_seminorm.to_ring_norm -> RingSeminorm.toRingNorm is a dubious translation:
+lean 3 declaration is
+ forall {K : Type.{u1}} [_inst_1 : Field.{u1} K] (f : RingSeminorm.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))), (Ne.{succ u1} (RingSeminorm.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))) f (OfNat.ofNat.{u1} (RingSeminorm.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))) 0 (OfNat.mk.{u1} (RingSeminorm.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))) 0 (Zero.zero.{u1} (RingSeminorm.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))) (RingSeminorm.hasZero.{u1} K (NonUnitalCommRing.toNonUnitalRing.{u1} K (CommRing.toNonUnitalCommRing.{u1} K (EuclideanDomain.toCommRing.{u1} K (Field.toEuclideanDomain.{u1} K _inst_1))))))))) -> (RingNorm.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))))
+but is expected to have type
+ forall {K : Type.{u1}} [_inst_1 : Field.{u1} K] (f : RingSeminorm.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))), (Ne.{succ u1} (RingSeminorm.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))) f (OfNat.ofNat.{u1} (RingSeminorm.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))) 0 (Zero.toOfNat0.{u1} (RingSeminorm.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1))))) (RingSeminorm.instZeroRingSeminormToNonUnitalNonAssocRing.{u1} K (NonUnitalCommRing.toNonUnitalRing.{u1} K (CommRing.toNonUnitalCommRing.{u1} K (EuclideanDomain.toCommRing.{u1} K (Field.toEuclideanDomain.{u1} K _inst_1)))))))) -> (RingNorm.{u1} K (NonAssocRing.toNonUnitalNonAssocRing.{u1} K (Ring.toNonAssocRing.{u1} K (DivisionRing.toRing.{u1} K (Field.toDivisionRing.{u1} K _inst_1)))))
+Case conversion may be inaccurate. Consider using '#align ring_seminorm.to_ring_norm RingSeminorm.toRingNormₓ'. -/
/-- A nonzero ring seminorm on a field `K` is a ring norm. -/
def RingSeminorm.toRingNorm {K : Type _} [Field K] (f : RingSeminorm K) (hnt : f ≠ 0) :
RingNorm K :=
@@ -331,9 +447,11 @@ def RingSeminorm.toRingNorm {K : Type _} [Field K] (f : RingSeminorm K) (hnt : f
exact hc hc0 }
#align ring_seminorm.to_ring_norm RingSeminorm.toRingNorm
+#print normRingNorm /-
/-- The norm of a normed_ring as a ring_norm. -/
@[simps]
def normRingNorm (R : Type _) [NonUnitalNormedRing R] : RingNorm R :=
{ normAddGroupNorm R, normRingSeminorm R with }
#align norm_ring_norm normRingNorm
+-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/2af0836443b4cfb5feda0df0051acdb398304931
@@ -160,7 +160,7 @@ end Ring
end RingSeminorm
/-- The norm of a `non_unital_semi_normed_ring` as a `ring_seminorm`. -/
-def normRingSeminorm (R : Type _) [NonUnitalSemiNormedRing R] : RingSeminorm R :=
+def normRingSeminorm (R : Type _) [NonUnitalSeminormedRing R] : RingSeminorm R :=
{ normAddGroupSeminorm R with
toFun := norm
mul_le' := norm_mul_le }
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -102,7 +102,7 @@ theorem ext {p q : RingSeminorm R} : (∀ x, p x = q x) → p = q :=
#align ring_seminorm.ext RingSeminorm.ext
instance : Zero (RingSeminorm R) :=
- ⟨{ AddGroupSeminorm.hasZero.zero with mul_le' := fun _ _ => (zero_mul _).ge }⟩
+ ⟨{ AddGroupSeminorm.hasZero.zero with mul_le' := fun _ _ => (MulZeroClass.zero_mul _).ge }⟩
theorem eq_zero_iff {p : RingSeminorm R} : p = 0 ↔ ∀ x, p x = 0 :=
FunLike.ext_iff
@@ -150,7 +150,7 @@ theorem seminorm_one_eq_one_iff_ne_zero (hp : p 1 ≤ 1) : p 1 = 1 ↔ p ≠ 0 :
fun h => _⟩
obtain hp0 | hp0 := (map_nonneg p (1 : R)).eq_or_gt
· cases h (ext fun x => (map_nonneg _ _).antisymm' _)
- simpa only [hp0, mul_one, mul_zero] using map_mul_le_mul p x 1
+ simpa only [hp0, mul_one, MulZeroClass.mul_zero] using map_mul_le_mul p x 1
· refine' hp.antisymm ((le_mul_iff_one_le_left hp0).1 _)
simpa only [one_mul] using map_mul_le_mul p (1 : R) _
#align ring_seminorm.seminorm_one_eq_one_iff_ne_zero RingSeminorm.seminorm_one_eq_one_iff_ne_zero
@@ -325,7 +325,8 @@ def RingSeminorm.toRingNorm {K : Type _} [Field K] (f : RingSeminorm K) (hnt : f
rw [← mul_one c, ← mul_inv_cancel hn0, ← mul_assoc, mul_comm c, mul_assoc]
exact
le_antisymm
- (le_trans (map_mul_le_mul f _ _) (by rw [← RingSeminorm.toFun_eq_coe, hx, zero_mul]))
+ (le_trans (map_mul_le_mul f _ _)
+ (by rw [← RingSeminorm.toFun_eq_coe, hx, MulZeroClass.zero_mul]))
(map_nonneg f _)
exact hc hc0 }
#align ring_seminorm.to_ring_norm RingSeminorm.toRingNorm
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
All of these changes appear to be oversights to me.
@@ -329,14 +329,11 @@ variable {R : Type*} [Ring R]
def equiv (f : MulRingNorm R) (g : MulRingNorm R) :=
∃ c : ℝ, 0 < c ∧ (fun x => (f x) ^ c) = g
-/- Equivalence of multiplicative ring norms is an equivalence relation
-
- 1. is reflexive-/
+/-- Equivalence of multiplicative ring norms is reflexive. -/
lemma equiv_refl (f : MulRingNorm R) : equiv f f := by
exact ⟨1, Real.zero_lt_one, by simp only [Real.rpow_one]⟩
-/- Equivalence of multiplicative ring norms is an equivalence relation
- 2. is symmetric-/
+/-- Equivalence of multiplicative ring norms is symmetric. -/
lemma equiv_symm {f g : MulRingNorm R} (hfg : equiv f g) : equiv g f := by
rcases hfg with ⟨c, hcpos, h⟩
use 1/c
@@ -345,9 +342,7 @@ lemma equiv_symm {f g : MulRingNorm R} (hfg : equiv f g) : equiv g f := by
ext x
simpa [← congr_fun h x] using Real.rpow_rpow_inv (apply_nonneg f x) (ne_of_lt hcpos).symm
-/- Equivalence of multiplicative ring norms is an equivalence relation
-
- 3. is transitive-/
+/-- Equivalence of multiplicative ring norms is transitive. -/
lemma equiv_trans {f g k : MulRingNorm R} (hfg : equiv f g) (hgk : equiv g k) :
equiv f k := by
rcases hfg with ⟨c, hcPos, hfg⟩
@@ -356,7 +351,6 @@ lemma equiv_trans {f g k : MulRingNorm R} (hfg : equiv f g) (hgk : equiv g k) :
ext x
rw [Real.rpow_mul (apply_nonneg f x), congr_fun hfg x, congr_fun hgk x]
-
end MulRingNorm
/-- A nonzero ring seminorm on a field `K` is a ring norm. -/
@@ -384,7 +378,7 @@ def normRingNorm (R : Type*) [NonUnitalNormedRing R] : RingNorm R :=
#align norm_ring_norm normRingNorm
-/-A multiplicative ring norm satisfies `f n ≤ n` for every `n : ℕ`-/
+/-- A multiplicative ring norm satisfies `f n ≤ n` for every `n : ℕ`. -/
lemma MulRingNorm_nat_le_nat {R : Type*} [Ring R] (n : ℕ) (f : MulRingNorm R) : f n ≤ n := by
induction n with
| zero => simp only [Nat.cast_zero, map_zero, le_refl]
Include the definition of equivalence of MulRingNorms
and the lemmas proving it is an equivalence relation. For this we add a new import (to Mathlib.Analysis.SpecialFunctions.Pow.Real
).
We also include a lemma describing the values of a multiplicative ring norm on the naturals, stating that for all n : ℕ
if f : MulRingNorm R
then f n ≤ n
Co-authored-by:
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: María Inés de Frutos-Fernández, Yaël Dillies
-/
import Mathlib.Analysis.Normed.Field.Basic
+import Mathlib.Analysis.SpecialFunctions.Pow.Real
#align_import analysis.normed.ring.seminorm from "leanprover-community/mathlib"@"7ea604785a41a0681eac70c5a82372493dbefc68"
@@ -319,6 +320,43 @@ theorem apply_one (x : R) : (1 : MulRingNorm R) x = if x = 0 then 0 else 1 :=
instance : Inhabited (MulRingNorm R) :=
⟨1⟩
+
+variable {R : Type*} [Ring R]
+
+/-- Two multiplicative ring norms `f, g` on `R` are equivalent if there exists a positive constant
+ `c` such that for all `x ∈ R`, `(f x)^c = g x`. -/
+
+def equiv (f : MulRingNorm R) (g : MulRingNorm R) :=
+ ∃ c : ℝ, 0 < c ∧ (fun x => (f x) ^ c) = g
+
+/- Equivalence of multiplicative ring norms is an equivalence relation
+
+ 1. is reflexive-/
+lemma equiv_refl (f : MulRingNorm R) : equiv f f := by
+ exact ⟨1, Real.zero_lt_one, by simp only [Real.rpow_one]⟩
+/- Equivalence of multiplicative ring norms is an equivalence relation
+
+ 2. is symmetric-/
+lemma equiv_symm {f g : MulRingNorm R} (hfg : equiv f g) : equiv g f := by
+ rcases hfg with ⟨c, hcpos, h⟩
+ use 1/c
+ constructor
+ · simp only [one_div, inv_pos, hcpos]
+ ext x
+ simpa [← congr_fun h x] using Real.rpow_rpow_inv (apply_nonneg f x) (ne_of_lt hcpos).symm
+
+/- Equivalence of multiplicative ring norms is an equivalence relation
+
+ 3. is transitive-/
+lemma equiv_trans {f g k : MulRingNorm R} (hfg : equiv f g) (hgk : equiv g k) :
+ equiv f k := by
+ rcases hfg with ⟨c, hcPos, hfg⟩
+ rcases hgk with ⟨d, hdPos, hgk⟩
+ refine ⟨c*d, (mul_pos_iff_of_pos_left hcPos).mpr hdPos, ?_⟩
+ ext x
+ rw [Real.rpow_mul (apply_nonneg f x), congr_fun hfg x, congr_fun hgk x]
+
+
end MulRingNorm
/-- A nonzero ring seminorm on a field `K` is a ring norm. -/
@@ -344,3 +382,15 @@ def RingSeminorm.toRingNorm {K : Type*} [Field K] (f : RingSeminorm K) (hnt : f
def normRingNorm (R : Type*) [NonUnitalNormedRing R] : RingNorm R :=
{ normAddGroupNorm R, normRingSeminorm R with }
#align norm_ring_norm normRingNorm
+
+
+/-A multiplicative ring norm satisfies `f n ≤ n` for every `n : ℕ`-/
+lemma MulRingNorm_nat_le_nat {R : Type*} [Ring R] (n : ℕ) (f : MulRingNorm R) : f n ≤ n := by
+ induction n with
+ | zero => simp only [Nat.cast_zero, map_zero, le_refl]
+ | succ n hn =>
+ simp only [Nat.cast_succ]
+ calc
+ f (n + 1) ≤ f (n) + f 1 := f.add_le' ↑n 1
+ _ = f (n) + 1 := by rw [map_one]
+ _ ≤ n + 1 := add_le_add_right hn 1
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -304,7 +304,6 @@ theorem ext {p q : MulRingNorm R} : (∀ x, p x = q x) → p = q :=
#align mul_ring_norm.ext MulRingNorm.ext
variable (R)
-
variable [DecidableEq R] [NoZeroDivisors R] [Nontrivial R]
/-- The trivial norm on a ring `R` is the `MulRingNorm` taking value `0` at `0` and `1` at every
@@ -151,9 +151,9 @@ theorem seminorm_one_eq_one_iff_ne_zero (hp : p 1 ≤ 1) : p 1 = 1 ↔ p ≠ 0 :
rw [h]
exact one_ne_zero⟩,
fun h => ?_⟩
- obtain hp0 | hp0 := (map_nonneg p (1 : R)).eq_or_gt
+ obtain hp0 | hp0 := (apply_nonneg p (1 : R)).eq_or_gt
· exfalso
- refine h (ext fun x => (map_nonneg _ _).antisymm' ?_)
+ refine h (ext fun x => (apply_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 _)
simpa only [one_mul] using map_mul_le_mul p (1 : R) _
@@ -336,7 +336,7 @@ def RingSeminorm.toRingNorm {K : Type*} [Field K] (f : RingSeminorm K) (hnt : f
(le_trans (map_mul_le_mul f _ _)
(by rw [← RingSeminorm.toFun_eq_coe, ← AddGroupSeminorm.toFun_eq_coe, hx,
zero_mul]))
- (map_nonneg f _)
+ (apply_nonneg f _)
exact hc hc0 }
#align ring_seminorm.to_ring_norm RingSeminorm.toRingNorm
The FunLike hierarchy is very big and gets scanned through each time we need a coercion (via the CoeFun
instance). It looks like unbundled inheritance suits Lean 4 better here. The only class that still extends FunLike
is EquivLike
, since that has a custom coe_injective'
field that is easier to implement. All other classes should take FunLike
or EquivLike
as a parameter.
Previously, morphism classes would be Type
-valued and extend FunLike
:
/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
extends FunLike F A B :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))
After this PR, they should be Prop
-valued and take FunLike
as a parameter:
/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
[FunLike F A B] : Prop :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))
(Note that A B
stay marked as outParam
even though they are not purely required to be so due to the FunLike
parameter already filling them in. This is required to see through type synonyms, which is important in the category theory library. Also, I think keeping them as outParam
is slightly faster.)
Similarly, MyEquivClass
should take EquivLike
as a parameter.
As a result, every mention of [MyHomClass F A B]
should become [FunLike F A B] [MyHomClass F A B]
.
While overall this gives some great speedups, there are some cases that are noticeably slower. In particular, a failing application of a lemma such as map_mul
is more expensive. This is due to suboptimal processing of arguments. For example:
variable [FunLike F M N] [Mul M] [Mul N] (f : F) (x : M) (y : M)
theorem map_mul [MulHomClass F M N] : f (x * y) = f x * f y
example [AddHomClass F A B] : f (x * y) = f x * f y := map_mul f _ _
Before this PR, applying map_mul f
gives the goals [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]
. Since M
and N
are out_param
s, [MulHomClass F ?M ?N]
is synthesized first, supplies values for ?M
and ?N
and then the Mul M
and Mul N
instances can be found.
After this PR, the goals become [FunLike F ?M ?N] [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]
. Now [FunLike F ?M ?N]
is synthesized first, supplies values for ?M
and ?N
and then the Mul M
and Mul N
instances can be found, before trying MulHomClass F M N
which fails. Since the Mul
hierarchy is very big, this can be slow to fail, especially when there is no such Mul
instance.
A long-term but harder to achieve solution would be to specify the order in which instance goals get solved. For example, we'd like to change the arguments to map_mul
to look like [FunLike F M N] [Mul M] [Mul N] [highPriority <| MulHomClass F M N]
because MulHomClass
fails or succeeds much faster than the others.
As a consequence, the simpNF
linter is much slower since by design it tries and fails to apply many map_
lemmas. The same issue occurs a few times in existing calls to simp [map_mul]
, where map_mul
is tried "too soon" and fails. Thanks to the speedup of leanprover/lean4#2478 the impact is very limited, only in files that already were close to the timeout.
simp
not firing sometimesThis affects map_smulₛₗ
and related definitions. For simp
lemmas Lean apparently uses a slightly different mechanism to find instances, so that rw
can find every argument to map_smulₛₗ
successfully but simp
can't: leanprover/lean4#3701.
Especially in the category theory library, we might sometimes have a type A
which is also accessible as a synonym (Bundled A hA).1
. Instance synthesis doesn't always work if we have f : A →* B
but x * y : (Bundled A hA).1
or vice versa. This seems to be mostly fixed by keeping A B
as outParam
s in MulHomClass F A B
. (Presumably because Lean will do a definitional check A =?= (Bundled A hA).1
instead of using the syntax in the discrimination tree.)
The timeouts can be worked around for now by specifying which map_mul
we mean, either as map_mul f
for some explicit f
, or as e.g. MonoidHomClass.map_mul
.
map_smulₛₗ
not firing as simp
lemma can be worked around by going back to the pre-FunLike situation and making LinearMap.map_smulₛₗ
a simp
lemma instead of the generic map_smulₛₗ
. Writing simp [map_smulₛₗ _]
also works.
Co-authored-by: Matthew Ballard <matt@mrb.email> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Scott Morrison <scott@tqft.net> Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>
@@ -78,7 +78,7 @@ section NonUnitalRing
variable [NonUnitalRing R]
-instance ringSeminormClass : RingSeminormClass (RingSeminorm R) R ℝ where
+instance funLike : FunLike (RingSeminorm R) R ℝ where
coe f := f.toFun
coe_injective' f g h := by
cases f
@@ -86,16 +86,14 @@ instance ringSeminormClass : RingSeminormClass (RingSeminorm R) R ℝ where
congr
ext x
exact congr_fun h x
+
+instance ringSeminormClass : RingSeminormClass (RingSeminorm R) R ℝ where
map_zero f := f.map_zero'
map_add_le_add f := f.add_le'
map_mul_le_mul f := f.mul_le'
map_neg_eq_map f := f.neg'
#align ring_seminorm.ring_seminorm_class RingSeminorm.ringSeminormClass
-/-- Helper instance for when there's too many metavariables to apply `DFunLike.hasCoeToFun`. -/
-instance : CoeFun (RingSeminorm R) fun _ => R → ℝ :=
- DFunLike.hasCoeToFun
-
@[simp]
theorem toFun_eq_coe (p : RingSeminorm R) : (p.toAddGroupSeminorm : R → ℝ) = p :=
rfl
@@ -176,7 +174,7 @@ namespace RingNorm
variable [NonUnitalRing R]
-instance ringNormClass : RingNormClass (RingNorm R) R ℝ where
+instance funLike : FunLike (RingNorm R) R ℝ where
coe f := f.toFun
coe_injective' f g h := by
cases f
@@ -184,6 +182,8 @@ instance ringNormClass : RingNormClass (RingNorm R) R ℝ where
congr
ext x
exact congr_fun h x
+
+instance ringNormClass : RingNormClass (RingNorm R) R ℝ where
map_zero f := f.map_zero'
map_add_le_add f := f.add_le'
map_mul_le_mul f := f.mul_le'
@@ -191,14 +191,9 @@ instance ringNormClass : RingNormClass (RingNorm R) R ℝ where
eq_zero_of_map_eq_zero f := f.eq_zero_of_map_eq_zero' _
#align ring_norm.ring_norm_class RingNorm.ringNormClass
-/-- Helper instance for when there's too many metavariables to apply `DFunLike.hasCoeToFun`. -/
-instance : CoeFun (RingNorm R) fun _ => R → ℝ :=
- ⟨fun p => p.toFun⟩
-
--- Porting note: This is a syntactic tautology in Lean 4
--- @[simp]
--- theorem toFun_eq_coe (p : RingNorm R) : p.toFun = p := rfl
-#noalign ring_norm.to_fun_eq_coe
+-- Porting note: This is no longer `@[simp]` in Lean 4
+theorem toFun_eq_coe (p : RingNorm R) : p.toFun = p := rfl
+#align ring_norm.to_fun_eq_coe RingNorm.toFun_eq_coe
@[ext]
theorem ext {p q : RingNorm R} : (∀ x, p x = q x) → p = q :=
@@ -226,7 +221,7 @@ namespace MulRingSeminorm
variable [NonAssocRing R]
-instance mulRingSeminormClass : MulRingSeminormClass (MulRingSeminorm R) R ℝ where
+instance funLike : FunLike (MulRingSeminorm R) R ℝ where
coe f := f.toFun
coe_injective' f g h := by
cases f
@@ -234,6 +229,8 @@ instance mulRingSeminormClass : MulRingSeminormClass (MulRingSeminorm R) R ℝ w
congr
ext x
exact congr_fun h x
+
+instance mulRingSeminormClass : MulRingSeminormClass (MulRingSeminorm R) R ℝ where
map_zero f := f.map_zero'
map_one f := f.map_one'
map_add_le_add f := f.add_le'
@@ -241,10 +238,6 @@ instance mulRingSeminormClass : MulRingSeminormClass (MulRingSeminorm R) R ℝ w
map_neg_eq_map f := f.neg'
#align mul_ring_seminorm.mul_ring_seminorm_class MulRingSeminorm.mulRingSeminormClass
-/-- Helper instance for when there's too many metavariables to apply `DFunLike.hasCoeToFun`. -/
-instance : CoeFun (MulRingSeminorm R) fun _ => R → ℝ :=
- DFunLike.hasCoeToFun
-
@[simp]
theorem toFun_eq_coe (p : MulRingSeminorm R) : (p.toAddGroupSeminorm : R → ℝ) = p :=
rfl
@@ -283,7 +276,7 @@ namespace MulRingNorm
variable [NonAssocRing R]
-instance mulRingNormClass : MulRingNormClass (MulRingNorm R) R ℝ where
+instance funLike : FunLike (MulRingNorm R) R ℝ where
coe f := f.toFun
coe_injective' f g h := by
cases f
@@ -291,6 +284,8 @@ instance mulRingNormClass : MulRingNormClass (MulRingNorm R) R ℝ where
congr
ext x
exact congr_fun h x
+
+instance mulRingNormClass : MulRingNormClass (MulRingNorm R) R ℝ where
map_zero f := f.map_zero'
map_one f := f.map_one'
map_add_le_add f := f.add_le'
@@ -299,14 +294,9 @@ instance mulRingNormClass : MulRingNormClass (MulRingNorm R) R ℝ where
eq_zero_of_map_eq_zero f := f.eq_zero_of_map_eq_zero' _
#align mul_ring_norm.mul_ring_norm_class MulRingNorm.mulRingNormClass
-/-- Helper instance for when there's too many metavariables to apply `DFunLike.hasCoeToFun`. -/
-instance : CoeFun (MulRingNorm R) fun _ => R → ℝ :=
- ⟨fun p => p.toFun⟩
-
--- Porting note: This is a syntactic tautology in Lean 4
--- @[simp]
--- theorem toFun_eq_coe (p : MulRingNorm R) : p.toFun = p := rfl
-#noalign mul_ring_norm.to_fun_eq_coe
+-- Porting note: This no longer in `@[simp]`-normal form in Lean 4
+theorem toFun_eq_coe (p : MulRingNorm R) : p.toFun = p := rfl
+#align mul_ring_norm.to_fun_eq_coe MulRingNorm.toFun_eq_coe
@[ext]
theorem ext {p q : MulRingNorm R} : (∀ x, p x = q x) → p = q :=
FunLike
to DFunLike
(#9785)
This prepares for the introduction of a non-dependent synonym of FunLike, which helps a lot with keeping #8386 readable.
This is entirely search-and-replace in 680197f combined with manual fixes in 4145626, e900597 and b8428f8. The commands that generated this change:
sed -i 's/\bFunLike\b/DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoFunLike\b/toDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/import Mathlib.Data.DFunLike/import Mathlib.Data.FunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bHom_FunLike\b/Hom_DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\binstFunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bfunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoo many metavariables to apply `fun_like.has_coe_to_fun`/too many metavariables to apply `DFunLike.hasCoeToFun`/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>
@@ -92,9 +92,9 @@ instance ringSeminormClass : RingSeminormClass (RingSeminorm R) R ℝ where
map_neg_eq_map f := f.neg'
#align ring_seminorm.ring_seminorm_class RingSeminorm.ringSeminormClass
-/-- Helper instance for when there's too many metavariables to apply `FunLike.hasCoeToFun`. -/
+/-- Helper instance for when there's too many metavariables to apply `DFunLike.hasCoeToFun`. -/
instance : CoeFun (RingSeminorm R) fun _ => R → ℝ :=
- FunLike.hasCoeToFun
+ DFunLike.hasCoeToFun
@[simp]
theorem toFun_eq_coe (p : RingSeminorm R) : (p.toAddGroupSeminorm : R → ℝ) = p :=
@@ -103,7 +103,7 @@ theorem toFun_eq_coe (p : RingSeminorm R) : (p.toAddGroupSeminorm : R → ℝ) =
@[ext]
theorem ext {p q : RingSeminorm R} : (∀ x, p x = q x) → p = q :=
- FunLike.ext p q
+ DFunLike.ext p q
#align ring_seminorm.ext RingSeminorm.ext
instance : Zero (RingSeminorm R) :=
@@ -111,7 +111,7 @@ instance : Zero (RingSeminorm R) :=
fun _ _ => (zero_mul _).ge }⟩
theorem eq_zero_iff {p : RingSeminorm R} : p = 0 ↔ ∀ x, p x = 0 :=
- FunLike.ext_iff
+ DFunLike.ext_iff
#align ring_seminorm.eq_zero_iff RingSeminorm.eq_zero_iff
theorem ne_zero_iff {p : RingSeminorm R} : p ≠ 0 ↔ ∃ x, p x ≠ 0 := by simp [eq_zero_iff]
@@ -191,7 +191,7 @@ instance ringNormClass : RingNormClass (RingNorm R) R ℝ where
eq_zero_of_map_eq_zero f := f.eq_zero_of_map_eq_zero' _
#align ring_norm.ring_norm_class RingNorm.ringNormClass
-/-- Helper instance for when there's too many metavariables to apply `FunLike.hasCoeToFun`. -/
+/-- Helper instance for when there's too many metavariables to apply `DFunLike.hasCoeToFun`. -/
instance : CoeFun (RingNorm R) fun _ => R → ℝ :=
⟨fun p => p.toFun⟩
@@ -202,7 +202,7 @@ instance : CoeFun (RingNorm R) fun _ => R → ℝ :=
@[ext]
theorem ext {p q : RingNorm R} : (∀ x, p x = q x) → p = q :=
- FunLike.ext p q
+ DFunLike.ext p q
#align ring_norm.ext RingNorm.ext
variable (R)
@@ -241,9 +241,9 @@ instance mulRingSeminormClass : MulRingSeminormClass (MulRingSeminorm R) R ℝ w
map_neg_eq_map f := f.neg'
#align mul_ring_seminorm.mul_ring_seminorm_class MulRingSeminorm.mulRingSeminormClass
-/-- Helper instance for when there's too many metavariables to apply `FunLike.hasCoeToFun`. -/
+/-- Helper instance for when there's too many metavariables to apply `DFunLike.hasCoeToFun`. -/
instance : CoeFun (MulRingSeminorm R) fun _ => R → ℝ :=
- FunLike.hasCoeToFun
+ DFunLike.hasCoeToFun
@[simp]
theorem toFun_eq_coe (p : MulRingSeminorm R) : (p.toAddGroupSeminorm : R → ℝ) = p :=
@@ -252,7 +252,7 @@ theorem toFun_eq_coe (p : MulRingSeminorm R) : (p.toAddGroupSeminorm : R → ℝ
@[ext]
theorem ext {p q : MulRingSeminorm R} : (∀ x, p x = q x) → p = q :=
- FunLike.ext p q
+ DFunLike.ext p q
#align mul_ring_seminorm.ext MulRingSeminorm.ext
variable [DecidableEq R] [NoZeroDivisors R] [Nontrivial R]
@@ -299,7 +299,7 @@ instance mulRingNormClass : MulRingNormClass (MulRingNorm R) R ℝ where
eq_zero_of_map_eq_zero f := f.eq_zero_of_map_eq_zero' _
#align mul_ring_norm.mul_ring_norm_class MulRingNorm.mulRingNormClass
-/-- Helper instance for when there's too many metavariables to apply `FunLike.hasCoeToFun`. -/
+/-- Helper instance for when there's too many metavariables to apply `DFunLike.hasCoeToFun`. -/
instance : CoeFun (MulRingNorm R) fun _ => R → ℝ :=
⟨fun p => p.toFun⟩
@@ -310,7 +310,7 @@ instance : CoeFun (MulRingNorm R) fun _ => R → ℝ :=
@[ext]
theorem ext {p q : MulRingNorm R} : (∀ x, p x = q x) → p = q :=
- FunLike.ext p q
+ DFunLike.ext p q
#align mul_ring_norm.ext MulRingNorm.ext
variable (R)
MulZeroClass.
in mul_zero
/zero_mul
(#6682)
Search&replace MulZeroClass.mul_zero
-> mul_zero
, MulZeroClass.zero_mul
-> zero_mul
.
These were introduced by Mathport, as the full name of mul_zero
is actually MulZeroClass.mul_zero
(it's exported with the short name).
@@ -108,7 +108,7 @@ theorem ext {p q : RingSeminorm R} : (∀ x, p x = q x) → p = q :=
instance : Zero (RingSeminorm R) :=
⟨{ AddGroupSeminorm.instZeroAddGroupSeminorm.zero with mul_le' :=
- fun _ _ => (MulZeroClass.zero_mul _).ge }⟩
+ fun _ _ => (zero_mul _).ge }⟩
theorem eq_zero_iff {p : RingSeminorm R} : p = 0 ↔ ∀ x, p x = 0 :=
FunLike.ext_iff
@@ -156,7 +156,7 @@ theorem seminorm_one_eq_one_iff_ne_zero (hp : p 1 ≤ 1) : p 1 = 1 ↔ p ≠ 0 :
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, MulZeroClass.mul_zero] using map_mul_le_mul p x 1
+ 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 _)
simpa only [one_mul] using map_mul_le_mul p (1 : R) _
#align ring_seminorm.seminorm_one_eq_one_iff_ne_zero RingSeminorm.seminorm_one_eq_one_iff_ne_zero
@@ -345,7 +345,7 @@ def RingSeminorm.toRingNorm {K : Type*} [Field K] (f : RingSeminorm K) (hnt : f
le_antisymm
(le_trans (map_mul_le_mul f _ _)
(by rw [← RingSeminorm.toFun_eq_coe, ← AddGroupSeminorm.toFun_eq_coe, hx,
- MulZeroClass.zero_mul]))
+ zero_mul]))
(map_nonneg f _)
exact hc hc0 }
#align ring_seminorm.to_ring_norm RingSeminorm.toRingNorm
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -40,11 +40,11 @@ ring_seminorm, ring_norm
open NNReal
-variable {F R S : Type _} (x y : R) (r : ℝ)
+variable {F R S : Type*} (x y : R) (r : ℝ)
/-- A seminorm on a ring `R` is a function `f : R → ℝ` that preserves zero, takes nonnegative
values, is subadditive and submultiplicative and such that `f (-x) = f x` for all `x ∈ R`. -/
-structure RingSeminorm (R : Type _) [NonUnitalNonAssocRing R] extends AddGroupSeminorm R where
+structure RingSeminorm (R : Type*) [NonUnitalNonAssocRing R] extends AddGroupSeminorm R where
/-- The property of a `RingSeminorm` that for all `x` and `y` in the ring, the norm of `x * y` is
less than the norm of `x` times the norm of `y`. -/
mul_le' : ∀ x y : R, toFun (x * y) ≤ toFun x * toFun y
@@ -52,19 +52,19 @@ structure RingSeminorm (R : Type _) [NonUnitalNonAssocRing R] extends AddGroupSe
/-- A function `f : R → ℝ` is a norm on a (nonunital) ring if it is a seminorm and `f x = 0`
implies `x = 0`. -/
-structure RingNorm (R : Type _) [NonUnitalNonAssocRing R] extends RingSeminorm R, AddGroupNorm R
+structure RingNorm (R : Type*) [NonUnitalNonAssocRing R] extends RingSeminorm R, AddGroupNorm R
#align ring_norm RingNorm
/-- A multiplicative seminorm on a ring `R` is a function `f : R → ℝ` that preserves zero and
multiplication, takes nonnegative values, is subadditive and such that `f (-x) = f x` for all `x`.
-/
-structure MulRingSeminorm (R : Type _) [NonAssocRing R] extends AddGroupSeminorm R,
+structure MulRingSeminorm (R : Type*) [NonAssocRing R] extends AddGroupSeminorm R,
MonoidWithZeroHom R ℝ
#align mul_ring_seminorm MulRingSeminorm
/-- A multiplicative norm on a ring `R` is a multiplicative ring seminorm such that `f x = 0`
implies `x = 0`. -/
-structure MulRingNorm (R : Type _) [NonAssocRing R] extends MulRingSeminorm R, AddGroupNorm R
+structure MulRingNorm (R : Type*) [NonAssocRing R] extends MulRingSeminorm R, AddGroupNorm R
#align mul_ring_norm MulRingNorm
attribute [nolint docBlame]
@@ -166,7 +166,7 @@ end Ring
end RingSeminorm
/-- The norm of a `NonUnitalSeminormedRing` as a `RingSeminorm`. -/
-def normRingSeminorm (R : Type _) [NonUnitalSeminormedRing R] : RingSeminorm R :=
+def normRingSeminorm (R : Type*) [NonUnitalSeminormedRing R] : RingSeminorm R :=
{ normAddGroupSeminorm R with
toFun := norm
mul_le' := norm_mul_le }
@@ -333,7 +333,7 @@ instance : Inhabited (MulRingNorm R) :=
end MulRingNorm
/-- A nonzero ring seminorm on a field `K` is a ring norm. -/
-def RingSeminorm.toRingNorm {K : Type _} [Field K] (f : RingSeminorm K) (hnt : f ≠ 0) :
+def RingSeminorm.toRingNorm {K : Type*} [Field K] (f : RingSeminorm K) (hnt : f ≠ 0) :
RingNorm K :=
{ f with
eq_zero_of_map_eq_zero' := fun x hx => by
@@ -352,6 +352,6 @@ def RingSeminorm.toRingNorm {K : Type _} [Field K] (f : RingSeminorm K) (hnt : f
/-- The norm of a `NonUnitalNormedRing` as a `RingNorm`. -/
@[simps!]
-def normRingNorm (R : Type _) [NonUnitalNormedRing R] : RingNorm R :=
+def normRingNorm (R : Type*) [NonUnitalNormedRing R] : RingNorm R :=
{ normAddGroupNorm R, normRingSeminorm R with }
#align norm_ring_norm normRingNorm
@@ -2,14 +2,11 @@
Copyright (c) 2022 María Inés de Frutos-Fernández. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: María Inés de Frutos-Fernández, Yaël Dillies
-
-! This file was ported from Lean 3 source module analysis.normed.ring.seminorm
-! leanprover-community/mathlib commit 7ea604785a41a0681eac70c5a82372493dbefc68
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Analysis.Normed.Field.Basic
+#align_import analysis.normed.ring.seminorm from "leanprover-community/mathlib"@"7ea604785a41a0681eac70c5a82372493dbefc68"
+
/-!
# Seminorms and norms on rings
This PR is the result of running
find . -type f -name "*.lean" -exec sed -i -E 's/^( +)\. /\1· /' {} \;
find . -type f -name "*.lean" -exec sed -i -E 'N;s/^( +·)\n +(.*)$/\1 \2/;P;D' {} \;
which firstly replaces .
focusing dots with ·
and secondly removes isolated instances of such dots, unifying them with the following line. A new rule is placed in the style linter to verify this.
@@ -129,8 +129,7 @@ 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 _ _) <;>
+ · refine' (if_pos h).trans_le (mul_nonneg _ _) <;>
· change _ ≤ ite _ _ _
split_ifs
exacts [le_rfl, zero_le_one]
@@ -133,7 +133,7 @@ instance [DecidableEq R] : One (RingSeminorm R) :=
refine' (if_pos h).trans_le (mul_nonneg _ _) <;>
· change _ ≤ ite _ _ _
split_ifs
- exacts[le_rfl, zero_le_one]
+ exacts [le_rfl, zero_le_one]
· change ite _ _ _ ≤ ite _ _ _ * ite _ _ _
simp only [if_false, h, left_ne_zero_of_mul h, right_ne_zero_of_mul h, mul_one,
le_refl] }⟩
Now that leanprover/lean4#2210 has been merged, this PR:
set_option synthInstance.etaExperiment true
commands (and some etaExperiment%
term elaborators)set_option maxHeartbeats
commandsCo-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Matthew Ballard <matt@mrb.email>
@@ -336,7 +336,6 @@ instance : Inhabited (MulRingNorm R) :=
end MulRingNorm
-set_option synthInstance.etaExperiment true in
/-- A nonzero ring seminorm on a field `K` is a ring norm. -/
def RingSeminorm.toRingNorm {K : Type _} [Field K] (f : RingSeminorm K) (hnt : f ≠ 0) :
RingNorm K :=
This is currently stuck on an issue as indicated in line 111. edit: fixed by the etaExperiment
option
Co-authored-by: Heather Macbeth <25316162+hrmacbeth@users.noreply.github.com> Co-authored-by: Jason Yuen <jason_yuen2007@hotmail.com> Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com> Co-authored-by: int-y1 <jason_yuen2007@hotmail.com>
The unported dependencies are
algebra.order.module
init.core
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file