• Keine Ergebnisse gefunden

Allgemeine Rekursion im Polymorphen Lambda-Kalkül

N/A
N/A
Protected

Academic year: 2022

Aktie "Allgemeine Rekursion im Polymorphen Lambda-Kalkül"

Copied!
30
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Polymorpher Lambda-Kalkül [Girard 1972, Reynolds 1974]

Typen: τ :=α |τ →τ | ∀α.τ

Terme: t:=x |λx :τ.t |t t |Λα.t |t τ

Γ,x :τ `x :τ [[x]]θ,σ = σ(x)

Γ,x :τ1 `t :τ2

Γ`(λx :τ1.t) :τ1→τ2

[[λx :τ1.t]]θ,σ a = [[t]]θ,σ[x7→a]

Γ`t :τ1→τ2 Γ`u :τ1

Γ`(t u) :τ2 [[t u]]θ,σ = [[t]]θ,σ [[u]]θ,σ α,Γ`t:τ

Γ`(Λα.t) :∀α.τ [[Λα.t]]θ,σ S = [[t]]θ[α7→S],σ Γ`t:∀α.τ

Γ`(t τ0) :τ[τ0/α] [[t τ0]]θ,σ = [[t]]θ,σ [[τ0]]θ

(2)

Rekursion im -Kalkül (3) Rekursion im -Kalkül (3) Rekursion

Rekursionim im --KalkKalküül (3)l (3)

Wir suchen jetzt eine (nicht-rekursive) Funktion YY, für die gilt:

YY(H‘) = H

Die Transformation von fak zu fak‘ war systematisch – zu jeder rekursiven Funktion H kann ein entsprechendes (nicht-rekursives) Funktional H‘gefunden werden.

( H rekursiv, Y und H‘ nicht-rekursiv )

Da generell H‘(H) = H gilt, ist H ein Fixpunktder Funktion H‘.

Weil für die gesuchte Funktion Y(H‘) !H gilt, wird sie auch als Fixpunktkombinator bezeichnet:

H = Y (H’) = H’ (H) = H’ (Y H’) insbes. gilt:

Y (H’) = H’ (Y H’) Y (H’) = H’ (Y H’)

(3)

Rekursion im -Kalkül (4) Rekursion im -Kalkül (4) Rekursion

Rekursionim im --KalkKalküül (4)l (4)

Die Funktion Ywird definiert als:

h x . h (x x) ( x . h (x x)) h x . h (x x) ( x . h (x x))

Dass diese Funktion das gesuchte Y ist, wird durch folgenden Zusammenhang belegt:

Ein vollständiger Beweis ist das aber nicht – dieser kann z.B. bei Meyer oder Stoy nachgelesen werden.

Y H

Y H‘ = ( h x . h (x x) ( x . h (x x)) ) H’

! ( x . H’ (x x)) ( x . H’ (x x))

! H’ (( x . H’ (x x)) ( x . H’ (x x)))

= HH‘( Y H‘( Y H‘))

(4)

Allgemeine Rekursion im Polymorphen Lambda-Kalkül

Terme: t:= · · · | fixt

Γ`t :τ →τ Γ`(fixt) :τ

Um Semantik anzugeben, werden Typen als vollständige Halbordnungen mit kleinstem Element interpretiert, und:

[[fixt]]θ,σ =G

i≥0

([[t]]iθ,σ ⊥).

Und was ist mit dem Parametrizitäts-Theorem? Der relevante Induktions-Fall ist:

([[fixt]]θ11,[[fixt]]θ22)∈∆τ,ρ

Das Parametrizitäts-Theorem gilt weiter, vorausgesetzt alle Relationen sind strikt und stetig.

(5)

Allgemeine Rekursion im Polymorphen Lambda-Kalkül

Terme: t:= · · · | fixt

Γ`t :τ →τ Γ`(fixt) :τ

Um Semantik anzugeben, werden Typen als vollständige Halbordnungen mit kleinstem Element interpretiert, und:

[[fixt]]θ,σ =G

i≥0

([[t]]iθ,σ ⊥).

Und was ist mit dem Parametrizitäts-Theorem? Der relevante Induktions-Fall ist:

([[fixt]]θ11,[[fixt]]θ22)∈∆τ,ρ

Das Parametrizitäts-Theorem gilt weiter, vorausgesetzt alle Relationen sind strikt und stetig.

