You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lean4game/server/adam/Adam/Levels/Sum/L03_ArithSum.lean

90 lines
2.9 KiB
Plaintext

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import Adam.Metadata
import Mathlib.Algebra.BigOperators.Fin
import Mathlib.Tactic.Ring
import Adam.ToBePorted
set_option tactic.hygienic false
Game "Adam"
World "Sum"
Level 3
Title "Arithmetische Summe"
Introduction
"
**Du**: Wie werden solche Meisterwerke eigentlich gebaut?
Da zeigt eure Begleitung auf eine kleine Steinplatte neben dem Eingang,
auf der eien Beschreibung gekritzelt ist.
**Robo**: Das ist wohl der bekannte arithmetische Turm von Indu, über den hab ich schon
einmal Daten verarbeitet. Und die antwort auf deine Frage: Vermutlich ein Stein nach
dem anderen.
"
open BigOperators
Statement arithmetic_sum
"$2 \\cdot \\sum_{i = 0}^n i = n \\cdot (n + 1)$."
(n : ) : 2 * (∑ i : Fin (n + 1), ↑i) = n * (n + 1) := by
Hint "**Du**: Klar, die werden ja nicht oben anfangen mit bauen. Sag mal,
wie zeige ich denn die arithmetische Summe, die hier gekritzelt steht?
Ich würde gerne Induktion über $n$ anwenden.
**Robo**: Ja dann ist's einfach `induction n`, ist doch logisch!"
induction n
Hint "**Du**: Zuerst den Induktionsanfang…
**Robo**: Diesen kannst du oft mit `simp` abkürzen!"
simp
Hint "**Robo**: Jetzt im Induktionsschritt: Bei Induktion über endlichen Summen willst du
immer mit `rw [Fin.sum_univ_castSucc]` anfangen" -- :
-- $$\\sum_\{i=0}^n a_i = \\sum_{i=0}^\{n-1} a_i + a_n$$"
rw [Fin.sum_univ_castSucc]
-- TODO: Bug. Dieser Hint wird nicht angezeigt.
Hint "**Du**: Oh das sieht jetz aber kompliziert aus…
**Robo**: Da musst du etwas drüber hinweg lesen. Am besten machst du kurz `simp`,
dann sieht's schon wieder besser aus."
simp
Hint "**Du**: Was bedeutet eigentlich der kleine Pfeil `↑`?
**Robo**: Das ist eine *Coersion*. Sowas wie wenn man eine natürliche Zahl als Integer anschaut,
also die natürliche Abbildung ``. Oder hier, wenn ein Element `x : Fin n` stattdessen als
Element in `(↑x : )` angeschaut wird.
**Robo**: Übrigens, um die Induktionshypothese anzuwenden brauchst du zuerst das Lemma
`mul_add`."
rw [mul_add]
Hint "**Du**: Und wie wende ich jetzt die Induktionshypothese an?
**Robo mit `rw` wie jede andere Annahme auch."
rw [n_ih]
Hint "**Robo**: Jetzt musst du noch kurz `rw [Nat.succ_eq_add_one]` anwenden.
**Du**: Aber wieso?
**Robo**: Naja, `ring` ist jetzt auch noch nicht so stark, und erkennt nicht dass `n.succ`
und `n + 1` das gleiche sind.
**Du**: Aber das könnte man doch ändern, oder?
**Robo**: Vielleicht wenn wir einmal einem Techniker begegnen, der mir ein Update
einspielen kann…"
Branch
ring_nf
Hint "**Robo**: Wie gesagt, brauch doch `rw [Nat.succ_eq_add_one]` als Fix für meine
kleinen Maken."
rw [Nat.succ_eq_add_one]
ring
NewTactic induction
NewLemma Fin.sum_univ_castSucc Nat.succ_eq_add_one mul_add add_mul Nat.zero_eq
Conclusion "Du schaust dich um und bewunderst das Tal in dem hunderte, wenn nicht tausende,
Steintürme in allen Formen und Höhen stehen."