• Keine Ergebnisse gefunden

Theorembeweiserpraktikum Anwendungen in der Sprachtechnologie

N/A
N/A
Protected

Academic year: 2022

Aktie "Theorembeweiserpraktikum Anwendungen in der Sprachtechnologie"

Copied!
42
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

KIT

LEHRSTUHL PROGRAMMIERPARADIGMEN

Theorembeweiserpraktikum

Anwendungen in der Sprachtechnologie

(2)

KIT

Teil IV

Quantoren in Isabelle/HOL

(3)

Quantoren in Isabelle/HOL

KIT

Die üblichen zwei Quantoren der Logik:

Existenzquantor: ∃ (geschrieben\<exists>, Kürzel?), Syntax:∃x. P x Allquantor: ∀ (geschrieben\<forall>, Kürzel!), Syntax:∀x. P x

Gültigkeitsbereich der gebundenen Variablen: bis zum nächsten ; bzw.=⇒

Beispiele

x. P x =⇒ Q x xin Konklusion nicht gebunden durch Allquantor

P y =⇒ ∃y. P y yin Prämisse nicht gebunden durch Existenzquantor

x. P x =⇒ ∃x. Q x =⇒ R

Zwei verschiedenexin den Annahmen

gleichbedeutend mit∀y. P y =⇒ ∃z. Q z =⇒ R (gebundene Namen sind Schall und Rauch)

x. P x −→ Q x gleichesxfürPundQ

(4)

Quantoren in Isabelle/HOL

KIT

Die üblichen zwei Quantoren der Logik:

Existenzquantor: ∃ (geschrieben\<exists>, Kürzel?), Syntax:∃x. P x Allquantor: ∀ (geschrieben\<forall>, Kürzel!), Syntax:∀x. P x Gültigkeitsbereich der gebundenen Variablen:

bis zum nächsten ; bzw.=⇒

Beispiele

x. P x =⇒ Q x xin Konklusion nicht gebunden durch Allquantor

P y =⇒ ∃y. P y yin Prämisse nicht gebunden durch Existenzquantor

x. P x =⇒ ∃x. Q x =⇒ R

Zwei verschiedenexin den Annahmen

gleichbedeutend mit∀y. P y =⇒ ∃z. Q z =⇒ R (gebundene Namen sind Schall und Rauch)

x. P x −→ Q x gleichesxfürPundQ

(5)

Quantoren in Isabelle/HOL

KIT

Die üblichen zwei Quantoren der Logik:

Existenzquantor: ∃ (geschrieben\<exists>, Kürzel?), Syntax:∃x. P x Allquantor: ∀ (geschrieben\<forall>, Kürzel!), Syntax:∀x. P x Gültigkeitsbereich der gebundenen Variablen:

bis zum nächsten ; bzw.=⇒ Beispiele

x. P x =⇒ Q x xin Konklusion nicht gebunden durch Allquantor

P y =⇒ ∃y. P y yin Prämisse nicht gebunden durch Existenzquantor

x. P x =⇒ ∃x. Q x =⇒ R

Zwei verschiedenexin den Annahmen

gleichbedeutend mit∀y. P y =⇒ ∃z. Q z =⇒ R (gebundene Namen sind Schall und Rauch)

x. P x −→ Q x gleichesxfürPundQ

(6)

Quantoren in Isabelle/HOL

KIT

Die üblichen zwei Quantoren der Logik:

Existenzquantor: ∃ (geschrieben\<exists>, Kürzel?), Syntax:∃x. P x Allquantor: ∀ (geschrieben\<forall>, Kürzel!), Syntax:∀x. P x Gültigkeitsbereich der gebundenen Variablen:

bis zum nächsten ; bzw.=⇒ Beispiele

x. P x =⇒ Q x xin Konklusion nicht gebunden durch Allquantor P y =⇒ ∃y. P y yin Prämisse nicht gebunden durch Existenzquantor

x. P x =⇒ ∃x. Q x =⇒ R

Zwei verschiedenexin den Annahmen

gleichbedeutend mit∀y. P y =⇒ ∃z. Q z =⇒ R (gebundene Namen sind Schall und Rauch)

x. P x −→ Q x gleichesxfürPundQ

(7)

Quantoren in Isabelle/HOL

KIT

Die üblichen zwei Quantoren der Logik:

