Module

PrimitiveRootCoordinates.lean

Nyll.GaloisCohomology.Kummer.Concrete.PrimitiveRootCoordinates
9 declarations indexed from sourceView source ↗

Coordinates on roots of unity

Primitive roots identify additive residue classes with roots of unity. These coordinates respect reduction and the actual cyclotomic Galois action.

Imports2
  • Mathlib.RingTheory.RootsOfUnity.PrimitiveRoots
  • Mathlib.NumberTheory.Cyclotomic.CyclotomicCharacter
Imported by3

Declarations

KummerTheory.primitiveRootCoordinate

The root of unity represented by a residue class through the chosen primitive root.

Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace KummerTheory
universe u
variable {Ω : Type u} [Field Ω]
def primitiveRootCoordinate {n : ℕ} {ζ : Ωˣ}
    (hζ : IsPrimitiveRoot ζ n) (a : ZMod n) : Ωˣ
KummerTheory.primitiveRootCoordinate_injective
Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace KummerTheory
universe u
variable {Ω : Type u} [Field Ω]
theorem primitiveRootCoordinate_injective {n : ℕ} {ζ : Ωˣ}
    (hζ : IsPrimitiveRoot ζ n) :
    Function.Injective (primitiveRootCoordinate hζ)
KummerTheory.primitiveRootCoordinate_natCast
Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace KummerTheory
universe u
variable {Ω : Type u} [Field Ω]
theorem primitiveRootCoordinate_natCast {n : ℕ} {ζ : Ωˣ}
    (hζ : IsPrimitiveRoot ζ n) (a : ℕ) :
    primitiveRootCoordinate hζ (a : ZMod n) = ζ ^ a
KummerTheory.primitiveRootCoordinate_eq_pow_val
Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace KummerTheory
universe u
variable {Ω : Type u} [Field Ω]
theorem primitiveRootCoordinate_eq_pow_val {n : ℕ} [NeZero n] {ζ : Ωˣ}
    (hζ : IsPrimitiveRoot ζ n) (a : ZMod n) :
    primitiveRootCoordinate hζ a = ζ ^ a.val
KummerTheory.primitiveRootCoordinate_add
Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace KummerTheory
universe u
variable {Ω : Type u} [Field Ω]
theorem primitiveRootCoordinate_add {n : ℕ} {ζ : Ωˣ}
    (hζ : IsPrimitiveRoot ζ n) (a b : ZMod n) :
    primitiveRootCoordinate hζ (a + b) =
      primitiveRootCoordinate hζ a * primitiveRootCoordinate hζ b
KummerTheory.primitiveRootCoordinate_pow_eq_one
Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace KummerTheory
universe u
variable {Ω : Type u} [Field Ω]
theorem primitiveRootCoordinate_pow_eq_one {n : ℕ} {ζ : Ωˣ}
    (hζ : IsPrimitiveRoot ζ n) (a : ZMod n) :
    primitiveRootCoordinate hζ a ^ n = 1
KummerTheory.primitiveRootCoordinate_surjective_roots
Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace KummerTheory
universe u
variable {Ω : Type u} [Field Ω]
theorem primitiveRootCoordinate_surjective_roots {n : ℕ} [NeZero n] {ζ : Ωˣ}
    (hζ : IsPrimitiveRoot ζ n) (z : Ωˣ) (hz : z ^ n = 1) :
    ∃ a : ZMod n, primitiveRootCoordinate hζ a = z
KummerTheory.primitiveRootCoordinate_reduction
Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace KummerTheory
universe u
variable {Ω : Type u} [Field Ω]
theorem primitiveRootCoordinate_reduction
    (N n m : ℕ) [NeZero N] [NeZero n] (hN : N = n * m) {ζ : Ωˣ}
    (hζ : IsPrimitiveRoot ζ N) (a : ZMod N) :
    primitiveRootCoordinate hζ a ^ m =
      primitiveRootCoordinate (hζ.pow (Nat.pos_of_neZero N) (hN.trans (Nat.mul_comm n m)))
        (ZMod.castHom (by rw [hN]; exact dvd_mul_right n m) (ZMod n) a) := by
  have hcast : ZMod.castHom (by rw [hN]; exact dvd_mul_right n m) (ZMod n) a =
      (a.val : ZMod n) := by
    conv_lhs => rw [← ZMod.natCast_zmod_val a]
    rw [map_natCast]
  rw [hcast, primitiveRootCoordinate_eq_pow_val, primitiveRootCoordinate_natCast,
    pow_right_comm]
KummerTheory.primitiveRootCoordinate_cyclotomic
Source context 3 commands

Surrounding namespaces, section variables, and local commands at this declaration.

namespace KummerTheory
universe u
variable {Ω : Type u} [Field Ω]
theorem primitiveRootCoordinate_cyclotomic
    (p : ℕ) [Fact p.Prime]
    [∀ i : ℕ, HasEnoughRootsOfUnity Ω (p ^ i)]
    (n : ℕ) {ζ : Ωˣ} (hζ : IsPrimitiveRoot ζ (p ^ n))
    (g : Ω ≃+* Ω) (a : ZMod (p ^ n)) :
    Units.map g.toMonoidHom (primitiveRootCoordinate hζ a) =
      primitiveRootCoordinate hζ
        ((cyclotomicCharacter Ω p g : PadicInt p).toZModPow n * a)