|
|
import TestGame.Metadata
|
|
|
import Std.Tactic.RCases
|
|
|
import Mathlib.Tactic.LeftRight
|
|
|
|
|
|
set_option tactic.hygienic false
|
|
|
|
|
|
Game "TestGame"
|
|
|
World "Proposition"
|
|
|
Level 13
|
|
|
|
|
|
Title "Und/Oder"
|
|
|
|
|
|
Introduction
|
|
|
"
|
|
|
Übung macht den Meister: Benutze alle vier Methoden mit UND und ODER
|
|
|
umzugehen um folgende Aussage zu beweisen.
|
|
|
|
|
|
| | 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
|
|
|
|
|
|
Message (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."
|
|
|
|
|
|
Message (A : Prop) (B : Prop) (C : Prop) : (A ∨ B) ∧ (A ∨ C) =>
|
|
|
"Das `∧` im Goal kann mit `constructor` zerlegt werden."
|
|
|
|
|
|
Message (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."
|
|
|
|
|
|
Message (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."
|
|
|
|
|
|
Message (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."
|
|
|
|
|
|
|
|
|
Message (A : Prop) (B : Prop) (C : Prop) (h : B ∧ C) : (A ∨ B) =>
|
|
|
"Das `∧` in der Annahme kann mit `rcases h with ⟨h₁, h₂⟩` zerlegt werden."
|
|
|
|
|
|
Message (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
|