Existenzquantor: ∃ (geschrieben\<exists>, Kürzel?), Syntax:∃x. P x Allquantor: ∀ (geschrieben\<forall>, Kürzel!), Syntax:∀x. P x Gültigkeitsbereich der gebundenen Variablen:

bis zum nächsten ; bzw.=⇒ Beispiele

x. P x =⇒ Q x xin Konklusion nicht gebunden durch Allquantor P y =⇒ ∃y. P y yin Prämisse nicht gebunden durch Existenzquantor

x. P x =⇒ ∃x. Q x =⇒ R

x. P x −→ Q x gleichesxfürPundQ

(8)

Quantoren in Isabelle/HOL

KIT

Die üblichen zwei Quantoren der Logik:

Existenzquantor: ∃ (geschrieben\<exists>, Kürzel?), Syntax:∃x. P x Allquantor: ∀ (geschrieben\<forall>, Kürzel!), Syntax:∀x. P x Gültigkeitsbereich der gebundenen Variablen:

bis zum nächsten ; bzw.=⇒ Beispiele

x. P x =⇒ Q x xin Konklusion nicht gebunden durch Allquantor P y =⇒ ∃y. P y yin Prämisse nicht gebunden durch Existenzquantor

x. P x =⇒ ∃x. Q x =⇒ R

Zwei verschiedenexin den Annahmen

gleichbedeutend mit∀y. P y =⇒ ∃z. Q z =⇒ R (gebundene Namen sind Schall und Rauch)

(9)

Wie sagt man es Isabelle...?

KIT

Argumentation mit Quantoren erfordert Aussagen überbeliebigeWerte Nur: Wie weiß Isabelle, dass ein Wertbeliebigist?

Lösung: Meta-Logik Syntax: Vx. . . . =⇒ . . .

VheisstMeta-Allquantor, Variablen dahinterParameter Gültigkeitsbereich der Parameter: ganzes Teilziel

Beispiel: Vx y.y. P y −→ Q z y =⇒ Q x y =⇒ ∃x. Q x y entsprichtVx y.y1. P y1 −→ Q z y1 =⇒ Q x y =⇒ ∃x1. Q x1 y Auch dieMeta-Implikation=⇒ist Teil der Meta-Logik

∀ und−→entsprechen nichtVund=⇒, die ersten beiden nur in HOL!

(10)

Wie sagt man es Isabelle...?

KIT

Argumentation mit Quantoren erfordert Aussagen überbeliebigeWerte Nur: Wie weiß Isabelle, dass ein Wertbeliebigist?

Lösung: Meta-Logik Syntax: Vx. . . . =⇒ . . .

VheisstMeta-Allquantor, Variablen dahinterParameter Gültigkeitsbereich der Parameter: ganzes Teilziel

Beispiel: Vx y.y. P y −→ Q z y =⇒ Q x y =⇒ ∃x. Q x y entsprichtVx y.y1. P y1 −→ Q z y1 =⇒ Q x y =⇒ ∃x1. Q x1 y

Auch dieMeta-Implikation=⇒ist Teil der Meta-Logik

∀ und−→entsprechen nichtVund=⇒, die ersten beiden nur in HOL!

(11)

Wie sagt man es Isabelle...?

KIT

Argumentation mit Quantoren erfordert Aussagen überbeliebigeWerte Nur: Wie weiß Isabelle, dass ein Wertbeliebigist?

Lösung: Meta-Logik Syntax: Vx. . . . =⇒ . . .

VheisstMeta-Allquantor, Variablen dahinterParameter Gültigkeitsbereich der Parameter: ganzes Teilziel

Beispiel: Vx y.y. P y −→ Q z y =⇒ Q x y =⇒ ∃x. Q x y entsprichtVx y.y1. P y1 −→ Q z y1 =⇒ Q x y =⇒ ∃x1. Q x1 y Auch dieMeta-Implikation=⇒ist Teil der Meta-Logik

∀ und−→entsprechen nichtVund=⇒, die ersten beiden nur in HOL!

(12)

Wie sagt man es Isabelle...?

KIT

Argumentation mit Quantoren erfordert Aussagen überbeliebigeWerte Nur: Wie weiß Isabelle, dass ein Wertbeliebigist?

Lösung: Meta-Logik Syntax: Vx. . . . =⇒ . . .

VheisstMeta-Allquantor, Variablen dahinterParameter Gültigkeitsbereich der Parameter: ganzes Teilziel

