Documentation

Mathlib.Logic.Equiv.Fin.Basic

Equivalences for Fin n #

Miscellaneous #

This is currently not very sorted. PRs welcome!

theorem Fin.preimage_apply_01_prod {ฮฑ : Fin 2 โ†’ Type u} (s : Set (ฮฑ 0)) (t : Set (ฮฑ 1)) :
(fun (f : (i : Fin 2) โ†’ ฮฑ i) => (f 0, f 1)) โปยน' s ร—หข t = Set.univ.pi (cons s (cons t finZeroElim))
theorem Fin.preimage_apply_01_prod' {ฮฑ : Type u} (s t : Set ฮฑ) :
(fun (f : Fin 2 โ†’ ฮฑ) => (f 0, f 1)) โปยน' s ร—หข t = Set.univ.pi ![s, t]
def prodEquivPiFinTwo (ฮฑ ฮฒ : Type u) :
ฮฑ ร— ฮฒ โ‰ƒ ((i : Fin 2) โ†’ ![ฮฑ, ฮฒ] i)

A product space ฮฑ ร— ฮฒ is equivalent to the space ฮ  i : Fin 2, ฮณ i, where ฮณ = Fin.cons ฮฑ (Fin.cons ฮฒ finZeroElim). See also piFinTwoEquiv and finTwoArrowEquiv.

