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/Function/L02_Let.lean

83 lines
2.4 KiB
Plaintext

import Adam.Metadata
2 years ago
import Mathlib
Game "Adam"
2 years ago
World "Function"
Level 2
2 years ago
Title "let"
2 years ago
Introduction
"
2 years ago
Ihr macht euch auf Richtung Bibliothek entlang kleiner Pfade zwischen verschiedenster Behausungen.
2 years ago
2 years ago
**Du**: Sag mal, ich weiss jetzt dass ich eine Funktion als `fun x ↦ x - 1` definieren kann,
aber wie kann ich der einen Namen geben?
2 years ago
2 years ago
**Robo**: Wenn jemand hier eine Funktion definiert, werden die dir
`def f (x : ) : := x - 1` oder `def f : := (fun x ↦ x - 1)` geben.
2 years ago
2 years ago
**Du**: Und das bedeutet beides das gleiche?
2 years ago
2 years ago
**Robo**: Praktisch, ja. Aber! Wenn du eine Funktion in einer Aufgabe benennen willst,
schreibst du `let f := fun (x : ) ↦ x - 1`!
2 years ago
2 years ago
**Du**: Und was ist der Unterschied?
2 years ago
2 years ago
**Robo**: Deines mit `let` ist für innerhalb von einem Beweis, das andere mit `def`
ist für ausserhalb von einem Beweis. Hier, ich geb dir mal eine Aufgabe:
2 years ago
```
2 years ago
def f (x : ) : := (x + 4)
2 years ago
```
2 years ago
und:
2 years ago
"
2 years ago
def f (x : ) : := (x + 4)
2 years ago
2 years ago
Statement "" (x : ) : ∃ (g : ), (g ∘ f) x = x + 1 := by
let g := fun (x : ) ↦ x - 3
use g
simp
2 years ago
unfold f
ring
NewTactic «let»
2 years ago
NewLemma Function.comp_apply
2 years ago
2 years ago
Hint (x : ) : ∃ g, (g ∘ f) x = x + 1 =>
"**Du**: Ist `g ∘ f` Komposition von Funktionen?
2 years ago
2 years ago
**Robo**: Richtig! Das schreibt man mit `\\comp`.
2 years ago
2 years ago
**Du** Und hier könnte ich also zuerst
`let g := fun (x : ) ↦ _` definieren, anstatt direkt
`use fun (x : ) ↦ _`?
2 years ago
2 years ago
**Robo**: Genau! Das ist zwar praktisch das gleiche, aber kann manchmal nützlich sein.
2 years ago
"
2 years ago
-- TODO: Make some hints work here
Hint (x : ) : ((fun (x : ) ↦ x - 3) ∘ f) x = x + 1 =>
"**Robo**: Manchmal must du nachhelfen und Funktionen mit `unfold f` öffnen, manchmal nicht.
Um erlich zu sein, sagt mein Programm nicht genau wann man das machen muss…"
-- TODO : Make this work
Hint (x : ) (g := (fun (x : ) ↦ x - 3)) : (g ∘ f) x = x + 1 =>
"**Robo**: `(g ∘ f) x` ist per Definition `g (f x)`, aber mit
`rw [Function.comp_apply]` kann man das explizit umschreiben, aber `simp` kennt das
Lemma auch."
Hint (x : ) : f x - 3 = x + 1 =>
"**Robo**: Manchmal must du nachhelfen und Definitionen mit `unfold f` öffnen, mamchmal klappts
ohne.
Um erlich zu sein, sagt mein Programm nicht genau wann man das machen muss…"
-- TODO: Block simp-Lemma
Conclusion "**Du**: Dann verstehst du etwas Mathe?
**Robo**: Ich hatte ja keine Ahnung ob die generierte Aufgabe beweisbar ist…
Und damit erreicht ihr den Hügel mit der Bibliothek."