import TestGame.Metadata import Std.Tactic.RCases import Mathlib.Tactic.LeftRight set_option tactic.hygienic false Game "TestGame" World "Proposition" Level 13 Title "Zusammenfassung" Introduction " Damit bist du am Ende der ersten Lektion angekommen. Hier ein Überblick über alle Begriffe, Notationen, und Taktiken, die in diesem Kapitel eingeführt wurden. Danach folgt eine Abschlussaufgabe. ## 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]` | Im weiteren haben wir gesehen, wie wir in Lean Aufgaben formulieren : ``` example [Annahmen] : [Aussage] := by [Beweis] ``` ## Taktiken Für die Beweise haben wir verschiedene Taktiken kennengelernt. | | 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. | Zum Schluss gibt es noch eine kleine Übungsaufgabe: Benutze alle vier Methoden mit UND und ODER umzugehen um folgende Aussage zu beweisen. | (Übersicht) | Und (`∧`) | Oder (`∨`) | |-------------|:-------------------------|:------------------------| | Annahme | `rcases h with ⟨h₁, h₂⟩` | `rcases h with h \\| h` | | Goal | `constructor` | `left`/`right` | " -- Note: The other direction would need arguing by cases. Statement "Angenommen $A \\lor (B \\land C)$ ist wahr, zeige dass $(A \\lor B) \\land (A \\lor C)$ wahr ist." (A B C : Prop) (h : A ∨ (B ∧ C)) : (A ∨ B) ∧ (A ∨ C) := by constructor rcases h with h | h left assumption rcases h with ⟨h₁, h₂⟩ right assumption rcases h with h | h left assumption rcases h with ⟨h₁, h₂⟩ right assumption Hint (A : Prop) (B : Prop) (C : Prop) (h : B ∧ C) : (A ∨ B) ∧ (A ∨ C) => "Das `∧` in der Annahme kann mit `rcases h with ⟨h₁, h₂⟩` zerlegt werden." Hint (A : Prop) (B : Prop) (C : Prop) : (A ∨ B) ∧ (A ∨ C) => "Das `∧` im Goal kann mit `constructor` zerlegt werden." Hint (A : Prop) (B : Prop) (C : Prop) (h : A ∨ (B ∧ C)) : (A ∨ B) ∧ (A ∨ C) => "Das `∨` in der Annahme kann mit `rcases h with h | h` zerlegt werden." Hint (A : Prop) (B : Prop) (C : Prop) (h : A ∨ (B ∧ C)) : (A ∨ B) => "Das `∨` in der Annahme kann mit `rcases h with h | h` zerlegt werden." Hint (A : Prop) (B : Prop) (C : Prop) (h : A ∨ (B ∧ C)) : (A ∨ C) => "Das `∨` in der Annahme kann mit `rcases h with h | h` zerlegt werden." Hint (A : Prop) (B : Prop) (C : Prop) (h : B ∧ C) : (A ∨ B) => "Das `∧` in der Annahme kann mit `rcases h with ⟨h₁, h₂⟩` zerlegt werden." Hint (A : Prop) (B : Prop) (C : Prop) (h : B ∧ C) : (A ∨ C) => "Das `∧` in der Annahme kann mit `rcases h with ⟨h₁, h₂⟩` zerlegt werden." -- TODO: Message nur Anhand der Annahmen? Hint (A : Prop) (B : Prop) : A ∨ B => "`left` oder `right`?" Tactics left right assumption constructor rcases rfl contradiction trivial