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

77 lines
1.7 KiB
Plaintext

2 years ago
import TestGame.Metadata
import Mathlib
Game "TestGame"
World "Function"
Level 2
Title ""
Introduction
"
Ausserhalb eines Beweises kann man Funktionen mit `def`
(anstatt `lemma`/`example`/`theorem`) definieren:
```
def f (x : ) : := 1 / (1 + x^2)
def f : := fun x ↦ 1 / (1 + x^2)
```
(die beiden Varianten sind äquivalent.)
2 years ago
Um eine anonyme Funktion `fun x ↦ 1 / (1 + x^2)` **innerhalb** eines Beweis einem Namen
2 years ago
zuzuordnen, benützt man `let`:
```
let f : := fun (n : ) ↦ n ^ 2
```
2 years ago
`def` und `let` funktionieren also fast gleich wie `lemma`/`example`/`theorem` und `have` mit
einem wichtigen Unterschied:
2 years ago
```
have f : := fun (n : ) ↦ n ^ 2
2 years ago
let f₂ : := fun (n : ) ↦ n ^ 2
2 years ago
```
2 years ago
`have` vergisst sofort den \"Beweis\", das heisst, Lean weiss dann nur, dass es eine
Funktion `(f : )` gibt, aber nicht, wie diese definiert ist. `let` hingegen speichert
die Definition der Funktion.
Manchmal muss man Definitionen (von einem `def` oder `let` Statement) mit `unfold` einsetzen.
2 years ago
"
def f (x : ) : := (x + 1) ^ 2
Statement
"
Given the function
```
def f (x : ) : := (x + 1) ^ 2
```
show that $f(x) = x^2 + 2x + 1$.
"
: ∀ x, f x = x ^ 2 + 2 * x + 1 := by
intro x
unfold f
ring
2 years ago
NewTactics «let»
OnlyTactics «let» intro unfold ring
HiddenHint : ∀ x, f x = x ^ 2 + 2 * x + 1 =>
"Fang zuerst wie immer mit `intro x` an."
2 years ago
Hint (x : ) : f x = x ^ 2 + 2 * x + 1 =>
2 years ago
"
Definitionen muss man anundzu manuell einsetzen um den Taktiken zu helfen.
Das macht man mit `unfold f` (oder alternativ mit `rw [f]`).
"
HiddenHint (x : ) : f x = x ^ 2 + 2 * x + 1 =>
"
Nachdem die Definition von `f` eingesetzt ist, übernimmt `ring` den Rest"