Deel I: Functionele Programmeertalen

59
Deel I: Functionele Deel I: Functionele Programmeertalen Programmeertalen Hoofdstuk 3: Uitgebreide -rekening

description

Deel I: Functionele Programmeertalen. Hoofdstuk 3: Uitgebreide -rekening. Functioneel Programma. Een functie-applicatie FA , d.i. een programma + zijn input. Uitvoering van een programma:  -reductie tot  -normaalvorm een functioneel programma heeft slechts 1 oplossing.  -conversie. - PowerPoint PPT Presentation

Transcript of Deel I: Functionele Programmeertalen

Page 1: Deel I: Functionele Programmeertalen

Deel I: FunctioneleDeel I: FunctioneleProgrammeertalenProgrammeertalen

Hoofdstuk 3:

Uitgebreide

-rekening

Page 2: Deel I: Functionele Programmeertalen

Functioneel Programma

Een functie-applicatie FA, d.i. een programma + zijn input.

Uitvoering van een programma: -reductie tot -normaalvorm een functioneel programma heeft

slechts 1 oplossing

Page 3: Deel I: Functionele Programmeertalen

-conversie

CC

CC

C

C

V

V

C

)(,

)(,

vMvM

MNNM

vv

cc

Page 4: Deel I: Functionele Programmeertalen

-conversieMet -regels

NM

NMMN

MMfMMkk

indienfalse,

indientrue,

3 2

632*

),,(11

Applicatieve reductieorde voor de -reductie

Page 5: Deel I: Functionele Programmeertalen

Stelling van Mitschke

De -reductierelatie voldoet aan de eigenschap van Church-Rosser

Page 6: Deel I: Functionele Programmeertalen

Types

Typesysteem van Church: zelf opgeven van types, verificeren van types

Typesysteem van Curry: afleiden van types

Page 7: Deel I: Functionele Programmeertalen

Types

Semantiek van een type : de verzameling van alle -termen van dit type D

Voordelen van types: Nagaan van de correctheid van

uitdrukkingen Efficiënte uitvoering

Type: syntactische uitdrukking die geassocieerd kan worden met een -term

Page 8: Deel I: Functionele Programmeertalen

Abstracte type-syntax

De ’s zijn typeconstanten (B,Z)Functies zijn van het type Types zijn rechts-associatief

( = ( ))

)(,

,,,

Page 9: Deel I: Functionele Programmeertalen

Instructie

Een instructie is van de vorm M :: met M het onderwerp, en het predicaat

Page 10: Deel I: Functionele Programmeertalen

BasisEen verzameling van instructies

waarin de onderwerpen allemaal verschillende -veranderlijken zijn. Een M :: is afleidbaar uit , indien geldt dat | M :: met

Z

BBB

BB

B

::,3,2,1,0,1,2,3

::OR,AND

::NOT

::FALSE,TRUE

Page 11: Deel I: Functionele Programmeertalen

Basis

::).(::,::

::)(::,::

::)::(

::,

::,

MxMx

MNNM

dd

ZZZ

BZZ

|||

|||

|

Page 12: Deel I: Functionele Programmeertalen

Voorbeelden

::.}::{

::.}::,::{

::.}::,::{

xxx

yxyx

yxyyx

|

|

|

Page 13: Deel I: Functionele Programmeertalen

Onderwerpreductie

::)::( MMMM ||

Page 14: Deel I: Functionele Programmeertalen

-termen met een type hebben een normaalvorm

| M :: M heeft een normaalvorm

x.xx heeft geen type in ons typesysteem

Page 15: Deel I: Functionele Programmeertalen

Semantiek

Het doel van de denotationele semantiek is om met elke syntactisch correcte -uitdrukking een ‘wiskundige waarde’ te associëren

Page 16: Deel I: Functionele Programmeertalen

Semantiek

De functie die een waarde associeert met elke -expressie wordt D genoteerd

])[,(),.(

),(),(),(

)(),(

)(),(

avMaMv

NMMN

vv

CC

DD

DDD

D

DD

Waarbij de omgeving voorstelt

Page 17: Deel I: Functionele Programmeertalen

Voorbeeld

0

0

, )(

, )(

0 0 )(

00 )(

, )(

a

b

ba

a

b

baba

D

D

D

D

D

Page 18: Deel I: Functionele Programmeertalen

Behoud van betekenis

Het omgekeerde is echter niet noodzakelijk waar. Uit D(2 + 8) = D(3 + 7) kan men niet besluiten dat er moet gelden dat 2 + 8 3 + 7

)()()( NMNM DD

Page 19: Deel I: Functionele Programmeertalen

Striktheid

),.( fxD

Page 20: Deel I: Functionele Programmeertalen

Combinatoren

Combinator: klasse van -congruente gesloten -termen

yxy

xxy

xx

.false

.true

.I

Page 21: Deel I: Functionele Programmeertalen

Stelling van Schönfinkelen Curry

De -rekening kan geherformuleerd worden in de combinatorrekening met slechts één basisoperatie: de applicatie

Hiervoor zijn slechts twee combinatoren nodig: S en K,

)(S

K

)(.S

.K

NLMLMNL

MMN

yzxzxyz

xxy

Page 22: Deel I: Functionele Programmeertalen

Standaard combinatorexpressie

Een combinatorexpressie waarin de enig voorkomende combinatoren S en K zijn, wordt een standaard combinatorexpressie genoemd

Page 23: Deel I: Functionele Programmeertalen

Combinatortransformatie

]][[].[

])[])([(][

,][

][

][

][][][

][].[

PPy

QPPQ

xUUU

x

UU

QPPQ

PPx

yxx

xxx

x

x

x

KKK

KKK

K

K

K

KKK

KK

S

K

SKK

Waarbij U een constante, een combinator of een veranderlijke voorstelt

Page 24: Deel I: Functionele Programmeertalen

Voorbeelden

SKK

][].[

xxx xKK

)KK))(KK)(KS(S(S

])K[]))(K[])(S[(S(S

])K[])(SK[(S

]K)SK[(

]][[

].[].[

xxx

xx

x

yx

x

y

yyyxy

KKK

KK

K

KK

KK

Page 25: Deel I: Functionele Programmeertalen

Voorbeelden

)).))((.)(.))(((.(

))((

])[])([(

][

]][[

].[].[

zxxyxxyxxyyzxzxyz

KzKKS

zKS

Kz

z

zyzxy

xx

x

yx

x

KK

K

KK

KK

Page 26: Deel I: Functionele Programmeertalen

Voorbeelden

zxy

zyz

zxxyz

zzyxxyz

zyzyxxyzy

zyxxyyyzxzxyz

zxxyxxyyyzxzxyz

zxxyxxyxxyyzxzyzx

.

..

).(.

)).()(..(

).))()(..((

).())..())((.(

)).())(..())((.(

)).)(().)(.())((.(

Typisch O(N log N) tot O(N2)

Page 27: Deel I: Functionele Programmeertalen

Combinatoren van Turner

MNPNMP

NPMMNP

MM

)(

)(

C

B

I

)(])[(][

)(])[(][

][

QxQPPQ

PxQPPQ

x

xx

xx

x

indien ,C

indien ,B

g)(vervangin I

KK

KK

K

Page 28: Deel I: Functionele Programmeertalen

Voorbeelden

I

][].[

xxx xKK

KI

]I[

]][[

].[].[

x

yx

x

y

yyyxy

K

KK

KK

Page 29: Deel I: Functionele Programmeertalen

Voorbeelden

)K)(KK(S of

)KK(C of )K(BK

])[])(K[(S of

]K[C of ][BK

]K[

]][[

].[].[

z

zz

z

zz

z

z

zyzxy

xx

xx

x

yx

x

KK

KK

K

KK

KK

Page 30: Deel I: Functionele Programmeertalen

Voorbeelden

5 2))I)IB(S(B(C

5 2))I])[B(S(B(C

5 2]))[][S(B(C

5 2])[B(C

5 2)]([C

5]2)([

]5[]2)(.[]5)2.[(

x

xx

xx

xx

xx

xxxxxx

x

xx

x

x

x

K

KK

K

K

K

KKK

Page 31: Deel I: Functionele Programmeertalen

Voorbeelden

27

2 25

2)5 5 (

2))5)(5((

2))5(5)((

2)5))(((

2 5)))(((5 2)))(((

II

IIB

IIBS

IIBSBIIBSBC

De reductie van deze expressie geeft ons

Page 32: Deel I: Functionele Programmeertalen

Extra combinatorreductieregels

I

I

II

IKI

IKIIKIS

zz

zz

zz

zzz

yzxzxyz

.

.

)(.

)(.

)))((.()(

Page 33: Deel I: Functionele Programmeertalen

Optimalisatieregelsvan Turner

MNNM

MNNM

MM

MNNM

CKS

BKS

IKS

KKKS

)(

)(

)(

)())((

Page 34: Deel I: Functionele Programmeertalen

Extensionele gelijkheid

MNx

NxM

NxMxNxM

B

KKS

)(

))(()(

De B-regel heeft een speciaal geval

MM IB

Page 35: Deel I: Functionele Programmeertalen

MM

MxM

MMx

MMxx

Mx

IxMBMIx

x

x

IB

B ][

][

][)].([

)(

K

K

KK

Extensionele gelijkheid

Het bewijs is door extensionele gelijkheid

Page 36: Deel I: Functionele Programmeertalen

SupercombinatorenEen supercombinator is een -

expressie van de vormMxxS n .1

zodanig dat

S geen vrije veranderlijken bevat M geen -abstractie is (alle ’s staan

voorop) alle -abstracties in M

supercombinatoren zijn de ariteit n 0

Page 37: Deel I: Functionele Programmeertalen

Voorbeelden

).(.

.

.

4 3

3

xxxff

yxxy

xx

Page 38: Deel I: Functionele Programmeertalen

Voorbeelden

Terwijl de volgende expressies geensupercombinatoren zijn

4)3)..((

.

.

yxyx

yxx

yx

Page 39: Deel I: Functionele Programmeertalen

Supercombinatorredex

Een supercombinatorredex is de applicatie van een supercombinator met ariteit n op n argumenten. Een supercombinatorreductie vervangt een supercombinatorredex door zijn contractum, t.t.z. het lichaam van de supercombinator met invulling van al zijn argumenten.

Page 40: Deel I: Functionele Programmeertalen

-reductie voor supercombinatoren

}/{}/{).( 1111 nnnn NxNxMNNMxx

Waarbij de substituties simultaanuitgevoerd worden

Page 41: Deel I: Functionele Programmeertalen

Supercombinator-transformatie: -lifting

Gebaseerd op de abstractie van vrije veranderlijken

))..(()..( yzxzxyyxxy Beide expressies zijn -congruent

Toename omvang: typisch O(N) en in het slechtste geval O(N log N)

Het resultaat is een supercombinator indien toegepast op een combinator

Page 42: Deel I: Functionele Programmeertalen

Voorbeelden

4)3 )..((4)3)..((

).(.

).(.

xyxxyxyxyx

yyxyxyxx

yyyxyx

Page 43: Deel I: Functionele Programmeertalen

Naamgeving

4)3 plus.(

.plus

xx

yxxy

Waarbij deze transformatie nogmaals kantoegepast worden

4 plusdrie

3 plus.plusdrie

.plus

xx

yxxy

Page 44: Deel I: Functionele Programmeertalen

In Combinatornotatie

4 plusdrie

3 plus plusdrie

plus

xx

yxyx

of

4 plusdrieprog

3 plus plusdrie

plus

xx

yxyx

734

3 4 plus

4 plusdrieprog

Page 45: Deel I: Functionele Programmeertalen

Vereenvoudigingen2)1))..(((2 1).( yxyxyxxy

-lifting van de y geeft ons

2)1)))..(((( xyxxyx

Hetgeen kan herschreven worden als

2 1 somprog

plus som

plus

xx

yxyx

Page 46: Deel I: Functionele Programmeertalen

Vereenvoudigingen2)1))..(((2 1).( yxyxyxxy

-lifting van de y geeft ons

2)1)))..(((( xyxxyx

Hetgeen equivalent is met

2 1 plusprog

plus

yxyx

Page 47: Deel I: Functionele Programmeertalen

Recursie

10 facprog

)))1(fac((1)0( if fac

nnnn

Page 48: Deel I: Functionele Programmeertalen

Complexiteit

)1fac(met ,

)1fac(met ,1

)))10(fac(0(1 true if

)))10fac(0(1)00if(

0fac

1met ),(fac

))1(fac(

)))1(fac((1false if

)))1(fac((1)0if(fac

nnff

nrrn

nmmn

nn

nn

nnnn

Aantal reducties n * 5 + 3 O(N)

Page 49: Deel I: Functionele Programmeertalen

Type-afleiding

21

2

1

::A

::

::

A

tt

tE

tx

Ex

Types toekennen aan de argumenten +resultaat

Page 50: Deel I: Functionele Programmeertalen

Type-afleiding

34

4

3

::

::

::

ttM

tN

tMN

Types toekennen aan het functielichaam

Unificatie van de types

Page 51: Deel I: Functionele Programmeertalen

Voorbeeld

4321

4

3

2

1

::F

::)(

::

::

::

)(F

tttt

tyzx

tz

ty

tx

yzxzyx

Page 52: Deel I: Functionele Programmeertalen

Voorbeeld

)()(::F

)()(::F

::

::

::

::

465645

56

6

45

5

tttttt

tty

tz

ttx

tyz

Page 53: Deel I: Functionele Programmeertalen

Voorbeeld

3

21

2

1

::F

::F

::)(F

::

)(FF

tx

tt

txx

tx

xxx

)(::F

::F

::

::

34

4

23

tt

tx

ttx

Niet alle supercombinatoren hebben een type xxx F

Page 54: Deel I: Functionele Programmeertalen

Strictheidsanalyse

Transformatie naar een abstract domein

)()()(

)(

#)(

1)(

NMMN

vV

FF

C

AAA

A

A

A

zwordt afgebeeld op 0, alle andere waarden op 1

Page 55: Deel I: Functionele Programmeertalen

Strictheidsanalyse

Transformatie voor ingebouwde functies

yxyx

yxyx

yxyx

zyxzyx

&#

&#

&*#

)|(&if#

Page 56: Deel I: Functionele Programmeertalen

Voorbeeld

)) )1( fac( 1 )0( if fac xnnnxn

Na transformatie:

nxn

xnnnxn

fac#

))) )1&( fac#(&|1(&)1&( fac#

Striktheidsanalyse:

10 1 fac#

01 0 fac#

Page 57: Deel I: Functionele Programmeertalen

Voorbeeld

)))&( fac# fac#

)&( fac# fac#

fac if fac

annanan

annnanan

xnnanan

(|(&

))))1&((&|(&)1&(

))()1(()0(

Striktheidsanalyse:

0 1 fac#)))0&1( 1 (fac#|0(&10 1 fac#

0)))1&0( 0 (fac#|1(&01 0 fac#

Page 58: Deel I: Functionele Programmeertalen

Fixpunt berekening

an

an

annanan

&

)0|(&)1&(

)))&( )1&(fac#|(&)1&( fac# 01

Na substitutie van deze functie krijgen we

an

anan

annnan

annan

annan

annanan

&

)&(|)&(

)))&(&(&(|)&(

)))&(&(|(&

)))&(&)1&((|(&)1&(

)))&( )1&((fac#|(&)1&( fac# 12

Page 59: Deel I: Functionele Programmeertalen

Fixpunt berekening

an

an

annanan

&

)0|(&)1&(

)))&( )1&(fac#|(&)1&( fac# 01

Fixpunt:anan & fac#

Striktheidsanalyse:

00&10 1 fac#

01&01 0 fac#