Diferencia entre revisiones de «Práctica 3 (pre 2010, Paradigmas)»

De Cuba-Wiki
Sin resumen de edición
 
(No se muestra una edición intermedia del mismo usuario)
Línea 3: Línea 3:
==Ejercicio 01==
==Ejercicio 01==
==Ejercicio 02==
==Ejercicio 02==
*a.
λx. λy. λz . (z x) y z
            |(ABS)
λy. λz . (z x) y z
            |(ABS)
λz . (z x) y z
            |(ABS)
    (z x) y z
    |        |  (APP)
    (z x) y    z:s4
  |      | (APP)
  (z x)  y:s3
  |  | (APP)
z:s1 x:s2
Partiendo de abajo hacia arriba: (donde dice =, lease igual con puntito)
* (APP) S = MGU {s1=s2->'''s5'''}={s2->s5/s1} ; Γ = {z:s2->s5,x:s2} |> z x : s5
* (APP) S = MGU {s5=s3->'''s6'''}={s3->s6/s5} ; Γ = {z:s2->(s3->s6),x:s2,y:s3} |> (z x) y : s6
* (APP) S = MGU {s6=s4->'''s7''',s4=s2->(s3->s6)}={s2->(s3->s6)/s4,(s2->(s3->s6))->s7/s6}
De lo anterior se puede ver que s6 es un tipo infinito -> FALLA.
*b.
λx. x (w (λy.w y))
        |(ABS)
  x (w (λy.w y))
  |            |  (APP)
x:s1      (w (λy.w y))
            |      |  (APP)
          w:s2  (λy.w y)
                  |  (ABS)
                w y
                |    | (APP)
              w:s3 y:s4
Partiendo de abajo hacia arriba: (donde dice =, lease igual con puntito)
* (APP) S = MGU {s3=s4->'''s5'''}={s4->s5/s3} ; Γ = {w:s4->s5,y:s4} |> w y : s5
* (ABS) Γ = {w:s4->s5} |> λy:s4.xy : s4->s5
* (APP) S = MGU {s2=s4->s5,s2=(s4->s5)->'''s6'''}={s4->s5=(s4->s5)->s6}={(s4->s5)->s6/(s4->s5)}
De lo anterior se puede ver que (s4->s5) es un tipo infinito -> FALLA.
*c.
( λz. λx. x (z (λy. z)) ) True
      |                      | (APP)
λz. λx. x (z (λy. z))    True:bool
    | (ABS)
λx. x (z (λy. z))
    | (ABS)
x (z (λy. z))
  |    | (APP)
x:s1 (z (λy. z))
        |    | (APP)
      z:s2  (λy. z)
              | (ABS)
            z:s3
Partiendo de abajo hacia arriba: (donde dice =, lease igual con puntito)
* (ABS) Γ = {z:s3} |> λy:'''s4'''. z : s4->s3
* (APP) S = MGU {s2=s3,s2=(s4->s3)->'''s5'''}={s3=(s4->s3)->s5}={(s4->s3)->s5/s3}
De lo anterior se puede ver que s3 es un tipo infinito -> FALLA.
==Ejercicio 03==
==Ejercicio 03==
==Ejercicio 04==
==Ejercicio 04==
Línea 10: Línea 70:
==Ejercicio 08==
==Ejercicio 08==
==Ejercicio 09==
==Ejercicio 09==
''Extender el algoritmo de inferencia para soportar la inferencia de tipos de arboles binarios. En esta extension del algoritmo solo se consideraran los constructores del arbol.''
'''Respuesta:'''
Sean 0 el contexto vacio, G el contexto gamma, U la union, _s sub sigma, =:= la unificacion de tipos:
W(nil_s) = 0 |> nil_s : ABs
W(bin_s(M,N,O)) = SG1 U SG2 U SG3 |> S(bin_s(M,N,O)) : ABs donde
  W(M) = G1 |> M : rho
  W(N) = G2 |> N : tau
  W(O) = G3 |> O : phi
  S = MGU {tau =:= s, rho =:= ABs, phi =:= ABs} U
      U {mu1 =:= mu2 | x : mu1 in Gi, x : mu2 in Gj, i != j}