(6)

Allgemeine Rekursion im Polymorphen Lambda-Kalkül

Terme: t:= · · · | fixt

Γ`t :τ →τ Γ`(fixt) :τ

Um Semantik anzugeben, werden Typen als vollständige Halbordnungen mit kleinstem Element interpretiert, und:

[[fixt]]θ,σ= G

i≥0

([[t]]iθ,σ ⊥).

Und was ist mit dem Parametrizitäts-Theorem? Der relevante Induktions-Fall ist:

([[fixt]]θ11,[[fixt]]θ22)∈∆τ,ρ

Das Parametrizitäts-Theorem gilt weiter, vorausgesetzt alle Relationen sind strikt und stetig.

(7)

Verwendung im Beispiel

Aus:

filter:: (α→Bool)→[α]→[α]

filterp [ ] = [ ]

filterp (a:as) =if p athena:filterp as else filterp as wird:

fix(λf : (∀α.(α→Bool)→[α]→[α]).

Λα.λp: (α→Bool).λl : [α].

casel of {[ ] →[ ]α;

(a:as)→casep a of

{True →a: (f α p as) ; False→f α p as}})

(8)

Allgemeine Rekursion im Polymorphen Lambda-Kalkül

Terme: t:= · · · | fixt

Γ`t :τ →τ Γ`(fixt) :τ

Um Semantik anzugeben, werden Typen als vollständige Halbordnungen mit kleinstem Element interpretiert, und:

[[fixt]]θ,σ= G

i≥0

([[t]]iθ,σ ⊥).

Und was ist mit dem Parametrizitäts-Theorem?

Der relevante Induktions-Fall ist:

([[fixt]]θ11,[[fixt]]θ22)∈∆τ,ρ

Das Parametrizitäts-Theorem gilt weiter, vorausgesetzt alle Relationen sind strikt und stetig.

(9)

Allgemeine Rekursion im Polymorphen Lambda-Kalkül

Terme: t:= · · · | fixt

Γ`t :τ →τ Γ`(fixt) :τ

Um Semantik anzugeben, werden Typen als vollständige Halbordnungen mit kleinstem Element interpretiert, und:

[[fixt]]θ,σ= G

i≥0

([[t]]iθ,σ ⊥).

Und was ist mit dem Parametrizitäts-Theorem?

Der relevante Induktions-Fall ist:

Γ`t:τ →τ Γ`(fixt) :τ

Das Parametrizitäts-Theorem gilt weiter, vorausgesetzt alle Relationen sind strikt und stetig.

(10)

Allgemeine Rekursion im Polymorphen Lambda-Kalkül

Terme: t:= · · · | fixt

Γ`t :τ →τ Γ`(fixt) :τ

Um Semantik anzugeben, werden Typen als vollständige Halbordnungen mit kleinstem Element interpretiert, und:

[[fixt]]θ,σ= G

i≥0

([[t]]iθ,σ ⊥).

Und was ist mit dem Parametrizitäts-Theorem?

Der relevante Induktions-Fall ist:

