Documentation

Mathlib.Order.Fin.Basic

Fin n forms a bounded linear order #

This file contains the linear ordered instance on Fin n.

Fin n is the type whose elements are natural numbers smaller than n. This file expands on the development in the core library.

Main definitions #

Instances #

@[simp]
theorem Fin.coe_max {n : โ„•} (a b : Fin n) :
โ†‘(max a b) = max โ†‘a โ†‘b
@[simp]
theorem Fin.coe_min {n : โ„•} (a b : Fin n) :
โ†‘(min a b) = min โ†‘a โ†‘b
theorem Fin.compare_eq_compare_val {n : โ„•} (a b : Fin n) :
compare a b = compare โ†‘a โ†‘b

Extra instances to short-circuit type class resolution #

These also prevent non-computable instances being used to construct these instances non-computably.

Miscellaneous lemmas #

@[simp]
theorem Fin.val_top (n : โ„•) [NeZero n] :
โ†‘โŠค = n - 1
@[simp]
theorem Fin.cast_top {m n : โ„•} [NeZero m] [NeZero n] (h : m = n) :
theorem Fin.strictMono_pred_comp {n : โ„•} {ฮฑ : Type u_1} [Preorder ฮฑ] {f : ฮฑ โ†’ Fin (n + 1)} (hf : โˆ€ (a : ฮฑ), f a โ‰  0) (hfโ‚‚ : StrictMono f) :
StrictMono fun (a : ฮฑ) => (f a).pred โ‹ฏ
theorem Fin.monotone_pred_comp {n : โ„•} {ฮฑ : Type u_1} [Preorder ฮฑ] {f : ฮฑ โ†’ Fin (n + 1)} (hf : โˆ€ (a : ฮฑ), f a โ‰  0) (hfโ‚‚ : Monotone f) :
Monotone fun (a : ฮฑ) => (f a).pred โ‹ฏ
theorem Fin.strictMono_castPred_comp {n : โ„•} {ฮฑ : Type u_1} [Preorder ฮฑ] {f : ฮฑ โ†’ Fin (n + 1)} (hf : โˆ€ (a : ฮฑ), f a โ‰  last n) (hfโ‚‚ : StrictMono f) :
StrictMono fun (a : ฮฑ) => (f a).castPred โ‹ฏ
theorem Fin.monotone_castPred_comp {n : โ„•} {ฮฑ : Type u_1} [Preorder ฮฑ] {f : ฮฑ โ†’ Fin (n + 1)} (hf : โˆ€ (a : ฮฑ), f a โ‰  last n) (hfโ‚‚ : Monotone f) :
Monotone fun (a : ฮฑ) => (f a).castPred โ‹ฏ
theorem Fin.strictMono_iff_lt_succ {n : โ„•} {ฮฑ : Type u_1} [Preorder ฮฑ] {f : Fin (n + 1) โ†’ ฮฑ} :
StrictMono f โ†” โˆ€ (i : Fin n), f i.castSucc < f i.succ

A function f on Fin (n + 1) is strictly monotone if and only if f i < f (i + 1) for all i.

theorem Fin.monotone_iff_le_succ {n : โ„•} {ฮฑ : Type u_1} [Preorder ฮฑ] {f : Fin (n + 1) โ†’ ฮฑ} :
Monotone f โ†” โˆ€ (i : Fin n), f i.castSucc โ‰ค f i.succ

A function f on Fin (n + 1) is monotone if and only if f i โ‰ค f (i + 1) for all i.

theorem Fin.strictAnti_iff_succ_lt {n : โ„•} {ฮฑ : Type u_1} [Preorder ฮฑ] {f : Fin (n + 1) โ†’ ฮฑ} :
StrictAnti f โ†” โˆ€ (i : Fin n), f i.succ < f i.castSucc

A function f on Fin (n + 1) is strictly antitone if and only if f (i + 1) < f i for all i.

theorem Fin.antitone_iff_succ_le {n : โ„•} {ฮฑ : Type u_1} [Preorder ฮฑ] {f : Fin (n + 1) โ†’ ฮฑ} :
Antitone f โ†” โˆ€ (i : Fin n), f i.succ โ‰ค f i.castSucc

A function f on Fin (n + 1) is antitone if and only if f (i + 1) โ‰ค f i for all i.

