MAT3253 Complex Variables

2.6. n-th root of unity🔗

Definition 1.4.5. Given a positive integer n, a complex number \zeta is called an n-th root of unity if \zeta^n = 1.

/-- Helper: if `z ^ n = ζ` and `ζ ≠ 0` and `n ≥ 1`, then `z ≠ 0`. -/ lemma ne_zero_of_pow_eq_ne_zero (n : ) (z ζ : ) ( : ζ 0) (hn : n 1) (h : z ^ n = ζ) : z 0 := n:z:ζ::ζ 0hn:n 1h:z ^ n = ζz 0 n:z:hn:n 1:z ^ n 0z 0 n:z:hn:1 n:z = 0 n = 0¬z = 0 n:z:hn:1 n:z = 0 n = 0hz:z = 0False ; n:hn:1 n:0 = 0 n = 0False All goals completed! 🐙 /-- We prove that if `z₀` and `z₁` are both `n`-th roots of a nonzero complex number `ζ`, then they differ by an `n`-th root of unity: there exists `ω` with `ω ^ n = 1` and `z₀ = z₁ * ω`. Division by z₁ is well defined because z₁ is non-zero by the previous helper lemma. -/ example (n : ) (z₀ z₁ ζ : ) : n 1 ζ 0 z₀ ^ n = ζ z₁ ^ n = ζ ω : , z₀ = z₁ * ω ω ^ n = 1 := n:z₀:z₁:ζ:n 1 ζ 0 z₀ ^ n = ζ z₁ ^ n = ζ ω, z₀ = z₁ * ω ω ^ n = 1 intro hn n:z₀:z₁:ζ:hn:n 1:ζ 0z₀ ^ n = ζ z₁ ^ n = ζ ω, z₀ = z₁ * ω ω ^ n = 1 n:z₀:z₁:ζ:hn:n 1:ζ 0h₀:z₀ ^ n = ζz₁ ^ n = ζ ω, z₀ = z₁ * ω ω ^ n = 1 n:z₀:z₁:ζ:hn:n 1:ζ 0h₀:z₀ ^ n = ζh₁:z₁ ^ n = ζ ω, z₀ = z₁ * ω ω ^ n = 1 n:z₀:z₁:ζ:hn:n 1:ζ 0h₀:z₀ ^ n = ζh₁:z₁ ^ n = ζz₀ = z₁ * (z₀ / z₁) (z₀ / z₁) ^ n = 1 n:z₀:z₁:ζ:hn:n 1:ζ 0h₀:z₀ ^ n = ζh₁:z₁ ^ n = ζz₀ = z₁ * (z₀ / z₁)n:z₀:z₁:ζ:hn:n 1:ζ 0h₀:z₀ ^ n = ζh₁:z₁ ^ n = ζ(z₀ / z₁) ^ n = 1 n:z₀:z₁:ζ:hn:n 1:ζ 0h₀:z₀ ^ n = ζh₁:z₁ ^ n = ζz₀ = z₁ * (z₀ / z₁) n:z₀:z₁:ζ:hn:n 1:ζ 0h₀:z₀ ^ n = ζh₁:z₁ ^ n = ζz₁ 0 n:z₀:z₁:ζ:hn:n 1:ζ 0h₀:z₀ ^ n = ζh₁:z₁ ^ n = ζz₁ 0 n:z₀:ζ:hn:n 1:ζ 0h₀:z₀ ^ n = ζh₁:0 ^ n = ζFalse n:z₀:ζ:hn:n 1:ζ 0h₀:z₀ ^ n = ζh₁:0 = ζFalse n:z₀:hn:n 1:z₀ ^ n 0h₁:0 = z₀ ^ nFalse All goals completed! 🐙 n:z₀:z₁:ζ:hn:n 1:ζ 0h₀:z₀ ^ n = ζh₁:z₁ ^ n = ζ(z₀ / z₁) ^ n = 1 All goals completed! 🐙

Example. Prove that

z = \frac{1}{4}(-1 + \sqrt{5} + i·\sqrt{10 + 2 \sqrt{5}})

is a 5-th root of unity. Fuerthermore, it is a root of the 5-th cyclotomic polynomial