Γ`t:τ →τ

([[fixt]]θ11,[[fixt]]θ22)∈∆τ,ρ

Das Parametrizitäts-Theorem gilt weiter, vorausgesetzt alle Relationen sind strikt und stetig.

(11)

Allgemeine Rekursion im Polymorphen Lambda-Kalkül

Terme: t:= · · · | fixt

Γ`t :τ →τ Γ`(fixt) :τ

Um Semantik anzugeben, werden Typen als vollständige Halbordnungen mit kleinstem Element interpretiert, und:

[[fixt]]θ,σ= G

i≥0

([[t]]iθ,σ ⊥).

Und was ist mit dem Parametrizitäts-Theorem?

Der relevante Induktions-Fall ist:

([[t]]θ11,[[t]]θ22)∈∆τ→τ,ρ

([[fixt]]θ11,[[fixt]]θ22)∈∆τ,ρ

Das Parametrizitäts-Theorem gilt weiter, vorausgesetzt alle Relationen sind strikt und stetig.

(12)

Allgemeine Rekursion im Polymorphen Lambda-Kalkül

Terme: t:= · · · | fixt

Γ`t :τ →τ Γ`(fixt) :τ

Um Semantik anzugeben, werden Typen als vollständige Halbordnungen mit kleinstem Element interpretiert, und:

[[fixt]]θ,σ= G

i≥0

([[t]]iθ,σ ⊥).

Und was ist mit dem Parametrizitäts-Theorem?

Der relevante Induktions-Fall ist:

∀(a1,a2)∈∆τ,ρ.([[t]]θ11 a1,[[t]]θ22 a2)∈∆τ,ρ ([[fixt]]θ11,[[fixt]]θ22)∈∆τ,ρ

Das Parametrizitäts-Theorem gilt weiter, vorausgesetzt alle Relationen sind strikt und stetig.

(13)

Allgemeine Rekursion im Polymorphen Lambda-Kalkül

Terme: t:= · · · | fixt

Γ`t :τ →τ Γ`(fixt) :τ

Um Semantik anzugeben, werden Typen als vollständige Halbordnungen mit kleinstem Element interpretiert, und:

[[fixt]]θ,σ= G

i≥0

([[t]]iθ,σ ⊥).

Und was ist mit dem Parametrizitäts-Theorem?

Der relevante Induktions-Fall ist:

∀(a1,a2)∈∆τ,ρ.([[t]]θ11 a1,[[t]]θ22 a2)∈∆τ,ρ ([[fixt]]θ11,[[fixt]]θ22)∈∆τ,ρ

Das Parametrizitäts-Theorem gilt weiter, vorausgesetzt alle

(14)

Anwendung dieser Erkenntnis

Für jedesg:: (a→Bool)→[a]→[a],

g p (map h l) = map h (g (p◦h) l) wennh strikt (h ⊥=⊥).

Analoge Auswirkungen ergeben sich für andere freie Theoreme.

Übrigens sind solche Nebenbedingungen im Allgemeinen nur hinreichend, nicht unbedingt notwendig.

(15)

Anwendung dieser Erkenntnis

Für jedesg:: (a→Bool)→[a]→[a],

g p (map h l) = map h (g (p◦h) l) wennh strikt (h ⊥=⊥).

Analoge Auswirkungen ergeben sich für andere freie Theoreme.

Übrigens sind solche Nebenbedingungen im Allgemeinen nur hinreichend, nicht unbedingt notwendig.

(16)

Anwendung dieser Erkenntnis

Für jedesg:: (a→Bool)→[a]→[a],

g p (map h l) = map h (g (p◦h) l) wennh strikt (h ⊥=⊥).

Analoge Auswirkungen ergeben sich für andere freie Theoreme.

Übrigens sind solche Nebenbedingungen im Allgemeinen nur hinreichend, nicht unbedingt notwendig.

(17)

Hinzufügen Selektiver Striktheit

Terme: t:= · · · | seqt t

Γ`t11 Γ`t22

Γ`(seq t1 t2) :τ2

Semantik:

[[seq t1 t2]]θ,σ=

