• Keine Ergebnisse gefunden

Rechner¨ubung zu Theorembeweiser und ihre Anwendungen

N/A
N/A
Protected

Academic year: 2022

Aktie "Rechner¨ubung zu Theorembeweiser und ihre Anwendungen"

Copied!
20
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Rechner¨ ubung zu Theorembeweiser und ihre Anwendungen

Prof. Dr.-Ing. Gregor Snelting Dipl.-Inf. Univ. Daniel Wasserrab

Lehrstuhl Programmierparadigmen IPD Snelting

Universit¨at Karlsruhe (TH)

IPD Snelting, Uni Karlsruhe (TH) Rechner¨ubung TBA Sommersemester 2009 1 / 27

(2)

Teil III

Fallunterscheidung und Simplifikation

(3)

Fallunterscheidung

In (klassischen) Beweisen Fallunterscheidung wichtiges Hilfsmittel In Isabelle: einfach durch apply der Methodecases P

(Pbeliebiges boolesches Pr¨adikat) teilt aktuelles Subgoal in 2 neue auf:

erstes mitP zus¨atzlich in den Annahmen zweites mit¬ Pin den Annahmen

IPD Snelting, Uni Karlsruhe (TH) Rechner¨ubung TBA Sommersemester 2009 20 / 27

(4)

Fallunterscheidung

In (klassischen) Beweisen Fallunterscheidung wichtiges Hilfsmittel In Isabelle: einfach durch apply der Methodecases P

(Pbeliebiges boolesches Pr¨adikat) teilt aktuelles Subgoal in 2 neue auf:

erstes mitP zus¨atzlich in den Annahmen zweites mit¬ Pin den Annahmen

(5)

Fallunterscheidung: Beispiel

aktuelles Subgoal: 1. [[B; C]] = A B ∨ ¬ A C so nicht l¨osbar!

jedoch nach apply (cases A)neue Subgoals:

1. [[B; C; A]] = A B ∨ ¬ A C 2. [[B; C; ¬ A]] = A B ∨ ¬ A C

jetzt einfach mit Introduktionsregeln f¨ur und zu l¨osen

IPD Snelting, Uni Karlsruhe (TH) Rechner¨ubung TBA Sommersemester 2009 21 / 27

(6)

Fallunterscheidung: Beispiel

aktuelles Subgoal: 1. [[B; C]] = A B ∨ ¬ A C so nicht l¨osbar!

jedoch nach apply (cases A)neue Subgoals:

1. [[B; C; A]] = A B ∨ ¬ A C 2. [[B; C; ¬ A]] = A B ∨ ¬ A C

jetzt einfach mit Introduktionsregeln f¨ur und zu l¨osen

(7)

Fallunterscheidung: Beispiel

aktuelles Subgoal: 1. [[B; C]] = A B ∨ ¬ A C so nicht l¨osbar!

jedoch nach apply (cases A)neue Subgoals:

1. [[B; C; A]] = A B ∨ ¬ A C 2. [[B; C; ¬ A]] = A B ∨ ¬ A C

jetzt einfach mit Introduktionsregeln f¨ur und zu l¨osen

IPD Snelting, Uni Karlsruhe (TH) Rechner¨ubung TBA Sommersemester 2009 21 / 27

(8)

Fallunterscheidung: Beispiel

aktuelles Subgoal: 1. [[B; C]] = A B ∨ ¬ A C so nicht l¨osbar!

jedoch nach apply (cases A)neue Subgoals:

1. [[B; C; A]] = A B ∨ ¬ A C 2. [[B; C; ¬ A]] = A B ∨ ¬ A C

jetzt einfach mit Introduktionsregeln f¨ur und zu l¨osen

(9)

Fallunterscheidung: Beispiel

aktuelles Subgoal: 1. [[B; C]] = A B ∨ ¬ A C so nicht l¨osbar!

jedoch nach apply (cases A)neue Subgoals:

1. [[B; C; A]] = A B ∨ ¬ A C 2. [[B; C; ¬ A]] = A B ∨ ¬ A C

jetzt einfach mit Introduktionsregeln f¨ur und zu l¨osen

IPD Snelting, Uni Karlsruhe (TH) Rechner¨ubung TBA Sommersemester 2009 21 / 27

(10)

Einschub: definition

