//--------------------------------------------//
// Especificacion Algebraica TAD Tabla //
// Autor: Pablo Sanchez (p.sanchez@unican.es) //
// http://personales.unican.es/sanchezbp //
//--------------------------------------------//

espec Table

usa Boolean, Natural

generos Table(Key,Element) como Table(K,E)
// Tambien conocido como Map o Dictionary

parametro
generos Key como K
operaciones
equal: Element Element -> Boolean
variables
x, y, z : Element;
ecuaciones
equal(x,x) = TRUE
equal(x,y) = equal(y,x)
[equal(x,y) and equal(y,z)] equal(x,z) = TRUE;
fparametro

parametro
generos Element como E
fparametro

operaciones
emptyTable : -> Table(K,E)
set : Table(K,E) Key E -> Table(K,E)
remove : Table(K,E) Key -> Table(K,E)
parcial get : Table(K,E) Key -> E
contains : Table(C,E) Key -> Boolean
equal : Table(K,E) Table(K,E) -> Boolean
size : Table(K,E) -> Natural
isEmpty : Table(K,E) -> Boolean

vars
t, t2 : Table(K,E); c, c2: Key, x, y : Element;

precondiciones
[(contains(t,c) == TRUE)] get(t,c)

ecuaciones
// Las generadoras son emptyTable y set(t,c,x) y no
// son libres
// Los patrones del tipo son:
// - emptyTable
// - set(t,c,x)

[equal(c,c2) == TRUE]
set(set(t,c,x),c2,y) = set(t,c2,y)
[equal(c,c2) != TRUE]
set(set(t,c,x),c2,y) = set(set(t,c2,y),c,x)

[equal(c,c2) == TRUE] get(set(t,c,x),c2) = x
[equal(c,c2) != TRUE] get(set(t,c,x),c2) = get(t,c2)

contains(emptyTable,c) = FALSE
[equal(c,c2) == TRUE]
contains(set(t,c,x),c2) = TRUE
[equal(c,c2) != TRUE]
contains(set(t,c,x),c2) = contains(t,c2)

remove(emptyTable,c) = emptyTable
[equal(c,c2) == TRUE]
remove(set(t,c,x),c2) = remove(t,c)
[equal(c,c2) != TRUE]
remove(set(t,c,x),c2) = set(remove(t,c2),c,x)

size(emptyTable) = 0
size(set(t,c,x)) = 1 + size(remove(t,c))

equal(emptyTable,emptyTable) = TRUE
equal(emptyTable,set(t2,c2,y)) = FALSE
equal(set(t,c,x),emptyTable) = FALSE
[size(set(t,c,x)) != size(set(t2,c2,y))]
equal(set(t,c,x),set(t2,c2,y)) = FALSE
[size(set(t,c,x)) != size(set(t2,c2,y))]
equal(set(t,c,x),set(t2,c2,y)) =
and(contains(set(t2,c2,y),c),
equals(get(set(t2,c2,y),c),x),
equals(remove(t,c),remove(set(t2,c2,y),c)))

isEmpty(emptyTable) = TRUE
isEmpty(set(t,c,x)) = FALSE

fespec

Última modificación: viernes, 26 de mayo de 2017, 11:23