Documentation

Mathlib.Order.PiLex

Lexicographic order on Pi types #

This file defines the lexicographic and colexicographic orders for Pi types.

Notation #

See also #

Related files are:

def Pi.Lex {ι : Type u_1} {β : ιType u_2} (r : ιιProp) (s : {i : ι} → β iβ iProp) (x y : (i : ι) → β i) :

The lexicographic relation on Π i : ι, β i, where ι is ordered by r, and each β i is ordered by s.

The < relation on Lex (∀ i, β i) is Pi.Lex (· < ·) (· < ·), while the < relation on Colex (∀ i, β i) is Pi.Lex (· > ·) (· < ·).

Equations
    Instances For

      The notation Πₗ i, α i refers to a pi type equipped with the lexicographic order.

      Equations
        Instances For
          theorem Pi.lex_lt_of_lt_of_preorder {ι : Type u_1} {β : ιType u_2} [(i : ι) → Preorder (β i)] {r : ιιProp} (hwf : WellFounded r) {x y : (i : ι) → β i} (hlt : x < y) :
          ∃ (i : ι), (∀ (j : ι), r j ix j y j y j x j) x i < y i
          theorem Pi.lex_lt_of_lt {ι : Type u_1} {β : ιType u_2} [(i : ι) → PartialOrder (β i)] {r : ιιProp} (hwf : WellFounded r) {x y : (i : ι) → β i} (hlt : x < y) :
          Pi.Lex r (fun {i : ι} (x1 x2 : β i) => x1 < x2) x y
          theorem Pi.lex_iff_of_unique {ι : Type u_1} {β : ιType u_2} [Unique ι] [(i : ι) → LT (β i)] {r : ιιProp} [Std.Irrefl r] {x y : (i : ι) → β i} :
          Pi.Lex r (fun {i : ι} (x1 x2 : β i) => x1 < x2) x y x default < y default
          theorem Pi.trichotomous_lex {ι : Type u_1} {β : ιType u_2} (r : ιιProp) (s : {i : ι} → β iβ iProp) [∀ (i : ι), Std.Trichotomous s] (wf : WellFounded r) :
          @[deprecated Pi.trichotomous_lex (since := "2026-01-24")]
          theorem Pi.isTrichotomous_lex {ι : Type u_1} {β : ιType u_2} (r : ιιProp) (s : {i : ι} → β iβ iProp) [∀ (i : ι), Std.Trichotomous s] (wf : WellFounded r) :

          Alias of Pi.trichotomous_lex.

          instance Pi.instLTLexForall {ι : Type u_1} {β : ιType u_2} [LT ι] [(a : ι) → LT (β a)] :
          LT (Lex ((i : ι) → β i))
          Equations
            instance Pi.instLTColexForall {ι : Type u_1} {β : ιType u_2} [LT ι] [(a : ι) → LT (β a)] :
            LT (Colex ((i : ι) → β i))
            Equations
              @[simp]
              theorem Pi.toLex_apply {ι : Type u_1} {β : ιType u_2} (x : (i : ι) → β i) (i : ι) :
              toLex x i = x i
              @[simp]
              theorem Pi.ofLex_apply {ι : Type u_1} {β : ιType u_2} (x : Lex ((i : ι) → β i)) (i : ι) :
              ofLex x i = x i
              @[simp]
              theorem Pi.toColex_apply {ι : Type u_1} {β : ιType u_2} (x : (i : ι) → β i) (i : ι) :
              toColex x i = x i
              @[simp]
              theorem Pi.ofColex_apply {ι : Type u_1} {β : ιType u_2} (x : Colex ((i : ι) → β i)) (i : ι) :
              ofColex x i = x i
              theorem Pi.Lex.lt_iff_of_unique {ι : Type u_1} {β : ιType u_2} [Unique ι] [(i : ι) → LT (β i)] [Preorder ι] {x y : Lex ((i : ι) → β i)} :
              @[deprecated Pi.Lex.lt_iff_of_unique (since := "2025-11-29")]
              theorem Pi.lex_lt_iff_of_unique {ι : Type u_1} {β : ιType u_2} [Unique ι] [(i : ι) → LT (β i)] [Preorder ι] {x y : Lex ((i : ι) → β i)} :

              Alias of Pi.Lex.lt_iff_of_unique.

              theorem Pi.Colex.lt_iff_of_unique {ι : Type u_1} {β : ιType u_2} [Unique ι] [(i : ι) → LT (β i)] [Preorder ι] {x y : Colex ((i : ι) → β i)} :
              @[deprecated Pi.Colex.lt_iff_of_unique (since := "2025-11-29")]
              theorem Pi.colex_lt_iff_of_unique {ι : Type u_1} {β : ιType u_2} [Unique ι] [(i : ι) → LT (β i)] [Preorder ι] {x y : Colex ((i : ι) → β i)} :

              Alias of Pi.Colex.lt_iff_of_unique.

              instance Pi.Lex.isStrictOrder {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] [(a : ι) → PartialOrder (β a)] :
              IsStrictOrder (Lex ((i : ι) → β i)) fun (x1 x2 : Lex ((i : ι) → β i)) => x1 < x2
              instance Pi.Colex.isStrictOrder {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] [(a : ι) → PartialOrder (β a)] :
              IsStrictOrder (Colex ((i : ι) → β i)) fun (x1 x2 : Colex ((i : ι) → β i)) => x1 < x2
              instance Pi.instPartialOrderLexForallOfLinearOrder {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] [(a : ι) → PartialOrder (β a)] :
              PartialOrder (Lex ((i : ι) → β i))
              Equations
                instance Pi.instPartialOrderColexForallOfLinearOrder {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] [(a : ι) → PartialOrder (β a)] :
                PartialOrder (Colex ((i : ι) → β i))
                Equations
                  noncomputable instance Pi.Lex.linearOrder {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] [WellFoundedLT ι] [(a : ι) → LinearOrder (β a)] :
                  LinearOrder (Lex ((i : ι) → β i))

                  Lex (∀ i, α i) is a linear order if the original order has well-founded <.

                  Equations
                    noncomputable instance Pi.Colex.linearOrder {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] [WellFoundedGT ι] [(a : ι) → LinearOrder (β a)] :
                    LinearOrder (Colex ((i : ι) → β i))

                    Colex (∀ i, α i) is a linear order if the original order has well-founded >.

                    Equations
                      theorem Pi.lex_le_iff_of_unique {ι : Type u_1} {β : ιType u_2} [Unique ι] [LinearOrder ι] [(i : ι) → PartialOrder (β i)] {x y : Lex ((i : ι) → β i)} :
                      theorem Pi.colex_le_iff_of_unique {ι : Type u_1} {β : ιType u_2} [Unique ι] [LinearOrder ι] [(i : ι) → PartialOrder (β i)] {x y : Colex ((i : ι) → β i)} :
                      theorem Pi.toLex_monotone {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] [(i : ι) → PartialOrder (β i)] [WellFoundedLT ι] :
                      theorem Pi.toLex_strictMono {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] [(i : ι) → PartialOrder (β i)] [WellFoundedLT ι] :
                      @[simp]
                      theorem Pi.lt_toLex_update_self_iff {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] {x : (i : ι) → β i} {i : ι} {a : β i} [(i : ι) → PartialOrder (β i)] [WellFoundedLT ι] :
                      toLex x < toLex (Function.update x i a) x i < a
                      @[simp]
                      theorem Pi.toLex_update_lt_self_iff {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] {x : (i : ι) → β i} {i : ι} {a : β i} [(i : ι) → PartialOrder (β i)] [WellFoundedLT ι] :
                      toLex (Function.update x i a) < toLex x a < x i
                      @[simp]
                      theorem Pi.le_toLex_update_self_iff {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] {x : (i : ι) → β i} {i : ι} {a : β i} [(i : ι) → PartialOrder (β i)] [WellFoundedLT ι] :
                      @[simp]
                      theorem Pi.toLex_update_le_self_iff {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] {x : (i : ι) → β i} {i : ι} {a : β i} [(i : ι) → PartialOrder (β i)] [WellFoundedLT ι] :
                      theorem Pi.toColex_monotone {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] [(i : ι) → PartialOrder (β i)] [WellFoundedGT ι] :
                      theorem Pi.toColex_strictMono {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] [(i : ι) → PartialOrder (β i)] [WellFoundedGT ι] :
                      @[simp]
                      theorem Pi.lt_toColex_update_self_iff {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] {x : (i : ι) → β i} {i : ι} {a : β i} [(i : ι) → PartialOrder (β i)] [WellFoundedGT ι] :
                      @[simp]
                      theorem Pi.toColex_update_lt_self_iff {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] {x : (i : ι) → β i} {i : ι} {a : β i} [(i : ι) → PartialOrder (β i)] [WellFoundedGT ι] :
                      @[simp]
                      theorem Pi.le_toColex_update_self_iff {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] {x : (i : ι) → β i} {i : ι} {a : β i} [(i : ι) → PartialOrder (β i)] [WellFoundedGT ι] :
                      @[simp]
                      theorem Pi.toColex_update_le_self_iff {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] {x : (i : ι) → β i} {i : ι} {a : β i} [(i : ι) → PartialOrder (β i)] [WellFoundedGT ι] :
                      theorem Pi.apply_le_of_toLex {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] {x y : (i : ι) → β i} {i : ι} [(i : ι) → LinearOrder (β i)] (hxy : toLex x toLex y) (h : j < i, x j = y j) :
                      x i y i
                      theorem Pi.apply_le_of_toColex {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] {x y : (i : ι) → β i} {i : ι} [(i : ι) → LinearOrder (β i)] (hxy : toColex x toColex y) (h : j > i, x j = y j) :
                      x i y i
                      instance Pi.instOrderBotLexForallOfWellFoundedLT {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] [WellFoundedLT ι] [(a : ι) → PartialOrder (β a)] [(a : ι) → OrderBot (β a)] :
                      OrderBot (Lex ((a : ι) → β a))
                      Equations
                        instance Pi.instOrderBotColexForallOfWellFoundedGT {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] [WellFoundedGT ι] [(a : ι) → PartialOrder (β a)] [(a : ι) → OrderBot (β a)] :
                        OrderBot (Colex ((a : ι) → β a))
                        Equations
                          instance Pi.instOrderTopLexForallOfWellFoundedLT {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] [WellFoundedLT ι] [(a : ι) → PartialOrder (β a)] [(a : ι) → OrderTop (β a)] :
                          OrderTop (Lex ((a : ι) → β a))
                          Equations
                            instance Pi.instOrderTopColexForallOfWellFoundedGT {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] [WellFoundedGT ι] [(a : ι) → PartialOrder (β a)] [(a : ι) → OrderTop (β a)] :
                            OrderTop (Colex ((a : ι) → β a))
                            Equations
                              instance Pi.instBoundedOrderLexForallOfWellFoundedLT {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] [WellFoundedLT ι] [(a : ι) → PartialOrder (β a)] [(a : ι) → BoundedOrder (β a)] :
                              BoundedOrder (Lex ((a : ι) → β a))
                              Equations
                                instance Pi.instBoundedOrderColexForallOfWellFoundedGT {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] [WellFoundedGT ι] [(a : ι) → PartialOrder (β a)] [(a : ι) → BoundedOrder (β a)] :
                                BoundedOrder (Colex ((a : ι) → β a))
                                Equations
                                  instance Pi.instDenselyOrderedLexForall {ι : Type u_1} {β : ιType u_2} [Preorder ι] [(i : ι) → LT (β i)] [∀ (i : ι), DenselyOrdered (β i)] :
                                  DenselyOrdered (Lex ((i : ι) → β i))
                                  instance Pi.instDenselyOrderedColexForall {ι : Type u_1} {β : ιType u_2} [Preorder ι] [(i : ι) → LT (β i)] [∀ (i : ι), DenselyOrdered (β i)] :
                                  DenselyOrdered (Colex ((i : ι) → β i))
                                  theorem Pi.Lex.noMaxOrder' {ι : Type u_1} {β : ιType u_2} [Preorder ι] [(i : ι) → LT (β i)] (i : ι) [NoMaxOrder (β i)] :
                                  NoMaxOrder (Lex ((i : ι) → β i))
                                  theorem Pi.Colex.noMaxOrder' {ι : Type u_1} {β : ιType u_2} [Preorder ι] [(i : ι) → LT (β i)] (i : ι) [NoMaxOrder (β i)] :
                                  NoMaxOrder (Colex ((i : ι) → β i))
                                  instance Pi.instNoMaxOrderLexForallOfWellFoundedLTOfNonempty {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] [WellFoundedLT ι] [Nonempty ι] [(i : ι) → PartialOrder (β i)] [∀ (i : ι), NoMaxOrder (β i)] :
                                  NoMaxOrder (Lex ((i : ι) → β i))
                                  instance Pi.instNoMaxOrderColexForallOfWellFoundedGTOfNonempty {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] [WellFoundedGT ι] [Nonempty ι] [(i : ι) → PartialOrder (β i)] [∀ (i : ι), NoMaxOrder (β i)] :
                                  NoMaxOrder (Colex ((i : ι) → β i))
                                  instance Pi.instNoMinOrderLexForallOfWellFoundedLTOfNonempty {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] [WellFoundedLT ι] [Nonempty ι] [(i : ι) → PartialOrder (β i)] [∀ (i : ι), NoMinOrder (β i)] :
                                  NoMinOrder (Lex ((i : ι) → β i))
                                  instance Pi.instNoMinOrderColexForallOfWellFoundedGTOfNonempty {ι : Type u_1} {β : ιType u_2} [LinearOrder ι] [WellFoundedGT ι] [Nonempty ι] [(i : ι) → PartialOrder (β i)] [∀ (i : ι), NoMinOrder (β i)] :
                                  NoMinOrder (Colex ((i : ι) → β i))
                                  theorem Pi.lex_desc {ι : Type u_1} {α : Type u_3} [Preorder ι] [DecidableEq ι] [LT α] {f : ια} {i j : ι} (h₁ : i j) (h₂ : f j < f i) :
                                  toLex (f (Equiv.swap i j)) < toLex f

                                  If we swap two strictly decreasing values in a function, then the result is lexicographically smaller than the original function.

                                  theorem Pi.colex_asc {ι : Type u_1} {α : Type u_3} [Preorder ι] [DecidableEq ι] [LT α] {f : ια} {i j : ι} (h₁ : i j) (h₂ : f i < f j) :
                                  toColex (f (Equiv.swap i j)) < toColex f

                                  If we swap two strictly increasing values in a function, then the result is colexicographically smaller than the original function.