Erm¨oglicht direkte Definition von nichtrekursiven Funktionen verbindet Deklaration mit Definition der Funktion

Beispiel: Funktion nand (= “not and”)

definition nand :: bool bool bool where "nand A B ≡ ¬ (A B)"

automatisch generierte Simplifikationsregel: nand_def (allgemein Funktionsname_def)

kann dem Simplifier ¨ubergeben werden

(11)

Einschub: definition

Erm¨oglicht direkte Definition von nichtrekursiven Funktionen verbindet Deklaration mit Definition der Funktion

Beispiel: Funktion nand (= “not and”) definition nand :: bool bool bool

where "nand A B ≡ ¬ (A B)"

automatisch generierte Simplifikationsregel: nand_def (allgemein Funktionsname_def)

kann dem Simplifier ¨ubergeben werden

IPD Snelting, Uni Karlsruhe (TH) Rechner¨ubung TBA Sommersemester 2009 22 / 27

(12)

Einschub: definition

Erm¨oglicht direkte Definition von nichtrekursiven Funktionen verbindet Deklaration mit Definition der Funktion

Beispiel: Funktion nand (= “not and”) definition nand :: bool bool bool

where "nand A B ≡ ¬ (A B)"

automatisch generierte Simplifikationsregel: nand_def (allgemein Funktionsname_def)

kann dem Simplifier ¨ubergeben werden

(13)

Einschub: definition

nand bin¨arer Operator =⇒ Infixoperator bietet sich an Syntaxdefinition in Isabelle durch Anh¨angen des Ausdrucks (infixl "./" n) an die Deklarationszeile, wobei

infixlf¨ur linksgebundenen Infixoperator steht, analog infixrf¨ur rechtsgebundene

./ ein beliebig w¨ahlbares Symbol f¨ur den Operator ist n Zahl, welche die Pr¨azedenz dieses Operators angibt Kann jetzt A ./ Bstatt nand A Bschreiben

IPD Snelting, Uni Karlsruhe (TH) Rechner¨ubung TBA Sommersemester 2009 23 / 27

(14)

Simplifikation

genauer: Termersetzung, weil Ausdruck nicht notwendigerweise einfacher Simplifikationsregeln: Gleichung

entsprechende Taktik: simp

besitzt Pool an Termersetzungsregeln

pr¨uft f¨ur jede solche Regel, ob Term mit linker Seite einer Gleichung unifizierbar

falls ja, ersetzen mit entsprechend unifizierter rechten Seite Beispiel: aktuelles Subgoal: C = if b then s1 else s2 simp wendet folgende Termersetzungsregel an:

if ?x then ?m else ?n = ((?x −→ ?m) ?x −→ ?n))

(15)

Simplifikation

genauer: Termersetzung, weil Ausdruck nicht notwendigerweise einfacher Simplifikationsregeln: Gleichung

entsprechende Taktik: simp

besitzt Pool an Termersetzungsregeln

pr¨uft f¨ur jede solche Regel, ob Term mit linker Seite einer Gleichung unifizierbar

falls ja, ersetzen mit entsprechend unifizierter rechten Seite Beispiel: aktuelles Subgoal: C = if b then s1 else s2 simp wendet folgende Termersetzungsregel an:

if ?x then ?m else ?n = ((?x −→ ?m) ?x −→ ?n)) Resultat: C = (b −→ s1) b −→ s2)

IPD Snelting, Uni Karlsruhe (TH) Rechner¨ubung TBA Sommersemester 2009 24 / 27

(16)

Simplifikation

Auch bedingte Ersetzungsregeln sind m¨oglich, also in der Form [[. . .]] = . . . = . . .

dazu: Pr¨amissen der Regel mit aktuellen Annahmen unifizierbar Simplifier modifizieren:

selbstgeschriebene Simplifikationslemmas zu Taktik hinzuf¨ugen:

apply(simp add:Regel1,Regel2, . . .) nur bestimmte Ersetzungsregeln verwenden:

apply(simp only:Regel1,Regel2, . . .)

Ersetzungsregeln aus dem Standardpool von simp entfernen:

(17)

Simplifikation

Auch bedingte Ersetzungsregeln sind m¨oglich, also in der Form [[. . .]] = . . . = . . .

dazu: Pr¨amissen der Regel mit aktuellen Annahmen unifizierbar Simplifier modifizieren:

