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

Game "Adam"
World "Implication"
Level 12

Title "Lemmas"

Introduction
"
Der Arbeitskollegin der Mechanikerin, der die ganze Zeit gespannt zugehört hat, dreht sich zu
euch.

Er ist offensichtlich interessiert and existierenden Resultaten zu sein, aber offenbar
kann er nicht viel mit `apply` anfangen.

Er hat aber folgendes Resultat bereit:

```
lemma not_not (A : Prop) : ¬¬A ↔ A
```

und stellt euch folgende Frage:
"

Statement (A B C : Prop) : (A ∧ (¬¬C)) ∨ (¬¬B) ∧ C ↔ (A ∧ C) ∨ B ∧ (¬¬C) := by
  Hint "**Robo**: Ein Lemma, das wie `not_not` ein `↔` oder `=` im Statement hat, kann
  auch mit `rw [not_not]` verwendet werden."
  rw [not_not]
  Hint "**Du**: Häh, wieso hat das jetzt 2 von 3 der `¬¬` umgeschrieben?

  **Robo**: `rw` schreibt nur das erste um, das es findet, also `¬¬C`. Aber weil dieses
  mehrmals vorkommt, werden die alle ersetzt…

  **Du**: Ah, und `¬¬B` ist was anderes, also brauch ich das Lemma nochmals."
  rw [not_not]

Conclusion
"
**Du**: Ah und wir sind fertig…?

**Robo**: Ja, `rw` versucht immer anschliessend `rfl` aufzurufen, und das hat hier
funktioniert.
"

DisabledTactic tauto apply
NewLemma not_not
LemmaTab "Logic"
