Transcript
Page 1: Tipos Cocientes - Departamento Lenguajes y Ciencias de …jmmb/ttaadd/temaVI.pdf · (conjuntos, funciones, grafos,...) Tipos Cocientes 3 Multiconjuntos y Conjuntos Estructuras con

Tipos Cocientes

Page 2: Tipos Cocientes - Departamento Lenguajes y Ciencias de …jmmb/ttaadd/temaVI.pdf · (conjuntos, funciones, grafos,...) Tipos Cocientes 3 Multiconjuntos y Conjuntos Estructuras con

Tipos Cocientes 2

Características

La característica básica de los tipos cocientes es que los distintos términos construidos con operaciones generadoras no siempre representan valores distintos del tipo:

Hay que establecer ecuaciones que identifiquen términos distintos que representan el mismo objeto (términos equivalente).Hay que definir las operaciones sobre términos con constructoras teniendo en cuenta que el resultado debe ser independiente de la equivalencia de términos.

Los tipos cocientes típicos son aquellos en los que El orden seguido en la construción incremental de los objetos no siempre tiene relevancia o Ciertas agregaciones anulan agregaciones anteriores.

(conjuntos, funciones, grafos,...)

Page 3: Tipos Cocientes - Departamento Lenguajes y Ciencias de …jmmb/ttaadd/temaVI.pdf · (conjuntos, funciones, grafos,...) Tipos Cocientes 3 Multiconjuntos y Conjuntos Estructuras con

Tipos Cocientes 3

Multiconjuntos y Conjuntos

Estructuras con o sin elementos repetidos, en las que el orden de agregación no es relevante.

Page 4: Tipos Cocientes - Departamento Lenguajes y Ciencias de …jmmb/ttaadd/temaVI.pdf · (conjuntos, funciones, grafos,...) Tipos Cocientes 3 Multiconjuntos y Conjuntos Estructuras con

Tipos Cocientes 4

Multiconjuntos I

(fmod MCONJUNTO [X :: TRIV] isprotecting MACHINE-INT .sorts MCjNv[X] MCj[X] .subsort MCjNv[X] < MCj[X] .

op `{`} : -> MCj[X] [ctor] .

op `{_,_`} : Elt.X MCj[X] -> MCjNv[X] [ctor].op eliminar : Elt.X MCj[X] -> MCj[X] .op card : MCj[X] -> MachineInt .op multiplicidad : Elt.X MCj[X] -> MachineInt .op esta? : Elt.X MCj[X] -> Bool .

vars X1 X2 : Elt.X . var C : MCj[X] .

Page 5: Tipos Cocientes - Departamento Lenguajes y Ciencias de …jmmb/ttaadd/temaVI.pdf · (conjuntos, funciones, grafos,...) Tipos Cocientes 3 Multiconjuntos y Conjuntos Estructuras con

Tipos Cocientes 5

Multiconjuntos IIeq {X1,{X2,C}} = {X2,{X1,C}} .

eq eliminar(X2,{}) = {} .eq eliminar(X2,{X1,C}) =

if X2 == X1 then Celse {X1, eliminar(X2,C)} fi .

eq card({}) = 0 .eq card({X1,C}) = 1 + card(C) .eq multiplicidad(X2,{}) = 0 .eq multiplicidad(X2,{X1,C}) =

if X2 == X1 then 1 + multiplicidad(X2,C)else multiplicidad(X2,C) fi .

eq esta?(X2,C) = multiplicidad(X2,C) =/= 0 .endfm)

Page 6: Tipos Cocientes - Departamento Lenguajes y Ciencias de …jmmb/ttaadd/temaVI.pdf · (conjuntos, funciones, grafos,...) Tipos Cocientes 3 Multiconjuntos y Conjuntos Estructuras con

Tipos Cocientes 6

Conjuntos I

(fmod CONJUNTO [X :: TRIV] isprotecting MACHINE-INT .sorts CjNv[X] Cj[X] .subsort CjNv[X] < Cj[X] .

op `{`} : -> Cj[X] [ctor] .op `{_,_`} : Elt.X Cj[X] -> CjNv[X] [ctor].op eliminar : Elt.X Cj[X] -> Cj[X] .op card : Cj[X] -> MachineInt .op esta? : Elt.X Cj[X] -> Bool .op union intersec difer : Cj[X] Cj[X] -> Cj[X] .

vars X1 X2 : Elt.X . vars C1 C2 : CJ[X] .

