• Keine Ergebnisse gefunden

Notwendigkeit bestimmter Bedingungen? Wir haben, mit

N/A
N/A
Protected

Academic year: 2022

Aktie "Notwendigkeit bestimmter Bedingungen? Wir haben, mit"

Copied!
36
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Wir haben, mit fix:

gp (map h l) = map h (g (p◦h) l) für jedesg :: (α →Bool)→[α]→[α], wenn

• h strikt (h ⊥=⊥).

(2)

Wir haben, mit fix:

gp (map h l) = map h (g (p◦h) l) für jedesg :: (α →Bool)→[α]→[α], wenn

• h strikt (h ⊥=⊥).

Wir haben, mit fixund seq: . . . , wenn

• p6=⊥,

• h strikt (h ⊥=⊥) und

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

(3)

Wir haben, mit fix:

gp (map h l) = map h (g (p◦h) l) für jedesg :: (α →Bool)→[α]→[α], wenn

• h strikt (h ⊥=⊥).

Wir haben, mit fixund seq: . . . , wenn

• p6=⊥,

• h strikt (h ⊥=⊥) und

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

Wir haben, mit . . . , wenn . . .

(4)

Wir haben, mit fix:

gp (map h l) = map h (g (p◦h) l) für jedesg :: (α →Bool)→[α]→[α], wenn

• h strikt (h ⊥=⊥).

Wir haben, mit fixund seq: . . . , wenn

• p6=⊥,

• h strikt (h ⊥=⊥) und

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

Wir haben, mit . . . , wenn . . . Naheliegende Fragen jeweils:

1. Sind die Bedingungen für jedes g notwendig?

(5)

Wir haben, mit fix:

gp (map h l) = map h (g (p◦h) l) für jedesg :: (α →Bool)→[α]→[α], wenn

• h strikt (h ⊥=⊥).

Wir haben, mit fixund seq: . . . , wenn

• p6=⊥,

• h strikt (h ⊥=⊥) und

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

Wir haben, mit . . . , wenn . . .

(6)

Sind alle Striktheitsbedingungen für jedes g notwendig?

(7)

Sind alle Striktheitsbedingungen für jedes g notwendig?Nein!

(8)

Sind alle Striktheitsbedingungen für jedes g notwendig? Nein!

Systematischer Ansatz: ersetze

Γ⊢t :τ →τ Γ⊢(fixt) :τ durch

Γ⊢τ ∈Pointed Γ⊢t :τ →τ Γ⊢(fixt) :τ

(9)

Sind alle Striktheitsbedingungen für jedes g notwendig? Nein!

Systematischer Ansatz: ersetze

Γ⊢t :τ →τ Γ⊢(fixt) :τ durch

Γ⊢τ ∈Pointed Γ⊢t :τ →τ

Γ⊢(fixt) :τ ,

wobei

Pointedα,Γ⊢α∈Pointed Γ⊢τ2 ∈Pointed Γ⊢τ1→τ2 ∈Pointed Γ⊢Bool∈Pointed Γ⊢[τ]∈Pointed

(10)

Sind alle Striktheitsbedingungen für jedes g notwendig? Nein!

Systematischer Ansatz: ersetze

Γ⊢t :τ →τ Γ⊢(fixt) :τ durch

Γ⊢τ ∈Pointed Γ⊢t :τ →τ

Γ⊢(fixt) :τ ,

wobei

Pointedα,Γ⊢α∈Pointed Γ⊢τ2 ∈Pointed Γ⊢τ1→τ2 ∈Pointed Γ⊢Bool∈Pointed Γ⊢[τ]∈Pointed Gewinn: Selbst wenn Relationen für un-Pointed Typen nicht

mehr strikt, gilt Parametrizitäts-Theorem weiter!

[Launchbury & Paterson 1996]

(11)

Zum Beispiel erhalten wir:

• Für jedes g::Pointedα⇒(α→Bool)→[α]→[α], g p (map h l) = map h (g (p◦h) l) wenn h strikt.

(12)

Zum Beispiel erhalten wir:

• Für jedes g::Pointedα⇒(α→Bool)→[α]→[α], g p (map h l) = map h (g (p◦h) l)

wenn h strikt.

• Für jedes g:: (α →Bool)→[α]→[α] (im neuen Typsystem), g p (map h l) = map h (g (p◦h) l)

ohne Bedingung anh.

(13)