Beispiel: Vx y.y. P y −→ Q z y =⇒ Q x y =⇒ ∃x. Q x y entsprichtVx y.y1. P y1 −→ Q z y1 =⇒ Q x y =⇒ ∃x1. Q x1 y Auch dieMeta-Implikation=⇒ist Teil der Meta-Logik

∀ und−→entsprechen nichtVund=⇒, die ersten beiden nur in HOL!

(13)

Regeln

KIT

Jeder Quantor hat Introduktions- und Eliminationsregel:

allI: (Vx. P x) =⇒ ∀x. P x

Eine Aussage gilt für beliebigex(Meta-Ebene), also gilt sie auch für alle (HOL-Ebene)

allE:x. P x =⇒ (P ?x =⇒ R) =⇒ R

Eine Aussage gilt für allex, also folgt die Konklusion, wenn ich sie unter Verwendung der Aussage für einen (selbst wählbaren) Term zeigen kann

exI: P ?x =⇒ ∃x. P x

Eine Aussage gilt für einen Term?x, also gibt es einx, wofür sie gilt exE:x. P x =⇒ (Vx. P x =⇒ Q) =⇒ Q

Eine Aussage gilt für einx, also folgt die Konklusion, wenn ich sie unter Verwendung der Aussage für einen beliebigen, nicht weiter bestimmten Term zeigen kann

(14)

Regeln

KIT

Jeder Quantor hat Introduktions- und Eliminationsregel:

allI: (Vx. P x) =⇒ ∀x. P x

Eine Aussage gilt für beliebigex(Meta-Ebene), also gilt sie auch für alle (HOL-Ebene)

allE:x. P x =⇒ (P ?x =⇒ R) =⇒ R

Eine Aussage gilt für allex, also folgt die Konklusion, wenn ich sie unter Verwendung der Aussage für einen (selbst wählbaren) Term zeigen kann

exI: P ?x =⇒ ∃x. P x

Eine Aussage gilt für einen Term?x, also gibt es einx, wofür sie gilt exE:x. P x =⇒ (Vx. P x =⇒ Q) =⇒ Q

Eine Aussage gilt für einx, also folgt die Konklusion, wenn ich sie unter Verwendung der Aussage für einen beliebigen, nicht weiter bestimmten Term zeigen kann

(15)

Regeln

KIT

Jeder Quantor hat Introduktions- und Eliminationsregel:

allI: (Vx. P x) =⇒ ∀x. P x

Eine Aussage gilt für beliebigex(Meta-Ebene), also gilt sie auch für alle (HOL-Ebene)

allE:x. P x =⇒ (P ?x =⇒ R) =⇒ R

Eine Aussage gilt für allex, also folgt die Konklusion, wenn ich sie unter Verwendung der Aussage für einen (selbst wählbaren) Term zeigen kann

exI: P ?x =⇒ ∃x. P x

Eine Aussage gilt für einen Term?x, also gibt es einx, wofür sie gilt exE:x. P x =⇒ (Vx. P x =⇒ Q) =⇒ Q

Eine Aussage gilt für einx, also folgt die Konklusion, wenn ich sie unter Verwendung der Aussage für einen beliebigen, nicht weiter bestimmten Term zeigen kann

(16)

Regeln

KIT

Jeder Quantor hat Introduktions- und Eliminationsregel:

allI: (Vx. P x) =⇒ ∀x. P x

Eine Aussage gilt für beliebigex(Meta-Ebene), also gilt sie auch für alle (HOL-Ebene)

allE:x. P x =⇒ (P ?x =⇒ R) =⇒ R

Eine Aussage gilt für allex, also folgt die Konklusion, wenn ich sie unter Verwendung der Aussage für einen (selbst wählbaren) Term zeigen kann

exI: P ?x =⇒ ∃x. P x

Eine Aussage gilt für einen Term?x, also gibt es einx, wofür sie gilt

exE:x. P x =⇒ (Vx. P x =⇒ Q) =⇒ Q

Eine Aussage gilt für einx, also folgt die Konklusion, wenn ich sie unter Verwendung der Aussage für einen beliebigen, nicht weiter bestimmten Term zeigen kann

(17)

Regeln

KIT

Jeder Quantor hat Introduktions- und Eliminationsregel:

allI: (Vx. P x) =⇒ ∀x. P x

