Click here to load reader

Tipos Cocientes - Departamento Lenguajes y Ciencias de jmmb/ttaadd/  · PDF file(conjuntos, funciones, grafos,...) Tipos Cocientes 3 Multiconjuntos y Conjuntos Estructuras con o sin

  • View
    221

  • Download
    0

Embed Size (px)

Text of Tipos Cocientes - Departamento Lenguajes y Ciencias de jmmb/ttaadd/  · PDF...

  • 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