α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
⊢ ∃ x, orderOf x = p
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
⊢ ∃ x, orderOf x = p
have hp' : p - 1 ≠ 0 := mt tsub_eq_zero_iff_le.mp (not_le_of_lt hp.out.one_lt)
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
⊢ ∃ x, orderOf x = p
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
⊢ ∃ x, orderOf x = p
have Scard :=
  calc
    p ∣ Fintype.card G ^ (p - 1) := hdvd.trans (dvd_pow (dvd_refl _) hp')
    _ = Fintype.card (vectorsProdEqOne G p) := (VectorsProdEqOne.card G p).symm
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
⊢ ∃ x, orderOf x = p
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
⊢ ∃ x, orderOf x = p
let f : ℕ → vectorsProdEqOne G p → vectorsProdEqOne G p := fun k v =>
  VectorsProdEqOne.rotate v k
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
⊢ ∃ x, orderOf x = p
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
⊢ ∃ x, orderOf x = p
have hf1 : ∀ v, f 0 v = v := VectorsProdEqOne.rotate_zero
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
hf2 : ∀ (j k : ℕ) (v : ↑(vectorsProdEqOne G p)), f k (f j v) = f (j + k) v
⊢ ∃ x, orderOf x = p
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
⊢ ∃ x, orderOf x = p
have hf2 : ∀ j k v, f k (f j v) = f (j + k) v := fun j k v =>
  VectorsProdEqOne.rotate_rotate v j k
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
hf2 : ∀ (j k : ℕ) (v : ↑(vectorsProdEqOne G p)), f k (f j v) = f (j + k) v
hf3 : ∀ (v : ↑(vectorsProdEqOne G p)), f p v = v
⊢ ∃ x, orderOf x = p
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
hf2 : ∀ (j k : ℕ) (v : ↑(vectorsProdEqOne G p)), f k (f j v) = f (j + k) v
⊢ ∃ x, orderOf x = p
have hf3 : ∀ v, f p v = v := VectorsProdEqOne.rotate_length
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
hf2 : ∀ (j k : ℕ) (v : ↑(vectorsProdEqOne G p)), f k (f j v) = f (j + k) v
hf3 : ∀ (v : ↑(vectorsProdEqOne G p)), f p v = v
σ : ↑(vectorsProdEqOne G p) ≃ ↑(vectorsProdEqOne G p) :=
  { toFun := f 1, invFun := f (p - 1), left_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f (p - 1) (f 1 s) = s),
    right_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f 1 (f (p - 1) s) = s) }
⊢ ∃ x, orderOf x = p
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
hf2 : ∀ (j k : ℕ) (v : ↑(vectorsProdEqOne G p)), f k (f j v) = f (j + k) v
hf3 : ∀ (v : ↑(vectorsProdEqOne G p)), f p v = v
⊢ ∃ x, orderOf x = p
let σ :=
  Equiv.mk (f 1) (f (p - 1)) (fun s => by rw [hf2, add_tsub_cancel_of_le hp.out.one_lt.le, hf3])
    fun s => by rw [hf2, tsub_add_cancel_of_le hp.out.one_lt.le, hf3]
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
hf2 : ∀ (j k : ℕ) (v : ↑(vectorsProdEqOne G p)), f k (f j v) = f (j + k) v
hf3 : ∀ (v : ↑(vectorsProdEqOne G p)), f p v = v
σ : ↑(vectorsProdEqOne G p) ≃ ↑(vectorsProdEqOne G p) :=
  { toFun := f 1, invFun := f (p - 1), left_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f (p - 1) (f 1 s) = s),
    right_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f 1 (f (p - 1) s) = s) }
hσ : ∀ (k : ℕ) (v : ↑(vectorsProdEqOne G p)), ↑(σ ^ k) v = f k v
⊢ ∃ x, orderOf x = p
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
hf2 : ∀ (j k : ℕ) (v : ↑(vectorsProdEqOne G p)), f k (f j v) = f (j + k) v
hf3 : ∀ (v : ↑(vectorsProdEqOne G p)), f p v = v
σ : ↑(vectorsProdEqOne G p) ≃ ↑(vectorsProdEqOne G p) :=
  { toFun := f 1, invFun := f (p - 1), left_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f (p - 1) (f 1 s) = s),
    right_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f 1 (f (p - 1) s) = s) }
