Documentation

Mathlib.Algebra.Order.Hom.Basic

Algebraic order homomorphism classes #

This file defines hom classes for common properties at the intersection of order theory and algebra.

Typeclasses #

Basic typeclasses

Group norms

Ring norms

Notes #

Typeclasses for seminorms are defined here while types of seminorms are defined in Analysis.Normed.Group.Seminorm and Analysis.Normed.Ring.Seminorm because absolute values are multiplicative ring norms but outside of this use we only consider real-valued seminorms.

TODO #

Finitary versions of the current lemmas.

Basics #

class NonnegHomClass (F : Type u_7) (α : outParam (Type u_8)) (β : outParam (Type u_9)) [Zero β] [LE β] extends FunLike :
Type (max (max u_7 u_8) u_9)
  • coe : Fαβ
  • coe_injective' : Function.Injective FunLike.coe
  • map_nonneg : ∀ (f : F) (a : α), 0 f a

    the image of any element is non negative.

NonnegHomClass F α β states that F is a type of nonnegative morphisms.

Instances
    class SubadditiveHomClass (F : Type u_7) (α : outParam (Type u_8)) (β : outParam (Type u_9)) [Add α] [Add β] [LE β] extends FunLike :
    Type (max (max u_7 u_8) u_9)
    • coe : Fαβ
    • coe_injective' : Function.Injective FunLike.coe
    • map_add_le_add : ∀ (f : F) (a b : α), f (a + b) f a + f b

      the image of a sum is less or equal than the sum of the images.

    SubadditiveHomClass F α β states that F is a type of subadditive morphisms.

    Instances
      class SubmultiplicativeHomClass (F : Type u_7) (α : outParam (Type u_8)) (β : outParam (Type u_9)) [Mul α] [Mul β] [LE β] extends FunLike :
      Type (max (max u_7 u_8) u_9)
      • coe : Fαβ
      • coe_injective' : Function.Injective FunLike.coe
      • map_mul_le_mul : ∀ (f : F) (a b : α), f (a * b) f a * f b

        the image of a product is less or equal than the product of the images.

      SubmultiplicativeHomClass F α β states that F is a type of submultiplicative morphisms.

      Instances
        class MulLEAddHomClass (F : Type u_7) (α : outParam (Type u_8)) (β : outParam (Type u_9)) [Mul α] [Add β] [LE β] extends FunLike :
        Type (max (max u_7 u_8) u_9)
        • coe : Fαβ
        • coe_injective' : Function.Injective FunLike.coe
        • map_mul_le_add : ∀ (f : F) (a b : α), f (a * b) f a + f b

          the image of a product is less or equal than the sum of the images.

        MulLEAddHomClass F α β states that F is a type of subadditive morphisms.

        Instances
          class NonarchimedeanHomClass (F : Type u_7) (α : outParam (Type u_8)) (β : outParam (Type u_9)) [Add α] [LinearOrder β] extends FunLike :
          Type (max (max u_7 u_8) u_9)
          • coe : Fαβ
          • coe_injective' : Function.Injective FunLike.coe
          • map_add_le_max : ∀ (f : F) (a b : α), f (a + b) max (f a) (f b)

            the image of a sum is less or equal than the maximum of the images.

          NonarchimedeanHomClass F α β states that F is a type of non-archimedean morphisms.

          Instances
            theorem le_map_add_map_sub {F : Type u_2} {α : Type u_3} {β : Type u_4} [AddGroup α] [AddCommSemigroup β] [LE β] [SubadditiveHomClass F α β] (f : F) (a : α) (b : α) :
            f a f b + f (a - b)
            theorem le_map_mul_map_div {F : Type u_2} {α : Type u_3} {β : Type u_4} [Group α] [CommSemigroup β] [LE β] [SubmultiplicativeHomClass F α β] (f : F) (a : α) (b : α) :
            f a f b * f (a / b)
            theorem le_map_add_map_div {F : Type u_2} {α : Type u_3} {β : Type u_4} [Group α] [AddCommSemigroup β] [LE β] [MulLEAddHomClass F α β] (f : F) (a : α) (b : α) :
            f a f b + f (a / b)
            theorem le_map_sub_add_map_sub {F : Type u_2} {α : Type u_3} {β : Type u_4} [AddGroup α] [AddCommSemigroup β] [LE β] [SubadditiveHomClass F α β] (f : F) (a : α) (b : α) (c : α) :
            f (a - c) f (a - b) + f (b - c)
            theorem le_map_div_mul_map_div {F : Type u_2} {α : Type u_3} {β : Type u_4} [Group α] [CommSemigroup β] [LE β] [SubmultiplicativeHomClass F α β] (f : F) (a : α) (b : α) (c : α) :
            f (a / c) f (a / b) * f (b / c)
            theorem le_map_div_add_map_div {F : Type u_2} {α : Type u_3} {β : Type u_4} [Group α] [AddCommSemigroup β] [LE β] [MulLEAddHomClass F α β] (f : F) (a : α) (b : α) (c : α) :
            f (a / c) f (a / b) + f (b / c)

            Extension for the positivity tactic: nonnegative maps take nonnegative values.

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For

              Group (semi)norms #

              class AddGroupSeminormClass (F : Type u_7) (α : outParam (Type u_8)) (β : outParam (Type u_9)) [AddGroup α] [OrderedAddCommMonoid β] extends SubadditiveHomClass :
              Type (max (max u_7 u_8) u_9)
              • coe : Fαβ
              • coe_injective' : Function.Injective FunLike.coe
              • map_add_le_add : ∀ (f : F) (a b : α), f (a + b) f a + f b
              • map_zero : ∀ (f : F), f 0 = 0

                The image of zero is zero.

              • map_neg_eq_map : ∀ (f : F) (a : α), f (-a) = f a

                The map is invariant under negation of its argument.

              AddGroupSeminormClass F α states that F is a type of β-valued seminorms on the additive group α.

              You should extend this class when you extend AddGroupSeminorm.

              Instances
                class GroupSeminormClass (F : Type u_7) (α : outParam (Type u_8)) (β : outParam (Type u_9)) [Group α] [OrderedAddCommMonoid β] extends MulLEAddHomClass :
                Type (max (max u_7 u_8) u_9)
                • coe : Fαβ
                • coe_injective' : Function.Injective FunLike.coe
                • map_mul_le_add : ∀ (f : F) (a b : α), f (a * b) f a + f b
                • map_one_eq_zero : ∀ (f : F), f 1 = 0

                  The image of one is zero.

                • map_inv_eq_map : ∀ (f : F) (a : α), f a⁻¹ = f a

                  The map is invariant under inversion of its argument.

                GroupSeminormClass F α states that F is a type of β-valued seminorms on the group α.

                You should extend this class when you extend GroupSeminorm.

                Instances
                  class AddGroupNormClass (F : Type u_7) (α : outParam (Type u_8)) (β : outParam (Type u_9)) [AddGroup α] [OrderedAddCommMonoid β] extends AddGroupSeminormClass :
                  Type (max (max u_7 u_8) u_9)
                  • coe : Fαβ
                  • coe_injective' : Function.Injective FunLike.coe
                  • map_add_le_add : ∀ (f : F) (a b : α), f (a + b) f a + f b
                  • map_zero : ∀ (f : F), f 0 = 0
                  • map_neg_eq_map : ∀ (f : F) (a : α), f (-a) = f a
                  • eq_zero_of_map_eq_zero : ∀ (f : F) {a : α}, f a = 0a = 0

                    The argument is zero if its image under the map is zero.

                  AddGroupNormClass F α states that F is a type of β-valued norms on the additive group α.

                  You should extend this class when you extend AddGroupNorm.

                  Instances
                    class GroupNormClass (F : Type u_7) (α : outParam (Type u_8)) (β : outParam (Type u_9)) [Group α] [OrderedAddCommMonoid β] extends GroupSeminormClass :
                    Type (max (max u_7 u_8) u_9)
                    • coe : Fαβ
                    • coe_injective' : Function.Injective FunLike.coe
                    • map_mul_le_add : ∀ (f : F) (a b : α), f (a * b) f a + f b
                    • map_one_eq_zero : ∀ (f : F), f 1 = 0
                    • map_inv_eq_map : ∀ (f : F) (a : α), f a⁻¹ = f a
                    • eq_one_of_map_eq_zero : ∀ (f : F) {a : α}, f a = 0a = 1

                      The argument is one if its image under the map is zero.

                    GroupNormClass F α states that F is a type of β-valued norms on the group α.

                    You should extend this class when you extend GroupNorm.

                    Instances
                      Equations
                      • AddGroupSeminormClass.toAddLEAddHomClass = self.1
                      instance AddGroupSeminormClass.toZeroHomClass {F : Type u_2} {α : Type u_3} {β : Type u_4} [AddGroup α] [OrderedAddCommMonoid β] [AddGroupSeminormClass F α β] :
                      ZeroHomClass F α β
                      Equations
                      • AddGroupSeminormClass.toZeroHomClass = let src := inst; ZeroHomClass.mk (_ : ∀ (f : F), f 0 = 0)
                      theorem map_sub_le_add {F : Type u_2} {α : Type u_3} {β : Type u_4} [AddGroup α] [OrderedAddCommMonoid β] [AddGroupSeminormClass F α β] (f : F) (x : α) (y : α) :
                      f (x - y) f x + f y
                      theorem map_div_le_add {F : Type u_2} {α : Type u_3} {β : Type u_4} [Group α] [OrderedAddCommMonoid β] [GroupSeminormClass F α β] (f : F) (x : α) (y : α) :
                      f (x / y) f x + f y
                      theorem map_sub_rev {F : Type u_2} {α : Type u_3} {β : Type u_4} [AddGroup α] [OrderedAddCommMonoid β] [AddGroupSeminormClass F α β] (f : F) (x : α) (y : α) :
                      f (x - y) = f (y - x)
                      theorem map_div_rev {F : Type u_2} {α : Type u_3} {β : Type u_4} [Group α] [OrderedAddCommMonoid β] [GroupSeminormClass F α β] (f : F) (x : α) (y : α) :
                      f (x / y) = f (y / x)
                      theorem le_map_add_map_sub' {F : Type u_2} {α : Type u_3} {β : Type u_4} [AddGroup α] [OrderedAddCommMonoid β] [AddGroupSeminormClass F α β] (f : F) (x : α) (y : α) :
                      f x f y + f (y - x)
                      theorem le_map_add_map_div' {F : Type u_2} {α : Type u_3} {β : Type u_4} [Group α] [OrderedAddCommMonoid β] [GroupSeminormClass F α β] (f : F) (x : α) (y : α) :
                      f x f y + f (y / x)
                      theorem abs_sub_map_le_sub {F : Type u_2} {α : Type u_3} {β : Type u_4} [AddGroup α] [LinearOrderedAddCommGroup β] [AddGroupSeminormClass F α β] (f : F) (x : α) (y : α) :
                      |f x - f y| f (x - y)
                      theorem abs_sub_map_le_div {F : Type u_2} {α : Type u_3} {β : Type u_4} [Group α] [LinearOrderedAddCommGroup β] [GroupSeminormClass F α β] (f : F) (x : α) (y : α) :
                      |f x - f y| f (x / y)
                      Equations
                      • AddGroupSeminormClass.toNonnegHomClass = let src := inst; NonnegHomClass.mk (_ : ∀ (f : F) (a : α), 0 f a)
                      theorem AddGroupSeminormClass.toNonnegHomClass.proof_1 {F : Type u_3} {α : Type u_2} {β : Type u_1} [AddGroup α] [LinearOrderedAddCommMonoid β] [AddGroupSeminormClass F α β] (f : F) (a : α) :
                      0 f a
                      instance GroupSeminormClass.toNonnegHomClass {F : Type u_2} {α : Type u_3} {β : Type u_4} [Group α] [LinearOrderedAddCommMonoid β] [GroupSeminormClass F α β] :
                      Equations
                      • GroupSeminormClass.toNonnegHomClass = let src := inst; NonnegHomClass.mk (_ : ∀ (f : F) (a : α), 0 f a)
                      @[simp]
                      theorem map_eq_zero_iff_eq_zero {F : Type u_2} {α : Type u_3} {β : Type u_4} [AddGroup α] [OrderedAddCommMonoid β] [AddGroupNormClass F α β] (f : F) {x : α} :
                      f x = 0 x = 0
                      @[simp]
                      theorem map_eq_zero_iff_eq_one {F : Type u_2} {α : Type u_3} {β : Type u_4} [Group α] [OrderedAddCommMonoid β] [GroupNormClass F α β] (f : F) {x : α} :
                      f x = 0 x = 1
                      theorem map_ne_zero_iff_ne_zero {F : Type u_2} {α : Type u_3} {β : Type u_4} [AddGroup α] [OrderedAddCommMonoid β] [AddGroupNormClass F α β] (f : F) {x : α} :
                      f x 0 x 0
                      theorem map_ne_zero_iff_ne_one {F : Type u_2} {α : Type u_3} {β : Type u_4} [Group α] [OrderedAddCommMonoid β] [GroupNormClass F α β] (f : F) {x : α} :
                      f x 0 x 1
                      theorem map_pos_of_ne_zero {F : Type u_2} {α : Type u_3} {β : Type u_4} [AddGroup α] [LinearOrderedAddCommMonoid β] [AddGroupNormClass F α β] (f : F) {x : α} (hx : x 0) :
                      0 < f x
                      theorem map_pos_of_ne_one {F : Type u_2} {α : Type u_3} {β : Type u_4} [Group α] [LinearOrderedAddCommMonoid β] [GroupNormClass F α β] (f : F) {x : α} (hx : x 1) :
                      0 < f x

                      Ring (semi)norms #

                      class RingSeminormClass (F : Type u_7) (α : outParam (Type u_8)) (β : outParam (Type u_9)) [NonUnitalNonAssocRing α] [OrderedSemiring β] extends AddGroupSeminormClass :
                      Type (max (max u_7 u_8) u_9)
                      • coe : Fαβ
                      • coe_injective' : Function.Injective FunLike.coe
                      • map_add_le_add : ∀ (f : F) (a b : α), f (a + b) f a + f b
                      • map_zero : ∀ (f : F), f 0 = 0
                      • map_neg_eq_map : ∀ (f : F) (a : α), f (-a) = f a
                      • map_mul_le_mul : ∀ (f : F) (a b : α), f (a * b) f a * f b

                        the image of a product is less or equal than the product of the images.

                      RingSeminormClass F α states that F is a type of β-valued seminorms on the ring α.

                      You should extend this class when you extend RingSeminorm.

                      Instances
                        class RingNormClass (F : Type u_7) (α : outParam (Type u_8)) (β : outParam (Type u_9)) [NonUnitalNonAssocRing α] [OrderedSemiring β] extends RingSeminormClass :
                        Type (max (max u_7 u_8) u_9)
                        • coe : Fαβ
                        • coe_injective' : Function.Injective FunLike.coe
                        • map_add_le_add : ∀ (f : F) (a b : α), f (a + b) f a + f b
                        • map_zero : ∀ (f : F), f 0 = 0
                        • map_neg_eq_map : ∀ (f : F) (a : α), f (-a) = f a
                        • map_mul_le_mul : ∀ (f : F) (a b : α), f (a * b) f a * f b
                        • eq_zero_of_map_eq_zero : ∀ (f : F) {a : α}, f a = 0a = 0

                          The argument is zero if its image under the map is zero.

                        RingNormClass F α states that F is a type of β-valued norms on the ring α.

                        You should extend this class when you extend RingNorm.

                        Instances
                          class MulRingSeminormClass (F : Type u_7) (α : outParam (Type u_8)) (β : outParam (Type u_9)) [NonAssocRing α] [OrderedSemiring β] extends AddGroupSeminormClass :
                          Type (max (max u_7 u_8) u_9)
                          • coe : Fαβ
                          • coe_injective' : Function.Injective FunLike.coe
                          • map_add_le_add : ∀ (f : F) (a b : α), f (a + b) f a + f b
                          • map_zero : ∀ (f : F), f 0 = 0
                          • map_neg_eq_map : ∀ (f : F) (a : α), f (-a) = f a
                          • map_mul : ∀ (f : F) (x y : α), f (x * y) = f x * f y

                            The proposition that the function preserves multiplication

                          • map_one : ∀ (f : F), f 1 = 1

                            The proposition that the function preserves 1

                          MulRingSeminormClass F α states that F is a type of β-valued multiplicative seminorms on the ring α.

                          You should extend this class when you extend MulRingSeminorm.

                          Instances
                            class MulRingNormClass (F : Type u_7) (α : outParam (Type u_8)) (β : outParam (Type u_9)) [NonAssocRing α] [OrderedSemiring β] extends MulRingSeminormClass :
                            Type (max (max u_7 u_8) u_9)
                            • coe : Fαβ
                            • coe_injective' : Function.Injective FunLike.coe
                            • map_add_le_add : ∀ (f : F) (a b : α), f (a + b) f a + f b
                            • map_zero : ∀ (f : F), f 0 = 0
                            • map_neg_eq_map : ∀ (f : F) (a : α), f (-a) = f a
                            • map_mul : ∀ (f : F) (x y : α), f (x * y) = f x * f y
                            • map_one : ∀ (f : F), f 1 = 1
                            • eq_zero_of_map_eq_zero : ∀ (f : F) {a : α}, f a = 0a = 0

                              The argument is zero if its image under the map is zero.

                            MulRingNormClass F α states that F is a type of β-valued multiplicative norms on the ring α.

                            You should extend this class when you extend MulRingNorm.

                            Instances
                              Equations
                              • RingSeminormClass.toNonnegHomClass = AddGroupSeminormClass.toNonnegHomClass
                              Equations
                              • MulRingSeminormClass.toRingSeminormClass = let src := inst; RingSeminormClass.mk (_ : ∀ (f : F) (a b : α), f (a * b) f a * f b)
                              instance MulRingNormClass.toRingNormClass {F : Type u_2} {α : Type u_3} {β : Type u_4} [NonAssocRing α] [OrderedSemiring β] [MulRingNormClass F α β] :
                              Equations
                              • MulRingNormClass.toRingNormClass = let src := inst; let src_1 := MulRingSeminormClass.toRingSeminormClass; RingNormClass.mk (_ : ∀ (f : F) {a : α}, f a = 0a = 0)