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 TestGame.Metadata
import Std.Tactic.RCases
import Mathlib.Tactic.LeftRight
--set_option tactic.hygienic false
--set_option autoImplicit false
Game "TestGame"
World "Logic"
Level 15
Title "Oder - Bonus"
Introduction
"
Wenn man hingegen ein ODER - `(h : A ∨ B)` - in den Annahmen hat, kann man dieses
ähnlich wie beim UND mit `rcases h` aufteilen.
ABER! Beim UND `(h : A ∧ B)` hat man dann zwei neue Annahmen erhalten, und diese hat man mit
`rcases h with ⟨hA, hB⟩` benannt. Beim ODER `(h : A ∨ B)` kriegt man stattdessen zwei **Goals**
wo man annimmt, dass entweder die linke oder rechte Seite von `h` war ist.
Diese Annahme benennt man dann mit `rcases h with hA | hB`.
"
Statement
""
(A B C D : Prop) (h : (A ∧ B) ∨ (D ∨ C)) : (A ∧ B) ∨ (C ∨ D) := by
rcases h with ⟨ha, hb⟩ | (h | h)
left
constructor
assumption
assumption
right
right
assumption
right
left
assumption
Message (A : Prop) (B : Prop) (C : Prop) (D : Prop) (h : (A ∧ B) ∨ (D ∨ C)) : (A ∧ B) ∨ (C ∨ D) =>
"Man kann hier entweder in mehren Schritten `rcases` anwenden:
```
rcases h with h₁ | h₂
rcases h₁ with ⟨hA, hB⟩
[...]
rcases h₂ with h | h
```
oder man kann dies in einem Schritt verschachteln:
```
rcases h with ⟨ha, hb⟩ | (h | h)
```
"
Tactics left right assumption constructor rcases apply