manta fundamentación rodrigo cardoso universidad de los andes depto. de ing. de sistemas y...

38
ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

Upload: anibal-caraballo

Post on 22-Jan-2016

229 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa Fundamentación

Rodrigo Cardoso

Universidad de los Andes

Depto. de Ing. de Sistemas y Computación

Page 2: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 2

Contenido

1 TADs ecuacionales

2 Semántica

3 Variantes de definición

4 Prueba de teoremas sobre TADs

5 Implantación abstracta

6 Implantación concreta

Page 3: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 3

1 TADs ecuacionales

• Un Tipo Abstracto de Datos ( TAD ) es una estructura algebraica heterogénea

• TAD = Signatura , Axiomas

• La signatura es una declaración de operaciones o funciones y sus funcionalidades

• Los axiomas son predicados que condicionan las operaciones del TAD.

• En un TAD ecuacional, todos los axiomas son ecuaciones.

Page 4: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 4

TAD Cola [ X ]

* vac : Cola

* ins : Cola x X Cola

esvac : Cola bool

prim : Cola X

ati : Cola Cola

Axiomas

[ev1] esvac ( vac ) = true[ev2] esvac ( ins ( c, x ) ) = false

[pr1] prim ( vac ) = [pr2] prim ( ins ( c, x ) ) = if esvac ( c ) then x else prim ( c ) fi

[at1] ati ( vac ) = vac[at2] ati ( ins ( c, x ) ) = if esvac ( c ) then vac else ins( ati ( c ), x ) fiDAT

Page 5: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 5

Notación para TADs

TAD Y [ X1, X2, …, Xn ]

…* g j : A j x Yp j Y

… s k : A k x Ypk Z

Axiomas

… s k ( a k , y1 ) = …

s k ( a k , y2 ) = …

DAT

TDI

Tipos primitivos

generadoras

selectoras

A i = X i1 x X i2 x … x X ir

pi 0

Z { X1, X2, …, Xn, Y }

Page 6: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 6

Clasificación de operaciones

Típicamente:

f : Xi1 x Xi2 x … x Xi2 x Ym Z

Funciones

Generadoras

Selectoras

Iniciales ( m = 0, Z = Y ) [ vac ]

Constructoras ( m > 0, Z = Y ) [ ins ]

Simplificadoras ( m 0, Z = Y ) [ ati ]

Analizadoras ( m > 0, Z = Xik ) [ prim ]

Page 7: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 7

El lenguaje del TAD

• La signatura determina el lenguaje del TAD.

• Se definen términos y axiomas.

• Los términos sirven para denotar objetos.

Cada término tiene un tipo asociado.

• Hay TADs parámetros dados (v.gr., nat, bool, …)

• Los axiomas establecen relaciones de igualdad entre términos del mismo tipo, i.e., entre denotaciones de objetos.

Page 8: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 8

Términos

• Un término atómico es una constante primitiva, una variable o indefinido.

• Una constante primitiva es un elemento de un TAD parámetro.

El tipo de una constante es el TAD al que pertenece.

• Las variables son tomadas de un conjunto enumerable.

El tipo de una variable depende del contexto en que aparezca.

• El término indefinido ( ) representa valores de error.

El tipo { } se considera incluido en todo TAD.

• Un término compuesto ( de tipo Z ) tiene la forma f ( t1,…, tr )

donde f : A1 x … x Ar Z es un símbolo de función

ti es término de tipo Ai

Page 9: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 9

Términos (cont.)

• Un término condicional ( de tipo Z ) tiene la forma

if término de tipo bool then término de tipo Z else término de tipo Z

fi

• Un término ( de tipo Z ) es uno atómico, compuesto o condicional, de tipo Z.

• Cualquier término que hace parte de otro es un subtérmino.

• Un término es básico si no contiene variables ni subtérminos indefinidos.

Page 10: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 10

Axiomas

• Los axiomas tienen la forma

L I = L D

donde:– L I es un término compuesto f ( t1,…, tr ) que no contiene

subtérminos condicionales.

– L D es un término

– Los tipos de L I y L D coinciden

• Las variables:

– tienen alcance local a los axiomas

– se consideran cuantificadas universalmente

– su tipo es determinable unívocamente del contexto en que aparecen

Page 11: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 11

El tipo de interés ( TDI )

Se define el TDI:

