Theory SchnelleinstiegHOL
theory SchnelleinstiegHOL
imports Main BeispielTac
begin
section‹Schnelleinstieg Isabelle/HOL›
subsection‹Beweise›
text‹Die besondere Fähigkeit im Beweisassistent Isabelle/HOL liegt darin,
maschinengeprüfte Beweise zu machen.
Beispiel:›
lemma ‹3 = 2+1› by simp
text‹In der PDFversion wird der eigentliche Beweis ausgelassen.
Aber keine Sorge, der Computer hat den Beweis überprüft.
Würde der Beweis nicht gelten, würde das PDF garnicht compilieren.
Ich wurde schon für meine furchtbaren Beweise zitiert.
Ist also ganz gut, dass wir nur Ergebnisse im PDF sehen und der eigentliche Beweis ausgelassen ist.
Am besten kann man Beweise sowieso im Isabelle Editor anschauen und nicht im PDF.
Wir werden die meisten Hilfsfakten als @{command lemma} kennzeichnen.
Wichtige Fakten werden wir @{command theorem} nennen.
Zusätzlich führen wir noch das @{command beispiel} Kommando ein,
um Lemmata von Beispielen zu unterscheiden.
Folgende drei Aussagen sind alle equivalent und maschinengeprüft korrekt:
›
lemma ‹3 = 2+1› by simp
theorem ‹3 = 2+1› by simp
beispiel ‹3 = 2+1› by simp
text‹Freitext, so wie der aktuelle Satz, sind nicht (oder nur minimal) maschinell geprüft.›
subsection‹Typen›
text‹Typen werden per ▩‹::› annotiert.
Beispielsweise sagt ⬚‹3::nat›, dass \<^term>‹3::nat› eine natürliche Zahl (Typ \<^typ>‹nat›) ist.›
text‹Einige vordefinierte Typen in Isabelle/HOL:
▪ Natürliche Zahlen. Typ \<^typ>‹nat›.
Beispielsweise \<^term_type>‹0 :: nat›, \<^term_type>‹1 :: nat›,
\<^term_type>‹2 :: nat›, \<^term_type>‹3 :: nat›.
Auf natürlichen Zahlen ist die Nachfolgerfunktion \<^const>‹Suc› definiert.
Beispielsweise ist @{lemma ‹Suc 2 = 3› by simp}.
▪ Ganze Zahlen. Typ \<^typ>‹int›.
Beispielsweise \<^term_type>‹0 :: int›, \<^term_type>‹1 :: int›,
\<^term_type>‹-1 :: int›, \<^term_type>‹-42 :: int›.
▪ Listen. Typ \<^typ>‹'α list›.
Beispielsweise \<^term_type>‹[] :: nat list›, \<^term_type>‹[] :: int list›,
\<^term_type>‹[0, 1, 2, 3] :: nat list›, \<^term_type>‹[0, 1, -1, -42] :: int list›.
▪ Strings. Typ \<^typ>‹string›.
Beispielsweise \<^term_type>‹''Hello, World'' :: string›.
›
subsection‹Mehr Typen›
text‹Jeder Typ der mit einem einfachen Anführungszeichen anfängt ist ein polymorpher Typ.
Beispiel: \<^typ>‹'a› oder \<^typ>‹'α›.
So ein Typ ist praktisch ein generischer Typ,
welcher durch jeden anderen Typen instanziiert werden kann.
Beispielsweise steht \<^typ>‹'nat› für einen beliebigen Typen,
während \<^typ>‹nat› der konkrete Typ der natürlichen Zahlen ist.
Wenn wir nun ⬚‹3::'a› schreiben handelt es sich nur um das generische Numeral 3.
Das ist so generisch, dass z.B. noch nicht einmal die Plusoperation darauf definiert ist.
Im Gegensatz dazu ist ⬚‹3::nat› die natürliche Zahl 3,
mit allen wohlbekannten Rechenoperationen.
Im Beweis obigen ⬚‹lemma‹3 = 2+1›› hat Isabelle die Typen automatisch inferiert.
›
subsection‹Noch mehr Typen›
text‹Eigene Typen können unter Anderem mit dem Keyword @{command datatype} eingeführt werden.
Im folgenden Beispiel führen wir einen @{command datatype} für Farben ein.›