• 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!
11
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]]θ

1

(2)

196

© 196

©20092009A. BehrendA. Behrend

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)

197

© 197

©20092009A. BehrendA. Behrend

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:

∀(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.

4

(5)

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}})

5

(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:

∀(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.

6

(7)

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.

7

(8)

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!

8

(9)

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.

• Also (g p (maph l)) = (map h (g (p◦h)l)),wennh strikt ist.

9

(10)

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 . . . ???

10

(11)

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

11

Referenzen

ÄHNLICHE DOKUMENTE

Die Be- weise laufen analog zu denen der Kreisfunktionen, wobei der Leser / die Leserin gut tut, vor dem Beweis die einschlägigen Formeln für die hyperbolischen Funktionen nachzu-..

Eine Formel ist genau dann wahr (oder auch ableitbar), wenn sie mittels D1 bis D5 aus den Axiomen A1 bis A4 erhalten werden kann... Man kann zeigen, daß dieses Kalkül

Der darin verborgene Irrtum besteht nun nicht etwa in dem Ziel der Vermeidung von Rechnung (das ist etwas Urmathematisches), sondern in dem Glauben, das Rechnen erledige

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

Wir beweisen jetzt ein fundamentales Theorem über die Interaktion zwischen Auswertung und Substitution: wenn man eine Substitution s auf einen Ausdruck a anwendet und dann mittels

private int a; nur in der Klasse sichtbar, in der das Element deklariert wurde int b; nur im Paket sichtbar, in dem das Element deklariert wurde public int c;

ist wieder proportional zur Anzahl der Vergleiche *left < *right ( das muss man aber nicht sofort sehen). Alle Vergleiche werden von der Funktion

Das Problem kann in zwei Teilprobleme aufgeteilt werden. Das erste Teilproblem besteht darin, die Ordnung der Hilbert-Kurve einzulesen und eine Folge von