⊢ ∃ x, orderOf x = p
have hσ : ∀ k v, (σ ^ k) v = f k v := fun k v =>
  Nat.rec (hf1 v).symm (fun k hk => Eq.trans (congr_arg σ hk) (hf2 k 1 v)) k
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
hf2 : ∀ (j k : ℕ) (v : ↑(vectorsProdEqOne G p)), f k (f j v) = f (j + k) v
hf3 : ∀ (v : ↑(vectorsProdEqOne G p)), f p v = v
σ : ↑(vectorsProdEqOne G p) ≃ ↑(vectorsProdEqOne G p) :=
  { toFun := f 1, invFun := f (p - 1), left_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f (p - 1) (f 1 s) = s),
    right_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f 1 (f (p - 1) s) = s) }
hσ : σ ^ p ^ 1 = 1
⊢ ∃ x, orderOf x = p
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
hf2 : ∀ (j k : ℕ) (v : ↑(vectorsProdEqOne G p)), f k (f j v) = f (j + k) v
hf3 : ∀ (v : ↑(vectorsProdEqOne G p)), f p v = v
σ : ↑(vectorsProdEqOne G p) ≃ ↑(vectorsProdEqOne G p) :=
  { toFun := f 1, invFun := f (p - 1), left_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f (p - 1) (f 1 s) = s),
    right_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f 1 (f (p - 1) s) = s) }
hσ : ∀ (k : ℕ) (v : ↑(vectorsProdEqOne G p)), ↑(σ ^ k) v = f k v
⊢ ∃ x, orderOf x = p
replace hσ : σ ^ p ^ 1 = 1 := Perm.ext fun v => by rw [pow_one, hσ, hf3, one_apply]
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
hf2 : ∀ (j k : ℕ) (v : ↑(vectorsProdEqOne G p)), f k (f j v) = f (j + k) v
hf3 : ∀ (v : ↑(vectorsProdEqOne G p)), f p v = v
σ : ↑(vectorsProdEqOne G p) ≃ ↑(vectorsProdEqOne G p) :=
  { toFun := f 1, invFun := f (p - 1), left_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f (p - 1) (f 1 s) = s),
    right_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f 1 (f (p - 1) s) = s) }
hσ : σ ^ p ^ 1 = 1
v₀ : ↑(vectorsProdEqOne G p) := { val := Vector.replicate p 1, property := (_ : List.prod (List.replicate p 1) = 1) }
⊢ ∃ x, orderOf x = p
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
hf2 : ∀ (j k : ℕ) (v : ↑(vectorsProdEqOne G p)), f k (f j v) = f (j + k) v
hf3 : ∀ (v : ↑(vectorsProdEqOne G p)), f p v = v
σ : ↑(vectorsProdEqOne G p) ≃ ↑(vectorsProdEqOne G p) :=
  { toFun := f 1, invFun := f (p - 1), left_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f (p - 1) (f 1 s) = s),
    right_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f 1 (f (p - 1) s) = s) }
hσ : σ ^ p ^ 1 = 1
⊢ ∃ x, orderOf x = p
let v₀ : vectorsProdEqOne G p :=
  ⟨Vector.replicate p 1, (List.prod_replicate p 1).trans (one_pow p)⟩
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
hf2 : ∀ (j k : ℕ) (v : ↑(vectorsProdEqOne G p)), f k (f j v) = f (j + k) v
hf3 : ∀ (v : ↑(vectorsProdEqOne G p)), f p v = v
σ : ↑(vectorsProdEqOne G p) ≃ ↑(vectorsProdEqOne G p) :=
  { toFun := f 1, invFun := f (p - 1), left_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f (p - 1) (f 1 s) = s),
    right_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f 1 (f (p - 1) s) = s) }
hσ : σ ^ p ^ 1 = 1
v₀ : ↑(vectorsProdEqOne G p) := { val := Vector.replicate p 1, property := (_ : List.prod (List.replicate p 1) = 1) }
hv₀ : ↑σ v₀ = v₀
⊢ ∃ x, orderOf x = p
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
hf2 : ∀ (j k : ℕ) (v : ↑(vectorsProdEqOne G p)), f k (f j v) = f (j + k) v
hf3 : ∀ (v : ↑(vectorsProdEqOne G p)), f p v = v
σ : ↑(vectorsProdEqOne G p) ≃ ↑(vectorsProdEqOne G p) :=
  { toFun := f 1, invFun := f (p - 1), left_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f (p - 1) (f 1 s) = s),
    right_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f 1 (f (p - 1) s) = s) }