Page 7: Tipos Cocientes - Departamento Lenguajes y Ciencias de …jmmb/ttaadd/temaVI.pdf · (conjuntos, funciones, grafos,...) Tipos Cocientes 3 Multiconjuntos y Conjuntos Estructuras con

Tipos Cocientes 7

Conjuntos II

ceq {X1,{X2,C2}} = {X2,C2} if X1 == X2 .ceq {X1,{X2,C2}} = {X2,{X1,C2}} if X1=/=X2 .

eq eliminar(X2,{}) = {} .eq eliminar(X2,{X1,C1}) = if X1 == X2 then eliminar(X2,C1)

else {X1,eliminar(X2,C1)} fi .eq card({}) = 0 .eq card({X1,C1}) = 1 + card(eliminar(X1,C1)) .

eq esta?(X2,{}) = false .eq esta?(X2,{X1,C1}) = if X2 == X1 then true

else esta?(X2,C1) fi .

Page 8: Tipos Cocientes - Departamento Lenguajes y Ciencias de …jmmb/ttaadd/temaVI.pdf · (conjuntos, funciones, grafos,...) Tipos Cocientes 3 Multiconjuntos y Conjuntos Estructuras con

Tipos Cocientes 8

Conjuntos III

eq union({},C2) = C2 .eq union({X1,C1},C2) = {X1,union(C1,C2)} .

eq intersec({},C2) = {} .eq intersec({X1,C1},C2) =

if esta?(X1,C2) then {X1,intersec(C1,C2)}else intersec(C1,C2) fi .

eq difer({},C2) = {} .eq difer({X1,C1},C2) =

if esta?(X1,C2) then difer(C1,C2)else {X1,difer(C1,C2)} fi .

endfm)

Page 9: Tipos Cocientes - Departamento Lenguajes y Ciencias de …jmmb/ttaadd/temaVI.pdf · (conjuntos, funciones, grafos,...) Tipos Cocientes 3 Multiconjuntos y Conjuntos Estructuras con

Tipos Cocientes 9

Ejercicios

Especificad la operación de diferencia simétrica entre conjuntos para la especificación dada.Especificad una relación de contenido entre conjuntos.Enunciad una especificación alternativa de conjuntos utilizando la unión como operación constructora.Enunciad una especificación diccionarios, cuyos elementos son pares formados por una clave (ordenada) y un valor, que se forman a partir de una estructura vacía por agregación de pares, que permite agregar pares con claves repetidas combinando la información de los pares, consultar la información asociada a una clave y eliminar información a través de las claves.

Page 10: Tipos Cocientes - Departamento Lenguajes y Ciencias de …jmmb/ttaadd/temaVI.pdf · (conjuntos, funciones, grafos,...) Tipos Cocientes 3 Multiconjuntos y Conjuntos Estructuras con

Tipos Cocientes 10

Conjuntos Ordenados I

(fmod CONJUNTOORD [X :: TOSET] isprotecting CONJUNTO[Ord][X] .protecting LISTA[Ord][X] .op min : CjNv[X] -> Elt.X .op listado : Cj[X] -> Lista[Ord][X] .var X1 : Elt.X . var C : Cj[X] .eq min({X1,C}) = if C == {} then X1

else if X1 <= min(C) then X1 else min(C) fi fi .

eq listado(C) = if C == {} then nilelse min(C):listado(eliminar(min(C),C)) fi .

endfm)

Page 11: Tipos Cocientes - Departamento Lenguajes y Ciencias de …jmmb/ttaadd/temaVI.pdf · (conjuntos, funciones, grafos,...) Tipos Cocientes 3 Multiconjuntos y Conjuntos Estructuras con

Tipos Cocientes 11

Funciones y TablasEstructuras formadas por asociaciones de elementos (a->b) en las que no se permiten dos asociaciones a un mismo elemento y además, el orden de agregación de asociaciones a elementos distintos es irrelevante.

Page 12: Tipos Cocientes - Departamento Lenguajes y Ciencias de …jmmb/ttaadd/temaVI.pdf · (conjuntos, funciones, grafos,...) Tipos Cocientes 3 Multiconjuntos y Conjuntos Estructuras con

Tipos Cocientes 12

Funciones Totales (fmod FUNTOT [D :: TRIV, R :: TRIV] is

sort Fun[D,R] .op funIni : Elt.R -> Fun[D,R] [ctor] .op _`(_->_`) : Fun[D,R] Elt.D Elt.R -> Fun[D,R] [ctor] .op _`[_`] : Fun[D,R] Elt.D -> Elt.R .

