• 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!
14
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)

(2)

Teil V

Induktive Pr¨ adikate und Mengen

(3)

Induktive Pr¨ adikate

Induktive Pr¨adikate nicht rekursiv ¨uber Datentypen definiert, sondern ¨uber einRegelwerk, bestehend aus

einer oder mehreren Basisregeln und

einer oder mehreren induktiven Regeln, wobei Pr¨adikat in Pr¨amissen mit “kleineren” Parametern vorkommt (evtl. auch mehrfach)

Das Pr¨adikat gilt f¨ur bestimmte Parameter, wenn es durch Anwendung der Basis- und induktiven Regeln konstruiert werden kann

(4)

Syntax und Beispiel

Schl¨usselwort:inductive, Syntax wie primrecoder fun Die geraden Zahlen als induktives Pr¨adikat:

inductive even :: "nat bool"

where "even 0"

| "even n = even (n + 2)"

Welche Eigenschaft ¨uber Strings beschreibt folgendes Pr¨adikat?

inductive foo :: "string bool"

where "foo [c]"

| "foo [c,c]"

| "foo s = foo (c#s@[c])"

Der Parameterstring ist ein Palindrom!

(5)

Syntax und Beispiel

Schl¨usselwort:inductive, Syntax wie primrecoder fun Die geraden Zahlen als induktives Pr¨adikat:

inductive even :: "nat bool"

where "even 0"

| "even n = even (n + 2)"

Welche Eigenschaft ¨uber Strings beschreibt folgendes Pr¨adikat?

inductive foo :: "string bool"

where "foo [c]"

| "foo [c,c]"

| "foo s = foo (c#s@[c])"

Der Parameterstring ist ein Palindrom!

(6)

Syntax und Beispiel

Schl¨usselwort:inductive, Syntax wie primrecoder fun Die geraden Zahlen als induktives Pr¨adikat:

inductive even :: "nat bool"

where "even 0"

| "even n = even (n + 2)"

Welche Eigenschaft ¨uber Strings beschreibt folgendes Pr¨adikat?

inductive foo :: "string bool"

where "foo [c]"

| "foo [c,c]"

| "foo s = foo (c#s@[c])"

Der Parameterstring ist ein Palindrom!

(7)

Introduktionsregeln

jeder Regel kann einzeln ein Name gegeben werden:

inductive palin :: "string bool"

where OneElem: "palin [c]"

| TwoElem: "palin [c,c]"

| HdLastRec: "palin s = palin (c#s@[c])"

Diese Regeln zusammengefasst als palin.intros (allgemein Pr¨adikatname.intros)

sieht wie folgt aus:

palin [?c]

palin [?c, ?c]