Eine Aussage gilt für beliebigex(Meta-Ebene), also gilt sie auch für alle (HOL-Ebene)

allE:x. P x =⇒ (P ?x =⇒ R) =⇒ R

Eine Aussage gilt für allex, also folgt die Konklusion, wenn ich sie unter Verwendung der Aussage für einen (selbst wählbaren) Term zeigen kann

exI: P ?x =⇒ ∃x. P x

Eine Aussage gilt für einen Term?x, also gibt es einx, wofür sie gilt exE:x. P x =⇒ (Vx. P x =⇒ Q) =⇒ Q

(18)

Quantoren in Isar

KIT

Der Befehlfixkorrespondiert mitV. have "x. P x"

proof(rule allI) fix x

show "P x" hBeweisi qed

from hx. P xi have "Q (f x)"

proof(rule allE) fix x

assume "P (f x)"

then show "Q (f x)" hBeweisi qed

have "x. P x"

proof(rule exI)

show "P (f 0)" hBeweisi qed

from hx. P xi have "R"

proof(rule exE) fix x

assume "P x"

show "R" hBeweisi qed

Letzteres geht auch ohne neuen Scope:

(19)

KIT

Teil V

Fallunterscheidung

(20)

Fallunterscheidung

KIT

In (klassischen) Beweisen Fallunterscheidung wichtiges Hilfsmittel P

Q

¬P Q Q

In Isabelle: Mit der Regelcase_split: (P =⇒ Q) =⇒ (¬P =⇒ Q) =⇒ Q Beispiel:

have "BB ∨ ¬ BB" proof(rule case_split)

assume "BB"

then show "BB ∨ ¬BB".. next

assume "¬ BB"

then show "BB ∨ ¬BB".. qed

Stattproof (rule case_split) geht auchproof (cases "BB"). Vorteil: Die Annahmen sind gleich die richtigen (sonst erfährt Isabelle erst beim erstenshow wasPsein sollte – das klappt ggf. nicht zuverlässig).

(21)

Fallunterscheidung

KIT

In (klassischen) Beweisen Fallunterscheidung wichtiges Hilfsmittel P

Q

¬P Q Q

In Isabelle: Mit der Regelcase_split: (P =⇒ Q) =⇒ (¬P =⇒ Q) =⇒ Q Beispiel:

have "BB ∨ ¬ BB"

proof(rule case_split) assume "BB"

∨ ¬