selbstgeschriebene Simplifikationslemmas zu Taktik hinzuf¨ugen:

apply(simp add:Regel1,Regel2, . . .) nur bestimmte Ersetzungsregeln verwenden:

apply(simp only:Regel1,Regel2, . . .)

Ersetzungsregeln aus dem Standardpool von simp entfernen:

apply(simp del:Regel1,Regel2, . . .)

IPD Snelting, Uni Karlsruhe (TH) Rechner¨ubung TBA Sommersemester 2009 25 / 27

(18)

Simplifikation

Auch m¨oglich: Ersetzungsregeln in den Standardpool von simpeinf¨ugen Zwei Varianten:

Zusatz[simp]hinter Lemmanamen

Beispiel: lemma bla [simp]: "A = True = A B = B"

mittels declare [simp]

Beispiel: declare [simp]: foo bar

Analog: mittelsdeclare [simp del]Ersetzungsregeln aus Standardpool entfernen

Vorsicht!

Nur Regeln zu Standardpool hinzuf¨ugen, dessen rechte Seite einfacher als linke Seite!

(19)

Simplifikation

Auch m¨oglich: Ersetzungsregeln in den Standardpool von simpeinf¨ugen Zwei Varianten:

Zusatz[simp]hinter Lemmanamen

Beispiel: lemma bla [simp]: "A = True = A B = B"

mittels declare [simp]

Beispiel: declare [simp]: foo bar

Analog: mittelsdeclare [simp del]Ersetzungsregeln aus Standardpool entfernen

Vorsicht!

Nur Regeln zu Standardpool hinzuf¨ugen, dessen rechte Seite einfacher als linke Seite!

Sicherstellen, dass simpdurch neue Regeln nicht in Endlosschleifen h¨angenbleibt!

IPD Snelting, Uni Karlsruhe (TH) Rechner¨ubung TBA Sommersemester 2009 26 / 27

(20)

Arbeiten mit

apply

-Skripten

apply-Skripten verk¨urzen:

nach applymehrere Regelanwendungen bzw. Taktiken hintereinander Bsp: apply(simp,rule foo,auto)

regul¨are Ausdr¨ucke:

+hinter Regel bzw. Taktik wendet diese ein- oder mehrfach an Bsp:apply(assumption)+

?analog f¨ur null- oder einfache Anwendung Bsp:apply(assumption)?

|zwischen zwei regeln bzw. Taktiken wendet die erste an, bei Nichtgelingen zweite; Bsp:apply(assumption|arith) byersetzt letzte apply-Regelanwendung bzw. Taktik und done alle assumptionAnwendungen nachapply automatisch angewandt

Referenzen

ÄHNLICHE DOKUMENTE

Vertraulichkeit: vertrauliche Information (z.B. systeminterne Daten) darf nicht nach außen (z.B. Internet) gelangen Integrit¨ at: kritische Berechnungen d¨ urfen nicht von

Anweisungen: alle strukturierten Kontrollanweisungen (if, Schleifen, break, continue, return) keine unstrukturierten (goto, switch, longjmp) Variablen: globale und lokale auto

eliminiert die passende Pr¨ amisse und ersetzt Beweis der Konklusion der Regel durch Beweise der weiteren Pr¨ amissen der Regel. andere vorhandene Pr¨ amissen bleiben

meist nicht gewollt, da schlecht Aussagen dar¨ uber m¨ oglich Besser: entsprechende Variable gleich festlegen.. Methodik: rule_tac v1 =

nat¨ urliche Zahl (ungleich 0) ist Nachfolger einer nat¨ urlichen Zahl nichtleere Liste ist Liste mit zus¨ atzlichem Kopfelement.. nichtleere Menge ist Menge mit einem zus¨

Analog: Ganze Pr¨ amissen instantiieren ebenso eckige Klammer,. Schl¨ usselwort OF ,

was passiert jedoch, wenn ein “Teillemma” nur gezeigt werden kann, wenn Induktionshypothese bestimmte Variablen allquantifizieren muss. Kennen allgemein schon die L¨ osung:

Lemma besteht aus Pr¨ amissen und Konklusion, dann Liste der Pr¨ amissen nach Schl¨ usselwort assumes, evtl.. Lemma mit Pr¨ amissen