TauLib · API Book I

TauLib.BookI.Boundary.Cyclotomic

TauLib.Boundary.Cyclotomic

Cyclotomic fields and roots of unity, connecting to the CRT decomposition.

Registry Cross-References

  • [I.D88] CyclotomicField — Roots of unity in modular arithmetic

  • [I.T45] Roots of Unity — Basic structure theorems

  • [I.R23] Galois Preview — Galois action on roots of unity

Mathematical Content

Roots of unity are defined modularly over TauIdx: z is an nth root of unity mod m when z^n ≡ 1 (mod m). Primitive roots require minimality.

The key structural result is the CRT connection: roots of unity mod coprime moduli decompose as products via the Chinese Remainder Theorem. This connects the cyclotomic structure to the primorial ladder from Polarity.ChineseRemainder.

The Galois action σ_k : ζ_n ↦ ζ_n^k (for gcd(k,n)=1) preserves the root of unity property, previewing the structure Gal(Q(ζ_n)/Q) ≅ (Z/nZ)×.


Tau.Boundary.IsRootOfUnity

source **def Tau.Boundary.IsRootOfUnity (n : ℕ)

(z m : Denotation.TauIdx) :Prop**

[I.D88] z is an nth root of unity modulo m: z^n ≡ 1 (mod m). Equations

  • Tau.Boundary.IsRootOfUnity n z m = (z ^ n % m = 1 % m) Instances For

Tau.Boundary.instDecidableIsRootOfUnity

source **instance Tau.Boundary.instDecidableIsRootOfUnity (n : ℕ)

(z m : Denotation.TauIdx) :Decidable (IsRootOfUnity n z m)**

IsRootOfUnity is decidable (Nat equality is decidable). Equations

  • Tau.Boundary.instDecidableIsRootOfUnity n z m = inferInstanceAs (Decidable (z ^ n % m = 1 % m))

Tau.Boundary.IsPrimitiveRoot

source **def Tau.Boundary.IsPrimitiveRoot (n : ℕ)

(z m : Denotation.TauIdx) :Prop**

z is a primitive nth root of unity mod m: z^n ≡ 1 and z^k ≢ 1 for all 0 < k < n. Equations

  • Tau.Boundary.IsPrimitiveRoot n z m = (Tau.Boundary.IsRootOfUnity n z m ∧ ∀ (k : ℕ), 0 < k → k < n → ¬Tau.Boundary.IsRootOfUnity k z m) Instances For

Tau.Boundary.root_of_unity_one

source theorem Tau.Boundary.root_of_unity_one (n m : Denotation.TauIdx) :IsRootOfUnity n 1 m

[I.T45] 1 is always an nth root of unity mod any m.


Tau.Boundary.root_of_unity_pow

source **theorem Tau.Boundary.root_of_unity_pow (n : ℕ)

(z m : Denotation.TauIdx)

(k : ℕ)

(hz : IsRootOfUnity n z m) :IsRootOfUnity (k * n) z m**

If z^n ≡ 1 (mod m) then z^(k*n) ≡ 1 (mod m).


Tau.Boundary.CyclotomicRoot

source **def Tau.Boundary.CyclotomicRoot (n : ℕ)

(z m : Denotation.TauIdx) :Prop**

The nth cyclotomic polynomial’s roots divide x^n - 1. We capture the key property: if z is a primitive nth root then z^d ≢ 1 for proper divisors d of n. Equations

  • Tau.Boundary.CyclotomicRoot n z m = Tau.Boundary.IsPrimitiveRoot n z m Instances For

Tau.Boundary.root_divides_power

source **theorem Tau.Boundary.root_divides_power (n : ℕ)

(z m : Denotation.TauIdx)

(k : ℕ)

(hk : k > 0)

(hz : IsRootOfUnity n z m) :IsRootOfUnity (n * k) z m**

Any root of unity of order n is also a root of order n*k.


Tau.Boundary.root_of_unity_factor_left

source **theorem Tau.Boundary.root_of_unity_factor_left (n : ℕ)

(z m1 m2 : Denotation.TauIdx)

(hz : IsRootOfUnity n z (m1 * m2)) :IsRootOfUnity n z m1**

Factor left: a root mod m1*m2 is a root mod m1.


Tau.Boundary.root_of_unity_factor_right

source **theorem Tau.Boundary.root_of_unity_factor_right (n : ℕ)

(z m1 m2 : Denotation.TauIdx)

(hz : IsRootOfUnity n z (m1 * m2)) :IsRootOfUnity n z m2**

Factor right: a root mod m1*m2 is a root mod m2.


Tau.Boundary.euler_totient

source def Tau.Boundary.euler_totient (n : ℕ) :ℕ

Euler’s totient function: φ(n) = #{k : 1 ≤ k ≤ n, gcd(k,n) = 1}. Equations

  • Tau.Boundary.euler_totient n = (List.filter (fun (k : ℕ) => decide (n.Coprime (k + 1))) (List.range n)).length Instances For

Tau.Boundary.euler_totient_one

source theorem Tau.Boundary.euler_totient_one :euler_totient 1 = 1

φ(1) = 1.


Tau.Boundary.euler_totient_two

source theorem Tau.Boundary.euler_totient_two :euler_totient 2 = 1

φ(2) = 1.


Tau.Boundary.euler_totient_three

source theorem Tau.Boundary.euler_totient_three :euler_totient 3 = 2

φ(p) = p - 1 for small primes.


Tau.Boundary.euler_totient_five

source theorem Tau.Boundary.euler_totient_five :euler_totient 5 = 4


Tau.Boundary.euler_totient_seven

source theorem Tau.Boundary.euler_totient_seven :euler_totient 7 = 6


Tau.Boundary.galois_action

source **theorem Tau.Boundary.galois_action (n k : ℕ)

(z m : Denotation.TauIdx)

(_hk : k.Coprime n)

(hz : IsRootOfUnity n z m) :IsRootOfUnity n (z ^ k % m) m**

The Galois action σ_k maps an nth root of unity z to z^k. When gcd(k, n) = 1, this preserves the root of unity property. This previews Gal(Q(ζ_n)/Q) ≅ (Z/nZ)×.


Tau.Boundary.galois_action_comp

source **theorem Tau.Boundary.galois_action_comp (n j k : ℕ)

(z m : Denotation.TauIdx)

(_hm : m > 0)

(_hz : IsRootOfUnity n z m) :(z ^ j % m) ^ k % m = z ^ (j * k) % m**

Composing Galois actions: σ_k ∘ σ_j = σ_{kj}.