Stattproof (rule case_split) geht auchproof (cases "BB"). Vorteil: Die Annahmen sind gleich die richtigen (sonst erfährt

(22)

Fallunterscheidung: Beispiel

KIT

Dieses Lemma wäre ohne Fallunterscheidung sonicht(einfach)lösbar!

lemma "BC −→ (AB)(¬ AC)"

proof

assume "BC" then have "B"..

from hBCi have "C"..

show "(AB)(¬ AC)"

proof(cases A) assume A

from hAi hBi have "AB"..

then show ?thesis..

next

assume "¬A"

from h¬Ai hCi have "¬AC"..

then show ?thesis..

qed

(23)

KIT

Teil VI

Definition

(24)

definition

KIT

Ermöglicht, einen Term zu benennen, so darüber zu abstrahieren und die Abstraktion gezielt zu öffnen

Beispiel:

definition solution :: "nat" where "solution = 42"

Erzeugt Regel:solution_def: solution = 42 So können auch Funktionen definiert werden: Beispiel:

definition nand :: "boolboolbool" where "nand A B = (¬ (AB))"

Erzeugt Regel:nand_def: nand A B = (¬ (AB))

(25)

definition

KIT

Ermöglicht, einen Term zu benennen, so darüber zu abstrahieren und die Abstraktion gezielt zu öffnen

Beispiel:

definition solution :: "nat"

where "solution = 42"

Erzeugt Regel:solution_def: solution = 42 So können auch Funktionen definiert werden: Beispiel:

definition nand :: "boolboolbool" where "nand A B = (¬ (AB))"

Erzeugt Regel:nand_def: nand A B = (¬ (AB))

(26)

definition

KIT

Ermöglicht, einen Term zu benennen, so darüber zu abstrahieren und die Abstraktion gezielt zu öffnen

Beispiel:

definition solution :: "nat"

where "solution = 42"

Erzeugt Regel:solution_def: solution = 42

So können auch Funktionen definiert werden: Beispiel:

definition nand :: "boolboolbool" where "nand A B = (¬ (AB))"

Erzeugt Regel:nand_def: nand A B = (¬ (AB))

(27)

definition

KIT

Ermöglicht, einen Term zu benennen, so darüber zu abstrahieren und die Abstraktion gezielt zu öffnen

Beispiel:

definition solution :: "nat"

where "solution = 42"

Erzeugt Regel:solution_def: solution = 42 So können auch Funktionen definiert werden:

Beispiel:

Erzeugt Regel:nand_def: nand A B = (¬ (AB))

(28)

definition

KIT

Ermöglicht, einen Term zu benennen, so darüber zu abstrahieren und die Abstraktion gezielt zu öffnen

Beispiel:

definition solution :: "nat"

where "solution = 42"

Erzeugt Regel:solution_def: solution = 42 So können auch Funktionen definiert werden:

Beispiel:

definition nand :: "boolboolbool"

where "nand A B = (¬ (AB))"

(29)

definition – Syntaxdefinition

KIT

nandist binärer Operator

=⇒Infixoperator bietet sich an Syntaxdefinition (Infix-Notation)

Schreibe(infixl "Operatorsymbol" n)an die Deklarationszeile, wobei infixlfür linksgebundenen Infixoperator steht,

infixrfür rechtsgebundene

Operatorsymbolein beliebig wählbares Symbol für den Operator ist, neine Zahl ist, welche die Präzedenz dieses Operators angibt

Beispiel: Operatornand

definition nand :: "boolboolbool" (infixl "./" 36) where "A ./ B = (¬ (AB))"

Jetzt:A ./ B ./ Cgleichbedeutend mitnand (nand A B) C

(30)

definition – Syntaxdefinition

KIT

nandist binärer Operator

=⇒Infixoperator bietet sich an

Syntaxdefinition (Infix-Notation)

Schreibe(infixl "Operatorsymbol" n)an die Deklarationszeile, wobei infixlfür linksgebundenen Infixoperator steht,

infixrfür rechtsgebundene

Operatorsymbolein beliebig wählbares Symbol für den Operator ist, neine Zahl ist, welche die Präzedenz dieses Operators angibt

Beispiel: Operatornand

definition nand :: "boolboolbool" (infixl "./" 36) where "A ./ B = (¬ (AB))"

Jetzt:A ./ B ./ Cgleichbedeutend mitnand (nand A B) C

(31)

definition – Syntaxdefinition

KIT

nandist binärer Operator

=⇒Infixoperator bietet sich an Syntaxdefinition (Infix-Notation)

Schreibe(infixl "Operatorsymbol" n)an die Deklarationszeile, wobei infixlfür linksgebundenen Infixoperator steht,

infixrfür rechtsgebundene

Operatorsymbolein beliebig wählbares Symbol für den Operator ist, neine Zahl ist, welche die Präzedenz dieses Operators angibt

Beispiel: Operatornand

definition nand :: "boolboolbool" (infixl "./" 36) where "A ./ B = (¬ (AB))"

Jetzt:A ./ B ./ Cgleichbedeutend mitnand (nand A B) C

(32)

definition – Syntaxdefinition

KIT

nandist binärer Operator

=⇒Infixoperator bietet sich an Syntaxdefinition (Infix-Notation)

Schreibe(infixl "Operatorsymbol" n)an die Deklarationszeile, wobei infixlfür linksgebundenen Infixoperator steht,

infixrfür rechtsgebundene

Operatorsymbolein beliebig wählbares Symbol für den Operator ist, neine Zahl ist, welche die Präzedenz dieses Operators angibt

Beispiel: Operatornand

definition nand :: "boolboolbool" (infixl "./" 36) where "A ./ B = (¬ (AB))"

(33)

KIT

Teil VII

Gleichungen

(34)

Gleichungen

KIT

Das Arbeiten mit Gleichungen ist eine sehr wichtige Beweistechnik. Die Hauptregel dabei ist die Substitution:

s=t P[s/x] P[t/x] Diese Regel gibt es auch in Isabelle:

subst: s = t =⇒ P s =⇒ P t

Beispiel:

assume "correct solution" with solution_def

have "correct 42" by (rule subst) Auch nützlich:

ssubst: s = t =⇒ P t =⇒ P s arg_cong: x = y =⇒ f x = f y

(35)

Gleichungen

KIT

Das Arbeiten mit Gleichungen ist eine sehr wichtige Beweistechnik. Die Hauptregel dabei ist die Substitution:

s=t P[s/x] P[t/x] Diese Regel gibt es auch in Isabelle:

subst: s = t =⇒ P s =⇒ P t

Beispiel:

assume "correct solution"

with solution_def

(36)

Transitivität

KIT

Gleichheit ist transitiv, auch in Isabelle:

trans: r = s =⇒ s = t =⇒ r = t

Aber umständlich:

lemma "foo = qux"

proof(rule trans)

show "foo = bar" hBeweis 1i next

show "bar = qux"

proof(rule trans)

show "bar = baz" hBeweis 2i next

show "baz = qux" hBeweis 3i qed

qed

Besser mitalsoundfinally: lemma "foo = qux"

proof-

have "foo = bar" hBeweis 1i also

have "bar = baz" hBeweis 2i also

have "baz = qux" hBeweis 3i finally show ?thesis. qed

(37)

Transitivität

KIT

Gleichheit ist transitiv, auch in Isabelle:

trans: r = s =⇒ s = t =⇒ r = t

Aber umständlich:

lemma "foo = qux"

proof(rule trans)

show "foo = bar" hBeweis 1i next

show "bar = qux"

proof(rule trans)

show "bar = baz" hBeweis 2i next

Besser mitalsoundfinally:

lemma "foo = qux"

proof-

have "foo = bar" hBeweis 1i also

have "bar = baz" hBeweis 2i also

have "baz = qux" hBeweis 3i finally show ?thesis.

(38)

Gleichungsketten

KIT

Aber oftproof (rule trans)zu schreiben wäre sehr umständlich.

Statt dessen: Gleichungsketten!

Die Befehlealsoundfinallysollten jeweils einer Aussage (assume oderhave) folgen, die eine Gleichung ist.

Das abschließendefinallykombiniert die Aussagen per Transitivität und stellt das Ergebnis (wiefrom) bereit.

In Ausdrücken steht...für die rechte Seite der letzten Aussage.

Ist ein Lemmafoofalsch herum, kann manfoo[symmetric]verwenden.

Die Abkürzung?thesissteht für die Konklusion des aktuell zu beweisende Lemmas (vor Anwendung von Regeln!).

Typisches Muster:

proof- h. . .i

finally show ?thesis.

(39)

Gleichungsketten (Beispiel)

KIT

lemma "(A(AB)) = A"

proof-

from conj_disj_distribL

have "(A(AB)) = ((AA)(AB))".

also

from conj_absorb

have "((AA)(AB)) = (A(AB))" by (rule arg_cong) also

have "(A(AB)) = A"

proof

ha nested proofi qed

finally

show ∧ ∨ B)) = A".