palin ?s = palin (?c # ?s @ [?c])

meist jedoch die einzelnen Regelnamen verwendet

(8)

Introduktionsregeln

jeder Regel kann einzeln ein Name gegeben werden:

inductive palin :: "string bool"

where OneElem: "palin [c]"

| TwoElem: "palin [c,c]"

| HdLastRec: "palin s = palin (c#s@[c])"

Diese Regeln zusammengefasst als palin.intros (allgemein Pr¨adikatname.intros)

sieht wie folgt aus:

palin [?c]

palin [?c, ?c]

palin ?s = palin (?c # ?s @ [?c])

meist jedoch die einzelnen Regelnamen verwendet

(9)

Eliminationsregel

Pr¨adikat aus Regeln aufgebaut, deswegen “Fallunterscheidung” m¨oglich, aus welcher Regelanwendung entstanden

entsprechende Regel Pr¨adikatname.cases, wie Eliminationsregel verwendet Beispiel palin.cases:

[[palin ?a; V

c. ?a = [c] = ?P; V

c. ?a = [c, c] = ?P; V s c.

[[?a = c # s @ [c]; palin s]] = ?P]] = ?P

lemma "palin s = hd s = last s"

apply(erule palin.cases) liefert subgoals

1. V

c. s = [c] = hd s = last s 2. V

c. s = [c, c] = hd s = last s 3. V

sa c. [[s = c # sa @ [c]; palin sa]] = hd s = last s

(10)

Eliminationsregel

Pr¨adikat aus Regeln aufgebaut, deswegen “Fallunterscheidung” m¨oglich, aus welcher Regelanwendung entstanden

entsprechende Regel Pr¨adikatname.cases, wie Eliminationsregel verwendet Beispiel palin.cases:

[[palin ?a; V

c. ?a = [c] = ?P; V

c. ?a = [c, c] = ?P; V s c.

[[?a = c # s @ [c]; palin s]] = ?P]] = ?P

lemma "palin s = hd s = last s"

apply(erule palin.cases) liefert subgoals

1. V

c. s = [c] = hd s = last s 2. V

c. s = [c, c] = hd s = last s 3. V

sa c. [[s = c # sa @ [c]; palin sa]] = hd s = last s

(11)

Eliminationsregel

Pr¨adikat aus Regeln aufgebaut, deswegen “Fallunterscheidung” m¨oglich, aus welcher Regelanwendung entstanden

entsprechende Regel Pr¨adikatname.cases, wie Eliminationsregel verwendet Beispiel palin.cases:

[[palin ?a; V

c. ?a = [c] = ?P; V

c. ?a = [c, c] = ?P; V s c.

[[?a = c # s @ [c]; palin s]] = ?P]] = ?P

lemma "palin s = hd s = last s"

apply(erule palin.cases) liefert subgoals

1. V

c. s = [c] = hd s = last s 2. V

c. s = [c, c] = hd s = last s 3. V

sa c. [[s = c # sa @ [c]; palin sa]] = hd s = last s

(12)

Induktionsregel

oftmals Fallunterscheidung nicht genug, brauchen Induktionshypothese f¨ur Pr¨adikate in der Pr¨amisse einer Regel

daf¨ur InduktionsregelPr¨adikatname.induct Beispiel palin.induct:

[[palin ?x; V

c. ?P [c]; V

c. ?P [c, c]; V

s c. [[palin s; ?P s]] =

?P (c # s @ [c])]] = ?P ?x

lemma "palin s = hd s = last s"

apply(induct rule:palin.induct) liefert subgoals

1. V

c. hd [c] = last [c]

2. V

c. hd [c, c] = last [c, c]

3. V

s c. [[palin s; hd s = last s]] = hd (c # s @ [c]) = last (c # s @ [c])

(13)

Induktionsregel

oftmals Fallunterscheidung nicht genug, brauchen Induktionshypothese f¨ur Pr¨adikate in der Pr¨amisse einer Regel

daf¨ur InduktionsregelPr¨adikatname.induct Beispiel palin.induct:

[[palin ?x; V

c. ?P [c]; V

c. ?P [c, c]; V

s c. [[palin s; ?P s]] =

?P (c # s @ [c])]] = ?P ?x

lemma "palin s = hd s = last s"

apply(induct rule:palin.induct) liefert subgoals

1. V

c. hd [c] = last [c]

2. V

c. hd [c, c] = last [c, c]

3. V

s c. [[palin s; hd s = last s]] = hd (c # s @ [c]) = last (c # s @ [c])

(14)

Ausblick

statt induktiver Pr¨akate auchinduktive Mengen Schl¨usselwort inductive set

Signatur entsprechend’a set statt’a bool

Manchmal fixe Parameter n¨otig, beeinflussen induktive Definition nicht m¨ussen nach for mit Namen und Signatur angegeben werden

Beispiel: Domain eines Pr¨adikats

inductive DomainP :: (’a ’b bool) ’a bool for r :: "’a ’b bool"

where DomainP: "r a b = DomainP r a"

Referenzen

ÄHNLICHE DOKUMENTE

Ziel: Allgemeing¨ultigkeit ist vollst¨ andig in der Klasse der semi-entscheidbaren

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

oftmals Fallunterscheidung nicht genug, brauchen Induktionshypothese für Prädikate in der Prämisse einer Regel. dafür Induktionsregel Prädikatname.induct Beispiel

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 ,

Die neue Software sollte als Erweiterung von OLAT konzipiert werden und den Prozess der Pr¨ ufungsabwicklung vom Ansetzen der Pr¨ ufungstermine ¨ uber das Einschreiben der