Zu gegebenem Typ, gibt es ein g, so dass die Striktheitsbedingungen notwendig sind?

(14)

Zu gegebenem Typ, gibt es ein g, so dass die

Striktheitsbedingungen notwendig sind? Nicht immer!

(15)

Zu gegebenem Typ, gibt es ein g, so dass die

Striktheitsbedingungen notwendig sind? Nicht immer!

Idealszenario, mit automatischer Unterstützung:

• Ich gebe einen Typ vor, etwa g:: (α→Bool)→[α]→[α].

(16)

Zu gegebenem Typ, gibt es ein g, so dass die

Striktheitsbedingungen notwendig sind? Nicht immer!

Idealszenario, mit automatischer Unterstützung:

• Ich gebe einen Typ vor, etwa g:: (α→Bool)→[α]→[α].

• Ich erhalte ein freies Theorem. Hier:

für jedes strikteh, g p (map h l) = maph (g (p◦h) l)

(17)

Zu gegebenem Typ, gibt es ein g, so dass die

Striktheitsbedingungen notwendig sind? Nicht immer!

Idealszenario, mit automatischer Unterstützung:

• Ich gebe einen Typ vor, etwa g:: (α→Bool)→[α]→[α].

• Ich erhalte ein freies Theorem. Hier:

für jedes strikteh, g p (map h l) = maph (g (p◦h) l)

• Ich frage: warum mussh strikt sein? Was wäre sonst?

(18)

Zu gegebenem Typ, gibt es ein g, so dass die

Striktheitsbedingungen notwendig sind? Nicht immer!

Idealszenario, mit automatischer Unterstützung:

• Ich gebe einen Typ vor, etwa g:: (α→Bool)→[α]→[α].

• Ich erhalte ein freies Theorem. Hier:

für jedes strikteh, g p (map h l) = maph (g (p◦h) l)

• Ich frage: warum mussh strikt sein? Was wäre sonst?

• Ich erhalte ein konkretes g, sowiep,l, und (nichstriktes) h für welche die Aussage dann falsch wäre.

(19)
(20)
(21)

Zum Beispiel, suche ein g so dass

Pointedα⊢g: (α→Bool)→[α]→[α]

aber nicht

α⊢g: (α→Bool)→[α]→[α]

(22)

Zum Beispiel, suche ein g so dass

Pointedα⊢g: (α→Bool)→[α]→[α]

aber nicht

α⊢g: (α→Bool)→[α]→[α]

Natürlicher „Anfang“:

Γ⊢τ /∈Pointed Γ(fix(λx :τ.x)) :τ

(23)

Zum Beispiel, suche ein g so dass

Pointedα⊢g: (α→Bool)→[α]→[α]

aber nicht

α⊢g: (α→Bool)→[α]→[α]

Natürlicher „Anfang“:

Γ⊢τ /∈Pointed Γ(fix(λx :τ.x)) :τ Ansonsten, abhängig vom Typ weitersuchen.

(24)

Zum Beispiel, suche ein g so dass

Pointedα⊢g: (α→Bool)→[α]→[α]

aber nicht

α⊢g: (α→Bool)→[α]→[α]

Natürlicher „Anfang“:

Γ⊢τ /∈Pointed Γ(fix(λx :τ.x)) :τ Ansonsten, abhängig vom Typ weitersuchen.

Problem: Nicht alle vorhandenen Regeln sind „syntax-gesteuert“.

(25)

Zum Beispiel, suche ein g so dass

Pointedα⊢g: (α→Bool)→[α]→[α]

aber nicht

α⊢g: (α→Bool)→[α]→[α]

Natürlicher „Anfang“:

Γ⊢τ /∈Pointed Γ(fix(λx :τ.x)) :τ Ansonsten, abhängig vom Typ weitersuchen.

Problem: Nicht alle vorhandenen Regeln sind „syntax-gesteuert“.

Insbesondere:

(26)

Zum Beispiel, suche ein g so dass

Pointedα⊢g: (α→Bool)→[α]→[α]

aber nicht

α⊢g: (α→Bool)→[α]→[α]

Natürlicher „Anfang“:

Γ⊢τ /∈Pointed Γ(fix(λx :τ.x)) :τ Ansonsten, abhängig vom Typ weitersuchen.

Problem: Nicht alle vorhandenen Regeln sind „syntax-gesteuert“.

Insbesondere:

Γ⊢t:τ1→τ2 Γ⊢u:τ1 Γ⊢(t u) :τ2