vars D1 D2 : Elt.D . vars R1 R2 : Elt.R .var F : Fun[D,R] .eq (F(D1->R1)) (D2->R2) = if D1 == D2 then F(D2->R2)

else (F(D2->R2))(D1->R1) fi .eq funIni(R1)(D2->R2) = funIni(R1) if R2 == R1 .

eq (funIni(R1))[D1] = R1 .eq (F(D1->R1))[D2] = if D1 == D2 then R1 else F[D2] fi .

endfm)

Page 13: Tipos Cocientes - Departamento Lenguajes y Ciencias de …jmmb/ttaadd/temaVI.pdf · (conjuntos, funciones, grafos,...) Tipos Cocientes 3 Multiconjuntos y Conjuntos Estructuras con

Tipos Cocientes 13

Funciones Parciales (I)

(fth TRIVERR issorts Elt Elt? .subsort Elt < Elt? .op error : -> Elt? .

endth)

Page 14: Tipos Cocientes - Departamento Lenguajes y Ciencias de …jmmb/ttaadd/temaVI.pdf · (conjuntos, funciones, grafos,...) Tipos Cocientes 3 Multiconjuntos y Conjuntos Estructuras con

Tipos Cocientes 14

Funciones Parciales (II)

(fmod FUNPAR [D :: TRIV, R :: TRIVERR] issort FunP[D,R] .op funIni : -> FunP[D,R] [ctor] .op _`(_->_`) : FunP[D,R] Elt.D Elt.R ->

FunP[D,R][ctor] .op _`[_`] : FunP[D,R] Elt.D -> Elt?.R .op borrar : FunP[D,R] Elt.D -> FunP[D,R] .

vars D1 D2 : Elt.D . vars R1 R2 : Elt.R .var F : FunP[D,R] .

Page 15: Tipos Cocientes - Departamento Lenguajes y Ciencias de …jmmb/ttaadd/temaVI.pdf · (conjuntos, funciones, grafos,...) Tipos Cocientes 3 Multiconjuntos y Conjuntos Estructuras con

Tipos Cocientes 15

Funciones Parciales (III)

eq (F(D1->R1))(D2->R2) = if D1==D2 then F(D2->R2)else (F(D2->R2))(D1->R1) fi .

eq funIni[D1] = error.R .eq (F(D1->R1))[D2] = if D1 == D2 then R1

else F[D2] fi .

eq borrar(funIni,D1) = funIni .eq borrar(F(D1->R1),D2) =

if D2 == D1 then borrar(F,D2)else (borrar(F,D2))(D1->R1) fi .

endfm)

Page 16: Tipos Cocientes - Departamento Lenguajes y Ciencias de …jmmb/ttaadd/temaVI.pdf · (conjuntos, funciones, grafos,...) Tipos Cocientes 3 Multiconjuntos y Conjuntos Estructuras con

Tipos Cocientes 16

Ejercicios

Especificad una operación: dominio : FunP[D,R] -> Cj[D] que produzca el conjunto de valores de Elt.D donde está definida una función parcial.Enunciad una especificación de funciones parciales para el caso en que el parámetro del recorrido R obedece a una teoría de orden total, añadiendo las operaciones siguientes: ops valMin valMax : FunP[D,R] -> Elt.R que determinen los valores mínimo y máximo de una función parcial, y las operaciones ops ptosMin ptosMax : FunP[D,R] -> Cj[D] .que determinen los conjuntos de valores de Elt.D donde se alcanza el valor mínimo y el máximo respectivamente.Enunciad una especificación para una operación

op agregar : FunP[D,R] FunP[D,R] -> FunP[D,R]que sirva para agregar a la primera función todos las asociaciones de la segunda correspondientes a valores del dominio donde no esté definida la primera.

Page 17: Tipos Cocientes - Departamento Lenguajes y Ciencias de …jmmb/ttaadd/temaVI.pdf · (conjuntos, funciones, grafos,...) Tipos Cocientes 3 Multiconjuntos y Conjuntos Estructuras con

Tipos Cocientes 17

Tablas

Las tablas son casos particulares de funciones totales con dominio en un intervalo numérico [0..k-1] o en un producto de intervalos de este tipo, según sea la dimensión de la tabla.

El hecho de que los dominios de las tablas se puedan ordenar hace que se puedan encontrar formas canónicas para las tablas y que se puedan hacer listados de valores. Estas tablas admiten especificaciones más especializadas que las funciones.

Dentro de las tablas bidimensionales con valores numéricos, cabedestacar las matrices dispersas que se caracterizan porque casi todos sus elementos son nulos. En el tratamiento informático de datos, para estas matrices se almacenan únicamente los valores no nulos y este hecho se puede reflejar adecuadamente en una especificación.