theorem Fin.orderHom_injective_iff {ฮฑ : Type u_2} [PartialOrder ฮฑ] {n : โ„•} (f : Fin (n + 1) โ†’o ฮฑ) :
Function.Injective โ‡‘f โ†” โˆ€ (i : Fin n), f i.castSucc โ‰  f i.succ

Monotonicity #

@[simp]
theorem Fin.succAbove_inj {n : โ„•} {p : Fin (n + 1)} {i j : Fin n} :
@[simp]
theorem Fin.succAbove_lt_succAbove_iff {n : โ„•} {p : Fin (n + 1)} {i j : Fin n} :
@[simp]
theorem Fin.natAdd_inj {n : โ„•} (m : โ„•) {i j : Fin n} :
natAdd m i = natAdd m j โ†” i = j
@[simp]
theorem Fin.natAdd_le_natAdd_iff {n : โ„•} (m : โ„•) {i j : Fin n} :
@[simp]
theorem Fin.natAdd_lt_natAdd_iff {n : โ„•} (m : โ„•) {i j : Fin n} :
natAdd m i < natAdd m j โ†” i < j
@[simp]
theorem Fin.addNat_inj {n : โ„•} (m : โ„•) {i j : Fin n} :
i.addNat m = j.addNat m โ†” i = j
@[simp]
theorem Fin.addNat_le_addNat_iff {n : โ„•} (m : โ„•) {i j : Fin n} :
@[simp]
theorem Fin.addNat_lt_addNat_iff {n : โ„•} (m : โ„•) {i j : Fin n} :
i.addNat m < j.addNat m โ†” i < j
@[simp]
theorem Fin.castLE_le_castLE_iff {m n : โ„•} {i j : Fin n} (h : n โ‰ค m) :
@[simp]
theorem Fin.castLE_lt_castLE_iff {m n : โ„•} {i j : Fin n} (h : n โ‰ค m) :
castLE h i < castLE h j โ†” i < j
theorem Fin.predAbove_le_predAbove {n : โ„•} {p q : Fin n} (hpq : p โ‰ค q) {i j : Fin (n + 1)} (hij : i โ‰ค j) :
def Fin.predAboveOrderHom {n : โ„•} (p : Fin n) :
Fin (n + 1) โ†’o Fin n

Fin.predAbove p as an OrderHom.