(27)

Zum Beispiel, suche ein g so dass

Pointedα⊢g: (α→Bool)→[α]→[α]

aber nicht

α⊢g: (α→Bool)→[α]→[α]

Natürlicher „Anfang“:

Γ⊢τ /∈Pointed Γ(fix(λx :τ.x)) :τ Ansonsten, abhängig vom Typ weitersuchen.

Problem: Nicht alle vorhandenen Regeln sind „syntax-gesteuert“.

Insbesondere:

(28)

• [Dyckhoff 1992] stellt eine Beweisprozedur für intuitionistische Propositional-Logik vor.

(29)

• [Dyckhoff 1992] stellt eine Beweisprozedur für intuitionistische Propositional-Logik vor.

• Diese Prozedur kann man als Generator für fix-freie Terme zu vorgegebenen polymorphen Typen verwenden

(Djinn, [Augustsson 2009]).

(30)

• [Dyckhoff 1992] stellt eine Beweisprozedur für intuitionistische Propositional-Logik vor.

• Diese Prozedur kann man als Generator für fix-freie Terme zu vorgegebenen polymorphen Typen verwenden

(Djinn, [Augustsson 2009]).

• Wir fügen unsere Regel

Γ⊢τ /∈Pointed Γ(fix (λx :τ.x)) :τ hinzu, führen weitere Anpassungen durch . . . [Seidel & V. 2010]

(31)

Sind alle Totalitäts- und „6=⊥“-bedingungen für jedesg notwendig?

(32)

Sind alle Totalitäts- und „6=⊥“-bedingungen für jedesg notwendig?

Nein!

(33)

Sind alle Totalitäts- und „6=⊥“-bedingungen für jedesg notwendig?

Nein!

Naheliegender Ansatz: ersetze

Γ⊢t11 Γ⊢t22 Γ⊢(seq t1 t2) :τ2 durch

Γ⊢τ1∈Seqable Γ⊢t11 Γ⊢t22 Γ⊢(seqt1 t2) :τ2

(34)

Sind alle Totalitäts- und „6=⊥“-bedingungen für jedesg notwendig?

Nein!

Naheliegender Ansatz: ersetze

Γ⊢t11 Γ⊢t22 Γ⊢(seq t1 t2) :τ2 durch

Γ⊢τ1∈Seqable Γ⊢t11 Γ⊢t22 Γ⊢(seqt1 t2) :τ2 , wobei

Seqableα,Γ⊢α∈Seqable ???

Γ⊢(τ1→τ2)∈Seqable Γ⊢Bool∈Seqable Γ⊢[τ]∈Seqable

(35)

Sind alle Totalitäts- und „6=⊥“-bedingungen für jedesg notwendig?

Nein!

Naheliegender Ansatz: ersetze

Γ⊢t11 Γ⊢t22 Γ⊢(seq t1 t2) :τ2 durch

Γ⊢τ1∈Seqable Γ⊢t11 Γ⊢t22 Γ⊢(seqt1 t2) :τ2 , wobei

Seqableα,Γ⊢α∈Seqable ???

Γ⊢(τ1→τ2)∈Seqable

(36)

Referenzen

ÄHNLICHE DOKUMENTE

→ Der entstehende Code kann Sprünge aus dem Rumpf einer Funktion in eine andere enthalten ???.. Exkurs 4: Interprozedurale Analyse. Bisher können wir nur jede Funktion

PAGE:.. The object program uses the record identification code to identify the record read in step 1 by scanning each record description on the Input Format

nachträglichen Herstel- lungsarbeiten an abnutzba- ren beweglichen Wirt- schaftsgütern des Anlage- vermögens, wenn die vor- genannten Voraussetzun- gen erfüllt sind und

2009] : Betrachtung von „impräziser“ Fehlersemantik... 2009] : Betrachtung von

2009] : Betrachtung von „impräziser“

• Ich gebe einen Typ vor, etwa g :: (α → Bool) → [α] → [α]. • Ich erhalte ein

a) Stelle einen Term auf, mit dem sich der Preis von Orangen in Abhängigkeit vom Gewicht (kg) berechnen lässt. Beachte: Ein Kilogramm Orangen kostet 3 €... b) Berechne den Preis

Der mit der Begebung von Komplexen Produkten durch die Credit Suisse, handelnd durch eine dazu bestimmte Zweigniederlassung ausserhalb der Schweiz, erzielte Nettoerlös