Documentation

Mathlib.Algebra.Tropical.Basic

Tropical algebraic structures #

This file defines algebraic structures of the (min-)tropical numbers, up to the tropical semiring. Some basic lemmas about conversion from the base type R to Tropical R are provided, as well as the expected implementations of tropical addition and tropical multiplication.

Main declarations #

Implementation notes #

The tropical structure relies on Top and min. For the max-tropical numbers, use OrderDual R.

Inspiration was drawn from the implementation of Additive/Multiplicative/Opposite, where a type synonym is created with some barebones API, and quickly made irreducible.

Algebraic structures are provided with as few typeclass assumptions as possible, even though most references rely on Semiring (Tropical R) for building up the whole theory.

References followed #

@[irreducible]
def Tropical (R : Type u) :

The tropicalization of a type R.

Equations
    Instances For
      def Tropical.trop {R : Type u} :
      RTropical R

      Reinterpret x : R as an element of Tropical R. See Tropical.tropEquiv for the equivalence.

      Equations
        Instances For
          def Tropical.untrop {R : Type u} :
          Tropical RR

          Reinterpret x : Tropical R as an element of R. See Tropical.tropEquiv for the equivalence.

          Equations
            Instances For
              @[simp]
              theorem Tropical.trop_inj_iff {R : Type u} (x y : R) :
              trop x = trop y x = y
              @[simp]
              theorem Tropical.untrop_inj_iff {R : Type u} (x y : Tropical R) :
              untrop x = untrop y x = y
              @[simp]
              theorem Tropical.trop_untrop {R : Type u} (x : Tropical R) :
              trop (untrop x) = x
              @[simp]
              theorem Tropical.untrop_trop {R : Type u} (x : R) :
              untrop (trop x) = x

              Reinterpret x : R as an element of Tropical R. See Tropical.tropOrderIso for the order-preserving equivalence.

              Equations
                Instances For
                  theorem Tropical.trop_eq_iff_eq_untrop {R : Type u} {x : R} {y : Tropical R} :
                  trop x = y x = untrop y
                  theorem Tropical.untrop_eq_iff_eq_trop {R : Type u} {x : Tropical R} {y : R} :
                  untrop x = y x = trop y
                  Equations
                    def Tropical.tropRec {R : Type u} {F : Tropical RSort v} (h : (X : R) → F (trop X)) (X : Tropical R) :
                    F X

                    Recursing on an x' : Tropical R is the same as recursing on an x : R reinterpreted as a term of Tropical R via trop x.

                    Equations
                      Instances For
                        instance Tropical.instLETropical {R : Type u} [LE R] :
                        Equations
                          @[simp]
                          theorem Tropical.untrop_le_iff {R : Type u} [LE R] {x y : Tropical R} :
                          Equations
                            instance Tropical.instLTTropical {R : Type u} [LT R] :
                            Equations
                              @[simp]
                              theorem Tropical.untrop_lt_iff {R : Type u} [LT R] {x y : Tropical R} :
                              untrop x < untrop y x < y
                              Equations

                                Reinterpret x : R as an element of Tropical R, preserving the order.

                                Equations
                                  Instances For
                                    instance Tropical.instZeroTropical {R : Type u} [Top R] :
                                    Equations
                                      instance Tropical.instTopTropical {R : Type u} [Top R] :
                                      Equations
                                        @[simp]
                                        theorem Tropical.untrop_zero {R : Type u} [Top R] :
                                        @[simp]
                                        theorem Tropical.trop_top {R : Type u} [Top R] :
                                        @[simp]
                                        theorem Tropical.trop_coe_ne_zero {R : Type u} (x : R) :
                                        trop x 0
                                        @[simp]
                                        theorem Tropical.zero_ne_trop_coe {R : Type u} (x : R) :
                                        0 trop x
                                        @[simp]
                                        theorem Tropical.le_zero {R : Type u} [LE R] [OrderTop R] (x : Tropical R) :
                                        x 0
                                        instance Tropical.instOrderTop {R : Type u} [LE R] [OrderTop R] :
                                        Equations
                                          instance Tropical.instAdd {R : Type u} [LinearOrder R] :

                                          Tropical addition is the minimum of two underlying elements of R.

                                          Equations
                                            @[simp]
                                            theorem Tropical.untrop_add {R : Type u} [LinearOrder R] (x y : Tropical R) :
                                            untrop (x + y) = min (untrop x) (untrop y)
                                            @[simp]
                                            theorem Tropical.trop_min {R : Type u} [LinearOrder R] (x y : R) :
                                            trop (min x y) = trop x + trop y
                                            @[simp]
                                            theorem Tropical.trop_inf {R : Type u} [LinearOrder R] (x y : R) :
                                            trop (min x y) = trop x + trop y
                                            theorem Tropical.trop_add_def {R : Type u} [LinearOrder R] (x y : Tropical R) :
                                            x + y = trop (min (untrop x) (untrop y))
                                            @[simp]
                                            theorem Tropical.untrop_sup {R : Type u} [LinearOrder R] (x y : Tropical R) :
                                            untrop (max x y) = max (untrop x) (untrop y)
                                            @[simp]
                                            theorem Tropical.untrop_max {R : Type u} [LinearOrder R] (x y : Tropical R) :
                                            untrop (max x y) = max (untrop x) (untrop y)
                                            @[simp]
                                            theorem Tropical.min_eq_add {R : Type u} [LinearOrder R] :
                                            min = fun (x1 x2 : Tropical R) => x1 + x2
                                            @[simp]
                                            theorem Tropical.inf_eq_add {R : Type u} [LinearOrder R] :
                                            (fun (x1 x2 : Tropical R) => min x1 x2) = fun (x1 x2 : Tropical R) => x1 + x2
                                            theorem Tropical.trop_max_def {R : Type u} [LinearOrder R] (x y : Tropical R) :
                                            max x y = trop (max (untrop x) (untrop y))
                                            theorem Tropical.trop_sup_def {R : Type u} [LinearOrder R] (x y : Tropical R) :
                                            max x y = trop (max (untrop x) (untrop y))
                                            @[simp]
                                            theorem Tropical.add_eq_left {R : Type u} [LinearOrder R] x y : Tropical R (h : x y) :
                                            x + y = x
                                            @[simp]
                                            theorem Tropical.add_eq_right {R : Type u} [LinearOrder R] x y : Tropical R (h : y x) :
                                            x + y = y
                                            theorem Tropical.add_eq_left_iff {R : Type u} [LinearOrder R] {x y : Tropical R} :
                                            x + y = x x y
                                            theorem Tropical.add_eq_right_iff {R : Type u} [LinearOrder R] {x y : Tropical R} :
                                            x + y = y y x
                                            theorem Tropical.add_self {R : Type u} [LinearOrder R] (x : Tropical R) :
                                            x + x = x
                                            theorem Tropical.add_eq_iff {R : Type u} [LinearOrder R] {x y z : Tropical R} :
                                            x + y = z x = z x y y = z y x
                                            @[simp]
                                            theorem Tropical.add_eq_zero_iff {R : Type u} [LinearOrder R] {a b : Tropical (WithTop R)} :
                                            a + b = 0 a = 0 b = 0
                                            instance Tropical.instMulOfAdd {R : Type u} [Add R] :

                                            Tropical multiplication is the addition in the underlying R.

                                            Equations
                                              @[simp]
                                              theorem Tropical.trop_add {R : Type u} [Add R] (x y : R) :
                                              trop (x + y) = trop x * trop y
                                              @[simp]
                                              theorem Tropical.untrop_mul {R : Type u} [Add R] (x y : Tropical R) :
                                              untrop (x * y) = untrop x + untrop y
                                              theorem Tropical.trop_mul_def {R : Type u} [Add R] (x y : Tropical R) :
                                              x * y = trop (untrop x + untrop y)
                                              instance Tropical.instOneTropical {R : Type u} [Zero R] :
                                              Equations
                                                @[simp]
                                                theorem Tropical.trop_zero {R : Type u} [Zero R] :
                                                trop 0 = 1
                                                @[simp]
                                                theorem Tropical.untrop_one {R : Type u} [Zero R] :
                                                untrop 1 = 0
                                                instance Tropical.instInvOfNeg {R : Type u} [Neg R] :
                                                Equations
                                                  @[simp]
                                                  theorem Tropical.untrop_inv {R : Type u} [Neg R] (x : Tropical R) :
                                                  instance Tropical.instDivOfSub {R : Type u} [Sub R] :
                                                  Equations
                                                    @[simp]
                                                    theorem Tropical.untrop_div {R : Type u} [Sub R] (x y : Tropical R) :
                                                    untrop (x / y) = untrop x - untrop y
                                                    instance Tropical.instPowOfSMul {R : Type u} {α : Type u_1} [SMul α R] :
                                                    Pow (Tropical R) α
                                                    Equations
                                                      @[simp]
                                                      theorem Tropical.untrop_pow {R : Type u} {α : Type u_1} [SMul α R] (x : Tropical R) (n : α) :
                                                      untrop (x ^ n) = n untrop x
                                                      @[simp]
                                                      theorem Tropical.trop_smul {R : Type u} {α : Type u_1} [SMul α R] (x : R) (n : α) :
                                                      trop (n x) = trop x ^ n
                                                      @[simp]
                                                      theorem Tropical.trop_nsmul {R : Type u} [AddMonoid R] (x : R) (n : ) :
                                                      trop (n x) = trop x ^ n
                                                      Equations
                                                        @[simp]
                                                        theorem Tropical.untrop_zpow {R : Type u} [AddGroup R] (x : Tropical R) (n : ) :
                                                        untrop (x ^ n) = n untrop x
                                                        @[simp]
                                                        theorem Tropical.trop_zsmul {R : Type u} [AddGroup R] (x : R) (n : ) :
                                                        trop (n x) = trop x ^ n
                                                        @[simp]
                                                        theorem Tropical.add_pow {R : Type u} [LinearOrder R] [AddMonoid R] [AddLeftMono R] [AddRightMono R] (x y : Tropical R) (n : ) :
                                                        (x + y) ^ n = x ^ n + y ^ n
                                                        @[simp]
                                                        theorem Tropical.succ_nsmul {R : Type u_1} [LinearOrder R] [OrderTop R] (x : Tropical R) (n : ) :
                                                        (n + 1) x = x
                                                        theorem Tropical.mul_eq_zero_iff {R : Type u_1} [AddCommMonoid R] {a b : Tropical (WithTop R)} :
                                                        a * b = 0 a = 0 b = 0