Y términos atómicos generados por G y variables,

más el elemento (indefinido)

v.gr.

Cola = { , vac,

ins ( vac, x1 ), ins ( vac, x2 ),

..., ins ( ins ( vac, x1 ), x1 ), ...

}

Page 12: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 12

Reducción de términos

• Los axiomas pueden utilizarse para reescribir términos

• Se usan de izquierda a derecha

• Definen una relación de reducibilidad ( . . )

• Por ejemplo:ins ( ati ( vac ), x ) ins ( vac, x )

ya que ati ( vac ) = vac

Notación:

• e1 e2 ssi Hay un axioma aplicable a e1 y el resultado

es e2

• e1 e2 ssi e1 = u1 ... ur = e2 ( r 0 )

• e1 e2 ssi e1 e2 ó e2 e1

• e1 e2 ssi e1 = u1 ... ur = e2 ( r 0 ) ( r - equivalencia )

Page 13: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 13

Semántica de un TAD Y• Un término representa un objeto (real o ya entendido)

• e1 e2 : “e2 es más simple que e1”

“valen ( significan ) lo mismo”

• e1 e2 : “e1 y e2 significan lo mismo”

• Se deberían preferir las expresiones simples ( reducidas )

• Así: para averiguar el valor de un término, se busca reducirlo a otro

equivalente

más simple

ojalá ya entendido

Page 14: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 14

Significado de los términos• e es irreducible si no se puede reescribir

Por ejemplo:

vac, x, ins ( vac, x )

• e es una forma normal de e’ si

e es irreducible

e’ e

Elegir una forma normal como significado ( o valor ) de e

e puede no tener formas normales

e puede tener varias formas normales

e puede tener formas normales que se desearía reducir ( ! )

Page 15: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 15

Cuándo es “buena” la definición de un TAD ?Dos criterios:

• Sintáctico : completitud suficiente

Conseguible por construcción, siguiendo una metodología

• Semántico : distinguibilidad de objetos

Dependiente de las intenciones del diseñador

Page 16: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 16

Completitud suficiente

• Y [ X1, …, Xn ] es suficientemente completo si todo término e de tipo Xi reduce a un elemento x de Xi ,

i.e.,

e x

• Por ejemplo:

e = prim ( ins ( ati ( vac ), x ) )

if esv ( vac ) then x

else prim ( vac )

fi

if true then x else … fi

x

Page 17: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 17

Para qué un TAD suficientemente completo ?• e x , x Xi

x es una forma normal para e

• En un TAD suficientemente completo:

Todo término de tipo primitivo evalúa a un objeto primitivo , i.e.,

Todo término de tipo primitivo tiene significado conocido

• Ejemplo:

Si en TAD Cola [ X ] se omitiera el axiomaati ( vac ) = vac

e = prim ( ins ( ati ( vac ), x ) ) if esv ( ati ( vac ) ) then x else prim ( ati

( vac ) ) fique es irreducible.

No habría significado “natural”.

Page 18: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 18

Distinguibilidad

• Si dos objetos son distinguibles, sus nombres deben ser diferenciables

• Objetos distinguibles Hay una característica que los diferencia

• Nombres diferenciables Hay una selectora que los diferencia

• Si ninguna selectora diferencia los nombres de dos objetos diferentes, faltan selectoras

• En caso contrario, se dirá que el TAD es discriminante.

Page 19: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 19

Qué pasa si no hay distinguibilidad ?

Se sabe que:

Los nombres correspondientes son:e1 = ins ( vac , a )e2 = ins ( ins ( vac , a ), b ) Nótese que:

esv ( e1 ) = esv ( e2 )prim ( e1 ) = prim ( e2 )

Pero: ati ( e1 ) = ins ( vac , b ) ati ( e2 ) = vacY puesto que:

esv ( ins ( vac, b ) ) = false true = esv ( vac )

También:e1 e2

a ba

Page 20: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 20

Igualdad definida

• Deseable: definir una operación de igualdad

eq-Y : Y Y bool

• eq-Y es una congruencia para el álgebra de términos del TAD, i.e., es compatible con la reescritura.

• Variante: definición implícita mediante funciones caracterizadoras.

• ManTa permite definición implícita de igualdades, pero no comprueba que lo sean.

Page 21: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 21

Interpretación del TAD Y

• Todo término básico debe tener exactamente una forma normal.

