210 likes | 381 Views
Tipus Formes Normals i Pas de Paràmetres. David Moreno Oliveras. Ordres de Reducció. L’ordre de Reducció és l’estratègia que indica quin redex cal seleccionar a cada pas de la reducció
E N D
Tipus Formes Normals i Pas de Paràmetres David Moreno Oliveras
Ordres de Reducció • L’ordre de Reducció és l’estratègia que indica quin redex cal seleccionar a cada pas de la reducció • Cal buscar un redex en l’expressió, reduïr-lo i repetir aquest procés fins que l’expressió estigui en Forma Normal • Forma Normal == idea “Fi Còmput” mentre hagi_redex reduïr un_redex
Forma Normal (I) • No totes les expressions ténen Forma Normal No està en Forma Normal Si intentem β – Reduïr : β No està en Forma Normal ... EL CÒMPUT DE L’EXPRESSIÓ NO ACABA I NO TÉ UNA FORMA NORMAL
Forma Normal (II) • Church-Rosser mitjançant un Teorema afirma i demostra que si una expressió té Forma Normal aquesta és únicaexcepte α-equivalències • Sempre podem trobar la Forma Normal d’una expressió si existeix? En quin ordre fem les Reduccions ? • Ordre Normal • Ordre Aplicatiu
Ordre Aplicatiu – CBV (I) • Seleccionar el redex més INTERN(el més aniuat) i més a l’esquerra. • Estratègia coneguda com pas de paràmetres per valor (call by value). • Es redueixen primer els paràmetres de la funció. Es redueix l’argument de la funció abans d’avaluar-se. Quan es coneixen els valors ens substitueixen a l’equació de la funció. PROBLEMA:Molts cops fan reduccions innecessàries per calcular valor de l’expressió.
Ordre Aplicatiu – CBV (II) • Exemple 1 : zero :: Integer -> Integer zero x = 0 zero (10*4) per operador (*) = zero (40) per definició de zero = 0 • Exemple 2 :doble :: Integer -> Integer doble x = x+x doble (doble 3) per definició de doble = doble (3+3) per definició de l’operador (+) = doble (6) per la definició de doble = 6+6 per l’operador (+) = 12
Ordre Normal – CBN (I) • Seleccionar el redex més EXTERN(el menys aniuat) i més a l’esquerra. • Estratègia coneguda com pas de paràmetres per nom o referència (call by name). • Es passen com a paràmetres expressions en comptes de valors. Es redueix primer l’aplicació de la funció. • És Normalitzant : Si l’expressió té forma normal, seguint aquesta estratègia segur que es troba la forma normal (Teorema d’estandarització)
Ordre Normal – CBN (II) • Exemple :doble :: Integer -> Integer doble x = x+x doble (doble 3) per definició de doble = (doble 3)+ (doble3) per definició de doble = (3+3) + (doble 3) per l’operador (+) = 6 + (doble 3) per definició de doble = 6 + (3+3) per l’operador (+) = 6 + 6 per l’operador (+) = 12 6 reduccions
Ordre Normal / Ordre Aplicatiu • Teorema Estandarització : Si té Forma Normal la trobarem aplicant reducció d’Ordre Normal Ordre Normal : (λx.y) (λx.xx) (λx.xx)y Ordre Aplicatiu (λx.y) (λx.xx) (λx.xx) (λx.y) (λx.xx) (λx.xx) (λx.y) (λx.xx) (λx.xx) ... β β β β Seqüència infinita de valors
Avaluació Lazy o Lenta (I) • Consisteix en utilitzar pas per nom i recordar els valors dels arguments ja calculats per evitar recalcular-los. • També s’anomena pas de paràmetres per necessitat (call by need) • Molt útil per treballar amb llistes infinites. • Aquest tipus d’avaluació l’utilitza Haskell
Avaluació Lazy o Lenta (II) • Exemple : doble (doble 3)per la definició de doble a + a on a = doble 3 per la definició de doble a + a on a = b + b on b = 3 per l’operador (+) a + aon a = 6 per l’operador (+) 12 4 reduccions
Head Normal Form (I) • En λ-càlcul els termes poden ser: x : Variable M N : Aplicació λx.M : Abstracció M pot ser : • HEAD NORMAL FORM (HNF) si té la forma : • Es pot fer un Head Reduction (reducció reiterada del redex de capçalera) Redex capçalera
Head Normal Form (II) Formalitza l’ús parcial d’objectes (funcions, llistes) infinits. Ex : SI (HNF) x, λx.y((λx.x x)(λx.x x)) NO (HNF) λy.(λx.a) y admet head reduction λy.a
Head Normal Form (III) • Head Reduction determina de forma única una seqüència de termes (aquesta seqüència pot acabar o no) • Reduïnt un terme M a la seva HNF obtenim una quantitat finita de la seva informació • Ex : ceros´ = Y (par 0) ceros´= (0,(0,(0....))) ceros´* par 0 ceros´ = (λxyf.f x y) 0 ceros´ * λf.f 0 ceros´ (HNF) = λf.f 0 (λf.f 0 ceros´) * ...primero ceros´* 0 computacions finites d’un valor infinitprimero (segundo ceros´)* 0
Forma Normal / Head Normal Form • Un terme en Forma Normal també està en HNF • Un terme pot estar en HNF i no estar en Forma Normal Ex:λx.x (λz.zb)SI en HNF (no té redex capçalera) NO es una Forma Normal λx.x b Forma Normal β
Forma Normal / Head Normal Form • Un terme pot no tenir Forma Normal i tampoc HNF Ex: (λx.xx) (λx.xx) • Un terme pot tenir vàries HNF Ex: (λx. (λz.z)x) ((λz.z) (λz.z)) HNF : λx.x((λz.z) (λz.z)) HNF : λx.x(λz.z)
Weak Head Normal Form • Inici : Wadsworth en 1976 i permet, entre altres coses, distinguir certs còmputs que no acaben. • WHNF : (són termes sense redex extern) • Constant • λx.E • f E1E2...En si f és una constant o funció d’aritat n>=0 • Si un terme està en HNF també està en WHNF
Head Normal Form / Weak Normal Form (I) • En HNF s’avaluen les λ-abstraccions internes i en WHNF no s’avaluen. • Ex : λx.(λz.z) M NO està en HNF SI està en WHNF (no té redex extern) • Ex2 : λx.(λy.λx.+ x y) x SI WHNF i no és necessari reduïr redex més intern. Procés acaba únic redexPROBLEMA : DUPLICITAT IDENTIFICADOR
Head Normal Form / Weak Normal Form (II) • Nomès quan l’expressió és aplicada a un argument cal reduïr per Ordre Normal(redex més extern de més a l’ esquerra) i obtenir la WHNF. • Ex3 : (λx.(λy.λx.+ x y) x) 4 NO WHNF (λy.λx.+ x y) 4 λx.+ x4 SI WHNF EVITEM EL PROBLEMA DE DUPLICITAT IDENTIFICADOR PERQUÈ ES REDUEIX EL REDEX MÉS EXTERN, QUE NO TÉ VARIABLES LLIURES β β
WHNF i Paràmetres • Al aplicar reduccions a (λ.N)M : • Ordre Normal (call by name) : Poden redüïr (λ.N) M sense haver de reduïr M prèviament a WHNF • Ordre Aplicatiu (call by value) : Prèviament cal reduïr l’expressió M a WHNF abans de reduïr (λ.N) M