internlm/Lean-Github huggingface dataset:
Theorem: Imo2006P5.Polynomial.isPeriodicPt_eval_two
Proof state before:
P : ℤ[X]
t : ℤ
ht : t ∈ periodicPts fun x => Polynomial.eval x P
C : Cycle ℤ := Cycle.map (fun x => Polynomial.eval x P - x) (periodicOrbit (fun x => Polynomial.eval x P) t)
HC : ∀ {n : ℕ}, (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t ∈ C
Hdvd : Cycle.Chain (fun x x_1 => x ∣ x_1) C
Habs :
  ∀ (m n : ℕ),
    ((fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t).natAbs =
      ((fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t).natAbs
HC' : Cycle.Chain (fun x x_1 => x = x_1) C
Heq :
  ∀ (m n : ℕ),
    (fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t =
      (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t
⊢ ∀ (n : ℕ), ((fun x => Polynomial.eval x P)^[n + 1] t - t).sign = (Polynomial.eval t P - t).sign
Tactic:
intro n
Proof state after:
P : ℤ[X]
t : ℤ
ht : t ∈ periodicPts fun x => Polynomial.eval x P
C : Cycle ℤ := Cycle.map (fun x => Polynomial.eval x P - x) (periodicOrbit (fun x => Polynomial.eval x P) t)
HC : ∀ {n : ℕ}, (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t ∈ C
Hdvd : Cycle.Chain (fun x x_1 => x ∣ x_1) C
Habs :
  ∀ (m n : ℕ),
    ((fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t).natAbs =
      ((fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t).natAbs
HC' : Cycle.Chain (fun x x_1 => x = x_1) C
Heq :
  ∀ (m n : ℕ),
    (fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t =
      (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t
n : ℕ
⊢ ((fun x => Polynomial.eval x P)^[n + 1] t - t).sign = (Polynomial.eval t P - t).sign
Theorem: Imo2006P5.Polynomial.isPeriodicPt_eval_two
Proof state before:
P : ℤ[X]
t : ℤ
ht : t ∈ periodicPts fun x => Polynomial.eval x P
C : Cycle ℤ := Cycle.map (fun x => Polynomial.eval x P - x) (periodicOrbit (fun x => Polynomial.eval x P) t)
HC : ∀ {n : ℕ}, (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t ∈ C
Hdvd : Cycle.Chain (fun x x_1 => x ∣ x_1) C
Habs :
  ∀ (m n : ℕ),
    ((fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t).natAbs =
      ((fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t).natAbs
HC' : Cycle.Chain (fun x x_1 => x = x_1) C
Heq :
  ∀ (m n : ℕ),
    (fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t =
      (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t
n : ℕ
⊢ ((fun x => Polynomial.eval x P)^[n + 1] t - t).sign = (Polynomial.eval t P - t).sign
Tactic:
induction' n with n IH
Proof state after:
case zero
P : ℤ[X]
t : ℤ
ht : t ∈ periodicPts fun x => Polynomial.eval x P
C : Cycle ℤ := Cycle.map (fun x => Polynomial.eval x P - x) (periodicOrbit (fun x => Polynomial.eval x P) t)
HC : ∀ {n : ℕ}, (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t ∈ C
Hdvd : Cycle.Chain (fun x x_1 => x ∣ x_1) C
Habs :
  ∀ (m n : ℕ),
    ((fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t).natAbs =
      ((fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t).natAbs
HC' : Cycle.Chain (fun x x_1 => x = x_1) C
Heq :
  ∀ (m n : ℕ),
    (fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t =
      (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t
⊢ ((fun x => Polynomial.eval x P)^[0 + 1] t - t).sign = (Polynomial.eval t P - t).sign

case succ
P : ℤ[X]
t : ℤ
ht : t ∈ periodicPts fun x => Polynomial.eval x P
C : Cycle ℤ := Cycle.map (fun x => Polynomial.eval x P - x) (periodicOrbit (fun x => Polynomial.eval x P) t)
HC : ∀ {n : ℕ}, (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t ∈ C
Hdvd : Cycle.Chain (fun x x_1 => x ∣ x_1) C
Habs :
  ∀ (m n : ℕ),
    ((fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t).natAbs =
      ((fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t).natAbs
HC' : Cycle.Chain (fun x x_1 => x = x_1) C
Heq :
  ∀ (m n : ℕ),
    (fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t =
      (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t
n : ℕ
IH : ((fun x => Polynomial.eval x P)^[n + 1] t - t).sign = (Polynomial.eval t P - t).sign
⊢ ((fun x => Polynomial.eval x P)^[n + 1 + 1] t - t).sign = (Polynomial.eval t P - t).sign
Theorem: Imo2006P5.Polynomial.isPeriodicPt_eval_two
Proof state before:
case zero
P : ℤ[X]
t : ℤ
ht : t ∈ periodicPts fun x => Polynomial.eval x P
C : Cycle ℤ := Cycle.map (fun x => Polynomial.eval x P - x) (periodicOrbit (fun x => Polynomial.eval x P) t)
HC : ∀ {n : ℕ}, (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t ∈ C
Hdvd : Cycle.Chain (fun x x_1 => x ∣ x_1) C
Habs :
  ∀ (m n : ℕ),
    ((fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t).natAbs =
      ((fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t).natAbs
HC' : Cycle.Chain (fun x x_1 => x = x_1) C
Heq :
  ∀ (m n : ℕ),
    (fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t =
      (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t
⊢ ((fun x => Polynomial.eval x P)^[0 + 1] t - t).sign = (Polynomial.eval t P - t).sign
Tactic:
rfl
Proof state after:
no goals
Theorem: Imo2006P5.Polynomial.isPeriodicPt_eval_two
Proof state before:
case succ
P : ℤ[X]
t : ℤ
ht : t ∈ periodicPts fun x => Polynomial.eval x P
C : Cycle ℤ := Cycle.map (fun x => Polynomial.eval x P - x) (periodicOrbit (fun x => Polynomial.eval x P) t)
HC : ∀ {n : ℕ}, (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t ∈ C
Hdvd : Cycle.Chain (fun x x_1 => x ∣ x_1) C
Habs :
  ∀ (m n : ℕ),
    ((fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t).natAbs =
      ((fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t).natAbs
HC' : Cycle.Chain (fun x x_1 => x = x_1) C
Heq :
  ∀ (m n : ℕ),
    (fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t =
      (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t
n : ℕ
IH : ((fun x => Polynomial.eval x P)^[n + 1] t - t).sign = (Polynomial.eval t P - t).sign
⊢ ((fun x => Polynomial.eval x P)^[n + 1 + 1] t - t).sign = (Polynomial.eval t P - t).sign
Tactic:
apply Eq.trans _ (Int.sign_add_eq_of_sign_eq IH)
Proof state after:
P : ℤ[X]
t : ℤ
ht : t ∈ periodicPts fun x => Polynomial.eval x P
C : Cycle ℤ := Cycle.map (fun x => Polynomial.eval x P - x) (periodicOrbit (fun x => Polynomial.eval x P) t)
HC : ∀ {n : ℕ}, (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t ∈ C
Hdvd : Cycle.Chain (fun x x_1 => x ∣ x_1) C
Habs :
  ∀ (m n : ℕ),
    ((fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t).natAbs =
      ((fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t).natAbs
HC' : Cycle.Chain (fun x x_1 => x = x_1) C
Heq :
  ∀ (m n : ℕ),
    (fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t =
      (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t
n : ℕ
IH : ((fun x => Polynomial.eval x P)^[n + 1] t - t).sign = (Polynomial.eval t P - t).sign
⊢ ((fun x => Polynomial.eval x P)^[n + 1 + 1] t - t).sign =
    ((fun x => Polynomial.eval x P)^[n + 1] t - t + (Polynomial.eval t P - t)).sign
Theorem: Imo2006P5.Polynomial.isPeriodicPt_eval_two
Proof state before:
P : ℤ[X]
t : ℤ
ht : t ∈ periodicPts fun x => Polynomial.eval x P
C : Cycle ℤ := Cycle.map (fun x => Polynomial.eval x P - x) (periodicOrbit (fun x => Polynomial.eval x P) t)
HC : ∀ {n : ℕ}, (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t ∈ C
Hdvd : Cycle.Chain (fun x x_1 => x ∣ x_1) C
Habs :
  ∀ (m n : ℕ),
    ((fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t).natAbs =
      ((fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t).natAbs
HC' : Cycle.Chain (fun x x_1 => x = x_1) C
Heq :
  ∀ (m n : ℕ),
    (fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t =
      (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t
n : ℕ
IH : ((fun x => Polynomial.eval x P)^[n + 1] t - t).sign = (Polynomial.eval t P - t).sign
⊢ ((fun x => Polynomial.eval x P)^[n + 1 + 1] t - t).sign =
    ((fun x => Polynomial.eval x P)^[n + 1] t - t + (Polynomial.eval t P - t)).sign
Tactic:
have H := Heq n.succ 0
Proof state after:
P : ℤ[X]
t : ℤ
ht : t ∈ periodicPts fun x => Polynomial.eval x P
C : Cycle ℤ := Cycle.map (fun x => Polynomial.eval x P - x) (periodicOrbit (fun x => Polynomial.eval x P) t)
HC : ∀ {n : ℕ}, (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t ∈ C
Hdvd : Cycle.Chain (fun x x_1 => x ∣ x_1) C
Habs :
  ∀ (m n : ℕ),
    ((fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t).natAbs =
      ((fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t).natAbs
HC' : Cycle.Chain (fun x x_1 => x = x_1) C
Heq :
  ∀ (m n : ℕ),
    (fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t =
      (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t
n : ℕ
IH : ((fun x => Polynomial.eval x P)^[n + 1] t - t).sign = (Polynomial.eval t P - t).sign
H :
  (fun x => Polynomial.eval x P)^[n.succ + 1] t - (fun x => Polynomial.eval x P)^[n.succ] t =
    (fun x => Polynomial.eval x P)^[0 + 1] t - (fun x => Polynomial.eval x P)^[0] t
⊢ ((fun x => Polynomial.eval x P)^[n + 1 + 1] t - t).sign =
    ((fun x => Polynomial.eval x P)^[n + 1] t - t + (Polynomial.eval t P - t)).sign
Theorem: Imo2006P5.Polynomial.isPeriodicPt_eval_two
Proof state before:
P : ℤ[X]
t : ℤ
ht : t ∈ periodicPts fun x => Polynomial.eval x P
C : Cycle ℤ := Cycle.map (fun x => Polynomial.eval x P - x) (periodicOrbit (fun x => Polynomial.eval x P) t)
HC : ∀ {n : ℕ}, (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t ∈ C
Hdvd : Cycle.Chain (fun x x_1 => x ∣ x_1) C
Habs :
  ∀ (m n : ℕ),
    ((fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t).natAbs =
      ((fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t).natAbs
HC' : Cycle.Chain (fun x x_1 => x = x_1) C
Heq :
  ∀ (m n : ℕ),
    (fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t =
      (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t
n : ℕ
IH : ((fun x => Polynomial.eval x P)^[n + 1] t - t).sign = (Polynomial.eval t P - t).sign
H :
  (fun x => Polynomial.eval x P)^[n.succ + 1] t - (fun x => Polynomial.eval x P)^[n.succ] t =
    (fun x => Polynomial.eval x P)^[0 + 1] t - (fun x => Polynomial.eval x P)^[0] t
⊢ ((fun x => Polynomial.eval x P)^[n + 1 + 1] t - t).sign =
    ((fun x => Polynomial.eval x P)^[n + 1] t - t + (Polynomial.eval t P - t)).sign
Tactic:
dsimp at H ⊢
Proof state after:
P : ℤ[X]
t : ℤ
ht : t ∈ periodicPts fun x => Polynomial.eval x P
C : Cycle ℤ := Cycle.map (fun x => Polynomial.eval x P - x) (periodicOrbit (fun x => Polynomial.eval x P) t)
HC : ∀ {n : ℕ}, (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t ∈ C
Hdvd : Cycle.Chain (fun x x_1 => x ∣ x_1) C
Habs :
  ∀ (m n : ℕ),
    ((fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t).natAbs =
      ((fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t).natAbs
HC' : Cycle.Chain (fun x x_1 => x = x_1) C
Heq :
  ∀ (m n : ℕ),
    (fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t =
      (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t
n : ℕ
IH : ((fun x => Polynomial.eval x P)^[n + 1] t - t).sign = (Polynomial.eval t P - t).sign
H :
  (fun x => Polynomial.eval x P)^[n] (Polynomial.eval (Polynomial.eval t P) P) -
      (fun x => Polynomial.eval x P)^[n] (Polynomial.eval t P) =
    Polynomial.eval t P - t
⊢ ((fun x => Polynomial.eval x P)^[n] (Polynomial.eval (Polynomial.eval t P) P) - t).sign =
    ((fun x => Polynomial.eval x P)^[n] (Polynomial.eval t P) - t + (Polynomial.eval t P - t)).sign
Theorem: Imo2006P5.Polynomial.isPeriodicPt_eval_two
Proof state before:
P : ℤ[X]
t : ℤ
ht : t ∈ periodicPts fun x => Polynomial.eval x P
C : Cycle ℤ := Cycle.map (fun x => Polynomial.eval x P - x) (periodicOrbit (fun x => Polynomial.eval x P) t)
HC : ∀ {n : ℕ}, (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t ∈ C
Hdvd : Cycle.Chain (fun x x_1 => x ∣ x_1) C
Habs :
  ∀ (m n : ℕ),
    ((fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t).natAbs =
      ((fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t).natAbs
HC' : Cycle.Chain (fun x x_1 => x = x_1) C
Heq :
  ∀ (m n : ℕ),
    (fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t =
      (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t
n : ℕ
IH : ((fun x => Polynomial.eval x P)^[n + 1] t - t).sign = (Polynomial.eval t P - t).sign
H :
  (fun x => Polynomial.eval x P)^[n] (Polynomial.eval (Polynomial.eval t P) P) -
      (fun x => Polynomial.eval x P)^[n] (Polynomial.eval t P) =
    Polynomial.eval t P - t
⊢ ((fun x => Polynomial.eval x P)^[n] (Polynomial.eval (Polynomial.eval t P) P) - t).sign =
    ((fun x => Polynomial.eval x P)^[n] (Polynomial.eval t P) - t + (Polynomial.eval t P - t)).sign
Tactic:
rw [← H, sub_add_sub_cancel']
Proof state after:
no goals
Theorem: Imo2006P5.Polynomial.isPeriodicPt_eval_two
Proof state before:
case pos.intro.zero.intro
P : ℤ[X]
t : ℤ
C : Cycle ℤ := Cycle.map (fun x => Polynomial.eval x P - x) (periodicOrbit (fun x => Polynomial.eval x P) t)
HC : ∀ {n : ℕ}, (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t ∈ C
Hdvd : Cycle.Chain (fun x x_1 => x ∣ x_1) C
Habs :
  ∀ (m n : ℕ),
    ((fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t).natAbs =
      ((fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t).natAbs
HC' : Cycle.Chain (fun x x_1 => x = x_1) C
Heq :
  ∀ (m n : ℕ),
    (fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t =
      (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t
IH : ∀ (n : ℕ), ((fun x => Polynomial.eval x P)^[n + 1] t - t).sign = (Polynomial.eval t P - t).sign
hk : 0 > 0
hk' : IsPeriodicPt (fun x => Polynomial.eval x P) 0 t
⊢ IsPeriodicPt (fun x => Polynomial.eval x P) 2 t
Tactic:
exact (irrefl 0 hk).elim
Proof state after:
no goals
Theorem: Imo2006P5.Polynomial.isPeriodicPt_eval_two
Proof state before:
case pos.intro.succ.intro
P : ℤ[X]
t : ℤ
C : Cycle ℤ := Cycle.map (fun x => Polynomial.eval x P - x) (periodicOrbit (fun x => Polynomial.eval x P) t)
HC : ∀ {n : ℕ}, (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t ∈ C
Hdvd : Cycle.Chain (fun x x_1 => x ∣ x_1) C
Habs :
  ∀ (m n : ℕ),
    ((fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t).natAbs =
      ((fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t).natAbs
HC' : Cycle.Chain (fun x x_1 => x = x_1) C
Heq :
  ∀ (m n : ℕ),
    (fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t =
      (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t
IH : ∀ (n : ℕ), ((fun x => Polynomial.eval x P)^[n + 1] t - t).sign = (Polynomial.eval t P - t).sign
k : ℕ
hk : k + 1 > 0
hk' : IsPeriodicPt (fun x => Polynomial.eval x P) (k + 1) t
⊢ IsPeriodicPt (fun x => Polynomial.eval x P) 2 t
Tactic:
have H := IH k
Proof state after:
case pos.intro.succ.intro
P : ℤ[X]
t : ℤ
C : Cycle ℤ := Cycle.map (fun x => Polynomial.eval x P - x) (periodicOrbit (fun x => Polynomial.eval x P) t)
HC : ∀ {n : ℕ}, (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t ∈ C
Hdvd : Cycle.Chain (fun x x_1 => x ∣ x_1) C
Habs :
  ∀ (m n : ℕ),
    ((fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t).natAbs =
      ((fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t).natAbs
HC' : Cycle.Chain (fun x x_1 => x = x_1) C
Heq :
  ∀ (m n : ℕ),
    (fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t =
      (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t
IH : ∀ (n : ℕ), ((fun x => Polynomial.eval x P)^[n + 1] t - t).sign = (Polynomial.eval t P - t).sign
k : ℕ
hk : k + 1 > 0
hk' : IsPeriodicPt (fun x => Polynomial.eval x P) (k + 1) t
H : ((fun x => Polynomial.eval x P)^[k + 1] t - t).sign = (Polynomial.eval t P - t).sign
⊢ IsPeriodicPt (fun x => Polynomial.eval x P) 2 t
Theorem: Imo2006P5.Polynomial.isPeriodicPt_eval_two
Proof state before:
case pos.intro.succ.intro
P : ℤ[X]
t : ℤ
C : Cycle ℤ := Cycle.map (fun x => Polynomial.eval x P - x) (periodicOrbit (fun x => Polynomial.eval x P) t)
HC : ∀ {n : ℕ}, (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t ∈ C
Hdvd : Cycle.Chain (fun x x_1 => x ∣ x_1) C
Habs :
  ∀ (m n : ℕ),
    ((fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t).natAbs =
      ((fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t).natAbs
HC' : Cycle.Chain (fun x x_1 => x = x_1) C
Heq :
  ∀ (m n : ℕ),
    (fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t =
      (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t
IH : ∀ (n : ℕ), ((fun x => Polynomial.eval x P)^[n + 1] t - t).sign = (Polynomial.eval t P - t).sign
k : ℕ
hk : k + 1 > 0
hk' : IsPeriodicPt (fun x => Polynomial.eval x P) (k + 1) t
H : ((fun x => Polynomial.eval x P)^[k + 1] t - t).sign = (Polynomial.eval t P - t).sign
⊢ IsPeriodicPt (fun x => Polynomial.eval x P) 2 t
Tactic:
rw [hk'.isFixedPt.eq, sub_self, Int.sign_zero, eq_comm, Int.sign_eq_zero_iff_zero,
  sub_eq_zero] at H
Proof state after:
case pos.intro.succ.intro
P : ℤ[X]
t : ℤ
C : Cycle ℤ := Cycle.map (fun x => Polynomial.eval x P - x) (periodicOrbit (fun x => Polynomial.eval x P) t)
HC : ∀ {n : ℕ}, (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t ∈ C
Hdvd : Cycle.Chain (fun x x_1 => x ∣ x_1) C
Habs :
  ∀ (m n : ℕ),
    ((fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t).natAbs =
      ((fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t).natAbs
HC' : Cycle.Chain (fun x x_1 => x = x_1) C
Heq :
  ∀ (m n : ℕ),
    (fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t =
      (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t
IH : ∀ (n : ℕ), ((fun x => Polynomial.eval x P)^[n + 1] t - t).sign = (Polynomial.eval t P - t).sign
k : ℕ
hk : k + 1 > 0
hk' : IsPeriodicPt (fun x => Polynomial.eval x P) (k + 1) t
H : Polynomial.eval t P = t
⊢ IsPeriodicPt (fun x => Polynomial.eval x P) 2 t
Theorem: Imo2006P5.Polynomial.isPeriodicPt_eval_two
Proof state before:
case pos.intro.succ.intro
P : ℤ[X]
t : ℤ
C : Cycle ℤ := Cycle.map (fun x => Polynomial.eval x P - x) (periodicOrbit (fun x => Polynomial.eval x P) t)
HC : ∀ {n : ℕ}, (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t ∈ C
Hdvd : Cycle.Chain (fun x x_1 => x ∣ x_1) C
Habs :
  ∀ (m n : ℕ),
    ((fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t).natAbs =
      ((fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t).natAbs
HC' : Cycle.Chain (fun x x_1 => x = x_1) C
Heq :
  ∀ (m n : ℕ),
    (fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t =
      (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t
IH : ∀ (n : ℕ), ((fun x => Polynomial.eval x P)^[n + 1] t - t).sign = (Polynomial.eval t P - t).sign
k : ℕ
hk : k + 1 > 0
hk' : IsPeriodicPt (fun x => Polynomial.eval x P) (k + 1) t
H : Polynomial.eval t P = t
⊢ IsPeriodicPt (fun x => Polynomial.eval x P) 2 t
Tactic:
simp [IsPeriodicPt, IsFixedPt, H]
Proof state after:
no goals
Theorem: Imo2006P5.Polynomial.isPeriodicPt_eval_two
Proof state before:
case neg
P : ℤ[X]
t : ℤ
ht : t ∈ periodicPts fun x => Polynomial.eval x P
C : Cycle ℤ := Cycle.map (fun x => Polynomial.eval x P - x) (periodicOrbit (fun x => Polynomial.eval x P) t)
HC : ∀ {n : ℕ}, (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t ∈ C
Hdvd : Cycle.Chain (fun x x_1 => x ∣ x_1) C
Habs :
  ∀ (m n : ℕ),
    ((fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t).natAbs =
      ((fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t).natAbs
HC' : ¬Cycle.Chain (fun x x_1 => x = x_1) C
⊢ IsPeriodicPt (fun x => Polynomial.eval x P) 2 t
Tactic:
rw [Cycle.chain_map, periodicOrbit_chain' _ ht] at HC'
Proof state after:
case neg
P : ℤ[X]
t : ℤ
ht : t ∈ periodicPts fun x => Polynomial.eval x P
C : Cycle ℤ := Cycle.map (fun x => Polynomial.eval x P - x) (periodicOrbit (fun x => Polynomial.eval x P) t)
HC : ∀ {n : ℕ}, (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t ∈ C
Hdvd : Cycle.Chain (fun x x_1 => x ∣ x_1) C
Habs :
  ∀ (m n : ℕ),
    ((fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t).natAbs =
      ((fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t).natAbs
HC' :
  ¬∀ (n : ℕ),
      Polynomial.eval ((fun x => Polynomial.eval x P)^[n] t) P - (fun x => Polynomial.eval x P)^[n] t =
        Polynomial.eval ((fun x => Polynomial.eval x P)^[n + 1] t) P - (fun x => Polynomial.eval x P)^[n + 1] t
⊢ IsPeriodicPt (fun x => Polynomial.eval x P) 2 t
Theorem: Imo2006P5.Polynomial.isPeriodicPt_eval_two
Proof state before:
case neg
P : ℤ[X]
t : ℤ
ht : t ∈ periodicPts fun x => Polynomial.eval x P
C : Cycle ℤ := Cycle.map (fun x => Polynomial.eval x P - x) (periodicOrbit (fun x => Polynomial.eval x P) t)
HC : ∀ {n : ℕ}, (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t ∈ C
Hdvd : Cycle.Chain (fun x x_1 => x ∣ x_1) C
Habs :
  ∀ (m n : ℕ),
    ((fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t).natAbs =
      ((fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t).natAbs
HC' :
  ¬∀ (n : ℕ),
      Polynomial.eval ((fun x => Polynomial.eval x P)^[n] t) P - (fun x => Polynomial.eval x P)^[n] t =
        Polynomial.eval ((fun x => Polynomial.eval x P)^[n + 1] t) P - (fun x => Polynomial.eval x P)^[n + 1] t
⊢ IsPeriodicPt (fun x => Polynomial.eval x P) 2 t
Tactic:
push_neg at HC'
Proof state after:
case neg
P : ℤ[X]
t : ℤ
ht : t ∈ periodicPts fun x => Polynomial.eval x P
C : Cycle ℤ := Cycle.map (fun x => Polynomial.eval x P - x) (periodicOrbit (fun x => Polynomial.eval x P) t)
HC : ∀ {n : ℕ}, (fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t ∈ C
Hdvd : Cycle.Chain (fun x x_1 => x ∣ x_1) C
Habs :
  ∀ (m n : ℕ),
    ((fun x => Polynomial.eval x P)^[m + 1] t - (fun x => Polynomial.eval x P)^[m] t).natAbs =
      ((fun x => Polynomial.eval x P)^[n + 1] t - (fun x => Polynomial.eval x P)^[n] t).natAbs
HC' :
  ∃ n,
    Polynomial.eval ((fun x => Polynomial.eval x P)^[n] t) P - (fun x => Polynomial.eval x P)^[n] t ≠
      Polynomial.eval ((fun x => Polynomial.eval x P)^[n + 1] t) P - (fun x => Polynomial.eval x P)^[n + 1] t
⊢ IsPeriodicPt (fun x => Polynomial.eval x P) 2 t