• Un término básico se interpreta como su forma normal.

• La reescritura es el mecanismo de cálculo de significado de los términos.

• Los axiomas deben definir comportamientos funcionales para las operaciones.

– Más que completitud suficiente, el comportamiento funcional conlleva completitud.

– ManTa ayuda a verificar la unicidad de los significados, pero no la terminación del proceso de reescritura.

No hay medidas de complejidad de los términos.

• El modelo definido es el modelo inicial de la estructura algebraica.

Page 22: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 22

3 Variantes de definición

• InstanciaciónTAD W [ X1 ] Y [ X1 , X2 ] DAT

• Producto cartesianoTAD W [ X1, X2 ] Y1 [ X1 ] Y2 [ X2 ] DAT

• SumasTAD W [ X1, X2 ] Y1 [ X1 ] Y2 [ X2 ] DAT

• Restricción

TAD W [ X ] ( Y [ X ] : restr )

restr : Y bool

...

DAT

Page 23: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 23

Semántica de las variantes de definición

• Siempre expresable en términos de la semántica estándar.

• Detalles adicionales en algunas de ellas

v.gr., en productos cartesianos, definición de proyecciones.

• Los TADs definidos por variantes deben heredar características de aquellos en los que su definición se apoya.

• ManTa no sobrecarga operadores ( no maneja herencia en el sentido de POO ).

• Falta poder definir TADs que dependen de parámetros que no son TADs, sino objetos, v.gr.,

TAD Intervalo ( m , n ) = m .. n DATTAD Zn DAT

Page 24: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 24

4 Prueba de teoremas sobre TADs

• ManTa sólo prueba teoremas expresables como ecuaciones.

• Para probar un teorema M = N se procede así:

[ 1 ] Normalizar

Reducir M y N a sus formas normales M* y N*.

Si M* N* , responder afirmativamente.

[ 2 ] Inducción estructural

Sobre las variables del TDI, usar esquemas de inducción.

Si hay éxito, responder afirmativamente.

Si no, intentar generalización.

[ 3 ] Prueba semántica

Si eq-Y( M* , N*) * true , responder afirmativamente.

En otro caso, responder “no se sabe”.

Page 25: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 25

Más sobre la prueba de teoremas ...

• Las pruebas siguen un esquema similar al del probador de Boyer & Moore.

• Es adecuado ( eficiente ) el orden del procedimiento de prueba ?

• ManTa no aprovecha lemas ya demostrados para otras pruebas.

• Cómo manejar los lemas no orientables ?

Page 26: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 26

5 Implantación abstracta

• Una implementación ( , P )

de TAD Y ( fuente ) en TAD W ( objeto ) consta de:

[ a ] : W Y ( representación )

función recursiva, parcial, sobre

[ b ] Para cada Y-función f , un W-programa p que la interpreta.

P es el conjunto de estos programas

• Esquemáticamente, se tienen situaciones como:

Y Y

W W

f

p

Y X

W

f

p

Page 27: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 27

Representación

• La función de representación

: W Y

• es definida recursivamente sobre la construcción de Y ( LFN ! ).

Así se garantiza que sea sobre.

• O sea:

se explica haciendo corresponder a cada Y-generadora un W-programa que calcula su representación

v.gr.,

empty = ( vac )

push ( ( c ) , x ) = ( ins ( c , x ) )

• Una implementación queda descrita al indicar qué W-programa interpreta cada Y-función

Page 28: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 28

ImpTAD Stack [ X ] Cola [ X ] : [SCem] empty = ( vac )

[SCpu] push ( ( c ) , x ) = ( ins ( c , x ) )

[SCpo] pop ( ( c ) ) = ( ant ( c ) )

[SCto] top ( ( c ) ) = ult ( c )

[SCie] isempty ( ( c ) ) = esv ( c )

[SCsz] size ( ( c ) ) = tam ( c )

[SCeq] eq-stack ( ( c1 ) , ( c2 ) ) = eq-cola ( c1, c2 )

Operaciones auxiliares

ant : Cola Cola

ult : Cola X

Axiomas auxiliares

[an1] ant ( vac ) = vac

[an2] ant ( ins ( c , x ) ) = c

[ul1] ult ( vac ) = [ul2] ult ( ins ( c , x ) ) = x

DATpmI

Page 29: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 29

