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

79 lines
2.3 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 Adam.Options.MathlibPart
Game "Adam"
World "Function"
Level 2
Title "let"
Introduction
"
Ihr macht euch auf Richtung Bibliothek entlang kleiner Pfade zwischen verschiedenster Behausungen.
**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?
**Robo**: Wenn jemand hier eine Funktion definiert, werden die dir
`def f (x : ) : := x - 1` oder `def f : := (fun x ↦ x - 1)` geben.
**Du**: Und das bedeutet beides das gleiche?
**Robo**: Praktisch, ja. Aber! Wenn du eine Funktion in einer Aufgabe benennen willst,
schreibst du `let f := fun (x : ) ↦ x - 1`!
**Du**: Und was ist der Unterschied?
**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:
```
def f (x : ) : := (x + 4)
```
und:
"
open Function
def f (x : ) : := (x + 4)
Statement "" (x : ) : ∃ (g : ), (g ∘ f) x = x + 1 := by
Hint
"**Du**: Ist `g ∘ f` Komposition von Funktionen?
**Robo**: Richtig! Das schreibt man mit `\\comp`.
**Du** Und hier könnte ich also zuerst
`let g := fun (x : ) ↦ _` definieren, anstatt direkt
`use fun (x : ) ↦ _`?
**Robo**: Genau! Das ist zwar praktisch das gleiche, aber kann manchmal nützlich sein."
Branch
use fun (x : ) ↦ x - 3
Hint "**Robo**: `((fun (x : ) ↦ x - 3) ∘ f) x` ist per Definition `(fun (x : ) ↦ x - 3) (f x)`, aber mit
`rw [comp_apply]` kann man das explizit umschreiben, aber `simp` kennt das
Lemma auch."
let g := fun (x : ) ↦ x - 3
Hint "**Robo**: gute Wahl! Jetzt kannst du diese mit `use g` benützen."
use g
Hint "**Robo**: `({g} ∘ f) x` ist per Definition `{g} (f x)`, aber mit
`rw [comp_apply]` kann man das explizit umschreiben, aber `simp` kennt das
Lemma auch."
simp
Hint "**Robo**: Wie schon gehabt hat `ring` Schwierigkeiten, Definitionen zu öffnen.
Du kannst mit `unfold f` oder `rw [f]` nachhelfen."
unfold f
ring
NewTactic «let»
NewLemma Function.comp_apply
LemmaTab "Function"
Conclusion "**Du**: Dann verstehst du etwas Mathe?
**Robo**: Ich hatte ja keine Ahnung ob die generierte Aufgabe beweisbar ist… aber offenbar
hatte ich Glück.
Und damit erreicht ihr den Hügel mit der Bibliothek."