Equations
    Instances For
      @[simp]
      theorem prodEquivPiFinTwo_symm_apply (ฮฑ ฮฒ : Type u) :
      โ‡‘(prodEquivPiFinTwo ฮฑ ฮฒ).symm = fun (f : (i : Fin 2) โ†’ Fin.cons ฮฑ (Fin.cons ฮฒ finZeroElim) i) => (f 0, f 1)
      @[simp]
      theorem prodEquivPiFinTwo_apply (ฮฑ ฮฒ : Type u) :
      โ‡‘(prodEquivPiFinTwo ฮฑ ฮฒ) = fun (p : Fin.cons ฮฑ (Fin.cons ฮฒ finZeroElim) 0 ร— Fin.cons ฮฑ (Fin.cons ฮฒ finZeroElim) 1) => Fin.cons p.1 (Fin.cons p.2 finZeroElim)
      def finTwoArrowEquiv (ฮฑ : Type u_1) :
      (Fin 2 โ†’ ฮฑ) โ‰ƒ ฮฑ ร— ฮฑ

      The space of functions Fin 2 โ†’ ฮฑ is equivalent to ฮฑ ร— ฮฑ. See also piFinTwoEquiv and prodEquivPiFinTwo.

      Equations
        Instances For
          @[simp]
          theorem finTwoArrowEquiv_apply (ฮฑ : Type u_1) :
          โ‡‘(finTwoArrowEquiv ฮฑ) = (piFinTwoEquiv fun (x : Fin 2) => ฮฑ).toFun
          @[simp]
          theorem finTwoArrowEquiv_symm_apply (ฮฑ : Type u_1) :
          โ‡‘(finTwoArrowEquiv ฮฑ).symm = fun (x : ฮฑ ร— ฮฑ) => ![x.1, x.2]
          def finSuccEquiv' {n : โ„•} (i : Fin (n + 1)) :
          Fin (n + 1) โ‰ƒ Option (Fin n)

          An equivalence that removes i and maps it to none. This is a version of Fin.predAbove that produces Option (Fin n) instead of mapping both i.castSucc and i.succ to i.

          Equations
            Instances For
              @[simp]
              theorem finSuccEquiv'_at {n : โ„•} (i : Fin (n + 1)) :
              @[simp]
              theorem finSuccEquiv'_succAbove {n : โ„•} (i : Fin (n + 1)) (j : Fin n) :
              theorem finSuccEquiv'_below {n : โ„•} {i : Fin (n + 1)} {m : Fin n} (h : m.castSucc < i) :
              theorem finSuccEquiv'_above {n : โ„•} {i : Fin (n + 1)} {m : Fin n} (h : i โ‰ค m.castSucc) :
              @[simp]
              theorem finSuccEquiv'_symm_some {n : โ„•} (i : Fin (n + 1)) (j : Fin n) :
              @[simp]
              theorem finSuccEquiv'_eq_some {n : โ„•} {i j : Fin (n + 1)} {k : Fin n} :
              @[simp]
              theorem finSuccEquiv'_eq_none {n : โ„•} {i j : Fin (n + 1)} :
              def finSuccEquiv (n : โ„•) :
              Fin (n + 1) โ‰ƒ Option (Fin n)

              Equivalence between Fin (n + 1) and Option (Fin n). This is a version of Fin.pred that produces Option (Fin n) instead of requiring a proof that the input is not 0.

              Equations
                Instances For
                  @[simp]
                  theorem finSuccEquiv_eq_some {n : โ„•} {i : Fin (n + 1)} {j : Fin n} :
                  @[simp]
                  theorem finSuccEquiv_eq_none {n : โ„•} {i : Fin (n + 1)} :
                  theorem finSuccEquiv'_ne_last_apply {n : โ„•} {i j : Fin (n + 1)} (hi : i โ‰  Fin.last n) (hj : j โ‰  i) :
                  (finSuccEquiv' i) j = some ((i.castLT โ‹ฏ).predAbove j)
                  def finSuccAboveEquiv {n : โ„•} (p : Fin (n + 1)) :
                  Fin n โ‰ƒ { x : Fin (n + 1) // x โ‰  p }

                  Fin.succAbove as an order isomorphism between Fin n and {x : Fin (n + 1) // x โ‰  p}.

                  Equations
                    Instances For
                      theorem finSuccAboveEquiv_symm_apply_ne_last {n : โ„•} {p : Fin (n + 1)} (h : p โ‰  Fin.last n) (x : { x : Fin (n + 1) // x โ‰  p }) :
                      (finSuccAboveEquiv p).symm x = (p.castLT โ‹ฏ).predAbove โ†‘x

                      Equiv between Fin (n + 1) and Option (Fin n) sending Fin.last n to none

                      Equations
                        Instances For
                          def Equiv.embeddingFinSucc (n : โ„•) (ฮน : Type u_1) :
                          (Fin (n + 1) โ†ช ฮน) โ‰ƒ (e : Fin n โ†ช ฮน) ร— { i : ฮน // i โˆ‰ Set.range โ‡‘e }

                          An embedding e : Fin (n+1) โ†ช ฮน corresponds to an embedding f : Fin n โ†ช ฮน (corresponding the last n coordinates of e) together with a value not taken by f (corresponding to e 0).

                          Equations
                            Instances For
                              @[simp]
                              theorem Equiv.embeddingFinSucc_fst {n : โ„•} {ฮน : Type u_1} (e : Fin (n + 1) โ†ช ฮน) :
                              โ‡‘((embeddingFinSucc n ฮน) e).fst = โ‡‘e โˆ˜ Fin.succ
                              @[simp]
                              theorem Equiv.embeddingFinSucc_snd {n : โ„•} {ฮน : Type u_1} (e : Fin (n + 1) โ†ช ฮน) :
                              โ†‘((embeddingFinSucc n ฮน) e).snd = e 0
                              @[simp]
                              theorem Equiv.coe_embeddingFinSucc_symm {n : โ„•} {ฮน : Type u_1} (f : (e : Fin n โ†ช ฮน) ร— { i : ฮน // i โˆ‰ Set.range โ‡‘e }) :
                              โ‡‘((embeddingFinSucc n ฮน).symm f) = Fin.cons โ†‘f.snd โ‡‘f.fst
                              def finSumFinEquiv {m n : โ„•} :

                              Equivalence between Fin m โŠ• Fin n and Fin (m + n)

                              Equations
                                Instances For

                                  Equivalence between Fin n โŠ• โ„• and โ„• that sends inl (a : Fin n) to (a : โ„•) and inr a to n + a.

                                  Equations
                                    Instances For
                                      @[simp]
                                      theorem finSumNatEquiv_apply_left {n : โ„•} (i : Fin n) :
                                      (finSumNatEquiv n) (Sum.inl i) = โ†‘i
                                      def finAddFlip {m n : โ„•} :
                                      Fin (m + n) โ‰ƒ Fin (n + m)

                                      The equivalence between Fin (m + n) and Fin (n + m) which rotates by n.

                                      Equations
                                        Instances For
                                          @[simp]
                                          theorem finAddFlip_apply_mk_left {m n k : โ„•} (h : k < m) (hk : k < m + n := โ‹ฏ) (hnk : n + k < n + m := โ‹ฏ) :
                                          @[simp]
                                          theorem finAddFlip_apply_mk_right {m n k : โ„•} (hโ‚ : m โ‰ค k) (hโ‚‚ : k < m + n) :
                                          def finProdFinEquiv {m n : โ„•} :
                                          Fin m ร— Fin n โ‰ƒ Fin (m * n)

                                          Equivalence between Fin m ร— Fin n and Fin (m * n)

                                          Equations
                                            Instances For
                                              @[simp]
                                              theorem finProdFinEquiv_apply_val {m n : โ„•} (x : Fin m ร— Fin n) :
                                              โ†‘(finProdFinEquiv x) = โ†‘x.2 + n * โ†‘x.1

                                              The equivalence induced by a โ†ฆ (a / n, a % n) for nonzero n. This is like finProdFinEquiv.symm but with m infinite. See Nat.div_mod_unique for a similar propositional statement.

                                              Equations
                                                Instances For
                                                  @[simp]
                                                  theorem Nat.divModEquiv_symm_apply (n : โ„•) [NeZero n] (p : โ„• ร— Fin n) :
                                                  n.divModEquiv.symm p = p.1 * n + โ†‘p.2

                                                  The equivalence induced by a โ†ฆ (a / n, a % n) for nonzero n. See Int.ediv_emod_unique for a similar propositional statement.

                                                  Equations
                                                    Instances For
                                                      @[simp]
                                                      theorem Int.divModEquiv_apply (n : โ„•) [NeZero n] (a : โ„ค) :
                                                      (divModEquiv n) a = (a / โ†‘n, Fin.ofNat n (a.natMod โ†‘n))
                                                      @[simp]
                                                      theorem Int.divModEquiv_symm_apply (n : โ„•) [NeZero n] (p : โ„ค ร— Fin n) :
                                                      (divModEquiv n).symm p = p.1 * โ†‘n + โ†‘โ†‘p.2
                                                      def Fin.castLEquiv {n m : โ„•} (h : n โ‰ค m) :
                                                      Fin n โ‰ƒ { i : Fin m // โ†‘i < n }

                                                      Promote a Fin n into a larger Fin m, as a subtype where the underlying values are retained.

                                                      This is the Equiv version of Fin.castLE.

                                                      Equations
                                                        Instances For
                                                          @[simp]
                                                          theorem Fin.castLEquiv_apply {n m : โ„•} (h : n โ‰ค m) (i : Fin n) :
                                                          (castLEquiv h) i = โŸจcastLE h i, โ‹ฏโŸฉ
                                                          @[simp]
                                                          theorem Fin.castLEquiv_symm_apply {n m : โ„•} (h : n โ‰ค m) (i : { i : Fin m // โ†‘i < n }) :
                                                          (castLEquiv h).symm i = โŸจโ†‘โ†‘i, โ‹ฏโŸฉ
                                                          def Fin.appendEquiv {ฮฑ : Type u_1} (m n : โ„•) :
                                                          (Fin m โ†’ ฮฑ) ร— (Fin n โ†’ ฮฑ) โ‰ƒ (Fin (m + n) โ†’ ฮฑ)

                                                          The natural Equiv between (Fin m โ†’ ฮฑ) ร— (Fin n โ†’ ฮฑ) and Fin (m + n) โ†’ ฮฑ

                                                          Equations
                                                            Instances For
                                                              @[simp]
                                                              theorem Fin.appendEquiv_apply {ฮฑ : Type u_1} (m n : โ„•) (fg : (Fin m โ†’ ฮฑ) ร— (Fin n โ†’ ฮฑ)) (aโœ : Fin (m + n)) :
                                                              (appendEquiv m n) fg aโœ = append fg.1 fg.2 aโœ
                                                              @[simp]
                                                              theorem Fin.appendEquiv_symm_apply {ฮฑ : Type u_1} (m n : โ„•) (f : Fin (m + n) โ†’ ฮฑ) :
                                                              (appendEquiv m n).symm f = (fun (i : Fin m) => f (castAdd n i), fun (i : Fin n) => f (natAdd m i))
                                                              def Fin.succFunEquiv (ฮฑ : Type u_1) (n : โ„•) :
                                                              (Fin (n + 1) โ†’ ฮฑ) โ‰ƒ (Fin n โ†’ ฮฑ) ร— ฮฑ

                                                              Fin (n + 1) โ†’ ฮฑ and (Fin n โ†’ ฮฑ) ร— ฮฑ are equivalent.

                                                              Equations
                                                                Instances For
                                                                  @[simp]
                                                                  theorem Fin.succFunEquiv_apply (ฮฑ : Type u_1) (n : โ„•) (aโœ : Fin (n + 1) โ†’ ฮฑ) :
                                                                  (succFunEquiv ฮฑ n) aโœ = (fun (i : Fin n) => aโœ (castAdd 1 i), aโœ (natAdd n 0))
                                                                  @[simp]
                                                                  theorem Fin.succFunEquiv_symm_apply (ฮฑ : Type u_1) (n : โ„•) (aโœ : (Fin n โ†’ ฮฑ) ร— ฮฑ) (aโœยน : Fin (n + 1)) :
                                                                  (succFunEquiv ฮฑ n).symm aโœ aโœยน = append aโœ.1 (uniqueElim aโœ.2) aโœยน