Equations
    Instances For
      @[simp]
      theorem Fin.predAboveOrderHom_coe {n : โ„•} (p : Fin n) (i : Fin (n + 1)) :
      @[simp]
      theorem Fin.predAbove_left_inj {n : โ„•} {x y : Fin n} :

      predAbove is injective at the pivot

      Order isomorphisms #

      The equivalence Fin n โ‰ƒ {i // i < n} is an order isomorphism.

      Equations
        Instances For
          def Fin.castOrderIso {m n : โ„•} (eq : n = m) :

          Fin.cast as an OrderIso.

          castOrderIso eq i embeds i into an equal Fin type.

          Equations
            Instances For
              @[simp]
              theorem Fin.castOrderIso_symm_apply {m n : โ„•} (eq : n = m) (i : Fin m) :
              (RelIso.symm (castOrderIso eq)) i = Fin.cast โ‹ฏ i
              @[simp]
              theorem Fin.castOrderIso_apply {m n : โ„•} (eq : n = m) (i : Fin n) :
              (castOrderIso eq) i = Fin.cast eq i
              @[simp]
              theorem Fin.symm_castOrderIso {m n : โ„•} (h : n = m) :
              @[simp]
              theorem Fin.castOrderIso_refl {n : โ„•} (h : n = n := โ‹ฏ) :
              theorem Fin.castOrderIso_toEquiv {m n : โ„•} (h : n = m) :

              While in many cases Fin.castOrderIso is better than Equiv.cast/cast, sometimes we want to apply a generic lemma about cast.

              Fin.rev n as an order-reversing isomorphism.

              Equations
                Instances For
                  @[simp]
                  theorem Fin.revOrderIso_apply {n : โ„•} (aโœ : (Fin n)แต’แตˆ) :
                  revOrderIso aโœ = (OrderDual.ofDual aโœ).rev

                  Order embeddings #

                  The inclusion map Fin n โ†’ โ„• is an order embedding.

                  Equations
                    Instances For
                      @[simp]
                      theorem Fin.valOrderEmb_apply (n : โ„•) (self : Fin n) :
                      (valOrderEmb n) self = โ†‘self
                      instance Fin.Lt.isWellOrder (n : โ„•) :
                      IsWellOrder (Fin n) fun (x1 x2 : Fin n) => x1 < x2

                      The ordering on Fin n is a well order.

                      def Fin.castLEOrderEmb {m n : โ„•} (h : n โ‰ค m) :

                      Fin.castLE as an OrderEmbedding.

                      castLEEmb h i embeds i into a larger Fin type.

                      Equations
                        Instances For
                          @[simp]
                          theorem Fin.castLEOrderEmb_apply {m n : โ„•} (h : n โ‰ค m) (i : Fin n) :
                          @[simp]
                          theorem Fin.castLEOrderEmb_toEmbedding {m n : โ„•} (h : n โ‰ค m) :
                          (castLEOrderEmb h).toEmbedding = { toFun := castLE h, inj' := โ‹ฏ }

                          Fin.castAdd as an OrderEmbedding.

                          castAddEmb m i embeds i : Fin n in Fin (n+m). See also Fin.natAddEmb and Fin.addNatEmb.

                          Equations
                            Instances For
                              @[simp]
                              theorem Fin.castAddOrderEmb_apply {n : โ„•} (m : โ„•) (aโœ : Fin n) :
                              (castAddOrderEmb m) aโœ = castAdd m aโœ
                              @[simp]
                              theorem Fin.castAddOrderEmb_toEmbedding {n : โ„•} (m : โ„•) :
                              (castAddOrderEmb m).toEmbedding = { toFun := castAdd m, inj' := โ‹ฏ }

                              Fin.castSucc as an OrderEmbedding.

                              castSuccOrderEmb i embeds i : Fin n in Fin (n+1).

                              Equations
                                Instances For
                                  @[simp]
                                  theorem Fin.castSuccOrderEmb_apply {n : โ„•} (aโœ : Fin n) :
                                  castSuccOrderEmb aโœ = aโœ.castSucc

                                  Fin.addNat as an OrderEmbedding.

                                  addNatOrderEmb m i adds m to i, generalizes Fin.succ.

                                  Equations
                                    Instances For
                                      @[simp]
                                      theorem Fin.addNatOrderEmb_toEmbedding {n : โ„•} (m : โ„•) :
                                      (addNatOrderEmb m).toEmbedding = { toFun := fun (x : Fin n) => x.addNat m, inj' := โ‹ฏ }
                                      @[simp]
                                      theorem Fin.addNatOrderEmb_apply {n : โ„•} (m : โ„•) (xโœ : Fin n) :
                                      (addNatOrderEmb m) xโœ = xโœ.addNat m

                                      Fin.natAdd as an OrderEmbedding.

                                      natAddOrderEmb n i adds n to i "on the left".

                                      Equations
                                        Instances For
                                          @[simp]
                                          theorem Fin.natAddOrderEmb_toEmbedding {m : โ„•} (n : โ„•) :
                                          (natAddOrderEmb n).toEmbedding = { toFun := natAdd n, inj' := โ‹ฏ }
                                          def Fin.succAboveOrderEmb {n : โ„•} (p : Fin (n + 1)) :
                                          Fin n โ†ชo Fin (n + 1)

                                          Fin.succAbove p as an OrderEmbedding.

                                          Equations
                                            Instances For
                                              @[simp]
                                              theorem Fin.succAboveOrderEmb_toEmbedding {n : โ„•} (p : Fin (n + 1)) :
                                              p.succAboveOrderEmb.toEmbedding = { toFun := p.succAbove, inj' := โ‹ฏ }

                                              Uniqueness of order isomorphisms #

                                              @[simp]
                                              theorem Fin.coe_orderIso_apply {m n : โ„•} (e : Fin n โ‰ƒo Fin m) (i : Fin n) :
                                              โ†‘(e i) = โ†‘i

                                              If e is an orderIso between Fin n and Fin m, then n = m and e is the identity map. In this lemma we state that for each i : Fin n we have (e i : โ„•) = (i : โ„•).