@@ -27,6 +27,8 @@ A point `x : α` is a periodic point of `f : α → α` of period `n` if `f^[n]
27
27
* `minimalPeriod f x` : the minimal period of a point `x` under an endomorphism `f` or zero
28
28
if `x` is not a periodic point of `f`.
29
29
* `orbit f x`: the cycle `[x, f x, f (f x), ...]` for a periodic point.
30
+ * `MulAction.period g x` : the minimal period of a point `x` under the multiplicative action of `g`;
31
+ an equivalent `AddAction.period g x` is defined for additive actions.
30
32
31
33
## Main statements
32
34
@@ -628,42 +630,117 @@ namespace MulAction
628
630
629
631
open Function
630
632
631
- variable {α β : Type *} [Group α] [MulAction α β] {a : α} {b : β}
633
+ universe u v
634
+ variable {α : Type v}
635
+ variable {G : Type u} [Group G] [MulAction G α]
636
+ variable {M : Type u} [Monoid M] [MulAction M α]
637
+
638
+ /--
639
+ The period of a multiplicative action of `g` on `a` is the smallest positive `n` such that
640
+ `g ^ n • a = a`, or `0` if such an `n` does not exist.
641
+ -/
642
+ @[to_additive "The period of an additive action of `g` on `a` is the smallest positive `n`
643
+ such that `(n • g) +ᵥ a = a`, or `0` if such an `n` does not exist." ]
644
+ noncomputable def period (m : M) (a : α) : ℕ := minimalPeriod (fun x => m • x) a
645
+
646
+ /-- `MulAction.period m a` is definitionally equal to `Function.minimalPeriod (m • ·) a`. -/
647
+ @[to_additive "`AddAction.period m a` is definitionally equal to
648
+ `Function.minimalPeriod (m +ᵥ ·) a`" ]
649
+ theorem period_eq_minimalPeriod {m : M} {a : α} :
650
+ MulAction.period m a = minimalPeriod (fun x => m • x) a := rfl
651
+
652
+ /-- `m ^ (period m a)` fixes `a`. -/
653
+ @[to_additive (attr := simp) "`(period m a) • m` fixes `a`."]
654
+ theorem pow_period_smul (m : M) (a : α) : m ^ (period m a) • a = a := by
655
+ rw [period_eq_minimalPeriod, ← smul_iterate_apply, iterate_minimalPeriod]
656
+
657
+ @[to_additive]
658
+ lemma isPeriodicPt_smul_iff {m : M} {a : α} {n : ℕ} :
659
+ IsPeriodicPt (m • ·) n a ↔ m ^ n • a = a := by
660
+ rw [← smul_iterate_apply, IsPeriodicPt, IsFixedPt]
661
+
662
+ /-! ### Multiples of `MulAction.period`
663
+
664
+ It is easy to convince oneself that if `g ^ n • a = a` (resp. `(n • g) +ᵥ a = a`),
665
+ then `n` must be a multiple of `period g a`.
666
+
667
+ This also holds for negative powers/multiples.
668
+ -/
669
+
670
+ @[to_additive]
671
+ theorem pow_smul_eq_iff_period_dvd {n : ℕ} {m : M} {a : α} :
672
+ m ^ n • a = a ↔ period m a ∣ n := by
673
+ rw [period_eq_minimalPeriod, ← isPeriodicPt_iff_minimalPeriod_dvd, isPeriodicPt_smul_iff]
674
+
675
+ @[to_additive]
676
+ theorem zpow_smul_eq_iff_period_dvd {j : ℤ} {g : G} {a : α} :
677
+ g ^ j • a = a ↔ (period g a : ℤ) ∣ j := by
678
+ rcases j with n | n
679
+ · rw [Int.ofNat_eq_coe, zpow_ofNat, Int.coe_nat_dvd, pow_smul_eq_iff_period_dvd]
680
+ · rw [Int.negSucc_coe, zpow_neg, zpow_ofNat, inv_smul_eq_iff, eq_comm, dvd_neg, Int.coe_nat_dvd,
681
+ pow_smul_eq_iff_period_dvd]
682
+
683
+ @[to_additive (attr := simp)]
684
+ theorem pow_mod_period_smul (n : ℕ) {m : M} {a : α} :
685
+ m ^ (n % period m a) • a = m ^ n • a := by
686
+ conv_rhs => rw [← Nat.mod_add_div n (period m a), pow_add, mul_smul,
687
+ pow_smul_eq_iff_period_dvd.mpr (dvd_mul_right _ _)]
688
+
689
+ @[to_additive (attr := simp)]
690
+ theorem zpow_mod_period_smul (j : ℤ) {g : G} {a : α} :
691
+ g ^ (j % (period g a : ℤ)) • a = g ^ j • a := by
692
+ conv_rhs => rw [← Int.emod_add_ediv j (period g a), zpow_add, mul_smul,
693
+ zpow_smul_eq_iff_period_dvd.mpr (dvd_mul_right _ _)]
694
+
695
+ @[to_additive (attr := simp)]
696
+ theorem pow_add_period_smul (n : ℕ) (m : M) (a : α) :
697
+ m ^ (n + period m a) • a = m ^ n • a := by
698
+ rw [← pow_mod_period_smul, Nat.add_mod_right, pow_mod_period_smul]
699
+
700
+ @[to_additive (attr := simp)]
701
+ theorem pow_period_add_smul (n : ℕ) (m : M) (a : α) :
702
+ m ^ (period m a + n) • a = m ^ n • a := by
703
+ rw [← pow_mod_period_smul, Nat.add_mod_left, pow_mod_period_smul]
704
+
705
+ @[to_additive (attr := simp)]
706
+ theorem zpow_add_period_smul (i : ℤ) (g : G) (a : α) :
707
+ g ^ (i + period g a) • a = g ^ i • a := by
708
+ rw [← zpow_mod_period_smul, Int.add_emod_self, zpow_mod_period_smul]
709
+
710
+ @[to_additive (attr := simp)]
711
+ theorem zpow_period_add_smul (i : ℤ) (g : G) (a : α) :
712
+ g ^ (period g a + i) • a = g ^ i • a := by
713
+ rw [← zpow_mod_period_smul, Int.add_emod_self_left, zpow_mod_period_smul]
714
+
715
+ variable {a : G} {b : α}
632
716
633
717
@[to_additive]
634
718
theorem pow_smul_eq_iff_minimalPeriod_dvd {n : ℕ} :
635
- a ^ n • b = b ↔ Function. minimalPeriod (a • ·) b ∣ n := by
636
- rw [← isPeriodicPt_iff_minimalPeriod_dvd, IsPeriodicPt, IsFixedPt, smul_iterate ]
719
+ a ^ n • b = b ↔ minimalPeriod (a • ·) b ∣ n := by
720
+ rw [← period_eq_minimalPeriod, pow_smul_eq_iff_period_dvd ]
637
721
#align mul_action.pow_smul_eq_iff_minimal_period_dvd MulAction.pow_smul_eq_iff_minimalPeriod_dvd
638
722
#align add_action.nsmul_vadd_eq_iff_minimal_period_dvd AddAction.nsmul_vadd_eq_iff_minimalPeriod_dvd
639
723
640
724
@[to_additive]
641
725
theorem zpow_smul_eq_iff_minimalPeriod_dvd {n : ℤ} :
642
- a ^ n • b = b ↔ (Function.minimalPeriod (a • ·) b : ℤ) ∣ n := by
643
- cases n
644
- · rw [Int.ofNat_eq_coe, zpow_ofNat, Int.coe_nat_dvd, pow_smul_eq_iff_minimalPeriod_dvd]
645
- · rw [Int.negSucc_coe, zpow_neg, zpow_ofNat, inv_smul_eq_iff, eq_comm, dvd_neg, Int.coe_nat_dvd,
646
- pow_smul_eq_iff_minimalPeriod_dvd]
726
+ a ^ n • b = b ↔ (minimalPeriod (a • ·) b : ℤ) ∣ n := by
727
+ rw [← period_eq_minimalPeriod, zpow_smul_eq_iff_period_dvd]
647
728
#align mul_action.zpow_smul_eq_iff_minimal_period_dvd MulAction.zpow_smul_eq_iff_minimalPeriod_dvd
648
729
#align add_action.zsmul_vadd_eq_iff_minimal_period_dvd AddAction.zsmul_vadd_eq_iff_minimalPeriod_dvd
649
730
650
731
variable (a b)
651
732
652
733
@[to_additive (attr := simp)]
653
734
theorem pow_smul_mod_minimalPeriod (n : ℕ) :
654
- a ^ (n % Function.minimalPeriod (a • ·) b) • b = a ^ n • b := by
655
- conv_rhs =>
656
- rw [← Nat.mod_add_div n (minimalPeriod (a • ·) b), pow_add, mul_smul,
657
- pow_smul_eq_iff_minimalPeriod_dvd.mpr (dvd_mul_right _ _)]
735
+ a ^ (n % minimalPeriod (a • ·) b) • b = a ^ n • b := by
736
+ rw [← period_eq_minimalPeriod, pow_mod_period_smul]
658
737
#align mul_action.pow_smul_mod_minimal_period MulAction.pow_smul_mod_minimalPeriod
659
738
#align add_action.nsmul_vadd_mod_minimal_period AddAction.nsmul_vadd_mod_minimalPeriod
660
739
661
740
@[to_additive (attr := simp)]
662
741
theorem zpow_smul_mod_minimalPeriod (n : ℤ) :
663
- a ^ (n % (Function.minimalPeriod (a • ·) b : ℤ)) • b = a ^ n • b := by
664
- conv_rhs =>
665
- rw [← Int.emod_add_ediv n (minimalPeriod ((a • ·)) b), zpow_add, mul_smul,
666
- zpow_smul_eq_iff_minimalPeriod_dvd.mpr (dvd_mul_right _ _)]
742
+ a ^ (n % (minimalPeriod (a • ·) b : ℤ)) • b = a ^ n • b := by
743
+ rw [← period_eq_minimalPeriod, zpow_mod_period_smul]
667
744
#align mul_action.zpow_smul_mod_minimal_period MulAction.zpow_smul_mod_minimalPeriod
668
745
#align add_action.zsmul_vadd_mod_minimal_period AddAction.zsmul_vadd_mod_minimalPeriod
669
746
0 commit comments