hσ : σ ^ p ^ 1 = 1
v₀ : ↑(vectorsProdEqOne G p) := { val := Vector.replicate p 1, property := (_ : List.prod (List.replicate p 1) = 1) }
⊢ ∃ x, orderOf x = p
have hv₀ : σ v₀ = v₀ := Subtype.ext (Subtype.ext (List.rotate_replicate (1 : G) p 1))
case intro.intro
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
hf2 : ∀ (j k : ℕ) (v : ↑(vectorsProdEqOne G p)), f k (f j v) = f (j + k) v
hf3 : ∀ (v : ↑(vectorsProdEqOne G p)), f p v = v
σ : ↑(vectorsProdEqOne G p) ≃ ↑(vectorsProdEqOne G p) :=
  { toFun := f 1, invFun := f (p - 1), left_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f (p - 1) (f 1 s) = s),
    right_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f 1 (f (p - 1) s) = s) }
hσ : σ ^ p ^ 1 = 1
v₀ : ↑(vectorsProdEqOne G p) := { val := Vector.replicate p 1, property := (_ : List.prod (List.replicate p 1) = 1) }
hv₀ : ↑σ v₀ = v₀
v : ↑(vectorsProdEqOne G p)
hv1 : ↑σ v = v
hv2 : v ≠ v₀
⊢ ∃ x, orderOf x = p
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
hf2 : ∀ (j k : ℕ) (v : ↑(vectorsProdEqOne G p)), f k (f j v) = f (j + k) v
hf3 : ∀ (v : ↑(vectorsProdEqOne G p)), f p v = v
σ : ↑(vectorsProdEqOne G p) ≃ ↑(vectorsProdEqOne G p) :=
  { toFun := f 1, invFun := f (p - 1), left_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f (p - 1) (f 1 s) = s),
    right_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f 1 (f (p - 1) s) = s) }
hσ : σ ^ p ^ 1 = 1
v₀ : ↑(vectorsProdEqOne G p) := { val := Vector.replicate p 1, property := (_ : List.prod (List.replicate p 1) = 1) }
hv₀ : ↑σ v₀ = v₀
⊢ ∃ x, orderOf x = p
obtain ⟨v, hv1, hv2⟩ := exists_fixed_point_of_prime' Scard hσ hv₀
case intro.intro.refine'_1
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
hf2 : ∀ (j k : ℕ) (v : ↑(vectorsProdEqOne G p)), f k (f j v) = f (j + k) v
hf3 : ∀ (v : ↑(vectorsProdEqOne G p)), f p v = v
σ : ↑(vectorsProdEqOne G p) ≃ ↑(vectorsProdEqOne G p) :=
  { toFun := f 1, invFun := f (p - 1), left_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f (p - 1) (f 1 s) = s),
    right_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f 1 (f (p - 1) s) = s) }
hσ : σ ^ p ^ 1 = 1
v₀ : ↑(vectorsProdEqOne G p) := { val := Vector.replicate p 1, property := (_ : List.prod (List.replicate p 1) = 1) }
hv₀ : ↑σ v₀ = v₀
v : ↑(vectorsProdEqOne G p)
hv1 : ↑σ v = v
hv2 : v ≠ v₀
g : G
hg : ↑↑v = List.replicate (List.length ↑↑v) g
⊢ g ^ p = 1

case intro.intro.refine'_2
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
hf2 : ∀ (j k : ℕ) (v : ↑(vectorsProdEqOne G p)), f k (f j v) = f (j + k) v
hf3 : ∀ (v : ↑(vectorsProdEqOne G p)), f p v = v
σ : ↑(vectorsProdEqOne G p) ≃ ↑(vectorsProdEqOne G p) :=
  { toFun := f 1, invFun := f (p - 1), left_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f (p - 1) (f 1 s) = s),
    right_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f 1 (f (p - 1) s) = s) }