(⊥ wenn[[t1]]θ,σ =⊥ [[t2]]θ,σ wenn[[t1]]θ,σ 6=⊥.

Das Parametrizitäts-Theorem steht wieder in Zweifel!

(18)

Hinzufügen Selektiver Striktheit

Terme: t:= · · · | seqt t

Γ`t11 Γ`t22

Γ`(seq t1 t2) :τ2

Semantik:

[[seq t1 t2]]θ,σ=

(⊥ wenn[[t1]]θ,σ =⊥ [[t2]]θ,σ wenn[[t1]]θ,σ 6=⊥.

Das Parametrizitäts-Theorem steht wieder in Zweifel!

(19)

Hinzufügen Selektiver Striktheit

Terme: t:= · · · | seqt t

Γ`t11 Γ`t22

Γ`(seq t1 t2) :τ2

Semantik:

[[seq t1 t2]]θ,σ=

(⊥ wenn[[t1]]θ,σ =⊥ [[t2]]θ,σ wenn[[t1]]θ,σ 6=⊥.

Das Parametrizitäts-Theorem steht wieder in Zweifel!

(20)

Hinzufügen Selektiver Striktheit

Terme: t:= · · · | seqt t

Γ`t11 Γ`t22

Γ`(seq t1 t2) :τ2

Semantik:

[[seq t1 t2]]θ,σ=

(⊥ wenn[[t1]]θ,σ =⊥ [[t2]]θ,σ wenn[[t1]]θ,σ 6=⊥.

Das Parametrizitäts-Theorem steht wieder in Zweifel!

(21)

Ohne seq, g p (map h l) = map h (g (p ◦ h) l )

• g:: (a→Bool)→[a]→[a]muss einheitlich arbeiten.

• Die Ausgabeliste kann nur Elemente aus l, sowie ⊥enthalten.

• Welche, und in welcher Reihenfolge/Vielfachheit, kann lediglich von l und dem Eingabeprädikatp abhängen.

• Einzig mögliche Grundlagen zur Entscheidung sind die Länge von l und Ergebnisse vonp auf Elementen vonl und auf⊥.

• Aber, die Listen (map h l) undl haben stets die selbe Länge.

• Und Anwendung vonp auf ein Element von(maph l)hat stets das selbe Ergebnis wie Anwendung von(p◦h) auf das

entsprechende Element von l.

• Und Anwendung von p auf ⊥hat das selbe Ergebnis wie Anwendung von (p◦h),vorausgesetzth ist strikt.

• Also wählt gmitp stets „die selben“ Elemente aus(maph l) wie es g mit(p◦h) aus l tut, außer dass im ersten Fall die entsprechenden Abbilder unter h ausgegeben werden, und dass sie auch, an gleichen Positionen, ⊥ausgeben können.

(22)

Mit seq, g p (map h l ) = map h (g (p ◦ h) l) ?

• g:: (a→Bool)→[a]→[a]musseinheitlicharbeiten.

• Die Ausgabeliste kann nur Elemente aus l, sowie ⊥enthalten.

• Welche, und in welcher Reihenfolge/Vielfachheit, kann lediglich von l und dem Eingabeprädikatp abhängen.

• Einzig mögliche Grundlagen zur Entscheidung sind die Länge von l und Ergebnisse vonp auf Elementen vonl und auf⊥. Falsch! Auch möglich:

• Elemente vonl auf⊥ prüfen

• p auf ⊥prüfen . . . ???

(23)

Mit seq, g p (map h l ) = map h (g (p ◦ h) l) ?

• g:: (a→Bool)→[a]→[a]muss einheitlich arbeiten.

• Die Ausgabeliste kann nurElemente aus l, sowie ⊥enthalten.

• Welche, und in welcher Reihenfolge/Vielfachheit, kann lediglich von l und dem Eingabeprädikatp abhängen.

• Einzig mögliche Grundlagen zur Entscheidung sind die Länge von l und Ergebnisse vonp auf Elementen vonl und auf⊥. Falsch! Auch möglich:

• Elemente vonl auf⊥ prüfen

• p auf ⊥prüfen . . . ???

(24)

Mit seq, g p (map h l ) = map h (g (p ◦ h) l) ?

• g:: (a→Bool)→[a]→[a]muss einheitlich arbeiten.

• Die Ausgabeliste kann nurElemente aus l, sowie ⊥enthalten.

• Welche, und in welcher Reihenfolge/Vielfachheit, kann lediglichvon l und dem Eingabeprädikatp abhängen.

• Einzig mögliche Grundlagen zur Entscheidung sind die Länge von l und Ergebnisse vonp auf Elementen vonl und auf⊥. Falsch! Auch möglich:

• Elemente vonl auf⊥ prüfen

• p auf ⊥prüfen . . . ???

(25)

Mit seq, g p (map h l ) = map h (g (p ◦ h) l) ?

• g:: (a→Bool)→[a]→[a]muss einheitlich arbeiten.

• Die Ausgabeliste kann nur Elemente aus l, sowie ⊥enthalten.

• Welche, und in welcher Reihenfolge/Vielfachheit, kann lediglichvon l und dem Eingabeprädikatp abhängen.

• Einzig mögliche Grundlagen zur Entscheidung sind die Länge von l undErgebnisse von p auf Elementen vonl und auf⊥.

Falsch! Auch möglich:

• Elemente vonl auf⊥ prüfen

• p auf ⊥prüfen . . . ???

(26)

Mit seq, g p (map h l ) = map h (g (p ◦ h) l) ?

• g:: (a→Bool)→[a]→[a]muss einheitlich arbeiten.

• Die Ausgabeliste kann nur Elemente aus l, sowie ⊥enthalten.

• Welche, und in welcher Reihenfolge/Vielfachheit, kann lediglich von l und dem Eingabeprädikatp abhängen.

• Einzig mögliche Grundlagen zur Entscheidung sind die Länge von l undErgebnisse von p auf Elementen vonl und auf⊥.

Falsch! Auch möglich:

• Elemente vonl auf⊥ prüfen

• p auf ⊥prüfen

. . . ???

(27)

Mit seq, g p (map h l ) = map h (g (p ◦ h) l) ?

• g:: (a→Bool)→[a]→[a]muss einheitlich arbeiten.

• Die Ausgabeliste kann nur Elemente aus l, sowie ⊥enthalten.

• Welche, und in welcher Reihenfolge/Vielfachheit, kann lediglich von l und dem Eingabeprädikatp abhängen.

• Einzig mögliche Grundlagen zur Entscheidung sind die Länge von l und Ergebnisse vonp auf Elementen vonl und auf⊥.

Falsch! Auch möglich:

• Elemente vonl auf⊥ prüfen

• p auf ⊥prüfen . . . ???

(28)

Anpassungen Freier Theoreme

[Wadler 1989]: für jedesg:: (a→Bool)→[a]→[a], g p (map h l) = map h (g (p◦h) l)

• wennh strikt.

[Johann & V. 2004]: in Gegenwart von seq, wenn zusätzlich:

• p6=⊥ und

• h total (∀x 6=⊥.h x6=⊥). [Johann & V. 2009]: Betrachtung von Laufzeitfehlern

[Stenger & V. 2009]: Betrachtung von „impräziser“ Fehlersemantik

(29)

Anpassungen Freier Theoreme

[Wadler 1989]: für jedesg:: (a→Bool)→[a]→[a], g p (map h l) = map h (g (p◦h) l)

• wennh strikt.

[Johann & V. 2004]: in Gegenwart von seq, wenn zusätzlich:

• p6=⊥ und

• h total (∀x 6=⊥.h x6=⊥).

[Johann & V. 2009]: Betrachtung von Laufzeitfehlern

[Stenger & V. 2009]: Betrachtung von „impräziser“ Fehlersemantik

(30)

Anpassungen Freier Theoreme

[Wadler 1989]: für jedesg:: (a→Bool)→[a]→[a], g p (map h l) = map h (g (p◦h) l)

• wennh strikt.

[Johann & V. 2004]: in Gegenwart von seq, wenn zusätzlich:

• p6=⊥ und

• h total (∀x 6=⊥.h x6=⊥).

[Johann & V. 2009]: Betrachtung von Laufzeitfehlern

[Stenger & V. 2009]: Betrachtung von „impräziser“ Fehlersemantik

Referenzen

ÄHNLICHE DOKUMENTE

Wir betrachten das einfach getypte Lambda-Kalkül aus der Vorlesung mit der Erweiterung um unit und let. Zeigen Sie, dass die folgenden Terme im angegebenen Kontext wohlgetypt

Er kann (in einem Artikel, der darauf hinausläuft, daß es nichts Wichtiges zu sagen gäbe, was dem medialen Aufwand entspräche) alles drucken, ohne daß es sich lesen ließe. Er

in der Satisfaction-Phase voraus, dass es sich beim Dissonanzkonstrukt nicht lediglich um ein kurzweiliges Phänomen direkt nach einer getroffenen Kauf- entscheidung handelt, so

Der hier vorliegende Band ist einerseits eine in sich abgeschlossene, konzeptionell für sich stehende Publikation, zugleich kann er aber auch verstanden werden als zweiter Band zu

In den ersten sieben Lebensjahren baut sich der Mensch seinen eigenen physischen Leib auf. Diese Entwicklung ist etwa mit dem Zahnwechsel abgeschlossen und der physische Leib in

Viele Körpermerkmale, die zumeist der Vererbung zugeschrieben werden, beruhen tatsächlich auf instinktiver Nachahmung, besonders, was die Physiognomie des

Ih nen gemein ist jedoch die Aussage, daß Zusam menhänge zwische n neuromuskulärer E rregba rkeit - ermitte lt dur ch eine n Rh eob asen scor e - und einem Frühge- burts

Das heißt: Jedem solchen ”Schr¨agblick” unter α B auf eine Wasseroberfl¨ache, sei es Pf¨ utze oder See, zeigt sich ein Spiegelbild, das sich im Durchblick durch eine