IPD Snelting, Lehrstuhl Programmierparadigmen
http://pp.info.uni-karlsruhe.de/lehre/SS2010/tba/
Daniel Wasserrab
Theorembeweiserpraktikum
Anwendungen in der Sprachtechnologie
Teil XI
Strukturierte Beweise mittels Isar
2 SS 2010 Daniel Wasserrab –Theorembeweiserpraktikum IPD Snelting, Lehrstuhl Programmierparadigmen
Was ist Isar?
apply-Skripten f ¨ur externen Leser v ¨ollig unverst ¨andlich
L ¨osung:Isar! Vater des Gedanken: Mizar
bessere Strukturierung durch Herleitung von “Zwischenaussagen” aussagekr ¨aftigere Schl ¨usselw ¨orter ( ¨ahnlich mathematischer Notation) (gut geschriebener) Beweis verst ¨andlich ohne aktuellen Beweiszustand einfachere Anpassung bei ¨Anderungen
Was ist Isar?
apply-Skripten f ¨ur externen Leser v ¨ollig unverst ¨andlich L ¨osung:Isar!
Vater des Gedanken: Mizar
bessere Strukturierung durch Herleitung von “Zwischenaussagen” aussagekr ¨aftigere Schl ¨usselw ¨orter ( ¨ahnlich mathematischer Notation) (gut geschriebener) Beweis verst ¨andlich ohne aktuellen Beweiszustand einfachere Anpassung bei ¨Anderungen
3 SS 2010 Daniel Wasserrab –Theorembeweiserpraktikum IPD Snelting, Lehrstuhl Programmierparadigmen
Was ist Isar?
apply-Skripten f ¨ur externen Leser v ¨ollig unverst ¨andlich
L ¨osung:Isar!
Vater des Gedanken: Mizar
bessere Strukturierung durch Herleitung von “Zwischenaussagen”
aussagekr ¨aftigere Schl ¨usselw ¨orter ( ¨ahnlich mathematischer Notation) (gut geschriebener) Beweis verst ¨andlich ohne aktuellen Beweiszustand einfachere Anpassung bei ¨Anderungen
Aufbau eines einfachen Beispiels
lemma "A −→ A"
proof(rule impI) assume "A"
from ‘A‘ show "A" by(rule a) qed
allgemeiner Aufbau:
Lemmadefinition wie gewohnt
dannproof, gefolgt von Beweismethode
Pr ¨amissen des aktuellen subgoals mitassumedargestellt (k ¨onnen auch Namen erhalten)
Ziel des aktuellen subgoals mittelsshowausgedr ¨uckt, danach folgt Beweis der Aussage
qedals “schliessende Klammer” f ¨ur jedesproof
4 SS 2010 Daniel Wasserrab –Theorembeweiserpraktikum IPD Snelting, Lehrstuhl Programmierparadigmen
Aufbau eines einfachen Beispiels
lemma "A −→ A"
proof(rule impI) assume "A"
from ‘A‘ show "A" by(rule a) qed
allgemeiner Aufbau:
Lemmadefinition wie gewohnt
dannproof, gefolgt von Beweismethode
Pr ¨amissen des aktuellen subgoals mitassumedargestellt (k ¨onnen auch Namen erhalten)
Ziel des aktuellen subgoals mittelsshowausgedr ¨uckt, danach folgt Beweis der Aussage
qedals “schliessende Klammer” f ¨ur jedesproof
Wie beweise ich in Isar?
Ziel in Isar: f ¨ur jeden Beweis nurdie daf ¨ur n ¨otigen Pr ¨amissenverwenden daf ¨ur: Zwischenaussagen beweisen, bilden Pr ¨amissen f ¨ur n ¨achste
Zwischenaussage oder das ganze Beweisziel
Zwischenaussage nach Schl ¨usselworthave, danach evtl. Name, danach Aussage, gefolgt von Beweis
dieser Beweis mittelsapply-Skript oder Isar-proof
Pr ¨amissen eines Beweises einer Zwischenaussage bzw. des Beweisziels aus Annahmen (Aussagen nachassume)
aus bereits bewiesenen Zwischenaussagen (Aussagen nachhave) werden vor der Beweisaussage nach Schl ¨usselwortfromaufgesammelt mittels Name oder Aussage in schr ¨agen Hochkommata ` `
diese beiden Zitationsarten k ¨onnen beliebig gemischt werden
5 SS 2010 Daniel Wasserrab –Theorembeweiserpraktikum IPD Snelting, Lehrstuhl Programmierparadigmen
Wie beweise ich in Isar?
Ziel in Isar: f ¨ur jeden Beweis nurdie daf ¨ur n ¨otigen Pr ¨amissenverwenden daf ¨ur: Zwischenaussagen beweisen, bilden Pr ¨amissen f ¨ur n ¨achste
Zwischenaussage oder das ganze Beweisziel
Zwischenaussage nach Schl ¨usselworthave, danach evtl. Name, danach Aussage, gefolgt von Beweis
dieser Beweis mittelsapply-Skript oder Isar-proof
Pr ¨amissen eines Beweises einer Zwischenaussage bzw. des Beweisziels aus Annahmen (Aussagen nachassume)
aus bereits bewiesenen Zwischenaussagen (Aussagen nachhave) werden vor der Beweisaussage nach Schl ¨usselwortfromaufgesammelt mittels Name oder Aussage in schr ¨agen Hochkommata ` `
diese beiden Zitationsarten k ¨onnen beliebig gemischt werden
Wie beweise ich in Isar?
Beispiel:
lemma "A ∧ B −→ B ∧ A"
proof(rule impI) assume ab: "A ∧ B"
from ab have a:"A" by -(erule conjE) from `A ∧ B` have "B" by -(erule conjE) from `B` a show "B ∧ A" by(rule conjI) qed
hier werden Namen und direkte Zitationen fr ¨ohlich gemischt, in sauberem Beweis besser
direkt zitieren bei kurzen Aussagen, Namen f ¨ur l ¨angere Aussagen
direkt zitieren ist lesbarer, Namen anpassbarer bei ¨Anderungen
6 SS 2010 Daniel Wasserrab –Theorembeweiserpraktikum IPD Snelting, Lehrstuhl Programmierparadigmen
Wie beweise ich in Isar?
Beispiel:
lemma "A ∧ B −→ B ∧ A"
proof(rule impI) assume ab: "A ∧ B"
from ab have a:"A" by -(erule conjE) from `A ∧ B` have "B" by -(erule conjE) from `B` a show "B ∧ A" by(rule conjI) qed
hier werden Namen und direkte Zitationen fr ¨ohlich gemischt, in sauberem Beweis besser
direkt zitieren bei kurzen Aussagen, Namen f ¨ur l ¨angere Aussagen
direkt zitieren ist lesbarer, Namen anpassbarer bei ¨Anderungen
Strukturieren des Beweises
aktuell gezeigte oder angenommene Aussage mittelsthisverf ¨ugbar:
lemma "A −→ A"
proof(rule impI) assume "A"
from this show "A" by assumption qed
also Beweis m ¨oglichst so strukturieren, dass jede Aussage auf der vorherigen aufbaut
Syntaktische Abk ¨urzungen:
from this ≡ then(nur diese eine Annahme!) from a b this ≡ with a b(mehrere Annahmen) from this show ≡ then show ≡ thus
from this have ≡ then have ≡ hence
7 SS 2010 Daniel Wasserrab –Theorembeweiserpraktikum IPD Snelting, Lehrstuhl Programmierparadigmen
Strukturieren des Beweises
aktuell gezeigte oder angenommene Aussage mittelsthisverf ¨ugbar:
lemma "A −→ A"
proof(rule impI) assume "A"
from this show "A" by assumption qed
also Beweis m ¨oglichst so strukturieren, dass jede Aussage auf der vorherigen aufbaut
Syntaktische Abk ¨urzungen:
from this ≡ then(nur diese eine Annahme!) from a b this ≡ with a b(mehrere Annahmen) from this show ≡ then show ≡ thus
from this have ≡ then have ≡ hence
proof
ohne Regel
wenn nachproofkeine Methode spezifiziert, wird (falls m ¨oglich) sinnvolle erste (Introduktions- oder Eliminations-) Regel angewandt
kann zu unl ¨osbaren subgoals f ¨uhren, z.B. bei Disjunktion in Konklusion
Beispiel:
lemma "[[A ∨ B; A −→ Q]] =⇒ (B −→ Q) −→ Q" proof — verwendet implizit(rule impI) assume "A ∨ B" and "A −→ Q" and "B −→ Q" from `A ∨ B` show "Q"
proof — verwendet implizit(erule disjE) assume "A"
from `A` `A −→ Q` show ?thesis by simp next
assume "B"
from `B` `B −→ Q` show ?thesis by simp qed
qed
mit?thesiswird aktuelles Ziel abgek ¨urzt, hierQ
8 SS 2010 Daniel Wasserrab –Theorembeweiserpraktikum IPD Snelting, Lehrstuhl Programmierparadigmen
proof
ohne Regel
wenn nachproofkeine Methode spezifiziert, wird (falls m ¨oglich) sinnvolle erste (Introduktions- oder Eliminations-) Regel angewandt
kann zu unl ¨osbaren subgoals f ¨uhren, z.B. bei Disjunktion in Konklusion Beispiel:
lemma "[[A ∨ B; A −→ Q]] =⇒ (B −→ Q) −→ Q"
proof — verwendet implizit(rule impI) assume "A ∨ B" and "A −→ Q" and "B −→ Q"
from `A ∨ B` show "Q"
proof — verwendet implizit(erule disjE) assume "A"
from `A` `A −→ Q` show ?thesis by simp next
assume "B"
from `B` `B −→ Q` show ?thesis by simp qed
qed
mit?thesiswird aktuelles Ziel abgek ¨urzt, hierQ
Methoden f ¨ ur proof
proofentweder explizit ¨ubergebene Introduktions- oder Eliminationsregel oder implizit automatisch gew ¨ahlte (wenn Beweismethode weggelassen)
weitere M ¨oglichkeiten:
keine Beweismethode passend oder Automatismus nicht gewollt: proof -: Beweisziel unver ¨andert
Fallunterscheidung durchproof(cases P)
strukturelle Induktion ¨uber DatentypDdurchproof(induct D) Regelinduktion (f ¨urfunundinductive) analog
proof(induct rule:bla.induct) bitte keinproof simpoderproof auto!
9 SS 2010 Daniel Wasserrab –Theorembeweiserpraktikum IPD Snelting, Lehrstuhl Programmierparadigmen
Methoden f ¨ ur proof
proofentweder explizit ¨ubergebene Introduktions- oder Eliminationsregel oder implizit automatisch gew ¨ahlte (wenn Beweismethode weggelassen) weitere M ¨oglichkeiten:
keine Beweismethode passend oder Automatismus nicht gewollt:
proof -: Beweisziel unver ¨andert
Fallunterscheidung durchproof(cases P)
strukturelle Induktion ¨uber DatentypDdurchproof(induct D) Regelinduktion (f ¨urfunundinductive) analog
proof(induct rule:bla.induct) bitte keinproof simpoderproof auto!
Methoden f ¨ ur proof
Fallunterscheidung und andere Methoden erzeugen mehrere subgoals wenn erstes bewiesen, ¨Ubergang zum n ¨achsten mittelsnext(stattqed)
lemma "(A −→ B) ∧ (¬ A −→ B) −→ B" proof
assume "(A −→ B) ∧ (¬ A −→ B)"
hence "A −→ B" and "¬ A −→ B" by -(erule conjE|assumption)+ show "B"
proof(cases A) assume "A"
with `A −→ B` show ?thesis by(rule mp) next
assume "¬ A"
with `¬ A −→ B` show ?thesis by(rule mp) qed
qed
10 SS 2010 Daniel Wasserrab –Theorembeweiserpraktikum IPD Snelting, Lehrstuhl Programmierparadigmen
Methoden f ¨ ur proof
Fallunterscheidung und andere Methoden erzeugen mehrere subgoals wenn erstes bewiesen, ¨Ubergang zum n ¨achsten mittelsnext(stattqed) lemma "(A −→ B) ∧ (¬ A −→ B) −→ B"
proof
assume "(A −→ B) ∧ (¬ A −→ B)"
hence "A −→ B" and "¬ A −→ B" by -(erule conjE|assumption)+
show "B"
proof(cases A) assume "A"
with `A −→ B` show ?thesis by(rule mp) next
assume "¬ A"
with `¬ A −→ B` show ?thesis by(rule mp) qed
qed
Lemma mit Pr ¨amissen und Konklusion
Lemma besteht aus Pr ¨amissen und Konklusion, dann Liste der Pr ¨amissen nach Schl ¨usselwortassumes, evtl. mit Namen und mitandgetrennt
Konklusion nachshows
Lemmaname kann entweder wie bisher vor allenassumes angegeben werden oder direkt vorshows
Pr ¨amissen k ¨onnen dann im Beweisskript zitiert werden
so wird auslemma bla: "[[P; Q]] =⇒ R" lemma assumes "P" and "Q" shows bla:"R"
11 SS 2010 Daniel Wasserrab –Theorembeweiserpraktikum IPD Snelting, Lehrstuhl Programmierparadigmen
Lemma mit Pr ¨amissen und Konklusion
Lemma besteht aus Pr ¨amissen und Konklusion, dann Liste der Pr ¨amissen nach Schl ¨usselwortassumes, evtl. mit Namen und mitandgetrennt
Konklusion nachshows
Lemmaname kann entweder wie bisher vor allenassumes angegeben werden oder direkt vorshows
Pr ¨amissen k ¨onnen dann im Beweisskript zitiert werden so wird auslemma bla: "[[P; Q]] =⇒ R"
lemma assumes "P" and "Q" shows bla:"R"
Lemma mit Pr ¨amissen und Konklusion
Vorsicht!Induktionsregeln o. ¨a. ben ¨otigen eine oder mehrere Pr ¨amissen, um die Regel anwenden zu k ¨onnen
in dieser Schreibform: angeben, welche Pr ¨amissen f ¨ur Regel n ¨otig sind Syntax: vorproofhinter Schl ¨usselwortusingNamen der ben ¨otigten Pr ¨amissen
Beispiel:
lemma assumes rev:"rev xs = ys" shows "rev ys = xs"
using rev
proof(induct xs)
12 SS 2010 Daniel Wasserrab –Theorembeweiserpraktikum IPD Snelting, Lehrstuhl Programmierparadigmen
Lemma mit Pr ¨amissen und Konklusion
Vorsicht!Induktionsregeln o. ¨a. ben ¨otigen eine oder mehrere Pr ¨amissen, um die Regel anwenden zu k ¨onnen
in dieser Schreibform: angeben, welche Pr ¨amissen f ¨ur Regel n ¨otig sind Syntax: vorproofhinter Schl ¨usselwortusingNamen der ben ¨otigten Pr ¨amissen
Beispiel:
lemma assumes rev:"rev xs = ys" shows "rev ys = xs"
using rev
proof(induct xs)
liefert unbeweisbare subgoals, da nur ¨uberxsin Konklusion induziert wird
Lemma mit Pr ¨amissen und Konklusion
Vorsicht!Induktionsregeln o. ¨a. ben ¨otigen eine oder mehrere Pr ¨amissen, um die Regel anwenden zu k ¨onnen
in dieser Schreibform: angeben, welche Pr ¨amissen f ¨ur Regel n ¨otig sind Syntax: vorproofhinter Schl ¨usselwortusingNamen der ben ¨otigten Pr ¨amissen
Beispiel:
lemma assumes rev:"rev xs = ys" shows "rev ys = xs"
using rev proof(induct xs)
Induktion ¨uberxsin Pr ¨amisse und Konklusion, damit subgoals beweisbar
12 SS 2010 Daniel Wasserrab –Theorembeweiserpraktikum IPD Snelting, Lehrstuhl Programmierparadigmen
Allquantoren in zu zeigenden Aussagen
Wie gehe ich mit Parametern um?
Beispiel:
lemma assumes "¬(∃x. ¬P x)" shows "∀x. P x"
proof
nach Anwendung vonproof(implizitallI) subgoal:Vx. P x dochshow "Vx. P x"funktioniert nicht!
Parameter m ¨ussen zu Beginn des Beweises “gefixt” werden: Va b c. Pwird zufix a b cundshow P
Unser Beispiel:
lemma assumes "¬(∃x. ¬P x)" shows "∀x. P x" proof
fix x
show "P x" . . . qed
Allquantoren in zu zeigenden Aussagen
Wie gehe ich mit Parametern um?
Beispiel:
lemma assumes "¬(∃x. ¬P x)" shows "∀x. P x"
proof
nach Anwendung vonproof(implizitallI) subgoal:Vx. P x dochshow "Vx. P x"funktioniert nicht!
Parameter m ¨ussen zu Beginn des Beweises “gefixt” werden:
Va b c. Pwird zufix a b cundshow P
Unser Beispiel:
lemma assumes "¬(∃x. ¬P x)" shows "∀x. P x" proof
fix x
show "P x" . . . qed
13 SS 2010 Daniel Wasserrab –Theorembeweiserpraktikum IPD Snelting, Lehrstuhl Programmierparadigmen
Allquantoren in zu zeigenden Aussagen
Wie gehe ich mit Parametern um?
Beispiel:
lemma assumes "¬(∃x. ¬P x)" shows "∀x. P x"
proof
nach Anwendung vonproof(implizitallI) subgoal:Vx. P x dochshow "Vx. P x"funktioniert nicht!
Parameter m ¨ussen zu Beginn des Beweises “gefixt” werden:
Va b c. Pwird zufix a b cundshow P Unser Beispiel:
lemma assumes "¬(∃x. ¬P x)" shows "∀x. P x"
proof fix x
show "P x" . . . qed
Repr ¨asentanten
Um aus Existenzquantoren Repr ¨asentanten zu erhalten,obtain Syntax:obtainRepr ¨asentantwhereAussage Beweis
Beispiel:
lemma "∃x. P x =⇒ ¬ (∀x. ¬ P x)"
proof -
assume ex: "∃x. P x"
from ex obtain z where "P z" by blast . . .
Repr ¨asentantenname kann beliebig gew ¨ahlt sein (nicht vorhandene Variable!)
Aussage nachwherekann beliebigen Namen erhalten
auch aus Allquantorobtainm ¨oglich (da Typen in Isabelle immer nichtleer)
14 SS 2010 Daniel Wasserrab –Theorembeweiserpraktikum IPD Snelting, Lehrstuhl Programmierparadigmen
Repr ¨asentanten
Um aus Existenzquantoren Repr ¨asentanten zu erhalten,obtain Syntax:obtainRepr ¨asentantwhereAussage Beweis
Beispiel:
lemma "∃x. P x =⇒ ¬ (∀x. ¬ P x)"
proof -
assume ex: "∃x. P x"
from ex obtain z where "P z" by blast . . .
Repr ¨asentantenname kann beliebig gew ¨ahlt sein (nicht vorhandene Variable!)
Aussage nachwherekann beliebigen Namen erhalten
auch aus Allquantorobtainm ¨oglich (da Typen in Isabelle immer nichtleer)
obtain-Beweise
Was genau passiert bei denobtain-Beweisen?
Isabelle baut aus Zeileobtain x where "P x"
Beweisziel(V
x. P x =⇒ thesis) =⇒ thesis(thesisbeliebige Aussage)
Also (mittels geeigneter Annahmen) linke Seite der
"P x =⇒ thesis"–Metaimplikation zeigen f ¨ur beliebigex TrotzdemKeine Panik!
Wenn nachwhereexakt Aussage einer Existenzaussage, Beweis einfach mittelblast
auch sonst meist Beweis mittelsblast,autooderfastsimp manchmal evtl. noch Fallunterscheidung n ¨otig
(z.B. Variable ist Tupel, Bestimmen der Tupeleintr ¨age)
15 SS 2010 Daniel Wasserrab –Theorembeweiserpraktikum IPD Snelting, Lehrstuhl Programmierparadigmen
obtain-Beweise
Was genau passiert bei denobtain-Beweisen?
Isabelle baut aus Zeileobtain x where "P x"
Beweisziel(V
x. P x =⇒ thesis) =⇒ thesis(thesisbeliebige Aussage) Also (mittels geeigneter Annahmen) linke Seite der
"P x =⇒ thesis"–Metaimplikation zeigen f ¨ur beliebigex
TrotzdemKeine Panik!
Wenn nachwhereexakt Aussage einer Existenzaussage, Beweis einfach mittelblast
auch sonst meist Beweis mittelsblast,autooderfastsimp manchmal evtl. noch Fallunterscheidung n ¨otig
(z.B. Variable ist Tupel, Bestimmen der Tupeleintr ¨age)
obtain-Beweise
Was genau passiert bei denobtain-Beweisen?
Isabelle baut aus Zeileobtain x where "P x"
Beweisziel(V
x. P x =⇒ thesis) =⇒ thesis(thesisbeliebige Aussage) Also (mittels geeigneter Annahmen) linke Seite der
"P x =⇒ thesis"–Metaimplikation zeigen f ¨ur beliebigex TrotzdemKeine Panik!
Wenn nachwhereexakt Aussage einer Existenzaussage, Beweis einfach mittelblast
auch sonst meist Beweis mittelsblast,autooderfastsimp manchmal evtl. noch Fallunterscheidung n ¨otig
(z.B. Variable ist Tupel, Bestimmen der Tupeleintr ¨age)
15 SS 2010 Daniel Wasserrab –Theorembeweiserpraktikum IPD Snelting, Lehrstuhl Programmierparadigmen