z ^ 4 + z ^ 3 + z ^ 2 + z + 1 = 0.

section fifth_root_of_unity open Real -- define a complex number `z` noncomputable def z : := (-1 + Real.sqrt 5) / 4, Real.sqrt (10 + 2 * Real.sqrt 5) / 4 -- Helper: (√5)² = 5 lemma sq_sqrt5 : Real.sqrt 5 ^ 2 = 5 := 5 ^ 2 = 5 All goals completed! 🐙 -- Helper: (√(10 + 2√5))² = 10 + 2√5 lemma sq_sqrt_inner : Real.sqrt (10 + 2 * Real.sqrt 5) ^ 2 = 10 + 2 * Real.sqrt 5 := (10 + 2 * 5) ^ 2 = 10 + 2 * 5 0 10 + 2 * 5 All goals completed! 🐙 /-- z satisfies the 5th cyclotomic polynomial -/ lemma z_cyclotomic : z ^ 4 + z ^ 3 + z ^ 2 + z + 1 = 0 := z ^ 4 + z ^ 3 + z ^ 2 + z + 1 = 0 (z ^ 4 + z ^ 3 + z ^ 2 + z + 1).re = re 0(z ^ 4 + z ^ 3 + z ^ 2 + z + 1).im = im 0; (z ^ 4 + z ^ 3 + z ^ 2 + z + 1).re = re 0 ({ re := (-1 + 5) / 4, im := (10 + 2 * 5) / 4 } ^ 4 + { re := (-1 + 5) / 4, im := (10 + 2 * 5) / 4 } ^ 3 + { re := (-1 + 5) / 4, im := (10 + 2 * 5) / 4 } ^ 2 + { re := (-1 + 5) / 4, im := (10 + 2 * 5) / 4 } + 1).re = re 0; (((-1 + 5) / 4 * ((-1 + 5) / 4) - (10 + 2 * 5) / 4 * ((10 + 2 * 5) / 4)) * ((-1 + 5) / 4) - ((-1 + 5) / 4 * ((10 + 2 * 5) / 4) + (10 + 2 * 5) / 4 * ((-1 + 5) / 4)) * ((10 + 2 * 5) / 4)) * ((-1 + 5) / 4) - (((-1 + 5) / 4 * ((-1 + 5) / 4) - (10 + 2 * 5) / 4 * ((10 + 2 * 5) / 4)) * ((10 + 2 * 5) / 4) + ((-1 + 5) / 4 * ((10 + 2 * 5) / 4) + (10 + 2 * 5) / 4 * ((-1 + 5) / 4)) * ((-1 + 5) / 4)) * ((10 + 2 * 5) / 4) + (((-1 + 5) / 4 * ((-1 + 5) / 4) - (10 + 2 * 5) / 4 * ((10 + 2 * 5) / 4)) * ((-1 + 5) / 4) - ((-1 + 5) / 4 * ((10 + 2 * 5) / 4) + (10 + 2 * 5) / 4 * ((-1 + 5) / 4)) * ((10 + 2 * 5) / 4)) + ((-1 + 5) / 4 * ((-1 + 5) / 4) - (10 + 2 * 5) / 4 * ((10 + 2 * 5) / 4)) + (-1 + 5) / 4 + 1 = 0 ; Try this: [apply] ring_nf The `ring` tactic failed to close the goal. Use `ring_nf` to obtain a normal form. Note that `ring` works primarily in *commutative* rings. If you have a noncommutative ring, abelian group or module, consider using `noncomm_ring`, `abel` or `module` instead.205 / 256 + 5 * (5 / 32) + 5 ^ 2 * (5 / 128) + 5 ^ 2 * (10 + 5 * 2) ^ 2 * (-3 / 128) + 5 ^ 4 * (1 / 256) + (10 + 5 * 2) ^ 2 * (-5 / 128) + (10 + 5 * 2) ^ 4 * (1 / 256) = 0; 205 / 256 + 5 * (5 / 32) + 25 / 128 + -(5 * (10 + 5 * 2) ^ 2 * (3 / 128)) + 5 ^ 4 * (1 / 256) + -((10 + 5 * 2) ^ 2 * (5 / 128)) + (10 + 5 * 2) ^ 4 * (1 / 256) = 0; 205 / 256 + 5 * (5 / 32) + 25 / 128 + -(5 * (10 + 5 * 2) * (3 / 128)) + 5 ^ 2 * (1 / 256) + -((10 + 5 * 2) * (5 / 128)) + (10 + 5 * 2) ^ 2 * (1 / 256) = 00 50 10 + 5 * 2 205 / 256 + 5 * (5 / 32) + 25 / 128 + -(5 * (10 + 5 * 2) * (3 / 128)) + 5 ^ 2 * (1 / 256) + -((10 + 5 * 2) * (5 / 128)) + (10 + 5 * 2) ^ 2 * (1 / 256) = 00 50 10 + 5 * 2 nlinarith [ Real.sqrt_nonneg 5, Real.sq_sqrt ( show 0 5 z ^ 4 + z ^ 3 + z ^ 2 + z + 1 = 0 All goals completed! 🐙 )]; (z ^ 4 + z ^ 3 + z ^ 2 + z + 1).im = im 0 ({ re := (-1 + 5) / 4, im := (10 + 2 * 5) / 4 } ^ 4 + { re := (-1 + 5) / 4, im := (10 + 2 * 5) / 4 } ^ 3 + { re := (-1 + 5) / 4, im := (10 + 2 * 5) / 4 } ^ 2 + { re := (-1 + 5) / 4, im := (10 + 2 * 5) / 4 } + 1).im = im 0; (((-1 + 5) / 4 * ((-1 + 5) / 4) - (10 + 2 * 5) / 4 * ((10 + 2 * 5) / 4)) * ((-1 + 5) / 4) - ((-1 + 5) / 4 * ((10 + 2 * 5) / 4) + (10 + 2 * 5) / 4 * ((-1 + 5) / 4)) * ((10 + 2 * 5) / 4)) * ((10 + 2 * 5) / 4) + (((-1 + 5) / 4 * ((-1 + 5) / 4) - (10 + 2 * 5) / 4 * ((10 + 2 * 5) / 4)) * ((10 + 2 * 5) / 4) + ((-1 + 5) / 4 * ((10 + 2 * 5) / 4) + (10 + 2 * 5) / 4 * ((-1 + 5) / 4)) * ((-1 + 5) / 4)) * ((-1 + 5) / 4) + (((-1 + 5) / 4 * ((-1 + 5) / 4) - (10 + 2 * 5) / 4 * ((10 + 2 * 5) / 4)) * ((10 + 2 * 5) / 4) + ((-1 + 5) / 4 * ((10 + 2 * 5) / 4) + (10 + 2 * 5) / 4 * ((-1 + 5) / 4)) * ((-1 + 5) / 4)) + ((-1 + 5) / 4 * ((10 + 2 * 5) / 4) + (10 + 2 * 5) / 4 * ((-1 + 5) / 4)) + (10 + 2 * 5) / 4 = 0 ; 5 * (10 + 5 * 2) * (5 / 64) + 5 * (10 + 5 * 2) ^ 3 * (-1 / 64) + 5 ^ 3 * (10 + 5 * 2) * (1 / 64) + (10 + 5 * 2) * (5 / 32) = 0 ; 5 * (10 + 5 * 2) * (5 / 64) + -(5 * (10 + 5 * 2) ^ 3 * (1 / 64)) + 5 ^ 3 * (10 + 5 * 2) * (1 / 64) + (10 + 5 * 2) * (5 / 32) = 0; All goals completed! 🐙 theorem z_pow_five : z ^ 5 = 1 := z ^ 5 = 1 hcycl:z ^ 4 + z ^ 3 + z ^ 2 + z + 1 = 0z ^ 5 = 1 have hfact : z ^ 5 - 1 = (z - 1) * (z ^ 4 + z ^ 3 + z ^ 2 + z + 1) := z ^ 5 = 1 All goals completed! 🐙 have h : z ^ 5 - 1 = 0 := z ^ 5 = 1 All goals completed! 🐙 All goals completed! 🐙 end fifth_root_of_unity