Documentation

Mathlib.GroupTheory.Perm.Cycle.Concrete

Properties of cyclic permutations constructed from lists/cycles #

In the following, {α : Type*} [Fintype α] [DecidableEq α].

Main definitions #

Main results #

Implementation details #

The forward direction of Equiv.Perm.isoCycle' uses Fintype.choose of the uniqueness result, relying on the Fintype instance of a Cycle.nodup subtype. It is unclear if this works faster than the Equiv.Perm.toCycle, which relies on recursion over Finset.univ. Running #eval on even a simple noncyclic permutation c[(1 : Fin 7), 2, 3] * c[0, 5] to show it takes a long time. TODO: is this because computing the cycle factors is slow?

theorem List.formPerm_disjoint_iff {α : Type u_1} [DecidableEq α] {l : List α} {l' : List α} (hl : List.Nodup l) (hl' : List.Nodup l') (hn : 2 List.length l) (hn' : 2 List.length l') :
theorem List.cycleOf_formPerm {α : Type u_1} [DecidableEq α] {l : List α} (hl : List.Nodup l) (hn : 2 List.length l) (x : { x : α // x l }) :
theorem List.formPerm_apply_mem_eq_next {α : Type u_1} [DecidableEq α] {l : List α} (hl : List.Nodup l) (x : α) (hx : x l) :
def Cycle.formPerm {α : Type u_1} [DecidableEq α] (s : Cycle α) :

A cycle s : Cycle α, given Nodup s can be interpreted as an Equiv.Perm α where each element in the list is permuted to the next one, defined as formPerm.

Equations
Instances For
    @[simp]
    theorem Cycle.formPerm_coe {α : Type u_1} [DecidableEq α] (l : List α) (hl : List.Nodup l) :
    theorem Cycle.formPerm_eq_self_of_not_mem {α : Type u_1} [DecidableEq α] (s : Cycle α) (h : Cycle.Nodup s) (x : α) (hx : xs) :
    (Cycle.formPerm s h) x = x
    theorem Cycle.formPerm_apply_mem_eq_next {α : Type u_1} [DecidableEq α] (s : Cycle α) (h : Cycle.Nodup s) (x : α) (hx : x s) :
    (Cycle.formPerm s h) x = Cycle.next s h x hx
    def Equiv.Perm.toList {α : Type u_1} [Fintype α] [DecidableEq α] (p : Equiv.Perm α) (x : α) :
    List α

    Equiv.Perm.toList (f : Perm α) (x : α) generates the list [x, f x, f (f x), ...] until looping. That means when f x = x, toList f x = [].

    Equations
    Instances For
      @[simp]
      theorem Equiv.Perm.toList_one {α : Type u_1} [Fintype α] [DecidableEq α] (x : α) :
      @[simp]
      theorem Equiv.Perm.toList_eq_nil_iff {α : Type u_1} [Fintype α] [DecidableEq α] {p : Equiv.Perm α} {x : α} :
      theorem Equiv.Perm.toList_ne_singleton {α : Type u_1} [Fintype α] [DecidableEq α] (p : Equiv.Perm α) (x : α) (y : α) :
      theorem Equiv.Perm.nthLe_toList {α : Type u_1} [Fintype α] [DecidableEq α] (p : Equiv.Perm α) (x : α) (n : ) (hn : n < List.length (Equiv.Perm.toList p x)) :
      List.nthLe (Equiv.Perm.toList p x) n hn = (p ^ n) x
      theorem Equiv.Perm.toList_nthLe_zero {α : Type u_1} [Fintype α] [DecidableEq α] (p : Equiv.Perm α) (x : α) (h : x Equiv.Perm.support p) :
      theorem Equiv.Perm.nodup_toList {α : Type u_1} [Fintype α] [DecidableEq α] (p : Equiv.Perm α) (x : α) :
      theorem Equiv.Perm.next_toList_eq_apply {α : Type u_1} [Fintype α] [DecidableEq α] (p : Equiv.Perm α) (x : α) (y : α) (hy : y Equiv.Perm.toList p x) :
      theorem Equiv.Perm.toList_pow_apply_eq_rotate {α : Type u_1} [Fintype α] [DecidableEq α] (p : Equiv.Perm α) (x : α) (k : ) :
      theorem Equiv.Perm.toList_formPerm_singleton {α : Type u_1} [Fintype α] [DecidableEq α] (x : α) (y : α) :
      theorem Equiv.Perm.toList_formPerm_nontrivial {α : Type u_1} [Fintype α] [DecidableEq α] (l : List α) (hl : 2 List.length l) (hn : List.Nodup l) :
      Equiv.Perm.toList (List.formPerm l) (List.get l { val := 0, isLt := }) = l
      theorem Equiv.Perm.toList_formPerm_isRotated_self {α : Type u_1} [Fintype α] [DecidableEq α] (l : List α) (hl : 2 List.length l) (hn : List.Nodup l) (x : α) (hx : x l) :
      def Equiv.Perm.toCycle {α : Type u_1} [Fintype α] [DecidableEq α] (f : Equiv.Perm α) (hf : Equiv.Perm.IsCycle f) :

      Given a cyclic f : Perm α, generate the Cycle α in the order of application of f. Implemented by finding an element x : α in the support of f in Finset.univ, and iterating on using Equiv.Perm.toList f x.

      Equations
      Instances For
        theorem Equiv.Perm.toCycle_eq_toList {α : Type u_1} [Fintype α] [DecidableEq α] (f : Equiv.Perm α) (hf : Equiv.Perm.IsCycle f) (x : α) (hx : f x x) :

        Any cyclic f : Perm α is isomorphic to the nontrivial Cycle α that corresponds to repeated application of f. The forward direction is implemented by Equiv.Perm.toCycle.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          theorem Equiv.Perm.IsCycle.existsUnique_cycle {α : Type u_1} [Finite α] [DecidableEq α] {f : Equiv.Perm α} (hf : Equiv.Perm.IsCycle f) :
          ∃! s : Cycle α, ∃ (h : Cycle.Nodup s), Cycle.formPerm s h = f
          theorem Equiv.Perm.IsCycle.existsUnique_cycle_subtype {α : Type u_1} [Finite α] [DecidableEq α] {f : Equiv.Perm α} (hf : Equiv.Perm.IsCycle f) :
          ∃! s : { s : Cycle α // Cycle.Nodup s }, Cycle.formPerm s = f

          Any cyclic f : Perm α is isomorphic to the nontrivial Cycle α that corresponds to repeated application of f. The forward direction is implemented by finding this Cycle α using Fintype.choose.

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For
            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              unsafe instance Equiv.Perm.repr_perm {α : Type u_1} [Fintype α] [DecidableEq α] [Repr α] :
              Equations
              • One or more equations did not get rendered due to their size.