(40)

Gleichungsketten (Beispiel mit Abkürzungen)

KIT

lemma "(A(AB)) = A"

proof-

from conj_disj_distribL

have "(A(AB)) = ((AA)(AB))".

also

from conj_absorb

have ". . . = (A(AB))" by (rule arg_cong) also

have ". . . = A"

proof

ha nested proofi qed

finally

show ?thesis.

qed

(41)

Randbemerkung: moreover und ultimately

KIT

Diealso..finally-Struktur hat einen kleinen Bruder:

moreover..ultimately. Hier werden die Aussagen nicht per Transitivität verbunden, sondern einfach gesammelt.

Damit können Verschachtelungen vermieden werden, die Beweise natürlicher aufgebaut und Wiederholungen infrom-Befehlen verringert werden:

have "AB" proof

show A hBeweis Ai next

show B hBeweis Bi qed

have A hBeweis Ai moreover have B

hBeweis Bi ultimately

have "AB"..

(42)

Randbemerkung: moreover und ultimately

KIT

Diealso..finally-Struktur hat einen kleinen Bruder:

moreover..ultimately. Hier werden die Aussagen nicht per Transitivität verbunden, sondern einfach gesammelt.

Damit können Verschachtelungen vermieden werden, die Beweise natürlicher aufgebaut und Wiederholungen infrom-Befehlen verringert werden:

have "AB"

proof show A

hBeweis Ai next

show B hBeweis Bi

have A hBeweis Ai moreover have B

hBeweis Bi ultimately

have "AB"..

Referenzen

ÄHNLICHE DOKUMENTE

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

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