Composición de implantacionesSupónganse dos implantaciones ( , P ), ( , Q ) Y W : W Z :

Entonces: Y Z : °

es una implantación ( °, P°Q ) , donde

• °( z ) = (( z ) )

• P°Q = { fWZ | f Y-función, fWZ interp. fW en Z }

Y

W

Z

°

Page 30: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 30

Verificación de implementación• Los axiomas del TAD fuente deben ser verificados por la representación

• Por ejemplo:

isempty ( empty ) = isempty ( ( vac ) ) , por [ SCem ]

= esv ( vac ) , por [ SCie ]

= true , por [ ev1 ]

isempty ( push ( s, x ) )

= isempty ( push ( ( c ) , x ) , porque es sobre

= isempty ( ( ins ( c , x ) ) ) , por [ SCpu ]

= esv ( ins ( c , x ) ) , por [ SCie ]

= false , por [ ev2 ]

Page 31: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 31

Verificar Demostrar teoremas

• Caso general: verificar un axioma corresponde a demostrar un teorema en el TAD que representa

• Los teoremas son siempre ecuaciones

• Como es sobre, las variables del TAD fuente se pueden remplazar por -imágenes de variables del TAD objeto, v.gr., F ( c ) en lugar de s.

• Métodos de demostración de teoremas:

Sintácticos

Reducción a términos equivalentes

Inducción sobre la construcción

Semánticos

Chequeo de igualdad

Page 32: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 32

Reducción a términos equivalentes

Para demostrar

e1 = e2

se usan:

Programas definidos en la implementación

Axiomas del TAD que representa

como reglas de reescritura

v.gr.:

isempty ( empty ) = isempty ( ( vac ) ) , por [ SCem ]

= esv ( vac ) , por [ SCie ]

= true , por [ ev1 ]

Page 33: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 33

6 Implementación concreta

• La composición de implementaciones es una implementación

• El último TAD puede ser una estructura computacional EC , i.e.,

objetos y operaciones que manipula un lenguaje de programación

Y

W1

EC

W2

Wn

...

Page 34: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 34

El paso a lo concreto• El paso

Y EC

se dificulta, porque usualmente no se cuenta con una descripción

axiomática de la EC.

• La definición de la implementación varía según el lenguaje de

programación que manipule EC, v.gr.,

un lenguaje funcional ( Lisp, Scheme, CAML , ... )

un lenguaje imperativo ( Pascal , C , ... )

etc.

Page 35: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 35

Implementación en un lenguaje funcional

• No es difícil:

Si los axiomas del TAD describen funciones recursivas, éstas son

casi directamente programables en el lenguaje funcional objeto

• Es fácil construir prototipos funcionales para TADs

( y con ellos, constatar experimentalmente la adecuación a la

realidad, la corrección, etc. )

Page 36: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 36

Ejemplo: Cola [ nat ] Lisp :

vac = [ nil ]ins ( [ lista ] , n ) = [ ( cons n lista ) ]esv ( [ lista ] ) = ( null lista )prim ( [ lista ] ) = ( priml lista )

donde:

( priml lista ) ( cond ( ( null lista ) “indefinido” ) ( ( null ( cdr lista ) ) ( car lista ) ) ( t ( priml (cdr

lista ) ) ) )

La definición de priml se deriva “naturalmente” de los axiomas de prim

Page 37: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 37

Implementación en un lenguaje imperativo• Un lenguaje imperativo es usualmente eficiente

• Preferible usar procedimientos que cambian argumentos que

pasan por referencia

• Método:

Representar elementos del TDI mediante estructuras de datos

del lenguaje de programación

v.gr., arreglos , apuntadores a estructuras dinámicas, etc.

Para cada función, derivar de los axiomas una pre- y una

poscondición

Programar cumpliendo la especificación

Page 38: ManTa Fundamentación Rodrigo Cardoso Universidad de los Andes Depto. de Ing. de Sistemas y Computación

ManTa: Fundamentación 38

Implementación automática en ManTa

• ManTa ha funcionado con prototipos funcionales ( Lisp ) e imperativos ( C ).

• ManTa 3.0 genera prototipos C y un “banco de pruebas” para experimentar con la implantación concreta.

• Parece fácil generar prototipos CAML.

• Línea de acción: desarrollo de herramientas y métodos de transformación de programas que mantengan la semántica y mejoren la eficiencia.