hσ : σ ^ p ^ 1 = 1
v₀ : ↑(vectorsProdEqOne G p) := { val := Vector.replicate p 1, property := (_ : List.prod (List.replicate p 1) = 1) }
hv₀ : ↑σ v₀ = v₀
v : ↑(vectorsProdEqOne G p)
hv1 : ↑σ v = v
hv2 : v ≠ v₀
g : G
hg : ↑↑v = List.replicate (List.length ↑↑v) g
hg' : g = 1
⊢ v = v₀
case intro.intro
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
hf2 : ∀ (j k : ℕ) (v : ↑(vectorsProdEqOne G p)), f k (f j v) = f (j + k) v
hf3 : ∀ (v : ↑(vectorsProdEqOne G p)), f p v = v
σ : ↑(vectorsProdEqOne G p) ≃ ↑(vectorsProdEqOne G p) :=
  { toFun := f 1, invFun := f (p - 1), left_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f (p - 1) (f 1 s) = s),
    right_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f 1 (f (p - 1) s) = s) }
hσ : σ ^ p ^ 1 = 1
v₀ : ↑(vectorsProdEqOne G p) := { val := Vector.replicate p 1, property := (_ : List.prod (List.replicate p 1) = 1) }
hv₀ : ↑σ v₀ = v₀
v : ↑(vectorsProdEqOne G p)
hv1 : ↑σ v = v
hv2 : v ≠ v₀
⊢ ∃ x, orderOf x = p
refine'
  Exists.imp (fun g hg => orderOf_eq_prime _ fun hg' => hv2 _)
    (List.rotate_one_eq_self_iff_eq_replicate.mp (Subtype.ext_iff.mp (Subtype.ext_iff.mp hv1)))
no goals
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
hf2 : ∀ (j k : ℕ) (v : ↑(vectorsProdEqOne G p)), f k (f j v) = f (j + k) v
hf3 : ∀ (v : ↑(vectorsProdEqOne G p)), f p v = v
s : ↑(vectorsProdEqOne G p)
⊢ f (p - 1) (f 1 s) = s
rw [hf2, add_tsub_cancel_of_le hp.out.one_lt.le, hf3]
no goals
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
hf2 : ∀ (j k : ℕ) (v : ↑(vectorsProdEqOne G p)), f k (f j v) = f (j + k) v
hf3 : ∀ (v : ↑(vectorsProdEqOne G p)), f p v = v
s : ↑(vectorsProdEqOne G p)
⊢ f 1 (f (p - 1) s) = s
rw [hf2, tsub_add_cancel_of_le hp.out.one_lt.le, hf3]
no goals
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
hf2 : ∀ (j k : ℕ) (v : ↑(vectorsProdEqOne G p)), f k (f j v) = f (j + k) v
hf3 : ∀ (v : ↑(vectorsProdEqOne G p)), f p v = v
σ : ↑(vectorsProdEqOne G p) ≃ ↑(vectorsProdEqOne G p) :=
  { toFun := f 1, invFun := f (p - 1), left_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f (p - 1) (f 1 s) = s),
    right_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f 1 (f (p - 1) s) = s) }
hσ : ∀ (k : ℕ) (v : ↑(vectorsProdEqOne G p)), ↑(σ ^ k) v = f k v
v : ↑(vectorsProdEqOne G p)
⊢ ↑(σ ^ p ^ 1) v = ↑1 v
rw [pow_one, hσ, hf3, one_apply]
no goals
case intro.intro.refine'_1
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
hf2 : ∀ (j k : ℕ) (v : ↑(vectorsProdEqOne G p)), f k (f j v) = f (j + k) v
hf3 : ∀ (v : ↑(vectorsProdEqOne G p)), f p v = v
σ : ↑(vectorsProdEqOne G p) ≃ ↑(vectorsProdEqOne G p) :=
  { toFun := f 1, invFun := f (p - 1), left_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f (p - 1) (f 1 s) = s),
    right_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f 1 (f (p - 1) s) = s) }
