import Adam.Metadata import Std.Tactic.RCases import Mathlib.Tactic.LeftRight import Mathlib.Tactic.Contrapose import Mathlib.Tactic.Use import Mathlib.Tactic.Ring import Adam.ToBePorted Game "Adam" World "Contradiction" Level 2 Title "Es reicht!" Introduction " **Benedictus**: Ihr hättet natürlich auch erst das Hauptresultat und dann das Zwischenresultat beweisen können. Das könnt Ihr ja mal an dieser Aufgabe probieren, die ist ganz ähnlich. " -- Die Taktik `suffices` funktioniert genau gleich wie `have`, -- vertauscht aber die beiden Beweisblöcke: -- ``` -- suffices h : [Aussage] -- [Beweis des Goals (mithilfe von h)] -- [Beweis der Aussage h] -- ``` -- Auf Deutsch entspricht `suffices g : [Aussage]` dem Ausdruck -- \"Es genügt zu zeigen, dass `[Aussage]` wahr ist.\" -- Man kann `have` und `suffices` nach belieben vertauschen. Bevorzugt, wählt man es so, -- dass der erste Beweisblock der kürzere ist. Zum Beispiel wäre bei der vorigen Aufgabe -- `suffices` schöner gewesen: -- "Angenommen, man hat eine Implikation $A \\Rightarrow \\neg B$ und weiss, dass -- $A \\land B$ wahr ist. Zeige, dass dies zu einem Widerspruch führt." Statement (A B : Prop) (h : A → ¬ B) (k₁ : A) (k₂ : B) : False := by Hint "**Robo**: Ich weiss was er meint! Anstatt `have` kannst Du auch `suffices` verwenden. Das funktioniert genau gleich, außer, dass dann die beiden Beweisziele vertauscht sind. **Du**: Also nach `suffices g : ¬B` muss ich dann zuerst zeigen, wie man mit `g` den Beweis abschliesst, bevor ich `g` beweise? **Robo**: Genau!" suffices g : ¬ B Hint "**Robo**: Also hier beendest Du den Beweis unter der Annahme `{g}` sei wahr." contradiction Hint "**Robo**: Und hier beweist Du das Zwischenresultat." apply h assumption NewTactic «suffices» DisabledTactic «have» Conclusion "**Benedictus**: Genau so meinte ich das. Ob Ihr nun in Zukunft `have` und `suffices` verwendet, ist reine Geschmacksfrage. Hauptsache, Ihr wisst, wie Ihr entfernte Ziele in kleinen Schritte erreicht.