import TestGame.Metadata

import TestGame.Options.BigOperators
import Mathlib.Algebra.BigOperators.Fin
import Mathlib.Tactic.Ring

Game "TestGame"
World "Sum"
Level 4

Title "Summe aller ungeraden Zahlen"

Introduction
"
Hier nochmals eine Übung zur Induktion.
"
set_option tactic.hygienic false

open BigOperators

Statement
"Zeige folgende Gleichung zur Summe aller ungeraden Zahlen:

$\\sum_{i = 0}^n (2n + 1) = n ^ 2$."
    (n : ℕ) : (∑ i : Fin n, (2 * (i : ℕ) + 1)) = n ^ 2 := by
  induction' n with n hn
  simp
  rw [Fin.sum_univ_castSucc]
  simp
  rw [hn]
  rw [Nat.succ_eq_add_one]
  ring

HiddenHint (n : ℕ) : (∑ i : Fin n, (2 * (i : ℕ) + 1)) = n ^ 2 =>
"
Fange wieder mit `induction n` an.
"

HiddenHint (n : ℕ) : ∑ i : Fin Nat.zero, ((2 : ℕ) * i + 1) = Nat.zero ^ 2 =>
"
Den Induktionsanfang kannst du wieder mit `simp` beweisen.
"

HiddenHint (n : ℕ) : ∑ i : Fin (Nat.succ n), ((2 : ℕ) * i + 1) = Nat.succ n ^ 2 =>
"
Den Induktionsschritt startest du mit `rw [Fin.sum_univ_castSucc]`.
"

HiddenHint (n : ℕ) (hn : ∑ i : Fin n, (2 * (i : ℕ) + 1) = n ^ 2) :
  ∑ x : Fin n, (2 * (x : ℕ) + 1) + (2 * n + 1) = Nat.succ n ^ 2 =>
"
Hier kommt die Induktionshypothese ins Spiel.
"

HiddenHint (n : ℕ) : n ^ 2 + (2 * n + 1) = Nat.succ n ^ 2 =>
"
Mit `rw [Fin.sum_univ_castSucc]` und `ring` kannst du hier abschliessen.
"