hσ : σ ^ p ^ 1 = 1
v₀ : ↑(vectorsProdEqOne G p) := { val := Vector.replicate p 1, property := (_ : List.prod (List.replicate p 1) = 1) }
hv₀ : ↑σ v₀ = v₀
v : ↑(vectorsProdEqOne G p)
hv1 : ↑σ v = v
hv2 : v ≠ v₀
g : G
hg : ↑↑v = List.replicate (List.length ↑↑v) g
⊢ g ^ p = 1
rw [← List.prod_replicate, ← v.1.2, ← hg, show v.val.val.prod = 1 from v.2]
case intro.intro.refine'_2
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
hf2 : ∀ (j k : ℕ) (v : ↑(vectorsProdEqOne G p)), f k (f j v) = f (j + k) v
hf3 : ∀ (v : ↑(vectorsProdEqOne G p)), f p v = v
σ : ↑(vectorsProdEqOne G p) ≃ ↑(vectorsProdEqOne G p) :=
  { toFun := f 1, invFun := f (p - 1), left_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f (p - 1) (f 1 s) = s),
    right_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f 1 (f (p - 1) s) = s) }
hσ : σ ^ p ^ 1 = 1
v₀ : ↑(vectorsProdEqOne G p) := { val := Vector.replicate p 1, property := (_ : List.prod (List.replicate p 1) = 1) }
hv₀ : ↑σ v₀ = v₀
v : ↑(vectorsProdEqOne G p)
hv1 : ↑σ v = v
hv2 : v ≠ v₀
g : G
hg : ↑↑v = List.replicate (List.length ↑↑v) g
hg' : g = 1
⊢ List.replicate p 1 = ↑↑v₀
case intro.intro.refine'_2
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
hf2 : ∀ (j k : ℕ) (v : ↑(vectorsProdEqOne G p)), f k (f j v) = f (j + k) v
hf3 : ∀ (v : ↑(vectorsProdEqOne G p)), f p v = v
σ : ↑(vectorsProdEqOne G p) ≃ ↑(vectorsProdEqOne G p) :=
  { toFun := f 1, invFun := f (p - 1), left_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f (p - 1) (f 1 s) = s),
    right_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f 1 (f (p - 1) s) = s) }
hσ : σ ^ p ^ 1 = 1
v₀ : ↑(vectorsProdEqOne G p) := { val := Vector.replicate p 1, property := (_ : List.prod (List.replicate p 1) = 1) }
hv₀ : ↑σ v₀ = v₀
v : ↑(vectorsProdEqOne G p)
hv1 : ↑σ v = v
hv2 : v ≠ v₀
g : G
hg : ↑↑v = List.replicate (List.length ↑↑v) g
hg' : g = 1
⊢ v = v₀
rw [Subtype.ext_iff_val, Subtype.ext_iff_val, hg, hg', v.1.2]
no goals
case intro.intro.refine'_2
α : Type ?u.562614
inst✝³ : Fintype α
G✝ : Type ?u.562620
inst✝² : Group G✝
n : ℕ
G : Type u_1
inst✝¹ : Group G
inst✝ : Fintype G
p : ℕ
hp : Fact (Nat.Prime p)
hdvd : p ∣ Fintype.card G
hp' : p - 1 ≠ 0
Scard : p ∣ Fintype.card ↑(vectorsProdEqOne G p)
f : ℕ → ↑(vectorsProdEqOne G p) → ↑(vectorsProdEqOne G p) := fun k v => VectorsProdEqOne.rotate v k
hf1 : ∀ (v : ↑(vectorsProdEqOne G p)), f 0 v = v
hf2 : ∀ (j k : ℕ) (v : ↑(vectorsProdEqOne G p)), f k (f j v) = f (j + k) v
hf3 : ∀ (v : ↑(vectorsProdEqOne G p)), f p v = v
σ : ↑(vectorsProdEqOne G p) ≃ ↑(vectorsProdEqOne G p) :=
  { toFun := f 1, invFun := f (p - 1), left_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f (p - 1) (f 1 s) = s),
    right_inv := (_ : ∀ (s : ↑(vectorsProdEqOne G p)), f 1 (f (p - 1) s) = s) }
hσ : σ ^ p ^ 1 = 1
v₀ : ↑(vectorsProdEqOne G p) := { val := Vector.replicate p 1, property := (_ : List.prod (List.replicate p 1) = 1) }
hv₀ : ↑σ v₀ = v₀
v : ↑(vectorsProdEqOne G p)
hv1 : ↑σ v = v
hv2 : v ≠ v₀
g : G
hg : ↑↑v = List.replicate (List.length ↑↑v) g
hg' : g = 1
⊢ List.replicate p 1 = ↑↑v₀
rfl