Click here to load reader
View
221
Download
0
Embed Size (px)
Tipos Cocientes
Tipos Cocientes 2
Caractersticas
La caracterstica bsica de los tipos cocientes es que los distintos trminos construidos con operaciones generadoras no siempre representan valores distintos del tipo:
Hay que establecer ecuaciones que identifiquen trminos distintos que representan el mismo objeto (trminos equivalente).Hay que definir las operaciones sobre trminos con constructoras teniendo en cuenta que el resultado debe ser independiente de la equivalencia de trminos.
Los tipos cocientes tpicos son aquellos en los que El orden seguido en la construcin incremental de los objetos no siempre tiene relevancia o Ciertas agregaciones anulan agregaciones anteriores.
(conjuntos, funciones, grafos,...)
Tipos Cocientes 3
Multiconjuntos y Conjuntos
Estructuras con o sin elementos repetidos, en las que el orden de agregacin no es relevante.
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] .
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)
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] .
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 .
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)
Tipos Cocientes 9
Ejercicios
Especificad la operacin de diferencia simtrica entre conjuntos para la especificacin dada.Especificad una relacin de contenido entre conjuntos.Enunciad una especificacin alternativa de conjuntos utilizando la unin como operacin constructora.Enunciad una especificacin diccionarios, cuyos elementos son pares formados por una clave (ordenada) y un valor, que se forman a partir de una estructura vaca por agregacin de pares, que permite agregar pares con claves repetidas combinando la informacin de los pares, consultar la informacin asociada a una clave y eliminar informacin a travs de las claves.
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
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 adems, el orden de agregacin de asociaciones a elementos distintos es irrelevante.
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)
Tipos Cocientes 13
Funciones Parciales (I)
(fth TRIVERR issorts Elt Elt? .subsort Elt < Elt? .op error : -> Elt? .
endth)
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] .
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)
Tipos Cocientes 16
Ejercicios
Especificad una operacin: dominio : FunP[D,R] -> Cj[D] que produzca el conjunto de valores de Elt.D donde est definida una funcin parcial.Enunciad una especificacin de funciones parciales para el caso en que el parmetro del recorrido R obedece a una teora de orden total, aadiendo las operaciones siguientes: ops valMin valMax : FunP[D,R] -> Elt.R que determinen los valores mnimo y mximo de una funcin 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 mnimo y el mximo respectivamente.Enunciad una especificacin para una operacin
op agregar : FunP[D,R] FunP[D,R] -> FunP[D,R]que sirva para agregar a la primera funcin todos las asociaciones de la segunda correspondientes a valores del dominio donde no est definida la primera.
Tipos Cocientes 17
Tablas
Las tablas son casos particulares de funciones totales con dominio en un intervalo numrico [0..k-1] o en un producto de intervalos de este tipo, segn sea la dimensin de la tabla.
El hecho de que los dominios de las tablas se puedan ordenar hace que se puedan encontrar formas cannicas para las tablas y que se puedan hacer listados de valores. Estas tablas admiten especificaciones ms especializadas que las funciones.
Dentro de las tablas bidimensionales con valores numricos, cabedestacar las matrices dispersas que se caracterizan porque casi todos sus elementos son nulos. En el tratamiento informtico de datos, para estas matrices se almacenan nicamente los valores no nulos y este hecho se puede reflejar adecuadamente en una especificacin.
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] .
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)
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] .
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