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/Proposition/L12_Or.lean

113 lines
5.1 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 Std.Tactic.RCases
import Mathlib.Tactic.LeftRight
set_option tactic.hygienic false
--set_option autoImplicit false
Game "Adam"
World "Proposition"
Level 13
Title "Oder"
Introduction
"
Der nächste bitte …
"
Statement ""
(A B : Prop) (h : (A ∧ B) A) : A := by
Hint "**Robo** Schau mal, wenn du mit dem Finger eine Annahme berührst, zeigt es dir,
wie die Klammern gesetzt sind. Irre…
**Du** Ah ich sehe, also `({A} ∧ {B}) {A}`!
**Du** Ich glaube den ganzen Zircus hier langsam nicht mehr:
Zuerst ein \"Und\" im Ziel, dann \"Und\" in der Annahme, dann \"Oder\" im Ziel und jetzt
\"Oder\" in der Annahme, die haben sich doch abgesprochen!
**Robo** Lass ihnen doch ihren Spaß.
Wir sind ja gleich hier fertig, und können zu einem interessanteren Planeten weiterfliegen.
**Du** Also, wieder `rcases …`?
**Robo** Ja, aber diesmal nicht `rcases {h} with ⟨h₁, h₂⟩`, sondern `rcases {h} with h | h`."
rcases h with h | h
Hint "**Robo**
Jetzt musst Du Dein Ziel zweimal beweisen:
Einmal unter Annahme der linken Seite `{A} {B}`,
und einmal unter Annahme der rechten Seite `{A}`.
Hier haben nehmen wir an, die linke Seite
sei wahr."
Hint (hidden := true) " **Robo** Wie man mit einem Und in den Annahmen umgeht,
weißt Du doch schon:
`rcases h with ⟨h₁, h₂⟩`. Zur Erinnerung: Für die Klammern schreibst Du `\\<>`."
rcases h with ⟨h₁, h₂⟩
Hint "**Robo** Jetzt musst Du Dein Ziel zweimal beweisen:
Einmal unter Annahme der linken Seite `{A}`,
und einmal unter Annahme der rechten Seite `{A} {B}`. Hier haben nehmen wir an, die linke Seite
sei wahr."
assumption
assumption
Conclusion
"**Du** Ok, das scheint ihn zufriedenzustellen. Nur noch eine Seele…
Kannst Du mir vorher noch einmal kurz alles Leansch zusammenfassen,
das Du mir bis hierher beigebracht hast?
Robo strahlt überglücklich. Noch *nie* warst Du so auf ihn angewiesen.
**Robo** Na klar, schau her!
## Notationen / Begriffe
| | Beschreibung |
|:--------------|:-------------------------------------------------------------------------|
| *Goal* | Was aktuell zu beweisen ist. |
| *Annahme* | Objekte & Resultate, die man zur Verfügung hat. |
| *Taktik* | Befehl im Beweis. Entspricht einem Beweisschritt. |
| `` | Typ aller natürlichen Zahlen. |
| `0, 1, 2, …` | Explizite natürliche Zahlen. |
| `=` | Gleichheit. |
| `≠` | Ungleichheit. Abkürzung für `¬(·=·)`. |
| `Prop` | Typ aller logischen Aussagen. |
| `True` | Die logische Aussage `(True : Prop)` ist bedingungslos wahr. |
| `False` | Die logische Aussage `(False : Prop)` ist bedingungslos falsch. |
| `¬` | Logische Negierung. |
| `∧` | Logisch UND. |
| `` | Logisch ODER. |
| `(n : )` | Eine natürliche Zahl. |
| `(A : Prop)` | Eine logische Aussage. |
| `(ha : A)` | Ein Beweis, dass die logische Aussage `(A : Prop)` wahr ist. |
| `(h : A ∧ B)` | Eine Annahme, die den Namen `h` bekommen hat. |
| `⟨·,·⟩` | Schreibweise für Struktur mit mehreren Feldern (kommt später im Detail). |
| `h.1, h.2, …` | Die einzelnen Felder der Stuktur. Auch `h.[Name des Feldes]` |
## Taktiken
Die Worte, die Du aktiv gebrauchen musst, heißen zusammengefasst `Taktiken`. Hier sind alle Taktiken, die wir auf diesem Planeten gebraucht haben:
| | Taktik | Beispiel |
|:---|:--------------------------|:--------------------------------------------------|
| 1 | `rfl` | Beweist `A = A`. |
| 2 | `assumption` | Sucht das Goal in den Annahmen. |
| 3 | `contradiction` | Sucht einen Widerspruch. |
| 4 | `trivial` | Kombiniert die obigen drei Taktiken (und mehr). |
| 5 | `constructor` | Teilt ein UND im Goal auf. |
| 6 | `left`/`right` | Beweist eine Seite eines ODER im Goal. |
| 7ᵃ | `rcases h with ⟨h₁, h₂⟩` | Teilt ein UND in den Annahmen auf. |
| 7ᵇ | `rcases h with h \\| h` | Teilt ein ODER in den Annahmen in zwei Fälle auf. |
**Du** Woher weißt Du das eigentlich alles?
**Robo** Keine Ahnung. War, glaube ich, vorinstalliert.
"
NewTactic assumption rcases
DisabledTactic tauto