''Escribir las reglas de tipado e inferencia para el case de arboles binarios, y la regla analoga en el algoritmo de inferencia.''
==Ejercicio 10==
==Ejercicio 10==


[[Category:Prácticas]]
[[Category:Prácticas]]

Revisión del 17:19 28 abr 2008

Plantilla:Back

Ejercicio 01

Ejercicio 02

  • a.
λx. λy. λz . (z x) y z 
           |(ABS)
λy. λz . (z x) y z
           |(ABS)
λz . (z x) y z
           |(ABS)
    (z x) y z
    |         |  (APP)
   (z x) y    z:s4
  |      | (APP)
 (z x)   y:s3
 |   | (APP)
z:s1 x:s2

Partiendo de abajo hacia arriba: (donde dice =, lease igual con puntito)

  • (APP) S = MGU {s1=s2->s5}={s2->s5/s1} ; Γ = {z:s2->s5,x:s2} |> z x : s5
  • (APP) S = MGU {s5=s3->s6}={s3->s6/s5} ; Γ = {z:s2->(s3->s6),x:s2,y:s3} |> (z x) y : s6
  • (APP) S = MGU {s6=s4->s7,s4=s2->(s3->s6)}={s2->(s3->s6)/s4,(s2->(s3->s6))->s7/s6}

De lo anterior se puede ver que s6 es un tipo infinito -> FALLA.

  • b.
λx. x (w (λy.w y)) 
       |(ABS)
  x (w (λy.w y)) 
 |            |   (APP)
x:s1      (w (λy.w y)) 
           |      |   (APP)
         w:s2  (λy.w y)
                 |  (ABS)
                w y
               |    | (APP)
              w:s3 y:s4

Partiendo de abajo hacia arriba: (donde dice =, lease igual con puntito)

  • (APP) S = MGU {s3=s4->s5}={s4->s5/s3} ; Γ = {w:s4->s5,y:s4} |> w y : s5
  • (ABS) Γ = {w:s4->s5} |> λy:s4.xy : s4->s5
  • (APP) S = MGU {s2=s4->s5,s2=(s4->s5)->s6}={s4->s5=(s4->s5)->s6}={(s4->s5)->s6/(s4->s5)}

De lo anterior se puede ver que (s4->s5) es un tipo infinito -> FALLA.

  • c.
( λz. λx. x (z (λy. z)) ) True
     |                      | (APP)
λz. λx. x (z (λy. z))     True:bool
   | (ABS)
λx. x (z (λy. z))
   | (ABS)
x (z (λy. z))
  |    | (APP)
x:s1 (z (λy. z))
       |    | (APP)
     z:s2  (λy. z)
             | (ABS)
            z:s3

Partiendo de abajo hacia arriba: (donde dice =, lease igual con puntito)

  • (ABS) Γ = {z:s3} |> λy:s4. z : s4->s3
  • (APP) S = MGU {s2=s3,s2=(s4->s3)->s5}={s3=(s4->s3)->s5}={(s4->s3)->s5/s3}

De lo anterior se puede ver que s3 es un tipo infinito -> FALLA.

Ejercicio 03

Ejercicio 04

Ejercicio 05

Ejercicio 06

Ejercicio 07

Ejercicio 08

Ejercicio 09

Extender el algoritmo de inferencia para soportar la inferencia de tipos de arboles binarios. En esta extension del algoritmo solo se consideraran los constructores del arbol.

Respuesta:

Sean 0 el contexto vacio, G el contexto gamma, U la union, _s sub sigma, =:= la unificacion de tipos:

W(nil_s) = 0 |> nil_s : ABs
W(bin_s(M,N,O)) = SG1 U SG2 U SG3 |> S(bin_s(M,N,O)) : ABs donde
 W(M) = G1 |> M : rho
 W(N) = G2 |> N : tau
 W(O) = G3 |> O : phi
 S = MGU {tau =:= s, rho =:= ABs, phi =:= ABs} U
      U {mu1 =:= mu2 | x : mu1 in Gi, x : mu2 in Gj, i != j}


Escribir las reglas de tipado e inferencia para el case de arboles binarios, y la regla analoga en el algoritmo de inferencia.

Ejercicio 10