Zulip Chat Archive

Stream: new members

Topic: large permutation


vxctyxeha (Aug 24 2025 at 15:15):

i try to prove the follow,but how to constructor σ that
Implement a cycle of length 673 on 0 to 672 (0→1→2→...→672→0).
Implement a cycle of length 3 on 673, 674, 675 (673→674→675→673).
The remaining points (676 to 2019) remain fixed.

import Mathlib

open scoped Finset

namespace Equiv.Perm

open Equiv List Multiset


theorem h_exists :  σ : Equiv.Perm (Fin 2020),
    orderOf σ = 2019  Fintype.card (Function.fixedPoints σ) = 1344 := by sorry

Matt Diamond (Aug 24 2025 at 19:43):

this should work:

import Mathlib

open scoped Finset

namespace Equiv.Perm

open Equiv List Multiset

theorem h_exists :  σ : Equiv.Perm (Fin 2020),
    orderOf σ = 2019  Fintype.card (Function.fixedPoints σ) = 1344 :=

  finSumFinEquiv.permCongr ((finRotate 673).sumCongr (finRotate 3))
    |>.extendDomain (Fin.castLEquiv (by decide)),
  sorry

Matt Diamond (Aug 24 2025 at 20:03):

(on a side note, that function should probably be called Fin.castLEEquiv...)

vxctyxeha (Aug 24 2025 at 23:28):

another question ,how to prove that (finRotate 673) ^ 673 = 1

Weiyi Wang (Aug 24 2025 at 23:41):

I am surprised I couldn't find this in mathlib, but should be provable for general n using finRotate_succ_apply and induction

Matt Diamond (Aug 25 2025 at 02:13):

here's a proof if you still need one:

import Mathlib

lemma finRotate_pow (m n : ) (k : Fin (m + 1)) : ((finRotate (m + 1)) ^ n) k = Fin.ofNat (m + 1) (k + n) :=
by
  rw [ Equiv.Perm.iterate_eq_pow]
  induction n with
  | zero => simp
  | succ d IH =>
    rw [Function.iterate_succ_apply', finRotate_succ_apply, IH]
    apply Fin.eq_of_val_eq
    simp [Fin.val_add, add_assoc]

lemma finRotate_pow_self_eq_one (n : ) : (finRotate n) ^ n = 1 :=
by
  cases n with
  | zero => simp
  | succ d => ext k; simp [finRotate_pow]

Last updated: Dec 20 2025 at 21:32 UTC