You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.6 KiB
Plaintext
49 lines
1.6 KiB
Plaintext
import Adam.Metadata
|
|
import Std.Tactic.RCases
|
|
import Mathlib.Tactic.LeftRight
|
|
import Mathlib.Tactic.Contrapose
|
|
import Mathlib.Tactic.Use
|
|
import Mathlib.Tactic.Ring
|
|
import Mathlib
|
|
|
|
import Adam.ToBePorted
|
|
|
|
Game "Adam"
|
|
World "Contradiction"
|
|
Level 4
|
|
|
|
Title "Kontraposition"
|
|
|
|
Introduction
|
|
"
|
|
**Benedictus**: Ich habe noch eine schöne Frage zu ungeraden Quadraten für Euch. Aber vorher beweist Ihr besser noch diese Äquivalenz hier. Ich gaube, die hat sogar bei Euch einen Namen: *Kontrapositionsäquivalenz*, oder so etwas. Auf Leansch nennen wir die Äuqivalenz einfach `not_imp_not`. Ist doch viel einleuchtender, oder?
|
|
"
|
|
|
|
Statement not_imp_not (A B : Prop) : A → B ↔ (¬ B → ¬ A) := by
|
|
Hint "**Du**: Ja, das habe ich tatsächlich schon einmal gesehen.
|
|
|
|
**Robo**: Ja, klar hast Du das schon einmal gesehen. Das benutzen Mathematiker doch ständig. Wenn ihnen zu $A ⇒ B$ nichts einfällt, zeigen sie stattdessen $¬B ⇒ ¬A$. Ich würde das ja statt *Kontraposition* oder `not_imp_not` eher *von_hinten_durch_die_Brust_ins_Auge* nennen. Aber gut, ich will mich nicht einmisschen.
|
|
"
|
|
Hint (hidden := true) "**Robo**: Fang doch mal mit `constructor` an."
|
|
constructor
|
|
intro h b
|
|
by_contra a
|
|
Hint "**Robo**: Ich würde wieder mit `suffices g : B` einen Widerspruch herbeiführen."
|
|
suffices b : B
|
|
contradiction
|
|
apply h
|
|
assumption
|
|
intro h a
|
|
Hint "**Robo**: Hier würde ich ebenfalls einen Widerspruchsbeweis anfangen."
|
|
by_contra b
|
|
Hint (hidden := true) "**Robo**: `suffices g : ¬ A` sieht nach einer guten Option aus."
|
|
suffices g : ¬ A
|
|
contradiction
|
|
apply h
|
|
assumption
|
|
|
|
DisabledTactic rw
|
|
DisabledLemma not_not
|
|
|
|
Conclusion ""
|