Page 18: Tipos Cocientes - Departamento Lenguajes y Ciencias de …jmmb/ttaadd/temaVI.pdf · (conjuntos, funciones, grafos,...) Tipos Cocientes 3 Multiconjuntos y Conjuntos Estructuras con

Tipos Cocientes 18

Tablas I

(fmod TABLA [K :: GRADO, V :: TRIV] isprotecting NAT[K] .protecting LISTA[V] .sort Tabla[K,V] .op tabIni : Elt.V -> Tabla[K,V] [ctor] .op _[_/_] : Tabla[K,V] Nat[K] Elt.V -> Tabla[K,V] [ctor] .op _[_] : Tabla[K,V] Nat[K] -> Elt.V .op valIni : Tabla[K,V] -> Elt.V .op listado : Tabla[K,V] -> Lista[V] .op listadoaux : Tabla[K,V] Nat[K] -> Lista[V] .

vars I1 I2 : Nat[K] . vars V1 V2 : Elt.V .var T : Tabla[K,V] .

Page 19: Tipos Cocientes - Departamento Lenguajes y Ciencias de …jmmb/ttaadd/temaVI.pdf · (conjuntos, funciones, grafos,...) Tipos Cocientes 3 Multiconjuntos y Conjuntos Estructuras con

Tipos Cocientes 19

Tablas II

ceq T [I1/V1] [I2/V2] = T [I2/V2] if I1 == I2 .ceq T [I1/V1] [I2/V2] = T [I2/V2] [I1/V1] if I2 < I1 .ceq T [I1/V1] [I2/V2] = T [I2/V2] [I1/V1]

if I2 > I1 and V2 == valIni(T) .ceq (tabIni(V1))[I2/V2] = tabIni(V1) if V1 == V2 .

eq (tabIni(V1))[I1] = V1 .eq (T[I1/V1])[I2] = if I2 == I1 then V1 else T[I2] fi . eq valIni(tabIni(V2)) = V2 .eq valIni(T[I1/V1]) = valIni(T) .eq listado(T) = listadoaux(T,0) .eq listadoaux(T,I1) = if I1 == k.K-1 then T[I1] : nil

else T[I1] : listadoaux(T,I1+1) fi .endfm)

Page 20: Tipos Cocientes - Departamento Lenguajes y Ciencias de …jmmb/ttaadd/temaVI.pdf · (conjuntos, funciones, grafos,...) Tipos Cocientes 3 Multiconjuntos y Conjuntos Estructuras con

Tipos Cocientes 20

Tablas Bidimensionales I

(fmod TABLABD [M N :: GRADO, V :: TRIV] isprotecting NAT[M] .protecting NAT[N] .protecting LISTA[V] .sort Tabla[M,N,V] .op tabIni : Elt.V -> Tabla[M,N,V] [ctor] .op _[_ _/_] : Tabla[M,N,V] Nat[M] Nat[N] Elt.V ->

Tabla[M,N,V] [ctor] .op _[_ _] : Tabla[M,N,V] Nat[M] NAT[N] -> Elt.V .op valIni : Tabla[M,N,V] -> Elt.V .op listado : Tabla[M,N,V] -> Lista[V] .op listadoaux : Tabla[M,N,V] Nat[M] Nat[N] -> Lista[V] .vars I1 I2 : Nat[M] . vars J1 J2 : Nat[N] . vars V1 V2 : Elt.V . var T : Tabla[M,N,V] .

Page 21: Tipos Cocientes - Departamento Lenguajes y Ciencias de …jmmb/ttaadd/temaVI.pdf · (conjuntos, funciones, grafos,...) Tipos Cocientes 3 Multiconjuntos y Conjuntos Estructuras con

Tipos Cocientes 21

Tablas Bidimensionales IIceq (T[I1 J1/V1])[I2 J2/V2] = T[I2 J2/V2]

if I1 == I2 and J1 == J2 .ceq (T[I1 J1/V1])[I2 J2/V2] = (T[I2 J2/V2]) [I1 J1/V1]

if I2 < I1 or (I2 == I1 and J2 < J1) .ceq (tabIni(V1))[I2 J2/V2] = tabIni(V1) if V2 == V1 .ceq (T[I1 J1/V1])[I2 J2/V2] = (T[I2 J2/V2]) [I1 J1/V1]

if (I2=/=I1 or J2=/=J1) and V2==valIni(T) .eq (tabIni(V1))[I1 J1] = V1 .eq (T[I1 J1/V1])[I2 J2] = if I2 == I1 and J2 == J1 then V1

else T [I2 J2] fi .eq valIni(tabIni(V1)) = V1 .eq valIni(T[I1 J1/V1]) = valIni(T) .eq listado(T) = listadoaux(T,0,0) .eq listadoaux(T,I1,J1) = if J1 == k.N –1 then

if I1 == k.M -1 then T [I1 J1] : nil else T [I1 J1] : listadoaux(T,I1+1,0) fi else T [I1 J1] : listadoaux(T,I1,J1+1) fi .

endfm)

