import Adam.Metadata
import Std.Tactic.RCases
import Mathlib.Tactic.Cases

Game "Adam"
World "Implication"
Level 9

Title "Genau dann wenn"

Introduction
"
**Operationsleiter**:  Ah, die nächste Seite ist auch von diesem Kollegen. Aber da ist noch eine Notiz bei.  Wir hatten hierfür schon einmal einen Beweis, aber den mochte er nicht.  Er wollte einen Beweis, der weder `rw` noch `apply` verwendet!! 

Er holt tief Luft und seuft.  

**Operationsleiter**:  Ich glaube, der stellt sich immer viel dümmer, als er ist.  Aber meint Ihr, Ihr schafft das?
"

Statement (A B : Prop) : (A ↔ B) → (A → B) := by
  Hint "**Du**: Hmm, mindestens mit der Implikation kann ich anfangen."
  Hint (hidden := true) "**Robo**: Genau, das war `intro`."
  intro h
  Hint "**Du**: Also, ich kenne `rw [h]` und `apply h.mp`, aber das wollten wir ja diesmal vermeiden.

  **Robo**: Was Du machen könntest, ist, mit `rcases h with ⟨mp, mpr⟩` die Annahme in zwei
  Teile aufteilen."
  Branch
    intro a
    Hint "**Robo**: Hier müsstest Du jetzt `rw [←h]` oder `apply h.mp` benutzen.
    Geh lieber einen Schritt zurück, sodass das Goal `A → B` ist."
  rcases h with ⟨mp, mpr⟩
  Hint (hidden := true) "**Du**: Ah, und jetzt ist das Beweisziel in den Annahmen."
  assumption

Conclusion
"
**Operationsleiter**: Perfekt, das sollte reichen!
"
OnlyTactic intro rcases assumption
DisabledTactic rw apply tauto

-- -- TODO: The new `cases` works differntly. There is also `cases'`
-- example (A B : Prop) : (A ↔ B) → (A → B) := by
--   intro h
--   cases h with
--   | intro a b =>
--     assumption

-- example (A B : Prop) : (A ↔ B) → (A → B) := by
--   intro h
--   cases' h with a b
--   assumption
