• Keine Ergebnisse gefunden

Theorembeweiserpraktikum Anwendungen in der Sprachtechnologie

N/A
N/A
Protected

Academic year: 2022

Aktie "Theorembeweiserpraktikum Anwendungen in der Sprachtechnologie"

Copied!
32
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

IPD Snelting, Lehrstuhl Programmierparadigmen

http://pp.info.uni-karlsruhe.de/lehre/SS2010/tba/

Daniel Wasserrab

Theorembeweiserpraktikum

Anwendungen in der Sprachtechnologie

(2)

Teil XI

Strukturierte Beweise mittels Isar

2 SS 2010 Daniel Wasserrab –Theorembeweiserpraktikum IPD Snelting, Lehrstuhl Programmierparadigmen

(3)

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

(4)

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

(5)

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

(6)

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

(7)

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

(8)

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

(9)

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

(10)

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

(11)

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

(12)

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 showthen showthus

from this havethen havehence

7 SS 2010 Daniel Wasserrab –Theorembeweiserpraktikum IPD Snelting, Lehrstuhl Programmierparadigmen

(13)

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 showthen showthus

from this havethen havehence

(14)

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

(15)

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

(16)

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

(17)

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!

(18)

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

(19)

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

(20)

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

(21)

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"

(22)

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

(23)

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

(24)

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

(25)

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

(26)

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

(27)

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

(28)

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

(29)

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)

(30)

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

(31)

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)

(32)

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

Referenzen

ÄHNLICHE DOKUMENTE

Induktionsprinzip: Um eine Eigenschaft für alle Elemente zu zeigen, genügt es sie für eine beliebige Menge zu zeigen, die die.. definierende

Ein Theorembeweiser beweist Aussagen ¨uber formale Strukturen durch Anwendung von Regeln.. Typen und Datentypen (nat ¨urliche Zahlen, Listen, Paare,. ) Mengen,

oftmals Fallunterscheidung nicht genug, brauchen Induktionshypothese f ¨ur Pr ¨adikate in der Pr ¨amisse einer Regel. daf ¨ur Induktionsregel Pr¨ adikatname.induct Beispiel

Ein Theorembeweiser beweist Aussagen über formale Strukturen durch Anwendung von Regeln.. Typen und Datentypen (natürliche Zahlen, Listen, Paare,. ) Mengen,

Syntax: Regeln für korrekte Anordnung von Sprachkonstrukten In Programmiersprachen meist durch Grammatik, vor allem in BNF (Backus-Naur-Form) gegeben Angegeben im

Das sollte man bei bewiesenen Lemmas eigentlich nicht brauchen (die kann man direkt „richtig“ formulieren), aber in Kombination mit OF oder of ist es oft der beste Weg die Regel

0 SS 2016 Joachim Breitner, Denis Lohner - Theorembeweiserpraktikum LEHRSTUHL PROGRAMMIERPARADIGMEN LEHRSTUHL

0 SS 2016 Joachim Breitner, Denis Lohner - Theorembeweiserpraktikum LEHRSTUHL PROGRAMMIERPARADIGMEN LEHRSTUHL