Page 22: Tipos Cocientes - Departamento Lenguajes y Ciencias de …jmmb/ttaadd/temaVI.pdf · (conjuntos, funciones, grafos,...) Tipos Cocientes 3 Multiconjuntos y Conjuntos Estructuras con

Tipos Cocientes 22

Matrices Dispersas I

(fmod MATRIZD [N :: GRADO] is protecting NAT[N] .sort MD[N] . *** solo valores enteros no nulosop matNula : -> MD[N] [ctor] .op _[__/_] : MD[N] Nat[N] Nat[N] MachineInt -> MD[N] [ctor] .op borrar : Nat[N] Nat[N] MD[N] -> MD[N] .op _[__] : MD[N] Nat[N] Nat[N] -> MachineInt .op _+_ : MD[N] MD[N] -> MD[N] .op _*_ : MD[N] MD[N] -> MD[N] .*** operaciones auxiliares:op multdesde : MD[N] MD[N] Nat[N] Nat[N] -> MD[N] .*** producto fila * columnaop _[_]**_[_] : MD[N] Nat[N] MD[N] Nat[N] -> MachineInt .op iprod : MD[N] Nat[N] MD[N] Nat[N] Nat[N] -> MachineInt .

Page 23: Tipos Cocientes - Departamento Lenguajes y Ciencias de …jmmb/ttaadd/temaVI.pdf · (conjuntos, funciones, grafos,...) Tipos Cocientes 3 Multiconjuntos y Conjuntos Estructuras con

Tipos Cocientes 23

Matrices Dispersas IIvars I1 I2 J1 J2 K : Nat[N] . vars A B : MachineInt .var M1 M2: MD[N] .ceq M1 [I1 J1/A] [I2 J2/B] = M1 [I2 J2/B]

if I1 == I2 and J1 == J2 .ceq M1 [I1 J1/A] [I2 J2/B] = M1 [I2 J2/B] [I1 J1/A]

if I2 < I1 or (I2 == I1 and J2 < J1) .ceq M1 [I1 J1/A] [I2 J2/B] = M1 [I2 J2/B] [I1 J1/A]

if (I2=/=I1 or J2 =/= J1) and B == 0 .eq matNula[I1 J1/0] = matNula .eq borrar(I2,J2,matNula) = matNula .eq borrar(I2,J2,M1 [I1 J1/A]) =

if I1 == I2 and J1 == J2 then borrar(I2,J2,M1) else borrar(I2,J2,M1) [I1 J1/A] fi .

eq matNula [I2 J2] = 0 .eq M1 [I1 J1/A] [I2 J2] = if I1 == I2 and J1 == J2 then A

else M1 [I2 J2] fi .

Page 24: Tipos Cocientes - Departamento Lenguajes y Ciencias de …jmmb/ttaadd/temaVI.pdf · (conjuntos, funciones, grafos,...) Tipos Cocientes 3 Multiconjuntos y Conjuntos Estructuras con

Tipos Cocientes 24

Matrices Dispersas III

eq M1 + matNula = M1 .eq M1 + (M2[I1 J1/A]) = (M1 + M2) [I1 J1/(M1[I1 J1]+ A)] .eq M1 * matNula = matNula .eq M1 * M2 = multdesde(M1,M2,0,0) .eq M1[I1] ** M2[J1] = iprod(M1,I1,M2,J1,0) .eq iprod(M1,I1,M2,J1,K) =

if K == k.N -1 then (M[I1,K]) * (M [K,J1]) else (M [I1,K]) * (M [K,J1]) + iprod(M1,I1,M2,J1,K+1) fi .

eq multdesde(M1,M2,A,B) = if B == k.N -1 then if A == k.N -1 then matNula [A B/M1[A] ** M2[B]]else multdesde(M1,M2,A+1,0) [A B/M1[A] ** M2[B]] fielse multdesde(M1,M2,A,B+1) [A B/M1[A] ** M2[B]] fi .

endfm)


Recommended