SlideShare uma empresa Scribd logo
1 de 51
Baixar para ler offline
Tema 17: El TAD de los conjuntos
Informática (2014–15)
José A. Alonso Jiménez
Grupo de Lógica Computacional
Departamento de Ciencias de la Computación e I.A.
Universidad de Sevilla
IM Tema 17: El TAD de los conjuntos
Tema 17: El TAD de los conjuntos
1. Especificación del TAD de los conjuntos
Signatura del TAD de los conjuntos
Propiedades del TAD de los conjuntos
2. Implementaciones del TAD de los conjuntos
Los conjuntos como listas no ordenadas con duplicados
Los conjuntos como listas no ordenadas sin duplicados
Los conjuntos como listas ordenadas sin duplicados
Los conjuntos de números enteros mediante números binarios
3. Comprobación de las implementaciones con QuickCheck
Librerías auxiliares
Generador de conjuntos
Especificación de las propiedades de los conjuntos
Comprobación de las propiedades
2 / 51
IM Tema 17: El TAD de los conjuntos
Especificación del TAD de los conjuntos
Signatura del TAD de los conjuntos
Tema 17: El TAD de los conjuntos
1. Especificación del TAD de los conjuntos
Signatura del TAD de los conjuntos
Propiedades del TAD de los conjuntos
2. Implementaciones del TAD de los conjuntos
3. Comprobación de las implementaciones con QuickCheck
3 / 51
IM Tema 17: El TAD de los conjuntos
Especificación del TAD de los conjuntos
Signatura del TAD de los conjuntos
Signatura del TAD de los conjuntos
Signatura:
vacio, :: Conj a
inserta :: Eq a => a -> Conj a -> Conj a
elimina :: Eq a => a -> Conj a -> Conj a
pertenece :: Eq a => a -> Conj a -> Bool
esVacio :: Conj a -> Bool
Descripción de las operaciones:
vacio es el conjunto vacío.
(inserta x c) es el conjunto obtenido añadiendo el elemento x
al conjunto c.
(elimina x c) es el conjunto obtenido eliminando el elemento x
del conjunto c.
(pertenece x c) se verifica si x pertenece al conjunto c.
(esVacio c) se verifica si c es el conjunto vacío.
4 / 51
IM Tema 17: El TAD de los conjuntos
Especificación del TAD de los conjuntos
Propiedades del TAD de los conjuntos
Tema 17: El TAD de los conjuntos
1. Especificación del TAD de los conjuntos
Signatura del TAD de los conjuntos
Propiedades del TAD de los conjuntos
2. Implementaciones del TAD de los conjuntos
3. Comprobación de las implementaciones con QuickCheck
5 / 51
IM Tema 17: El TAD de los conjuntos
Especificación del TAD de los conjuntos
Propiedades del TAD de los conjuntos
Propiedades del TAD de los conjuntos
1. inserta x (inserta x c) == inserta x c
2. inserta x (inserta y c) == inserta y (inserta x c)
3. not (pertenece x vacio)
4. pertenece y (inserta x c) == (x==y) || pertenece y c
5. elimina x vacio == vacio
6. Si x == y, entonces
elimina x (inserta y c) == elimina x c
7. Si x /= y, entonces
elimina x (inserta y c) == inserta y (elimina x c)
8. esVacio vacio
9. not (esVacio (inserta x c))
6 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos como listas no ordenadas con duplicados
Tema 17: El TAD de los conjuntos
1. Especificación del TAD de los conjuntos
2. Implementaciones del TAD de los conjuntos
Los conjuntos como listas no ordenadas con duplicados
Los conjuntos como listas no ordenadas sin duplicados
Los conjuntos como listas ordenadas sin duplicados
Los conjuntos de números enteros mediante números binarios
3. Comprobación de las implementaciones con QuickCheck
7 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos como listas no ordenadas con duplicados
Los conjuntos como listas no ordenadas con duplicados
Cabecera del módulo:
module ConjuntoConListasNoOrdenadasConDuplicados
(Conj,
vacio, -- Conj a
inserta, -- Eq a => a -> Conj a -> Conj a
elimina, -- Eq a => a -> Conj a -> Conj a
pertenece, -- Eq a => a -> Conj a -> Bool
esVacio, -- Conj a -> Bool
) where
8 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos como listas no ordenadas con duplicados
Los conjuntos como listas no ordenadas con duplicados
El tipo de los conjuntos.
newtype Conj a = Cj [a]
Procedimiento de escritura de los conjuntos.
instance Show a => Show (Conj a) where
showsPrec _ (Cj s) cad = showConj s cad
showConj [] cad = showString "{}" cad
showConj (x:xs) cad =
showChar '{' (shows x (showl xs cad))
where
showl [] cad = showChar '}' cad
showl (x:xs) cad = showChar ',' (shows x (showl xs cad)
9 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos como listas no ordenadas con duplicados
Los conjuntos como listas no ordenadas con duplicados
Ejemplo de conjunto: c1 es el conjunto obtenido añadiéndole al
conjunto vacío los elementos 2, 5, 1, 3, 7, 5, 3, 2, 1, 9 y 0.
ghci > c1
{2,5,1,3,7,5,3,2,1,9,0}
c1 :: Conj Int
c1 = foldr inserta vacio [2,5,1,3,7,5,3,2,1,9,0]
vacio es el conjunto vacío. Por ejemplo,
ghci> vacio
{}
vacio :: Conj a
vacio = Cj []
10 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos como listas no ordenadas con duplicados
Los conjuntos como listas no ordenadas con duplicados
(inserta x c) es el conjunto obtenido añadiendo el elemento x
al conjunto c. Por ejemplo,
c1 == {2,5,1,3,7,5,3,2,1,9,0}
inserta 5 c1 == {5,2,5,1,3,7,5,3,2,1,9,0}
inserta :: Eq a => a -> Conj a -> Conj a
inserta x (Cj ys) = Cj (x:ys)
(elimina x c) es el conjunto obtenido eliminando el elemento
x del conjunto c. Por ejemplo,
c1 == {2,5,1,3,7,5,3,2,1,9,0}
elimina 3 c1 == {2,5,1,7,5,2,1,9,0}
elimina :: Eq a => a -> Conj a -> Conj a
elimina x (Cj ys) = Cj (filter (/= x) ys)
11 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos como listas no ordenadas con duplicados
Los conjuntos como listas no ordenadas con duplicados
(pertenece x c) se verifica si x pertenece al conjunto c. Por
ejemplo,
c1 == {2,5,1,3,7,5,3,2,1,9,0}
pertenece 3 c1 == True
pertenece 4 c1 == False
pertenece :: Eq a => a -> Conj a -> Bool
pertenece x (Cj xs) = elem x xs
(esVacio c) se verifica si c es el conjunto vacío. Por ejemplo,
esVacio c1 False
esVacio vacio True
esVacio :: Conj a -> Bool
esVacio (Cj xs) = null xs
12 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos como listas no ordenadas con duplicados
Los conjuntos como listas no ordenadas con duplicados
(subconjunto c1 c2) se verifica si c1 es un subconjunto de
c2. Por ejemplo,
subconjunto (Cj [1,3,2,1]) (Cj [3,1,3,2]) True
subconjunto (Cj [1,3,4,1]) (Cj [3,1,3,2]) False
subconjunto :: Eq a => Conj a -> Conj a -> Bool
subconjunto (Cj xs) (Cj ys) = sublista xs ys
where sublista [] _ = True
sublista (x:xs) ys = elem x ys &&
sublista xs ys
13 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos como listas no ordenadas con duplicados
Los conjuntos como listas no ordenadas con duplicados
(igualConjunto c1 c2) se verifica si los conjuntos c1 y c2 son
iguales. Por ejemplo,
igualConjunto (Cj [1,3,2,1]) (Cj [3,1,3,2]) True
igualConjunto (Cj [1,3,4,1]) (Cj [3,1,3,2]) False
igualConjunto :: Eq a => Conj a -> Conj a -> Bool
igualConjunto c1 c2 =
subconjunto c1 c2 && subconjunto c2 c1
Los conjuntos son comparables por igualdad.
instance Eq a => Eq (Conj a) where
(==) = igualConjunto
14 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos como listas no ordenadas sin duplicados
Tema 17: El TAD de los conjuntos
1. Especificación del TAD de los conjuntos
2. Implementaciones del TAD de los conjuntos
Los conjuntos como listas no ordenadas con duplicados
Los conjuntos como listas no ordenadas sin duplicados
Los conjuntos como listas ordenadas sin duplicados
Los conjuntos de números enteros mediante números binarios
3. Comprobación de las implementaciones con QuickCheck
15 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos como listas no ordenadas sin duplicados
Los conjuntos como listas no ordenadas sin duplicados
Cabecera del módulo.
module ConjuntoConListasNoOrdenadasSinDuplicados
(Conj,
vacio, -- Conj a
esVacio, -- Conj a -> Bool
pertenece, -- Eq a => a -> Conj a -> Bool
inserta, -- Eq a => a -> Conj a -> Conj a
elimina -- Eq a => a -> Conj a -> Conj a
) where
16 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos como listas no ordenadas sin duplicados
Los conjuntos como listas no ordenadas sin duplicados
Los conjuntos como listas no ordenadas sin repeticiones.
newtype Conj a = Cj [a]
Procedimiento de escritura de los conjuntos.
instance (Show a) => Show (Conj a) where
showsPrec _ (Cj s) cad = showConj s cad
showConj [] cad = showString "{}" cad
showConj (x:xs) cad = showChar '{' (shows x (showl xs cad)
where
showl [] cad = showChar '}' cad
showl (x:xs) cad = showChar ',' (shows x (showl xs cad))
17 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos como listas no ordenadas sin duplicados
Los conjuntos como listas no ordenadas sin duplicados
Ejemplo de conjunto: c1 es el conjunto obtenido añadiéndole al
conjunto vacío los elementos 2, 5, 1, 3, 7, 5, 3, 2, 1, 9 y 0.
ghci> c1
{7,5,3,2,1,9,0}
c1 :: Conj Int
c1 = foldr inserta vacio [2,5,1,3,7,5,3,2,1,9,0]
vacio es el conjunto vacío. Por ejemplo,
ghci> vacio
{}
vacio :: Conj a
vacio = Cj []
18 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos como listas no ordenadas sin duplicados
Los conjuntos como listas no ordenadas sin duplicados
(esVacio c) se verifica si c es el conjunto vacío. Por ejemplo,
esVacio c1 False
esVacio vacio True
esVacio :: Conj a -> Bool
esVacio (Cj xs) = null xs
(pertenece x c) se verifica si x pertenece al conjunto c. Por
ejemplo,
c1 == {2,5,1,3,7,5,3,2,1,9,0}
pertenece 3 c1 == True
pertenece 4 c1 == False
pertenece :: Eq a => a -> Conj a -> Bool
pertenece x (Cj xs) = elem x xs
19 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos como listas no ordenadas sin duplicados
Los conjuntos como listas no ordenadas sin duplicados
(inserta x c) es el conjunto obtenido añadiendo el elemento x
al conjunto c. Por ejemplo,
inserta 4 c1 == {4,7,5,3,2,1,9,0}
inserta 5 c1 == {7,5,3,2,1,9,0}
inserta :: Eq a => a -> Conj a -> Conj a
inserta x s@(Cj xs) | pertenece x s = s
| otherwise = Cj (x:xs)
(elimina x c) es el conjunto obtenido eliminando el elemento
x del conjunto c. Por ejemplo,
elimina 3 c1 == {7,5,2,1,9,0}
elimina :: Eq a => a -> Conj a -> Conj a
elimina x (Cj ys) = Cj [y | y <- ys, y /= x]
20 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos como listas no ordenadas sin duplicados
Los conjuntos como listas no ordenadas sin duplicados
(subconjunto c1 c2) se verifica si c1 es un subconjunto de
c2. Por ejemplo,
subconjunto (Cj [1,3,2]) (Cj [3,1,2]) True
subconjunto (Cj [1,3,4,1]) (Cj [1,3,2]) False
subconjunto :: Eq a => Conj a -> Conj a -> Bool
subconjunto (Cj xs) (Cj ys) = sublista xs ys
where sublista [] _ = True
sublista (x:xs) ys = elem x ys &&
sublista xs ys
21 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos como listas no ordenadas sin duplicados
Los conjuntos como listas no ordenadas sin duplicados
(igualConjunto c1 c2) se verifica si los conjuntos c1 y c2 son
iguales. Por ejemplo,
igualConjunto (Cj [3,2,1]) (Cj [1,3,2]) True
igualConjunto (Cj [1,3,4]) (Cj [1,3,2]) False
igualConjunto :: Eq a => Conj a -> Conj a -> Bool
igualConjunto c1 c2 =
subconjunto c1 c2 && subconjunto c2 c1
Los conjuntos son comparables por igualdad.
instance Eq a => Eq (Conj a) where
(==) = igualConjunto
22 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos como listas ordenadas sin duplicados
Tema 17: El TAD de los conjuntos
1. Especificación del TAD de los conjuntos
2. Implementaciones del TAD de los conjuntos
Los conjuntos como listas no ordenadas con duplicados
Los conjuntos como listas no ordenadas sin duplicados
Los conjuntos como listas ordenadas sin duplicados
Los conjuntos de números enteros mediante números binarios
3. Comprobación de las implementaciones con QuickCheck
23 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos como listas ordenadas sin duplicados
Los conjuntos como listas ordenadas sin duplicados
Cabecera del módulo
module ConjuntoConListasOrdenadasSinDuplicados
(Conj,
vacio, -- Conj a
esVacio, -- Conj a -> Bool
pertenece, -- Ord a => a -> Conj a -> Bool
inserta, -- Ord a => a -> Conj a -> Conj a
elimina -- Ord a => a -> Conj a -> Conj a
) where
Los conjuntos como listas ordenadas sin repeticiones.
newtype Conj a = Cj [a]
deriving Eq
24 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos como listas ordenadas sin duplicados
Los conjuntos como listas ordenadas sin duplicados
Procedimiento de escritura de los conjuntos.
instance (Show a) => Show (Conj a) where
showsPrec _ (Cj s) cad = showConj s cad
showConj [] cad = showString "{}" cad
showConj (x:xs) cad = showChar '{' (shows x (showl xs cad))
where showl [] cad = showChar '}' cad
showl (x:xs) cad = showChar ',' (shows x (showl xs
25 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos como listas ordenadas sin duplicados
Los conjuntos como listas ordenadas sin duplicados
Ejemplo de conjunto: c1 es el conjunto obtenido añadiéndole al
conjunto vacío los elementos 2, 5, 1, 3, 7, 5, 3, 2, 1, 9 y 0.
ghci> c1
{0,1,2,3,5,7,9}
c1 :: Conj Int
c1 = foldr inserta vacio [2,5,1,3,7,5,3,2,1,9,0]
vacio es el conjunto vacío. Por ejemplo,
ghci> vacio
{}
vacio :: Conj a
vacio = Cj []
26 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos como listas ordenadas sin duplicados
Los conjuntos como listas ordenadas sin duplicados
(esVacio c) se verifica si c es el conjunto vacío. Por ejemplo,
esVacio c1 False
esVacio vacio True
esVacio :: Conj a -> Bool
esVacio (Cj xs) = null xs
(pertenece x c) se verifica si x pertenece al conjunto c. Por
ejemplo,
c1 == {0,1,2,3,5,7,9}
pertenece 3 c1 == True
pertenece 4 c1 == False
pertenece :: Ord a => a -> Conj a -> Bool
pertenece x (Cj ys) = elem x (takeWhile (<= x) ys)
27 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos como listas ordenadas sin duplicados
Los conjuntos como listas ordenadas sin duplicados
(inserta x c) es el conjunto obtenido añadiendo el elemento x
al conjunto c. Por ejemplo,
c1 == {0,1,2,3,5,7,9}
inserta 5 c1 == {0,1,2,3,5,7,9}
inserta 4 c1 == {0,1,2,3,4,5,7,9}
inserta :: Ord a => a -> Conj a -> Conj a
inserta x (Cj s) = Cj (agrega x s) where
agrega x [] = [x]
agrega x s@(y:ys) | x > y = y : (agrega x ys)
| x < y = x : s
| otherwise = s
28 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos como listas ordenadas sin duplicados
Los conjuntos como listas ordenadas sin duplicados
(elimina x c) es el conjunto obtenido eliminando el elemento
x del conjunto c. Por ejemplo,
c1 == {0,1,2,3,5,7,9}
elimina 3 c1 == {0,1,2,5,7,9}
elimina :: Ord a => a -> Conj a -> Conj a
elimina x (Cj s) = Cj (elimina x s) where
elimina x [] = []
elimina x s@(y:ys) | x > y = y : elimina x ys
| x < y = s
| otherwise = ys
29 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos de números enteros mediante números binarios
Tema 17: El TAD de los conjuntos
1. Especificación del TAD de los conjuntos
2. Implementaciones del TAD de los conjuntos
Los conjuntos como listas no ordenadas con duplicados
Los conjuntos como listas no ordenadas sin duplicados
Los conjuntos como listas ordenadas sin duplicados
Los conjuntos de números enteros mediante números binarios
3. Comprobación de las implementaciones con QuickCheck
30 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos de números enteros mediante números binarios
Los conjuntos de enteros mediante números binarios
Los conjuntos que sólo contienen números (de tipo Int) entre 0
y n − 1, se pueden representar como números binarios con n bits
donde el bit i (0 ≤ i < n) es 1 syss el número i pertenece al
conjunto. Por ejemplo,
43210
{3,4} en binario es 11000 en decimal es 24
{1,2,3,4} en binario es 11110 en decimal es 30
{1,2,4} en binario es 10110 en decimal es 22
31 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos de números enteros mediante números binarios
Los conjuntos de enteros mediante números binarios
Cabecera del módulo
module ConjuntoConNumerosBinarios
(Conj,
vacio, -- Conj
esVacio, -- Conj -> Bool
pertenece, -- Int -> Conj -> Bool
inserta, -- Int -> Conj -> Conj
elimina -- Int -> Conj -> Conj
) where
Los conjuntos de números enteros como números binarios.
newtype Conj = Cj Int deriving Eq
32 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos de números enteros mediante números binarios
Los conjuntos de enteros mediante números binarios
(conj2Lista c) es la lista de los elementos del conjunto c. Por
ejemplo,
conj2Lista (Cj 24) [3,4]
conj2Lista (Cj 30) [1,2,3,4]
conj2Lista (Cj 22) [1,2,4]
conj2Lista (Cj s) = c2l s 0
where
c2l 0 _ = []
c2l n i | odd n = i : c2l (n `div` 2) (i+1)
| otherwise = c2l (n `div` 2) (i+1)
33 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos de números enteros mediante números binarios
Los conjuntos de enteros mediante números binarios
Procedimiento de escritura de conjuntos.
instance Show Conj where
showsPrec _ s cad = showConj (conj2Lista s) cad
showConj [] cad = showString "{}" cad
showConj (x:xs) cad =
showChar '{' (shows x (showl xs cad))
where
showl [] cad = showChar '}' cad
showl (x:xs) cad = showChar ',' (shows x (showl xs cad))
34 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos de números enteros mediante números binarios
Los conjuntos de enteros mediante números binarios
maxConj es el máximo número que puede pertenecer al conjunto.
Depende de la implementación de Haskell. Por ejemplo,
maxConj 29
maxConj :: Int
maxConj =
truncate (logBase 2 (fromIntegral maxInt)) - 1
where maxInt = maxBound::Int
Ejemplo de conjunto: c1 es el conjunto obtenido añadiéndole al
conjunto vacío los elementos 2, 5, 1, 3, 7, 5, 3, 2, 1, 9 y 0.
ghci> c1
{0,1,2,3,5,7,9}
c1 :: Conj
c1 = foldr inserta vacio [2,5,1,3,7,5,3,2,1,9,0] 35 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos de números enteros mediante números binarios
Los conjuntos de enteros mediante números binarios
vacio es el conjunto vacío. Por ejemplo,
ghci> vacio
{}
vacio :: Conj
vacio = Cj 0
(esVacio c) se verifica si c es el conjunto vacío. Por ejemplo,
esVacio c1 False
esVacio vacio True
esVacio :: Conj -> Bool
esVacio (Cj n) = n == 0
36 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos de números enteros mediante números binarios
Los conjuntos de enteros mediante números binarios
(pertenece x c) se verifica si x pertenece al conjunto c. Por
ejemplo,
c1 == {0,1,2,3,5,7,9}
pertenece 3 c1 == True
pertenece 4 c1 == False
pertenece :: Int -> Conj -> Bool
pertenece i (Cj s)
| (i>=0) && (i<=maxConj) = odd (s `div` (2^i))
| otherwise
= error ("pertenece: elemento ilegal =" ++ show i)
37 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos de números enteros mediante números binarios
Los conjuntos de enteros mediante números binarios
(inserta x c) es el conjunto obtenido añadiendo el elemento x
al conjunto c. Por ejemplo,
c1 == {0,1,2,3,5,7,9}
inserta 5 c1 == {0,1,2,3,5,7,9}
inserta 4 c1 == {0,1,2,3,4,5,7,9}
inserta i (Cj s)
| (i>=0) && (i<=maxConj) = Cj (d'*e+m)
| otherwise
= error ("inserta: elemento ilegal =" ++ show i)
where (d,m) = divMod s e
e = 2^i
d' = if odd d then d else d+1
38 / 51
IM Tema 17: El TAD de los conjuntos
Implementaciones del TAD de los conjuntos
Los conjuntos de números enteros mediante números binarios
Los conjuntos de enteros mediante números binarios
(elimina x c) es el conjunto obtenido eliminando el elemento
x del conjunto c. Por ejemplo,
c1 == {0,1,2,3,5,7,9}
elimina 3 c1 == {0,1,2,5,7,9}
elimina i (Cj s)
| (i>=0) && (i<=maxConj) = Cj (d'*e+m)
| otherwise
= error ("elimina: elemento ilegal =" ++ show i)
where (d,m) = divMod s e
e = 2^i
d' = if odd d then d-1 else d
39 / 51
IM Tema 17: El TAD de los conjuntos
Comprobación de las implementaciones con QuickCheck
Librerías auxiliares
Tema 17: El TAD de los conjuntos
1. Especificación del TAD de los conjuntos
2. Implementaciones del TAD de los conjuntos
3. Comprobación de las implementaciones con QuickCheck
Librerías auxiliares
Generador de conjuntos
Especificación de las propiedades de los conjuntos
Comprobación de las propiedades
40 / 51
IM Tema 17: El TAD de los conjuntos
Comprobación de las implementaciones con QuickCheck
Librerías auxiliares
Comprobación de las propiedades de los conjuntos
Importación de la implementación de los conjuntos que se desea
verificar.
import ConjuntoConListasNoOrdenadasConDuplicados
-- import ConjuntoConListasNoOrdenadasSinDuplicados
-- import ConjuntoConListasOrdenadasSinDuplicados
Importación de las librerías de comprobación
import Test.QuickCheck
import Test.Framework
import Test.Framework.Providers.QuickCheck2
41 / 51
IM Tema 17: El TAD de los conjuntos
Comprobación de las implementaciones con QuickCheck
Generador de conjuntos
Tema 17: El TAD de los conjuntos
1. Especificación del TAD de los conjuntos
2. Implementaciones del TAD de los conjuntos
3. Comprobación de las implementaciones con QuickCheck
Librerías auxiliares
Generador de conjuntos
Especificación de las propiedades de los conjuntos
Comprobación de las propiedades
42 / 51
IM Tema 17: El TAD de los conjuntos
Comprobación de las implementaciones con QuickCheck
Generador de conjuntos
Generador de conjuntos
genConjunto es un generador de conjuntos. Por ejemplo,
ghci> sample genConjunto
{3,-2,-2,-3,-2,4}
{-8,0,4,6,-5,-2}
{}
genConjunto :: Gen (Conj Int)
genConjunto = do xs <- listOf arbitrary
return (foldr inserta vacio xs)
instance Arbitrary (Conj Int) where
arbitrary = genConjunto
43 / 51
IM Tema 17: El TAD de los conjuntos
Comprobación de las implementaciones con QuickCheck
Especificación de las propiedades de los conjuntos
Tema 17: El TAD de los conjuntos
1. Especificación del TAD de los conjuntos
2. Implementaciones del TAD de los conjuntos
3. Comprobación de las implementaciones con QuickCheck
Librerías auxiliares
Generador de conjuntos
Especificación de las propiedades de los conjuntos
Comprobación de las propiedades
44 / 51
IM Tema 17: El TAD de los conjuntos
Comprobación de las implementaciones con QuickCheck
Especificación de las propiedades de los conjuntos
Especificación de las propiedades de los conjuntos
El número de veces que se añada un elemento a un conjunto no
importa.
prop_independencia_repeticiones :: Int -> Conj Int
-> Bool
prop_independencia_repeticiones x c =
inserta x (inserta x c) == inserta x c
El orden en que se añadan los elementos a un conjunto no
importa.
prop_independencia_del_orden :: Int -> Int -> Conj Int
-> Bool
prop_independencia_del_orden x y c =
inserta x (inserta y c) == inserta y (inserta x c)
45 / 51
IM Tema 17: El TAD de los conjuntos
Comprobación de las implementaciones con QuickCheck
Especificación de las propiedades de los conjuntos
Especificación de las propiedades de los conjuntos
El conjunto vacío no tiene elementos.
prop_vacio_no_elementos:: Int -> Bool
prop_vacio_no_elementos x =
not (pertenece x vacio)
Un elemento pertenece al conjunto obtenido añadiendo x al
conjunto c syss es igual a x o pertenece a c.
prop_pertenece_inserta :: Int -> Int -> Conj Int -> Bool
prop_pertenece_inserta x y c =
pertenece y (inserta x c) == (x==y) || pertenece y c
46 / 51
IM Tema 17: El TAD de los conjuntos
Comprobación de las implementaciones con QuickCheck
Especificación de las propiedades de los conjuntos
Especificación de las propiedades de los conjuntos
Al eliminar cualquier elemento del conjunto vacío se obtiene el
conjunto vacío.
prop_elimina_vacio :: Int -> Bool
prop_elimina_vacio x =
elimina x vacio == vacio
El resultado de eliminar x en el conjunto obtenido añadiéndole x
al conjunto c es c menos x, si x e y son iguales y es el conjunto
obtenido añadiéndole y a c menos x, en caso contrario.
prop_elimina_inserta :: Int -> Int -> Conj Int -> Bool
prop_elimina_inserta x y c =
elimina x (inserta y c)
== if x == y then elimina x c
else inserta y (elimina x c)
47 / 51
IM Tema 17: El TAD de los conjuntos
Comprobación de las implementaciones con QuickCheck
Especificación de las propiedades de los conjuntos
Especificación de las propiedades de los conjuntos
vacio es vacío.
prop_vacio_es_vacio :: Bool
prop_vacio_es_vacio =
esVacio (vacio :: Conj Int)
Los conjuntos construidos con inserta no son vacío.
prop_inserta_es_no_vacio :: Int -> Conj Int -> Bool
prop_inserta_es_no_vacio x c =
not (esVacio (inserta x c))
48 / 51
IM Tema 17: El TAD de los conjuntos
Comprobación de las implementaciones con QuickCheck
Comprobación de las propiedades
Tema 17: El TAD de los conjuntos
1. Especificación del TAD de los conjuntos
2. Implementaciones del TAD de los conjuntos
3. Comprobación de las implementaciones con QuickCheck
Librerías auxiliares
Generador de conjuntos
Especificación de las propiedades de los conjuntos
Comprobación de las propiedades
49 / 51
IM Tema 17: El TAD de los conjuntos
Comprobación de las implementaciones con QuickCheck
Comprobación de las propiedades
Definición del procedimiento de comprobación
compruebaPropiedades comprueba todas las propiedades con la
plataforma de verificación.
compruebaPropiedades =
defaultMain
[testGroup "Propiedades del TAD conjunto:"
[testProperty "P1" prop_vacio_es_vacio,
testProperty "P2" prop_inserta_es_no_vacio,
testProperty "P3" prop_independencia_repeticiones,
testProperty "P4" prop_independencia_del_orden,
testProperty "P5" prop_vacio_no_elementos,
testProperty "P6" prop_pertenece_inserta,
testProperty "P7" prop_elimina_vacio,
testProperty "P8" prop_elimina_inserta]]
50 / 51
IM Tema 17: El TAD de los conjuntos
Comprobación de las implementaciones con QuickCheck
Comprobación de las propiedades
Comprobación de las propiedades de los conjuntos
ghci> compruebaPropiedades
Propiedades del TAD conjunto:
P1: [OK, passed 100 tests]
P2: [OK, passed 100 tests]
P3: [OK, passed 100 tests]
P4: [OK, passed 100 tests]
P5: [OK, passed 100 tests]
P6: [OK, passed 100 tests]
P7: [OK, passed 100 tests]
P8: [OK, passed 100 tests]
Properties Total
Passed 8 8
Failed 0 0
Total 8 8
51 / 51

Mais conteúdo relacionado

Mais procurados

Alg(1) 4° 2 b
Alg(1) 4° 2 bAlg(1) 4° 2 b
Alg(1) 4° 2 b349juan
 
Concavidad puntos de inflexión asintotas
Concavidad puntos de inflexión asintotasConcavidad puntos de inflexión asintotas
Concavidad puntos de inflexión asintotasfreddy remache
 
S1 4 ejercicios_integrales_basicas
S1 4 ejercicios_integrales_basicasS1 4 ejercicios_integrales_basicas
S1 4 ejercicios_integrales_basicasjesquerrev1
 
Unidad nº funciones 1º parte
Unidad nº funciones 1º parteUnidad nº funciones 1º parte
Unidad nº funciones 1º parteMiguel Rodriguez
 
Sesion de aprendizaje funciones reales algebra pre u ccesa007
Sesion de aprendizaje funciones reales algebra pre u  ccesa007Sesion de aprendizaje funciones reales algebra pre u  ccesa007
Sesion de aprendizaje funciones reales algebra pre u ccesa007Demetrio Ccesa Rayme
 
Alg(2) 4° 2 b
Alg(2) 4° 2 bAlg(2) 4° 2 b
Alg(2) 4° 2 b349juan
 
Clase integracion matlab
Clase integracion matlabClase integracion matlab
Clase integracion matlabdhanniell
 
Funciones resueltos
Funciones resueltosFunciones resueltos
Funciones resueltosElvis Valera
 
Solucionario mt 054 2011 75 preguntas ok
Solucionario mt 054 2011 75 preguntas okSolucionario mt 054 2011 75 preguntas ok
Solucionario mt 054 2011 75 preguntas okjuanlarasoto
 
A. Cálculo Integral. Capítulo I. Sucesiones y Series. Complemento
A. Cálculo Integral. Capítulo I. Sucesiones y Series. ComplementoA. Cálculo Integral. Capítulo I. Sucesiones y Series. Complemento
A. Cálculo Integral. Capítulo I. Sucesiones y Series. ComplementoPablo García y Colomé
 
Maximos y minimos
Maximos y minimosMaximos y minimos
Maximos y minimosuagrm
 
Aplicaciones de la derivada segunda parte
Aplicaciones de la derivada segunda parteAplicaciones de la derivada segunda parte
Aplicaciones de la derivada segunda parteangiegutierrez11
 

Mais procurados (20)

Alg(1) 4° 2 b
Alg(1) 4° 2 bAlg(1) 4° 2 b
Alg(1) 4° 2 b
 
Concavidad puntos de inflexión asintotas
Concavidad puntos de inflexión asintotasConcavidad puntos de inflexión asintotas
Concavidad puntos de inflexión asintotas
 
S1 4 ejercicios_integrales_basicas
S1 4 ejercicios_integrales_basicasS1 4 ejercicios_integrales_basicas
S1 4 ejercicios_integrales_basicas
 
Unidad nº funciones 1º parte
Unidad nº funciones 1º parteUnidad nº funciones 1º parte
Unidad nº funciones 1º parte
 
Sesion de aprendizaje funciones reales algebra pre u ccesa007
Sesion de aprendizaje funciones reales algebra pre u  ccesa007Sesion de aprendizaje funciones reales algebra pre u  ccesa007
Sesion de aprendizaje funciones reales algebra pre u ccesa007
 
Alg(2) 4° 2 b
Alg(2) 4° 2 bAlg(2) 4° 2 b
Alg(2) 4° 2 b
 
Clase integracion matlab
Clase integracion matlabClase integracion matlab
Clase integracion matlab
 
Tic9°
Tic9°Tic9°
Tic9°
 
Funciones resueltos
Funciones resueltosFunciones resueltos
Funciones resueltos
 
Mat lab03
Mat lab03Mat lab03
Mat lab03
 
Derivadas
DerivadasDerivadas
Derivadas
 
Ejemplos java
Ejemplos javaEjemplos java
Ejemplos java
 
Solucionario mt 054 2011 75 preguntas ok
Solucionario mt 054 2011 75 preguntas okSolucionario mt 054 2011 75 preguntas ok
Solucionario mt 054 2011 75 preguntas ok
 
A. Cálculo Integral. Capítulo I. Sucesiones y Series. Complemento
A. Cálculo Integral. Capítulo I. Sucesiones y Series. ComplementoA. Cálculo Integral. Capítulo I. Sucesiones y Series. Complemento
A. Cálculo Integral. Capítulo I. Sucesiones y Series. Complemento
 
Tipos basicos de java
Tipos basicos de javaTipos basicos de java
Tipos basicos de java
 
Maximos y minimos
Maximos y minimosMaximos y minimos
Maximos y minimos
 
Ay t mod9-10
Ay t mod9-10Ay t mod9-10
Ay t mod9-10
 
Aplicaciones Derivada
Aplicaciones DerivadaAplicaciones Derivada
Aplicaciones Derivada
 
Aplicaciones de la derivada segunda parte
Aplicaciones de la derivada segunda parteAplicaciones de la derivada segunda parte
Aplicaciones de la derivada segunda parte
 
Funciones y gráficas en matlab
Funciones y gráficas en matlabFunciones y gráficas en matlab
Funciones y gráficas en matlab
 

Destaque

I1M-T21: El TAD de los polinomios en Haskell
I1M-T21: El TAD de los polinomios en HaskellI1M-T21: El TAD de los polinomios en Haskell
I1M-T21: El TAD de los polinomios en HaskellJosé A. Alonso
 
LMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicionalLMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicionalJosé A. Alonso
 
I1M2010-T14: El tipo abstracto de datos de las pilas en Haskell
I1M2010-T14: El tipo abstracto de datos de las pilas en HaskellI1M2010-T14: El tipo abstracto de datos de las pilas en Haskell
I1M2010-T14: El tipo abstracto de datos de las pilas en HaskellJosé A. Alonso
 
I1M2010-T20: El tipo abstracto de los montículos en Haskell
I1M2010-T20: El tipo abstracto de los montículos en Haskell I1M2010-T20: El tipo abstracto de los montículos en Haskell
I1M2010-T20: El tipo abstracto de los montículos en Haskell José A. Alonso
 
I1M2010-T23: Técnicas de diseño descendente de algoritmos.
I1M2010-T23: Técnicas de diseño descendente de algoritmos.I1M2010-T23: Técnicas de diseño descendente de algoritmos.
I1M2010-T23: Técnicas de diseño descendente de algoritmos.José A. Alonso
 
I1M2010-T18: El TAD de las tablas en Haskell
I1M2010-T18: El TAD de las tablas en HaskellI1M2010-T18: El TAD de las tablas en Haskell
I1M2010-T18: El TAD de las tablas en HaskellJosé A. Alonso
 
I1M-T19: El TAD de los árboles de búsqueda
I1M-T19: El TAD de los árboles de búsquedaI1M-T19: El TAD de los árboles de búsqueda
I1M-T19: El TAD de los árboles de búsquedaJosé A. Alonso
 
I1M2010-T22: Algoritmos sobre grafos en Haskell
I1M2010-T22: Algoritmos sobre grafos en HaskellI1M2010-T22: Algoritmos sobre grafos en Haskell
I1M2010-T22: Algoritmos sobre grafos en HaskellJosé A. Alonso
 
LMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalLMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalJosé A. Alonso
 
LI2011-T7: Deducción natural en lógica de primer orden
LI2011-T7: Deducción natural en lógica de primer ordenLI2011-T7: Deducción natural en lógica de primer orden
LI2011-T7: Deducción natural en lógica de primer ordenJosé A. Alonso
 
Panorama del razonamiento automático
Panorama del razonamiento automáticoPanorama del razonamiento automático
Panorama del razonamiento automáticoJosé A. Alonso
 
LMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenLMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenJosé A. Alonso
 
Tema 12: Analizadores sintácticos funcionales.
Tema 12: Analizadores sintácticos funcionales.Tema 12: Analizadores sintácticos funcionales.
Tema 12: Analizadores sintácticos funcionales.José A. Alonso
 
Tema 2: Introducción a la programación con Haskell
Tema 2: Introducción a la programación con HaskellTema 2: Introducción a la programación con Haskell
Tema 2: Introducción a la programación con HaskellJosé A. Alonso
 
LMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicionalLMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicionalJosé A. Alonso
 
LI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con PrologLI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con PrologJosé A. Alonso
 
I1M2010-T15: El tipo abstracto de datos de las colas en Haskell
I1M2010-T15: El tipo abstracto de datos de las colas en HaskellI1M2010-T15: El tipo abstracto de datos de las colas en Haskell
I1M2010-T15: El tipo abstracto de datos de las colas en HaskellJosé A. Alonso
 
LI2011-T11: Resolución en lógica de primer orden
LI2011-T11: Resolución en lógica de primer ordenLI2011-T11: Resolución en lógica de primer orden
LI2011-T11: Resolución en lógica de primer ordenJosé A. Alonso
 

Destaque (20)

I1M-T21: El TAD de los polinomios en Haskell
I1M-T21: El TAD de los polinomios en HaskellI1M-T21: El TAD de los polinomios en Haskell
I1M-T21: El TAD de los polinomios en Haskell
 
LMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicionalLMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicional
 
I1M2010-T14: El tipo abstracto de datos de las pilas en Haskell
I1M2010-T14: El tipo abstracto de datos de las pilas en HaskellI1M2010-T14: El tipo abstracto de datos de las pilas en Haskell
I1M2010-T14: El tipo abstracto de datos de las pilas en Haskell
 
I1M2010-T20: El tipo abstracto de los montículos en Haskell
I1M2010-T20: El tipo abstracto de los montículos en Haskell I1M2010-T20: El tipo abstracto de los montículos en Haskell
I1M2010-T20: El tipo abstracto de los montículos en Haskell
 
I1M2010-T23: Técnicas de diseño descendente de algoritmos.
I1M2010-T23: Técnicas de diseño descendente de algoritmos.I1M2010-T23: Técnicas de diseño descendente de algoritmos.
I1M2010-T23: Técnicas de diseño descendente de algoritmos.
 
I1M2010-T18: El TAD de las tablas en Haskell
I1M2010-T18: El TAD de las tablas en HaskellI1M2010-T18: El TAD de las tablas en Haskell
I1M2010-T18: El TAD de las tablas en Haskell
 
I1M-T19: El TAD de los árboles de búsqueda
I1M-T19: El TAD de los árboles de búsquedaI1M-T19: El TAD de los árboles de búsqueda
I1M-T19: El TAD de los árboles de búsqueda
 
I1M2010-T22: Algoritmos sobre grafos en Haskell
I1M2010-T22: Algoritmos sobre grafos en HaskellI1M2010-T22: Algoritmos sobre grafos en Haskell
I1M2010-T22: Algoritmos sobre grafos en Haskell
 
LMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalLMF-T5: Resolución proposicional
LMF-T5: Resolución proposicional
 
LI2011-T7: Deducción natural en lógica de primer orden
LI2011-T7: Deducción natural en lógica de primer ordenLI2011-T7: Deducción natural en lógica de primer orden
LI2011-T7: Deducción natural en lógica de primer orden
 
Panorama del razonamiento automático
Panorama del razonamiento automáticoPanorama del razonamiento automático
Panorama del razonamiento automático
 
LMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenLMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer orden
 
El Proyecto Polymer
El Proyecto PolymerEl Proyecto Polymer
El Proyecto Polymer
 
Tema 12: Analizadores sintácticos funcionales.
Tema 12: Analizadores sintácticos funcionales.Tema 12: Analizadores sintácticos funcionales.
Tema 12: Analizadores sintácticos funcionales.
 
Tema 2: Introducción a la programación con Haskell
Tema 2: Introducción a la programación con HaskellTema 2: Introducción a la programación con Haskell
Tema 2: Introducción a la programación con Haskell
 
LMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicionalLMF-T2: Deducción natural proposicional
LMF-T2: Deducción natural proposicional
 
LI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con PrologLI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con Prolog
 
Haskell
HaskellHaskell
Haskell
 
I1M2010-T15: El tipo abstracto de datos de las colas en Haskell
I1M2010-T15: El tipo abstracto de datos de las colas en HaskellI1M2010-T15: El tipo abstracto de datos de las colas en Haskell
I1M2010-T15: El tipo abstracto de datos de las colas en Haskell
 
LI2011-T11: Resolución en lógica de primer orden
LI2011-T11: Resolución en lógica de primer ordenLI2011-T11: Resolución en lógica de primer orden
LI2011-T11: Resolución en lógica de primer orden
 

Semelhante a TAD conjuntos

Teoría de Conjuntos.
Teoría de Conjuntos.Teoría de Conjuntos.
Teoría de Conjuntos.Sam Arr
 
Arreglos bidimensionales o matrices
Arreglos bidimensionales o matricesArreglos bidimensionales o matrices
Arreglos bidimensionales o matricesAriannaYadiraT
 
Biblioteca java.util por gio
Biblioteca java.util por gioBiblioteca java.util por gio
Biblioteca java.util por gioRobert Wolf
 
Apuntes generación de codigo intermedio
Apuntes generación de codigo intermedioApuntes generación de codigo intermedio
Apuntes generación de codigo intermedioHumano Terricola
 
Tema 0 Repaso Programación en Java
Tema 0 Repaso Programación en JavaTema 0 Repaso Programación en Java
Tema 0 Repaso Programación en JavaCarlos A. Iglesias
 
Transformaciones modelo a modelo: ATL (ParteII)
Transformaciones modelo a modelo: ATL (ParteII)Transformaciones modelo a modelo: ATL (ParteII)
Transformaciones modelo a modelo: ATL (ParteII)Ricardo Tesoriero
 
Pilas colas listas
Pilas colas listasPilas colas listas
Pilas colas listastazmania2
 
Entrega 8 arreglos - controles - gráficos
Entrega 8   arreglos - controles - gráficosEntrega 8   arreglos - controles - gráficos
Entrega 8 arreglos - controles - gráficosguest266cf96
 
eduardo hernandez investigacion 1
eduardo hernandez investigacion 1eduardo hernandez investigacion 1
eduardo hernandez investigacion 1guest79d55c9
 
Seminario de matlab
Seminario de matlabSeminario de matlab
Seminario de matlabjamarzo
 

Semelhante a TAD conjuntos (20)

Teoría de Conjuntos.
Teoría de Conjuntos.Teoría de Conjuntos.
Teoría de Conjuntos.
 
Arreglos bidimensionales o matrices
Arreglos bidimensionales o matricesArreglos bidimensionales o matrices
Arreglos bidimensionales o matrices
 
Arreglos c++
Arreglos c++Arreglos c++
Arreglos c++
 
7.arreglos en java
7.arreglos en  java7.arreglos en  java
7.arreglos en java
 
Pilas colas
Pilas colasPilas colas
Pilas colas
 
Arreglos y matrices
Arreglos y matricesArreglos y matrices
Arreglos y matrices
 
Biblioteca java.util por gio
Biblioteca java.util por gioBiblioteca java.util por gio
Biblioteca java.util por gio
 
Apuntes generación de codigo intermedio
Apuntes generación de codigo intermedioApuntes generación de codigo intermedio
Apuntes generación de codigo intermedio
 
Tema 0 Repaso Programación en Java
Tema 0 Repaso Programación en JavaTema 0 Repaso Programación en Java
Tema 0 Repaso Programación en Java
 
Transformaciones modelo a modelo: ATL (ParteII)
Transformaciones modelo a modelo: ATL (ParteII)Transformaciones modelo a modelo: ATL (ParteII)
Transformaciones modelo a modelo: ATL (ParteII)
 
Tema 5 - Estructuras de datos.pdf
Tema 5 - Estructuras de datos.pdfTema 5 - Estructuras de datos.pdf
Tema 5 - Estructuras de datos.pdf
 
Programación 1: arreglos en C
Programación 1: arreglos en CProgramación 1: arreglos en C
Programación 1: arreglos en C
 
arreglos y matrices
arreglos  y matricesarreglos  y matrices
arreglos y matrices
 
Pilas colas listas
Pilas colas listasPilas colas listas
Pilas colas listas
 
Entrega 8 arreglos - controles - gráficos
Entrega 8   arreglos - controles - gráficosEntrega 8   arreglos - controles - gráficos
Entrega 8 arreglos - controles - gráficos
 
Mat lab01
Mat lab01Mat lab01
Mat lab01
 
eduardo hernandez investigacion 1
eduardo hernandez investigacion 1eduardo hernandez investigacion 1
eduardo hernandez investigacion 1
 
Tutorial matlab
Tutorial matlabTutorial matlab
Tutorial matlab
 
matlab
matlabmatlab
matlab
 
Seminario de matlab
Seminario de matlabSeminario de matlab
Seminario de matlab
 

Mais de José A. Alonso

LMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenLMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenJosé A. Alonso
 
LMF-T5b: Aplicaciones de la lógica proposicional
LMF-T5b: Aplicaciones de la lógica proposicionalLMF-T5b: Aplicaciones de la lógica proposicional
LMF-T5b: Aplicaciones de la lógica proposicionalJosé A. Alonso
 
LMF-T3: Tableros semánticos
LMF-T3: Tableros semánticosLMF-T3: Tableros semánticos
LMF-T3: Tableros semánticosJosé A. Alonso
 
LI-T6: Sintaxis y semántica de la lógica de primer orden
LI-T6: Sintaxis y semántica de la lógica de primer ordenLI-T6: Sintaxis y semántica de la lógica de primer orden
LI-T6: Sintaxis y semántica de la lógica de primer ordenJosé A. Alonso
 
LI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. AplicacionesLI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. AplicacionesJosé A. Alonso
 
LI -T5: Resolución proposicional
LI -T5: Resolución proposicionalLI -T5: Resolución proposicional
LI -T5: Resolución proposicionalJosé A. Alonso
 
I1M2010-T24: Programación dinámica en Haskell
I1M2010-T24: Programación dinámica en HaskellI1M2010-T24: Programación dinámica en Haskell
I1M2010-T24: Programación dinámica en HaskellJosé A. Alonso
 
LI2011-T9: Formas normales de Skolem y cláusulas
LI2011-T9: Formas normales de Skolem y cláusulasLI2011-T9: Formas normales de Skolem y cláusulas
LI2011-T9: Formas normales de Skolem y cláusulasJosé A. Alonso
 
LIT4: Formales normales conjuntivas y disyuntivas
LIT4: Formales normales conjuntivas y disyuntivasLIT4: Formales normales conjuntivas y disyuntivas
LIT4: Formales normales conjuntivas y disyuntivasJosé A. Alonso
 
I1M2010-T16: El tipo abstracto de las colas de prioridad en Haskell
I1M2010-T16: El tipo abstracto de las colas de prioridad en HaskellI1M2010-T16: El tipo abstracto de las colas de prioridad en Haskell
I1M2010-T16: El tipo abstracto de las colas de prioridad en HaskellJosé A. Alonso
 
LI2011-T3: Tableros semánticos proposicionales
LI2011-T3: Tableros semánticos proposicionalesLI2011-T3: Tableros semánticos proposicionales
LI2011-T3: Tableros semánticos proposicionalesJosé A. Alonso
 

Mais de José A. Alonso (12)

LMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer ordenLMF-T6: Sintaxis y semántica de la lógica de primer orden
LMF-T6: Sintaxis y semántica de la lógica de primer orden
 
LMF-T5b: Aplicaciones de la lógica proposicional
LMF-T5b: Aplicaciones de la lógica proposicionalLMF-T5b: Aplicaciones de la lógica proposicional
LMF-T5b: Aplicaciones de la lógica proposicional
 
LMF-T4: Formas normales
LMF-T4: Formas normalesLMF-T4: Formas normales
LMF-T4: Formas normales
 
LMF-T3: Tableros semánticos
LMF-T3: Tableros semánticosLMF-T3: Tableros semánticos
LMF-T3: Tableros semánticos
 
LI-T6: Sintaxis y semántica de la lógica de primer orden
LI-T6: Sintaxis y semántica de la lógica de primer ordenLI-T6: Sintaxis y semántica de la lógica de primer orden
LI-T6: Sintaxis y semántica de la lógica de primer orden
 
LI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. AplicacionesLI-T5b: Algoritmos para SAT. Aplicaciones
LI-T5b: Algoritmos para SAT. Aplicaciones
 
LI -T5: Resolución proposicional
LI -T5: Resolución proposicionalLI -T5: Resolución proposicional
LI -T5: Resolución proposicional
 
I1M2010-T24: Programación dinámica en Haskell
I1M2010-T24: Programación dinámica en HaskellI1M2010-T24: Programación dinámica en Haskell
I1M2010-T24: Programación dinámica en Haskell
 
LI2011-T9: Formas normales de Skolem y cláusulas
LI2011-T9: Formas normales de Skolem y cláusulasLI2011-T9: Formas normales de Skolem y cláusulas
LI2011-T9: Formas normales de Skolem y cláusulas
 
LIT4: Formales normales conjuntivas y disyuntivas
LIT4: Formales normales conjuntivas y disyuntivasLIT4: Formales normales conjuntivas y disyuntivas
LIT4: Formales normales conjuntivas y disyuntivas
 
I1M2010-T16: El tipo abstracto de las colas de prioridad en Haskell
I1M2010-T16: El tipo abstracto de las colas de prioridad en HaskellI1M2010-T16: El tipo abstracto de las colas de prioridad en Haskell
I1M2010-T16: El tipo abstracto de las colas de prioridad en Haskell
 
LI2011-T3: Tableros semánticos proposicionales
LI2011-T3: Tableros semánticos proposicionalesLI2011-T3: Tableros semánticos proposicionales
LI2011-T3: Tableros semánticos proposicionales
 

Último

Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónLourdes Feria
 
PIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonablesPIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonablesYanirisBarcelDelaHoz
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioELIASAURELIOCHAVEZCA1
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfAngélica Soledad Vega Ramírez
 
Imperialismo informal en Europa y el imperio
Imperialismo informal en Europa y el imperioImperialismo informal en Europa y el imperio
Imperialismo informal en Europa y el imperiomiralbaipiales2016
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptxdeimerhdz21
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfNancyLoaa
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptxFelicitasAsuncionDia
 
PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxlupitavic
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxlclcarmen
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.amayarogel
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxYadi Campos
 
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfEjercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfMaritzaRetamozoVera
 
plan de capacitacion docente AIP 2024 clllll.pdf
plan de capacitacion docente  AIP 2024          clllll.pdfplan de capacitacion docente  AIP 2024          clllll.pdf
plan de capacitacion docente AIP 2024 clllll.pdfenelcielosiempre
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...JAVIER SOLIS NOYOLA
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAEl Fortí
 
Sesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docxSesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docxMaritzaRetamozoVera
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSYadi Campos
 

Último (20)

Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
PIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonablesPIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonables
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literario
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
Imperialismo informal en Europa y el imperio
Imperialismo informal en Europa y el imperioImperialismo informal en Europa y el imperio
Imperialismo informal en Europa y el imperio
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptx
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdf
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptx
 
PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docx
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfEjercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
 
plan de capacitacion docente AIP 2024 clllll.pdf
plan de capacitacion docente  AIP 2024          clllll.pdfplan de capacitacion docente  AIP 2024          clllll.pdf
plan de capacitacion docente AIP 2024 clllll.pdf
 
Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
 
Sesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docxSesión de aprendizaje Planifica Textos argumentativo.docx
Sesión de aprendizaje Planifica Textos argumentativo.docx
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
 
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdfTema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
 

TAD conjuntos

  • 1. Tema 17: El TAD de los conjuntos Informática (2014–15) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla
  • 2. IM Tema 17: El TAD de los conjuntos Tema 17: El TAD de los conjuntos 1. Especificación del TAD de los conjuntos Signatura del TAD de los conjuntos Propiedades del TAD de los conjuntos 2. Implementaciones del TAD de los conjuntos Los conjuntos como listas no ordenadas con duplicados Los conjuntos como listas no ordenadas sin duplicados Los conjuntos como listas ordenadas sin duplicados Los conjuntos de números enteros mediante números binarios 3. Comprobación de las implementaciones con QuickCheck Librerías auxiliares Generador de conjuntos Especificación de las propiedades de los conjuntos Comprobación de las propiedades 2 / 51
  • 3. IM Tema 17: El TAD de los conjuntos Especificación del TAD de los conjuntos Signatura del TAD de los conjuntos Tema 17: El TAD de los conjuntos 1. Especificación del TAD de los conjuntos Signatura del TAD de los conjuntos Propiedades del TAD de los conjuntos 2. Implementaciones del TAD de los conjuntos 3. Comprobación de las implementaciones con QuickCheck 3 / 51
  • 4. IM Tema 17: El TAD de los conjuntos Especificación del TAD de los conjuntos Signatura del TAD de los conjuntos Signatura del TAD de los conjuntos Signatura: vacio, :: Conj a inserta :: Eq a => a -> Conj a -> Conj a elimina :: Eq a => a -> Conj a -> Conj a pertenece :: Eq a => a -> Conj a -> Bool esVacio :: Conj a -> Bool Descripción de las operaciones: vacio es el conjunto vacío. (inserta x c) es el conjunto obtenido añadiendo el elemento x al conjunto c. (elimina x c) es el conjunto obtenido eliminando el elemento x del conjunto c. (pertenece x c) se verifica si x pertenece al conjunto c. (esVacio c) se verifica si c es el conjunto vacío. 4 / 51
  • 5. IM Tema 17: El TAD de los conjuntos Especificación del TAD de los conjuntos Propiedades del TAD de los conjuntos Tema 17: El TAD de los conjuntos 1. Especificación del TAD de los conjuntos Signatura del TAD de los conjuntos Propiedades del TAD de los conjuntos 2. Implementaciones del TAD de los conjuntos 3. Comprobación de las implementaciones con QuickCheck 5 / 51
  • 6. IM Tema 17: El TAD de los conjuntos Especificación del TAD de los conjuntos Propiedades del TAD de los conjuntos Propiedades del TAD de los conjuntos 1. inserta x (inserta x c) == inserta x c 2. inserta x (inserta y c) == inserta y (inserta x c) 3. not (pertenece x vacio) 4. pertenece y (inserta x c) == (x==y) || pertenece y c 5. elimina x vacio == vacio 6. Si x == y, entonces elimina x (inserta y c) == elimina x c 7. Si x /= y, entonces elimina x (inserta y c) == inserta y (elimina x c) 8. esVacio vacio 9. not (esVacio (inserta x c)) 6 / 51
  • 7. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos como listas no ordenadas con duplicados Tema 17: El TAD de los conjuntos 1. Especificación del TAD de los conjuntos 2. Implementaciones del TAD de los conjuntos Los conjuntos como listas no ordenadas con duplicados Los conjuntos como listas no ordenadas sin duplicados Los conjuntos como listas ordenadas sin duplicados Los conjuntos de números enteros mediante números binarios 3. Comprobación de las implementaciones con QuickCheck 7 / 51
  • 8. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos como listas no ordenadas con duplicados Los conjuntos como listas no ordenadas con duplicados Cabecera del módulo: module ConjuntoConListasNoOrdenadasConDuplicados (Conj, vacio, -- Conj a inserta, -- Eq a => a -> Conj a -> Conj a elimina, -- Eq a => a -> Conj a -> Conj a pertenece, -- Eq a => a -> Conj a -> Bool esVacio, -- Conj a -> Bool ) where 8 / 51
  • 9. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos como listas no ordenadas con duplicados Los conjuntos como listas no ordenadas con duplicados El tipo de los conjuntos. newtype Conj a = Cj [a] Procedimiento de escritura de los conjuntos. instance Show a => Show (Conj a) where showsPrec _ (Cj s) cad = showConj s cad showConj [] cad = showString "{}" cad showConj (x:xs) cad = showChar '{' (shows x (showl xs cad)) where showl [] cad = showChar '}' cad showl (x:xs) cad = showChar ',' (shows x (showl xs cad) 9 / 51
  • 10. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos como listas no ordenadas con duplicados Los conjuntos como listas no ordenadas con duplicados Ejemplo de conjunto: c1 es el conjunto obtenido añadiéndole al conjunto vacío los elementos 2, 5, 1, 3, 7, 5, 3, 2, 1, 9 y 0. ghci > c1 {2,5,1,3,7,5,3,2,1,9,0} c1 :: Conj Int c1 = foldr inserta vacio [2,5,1,3,7,5,3,2,1,9,0] vacio es el conjunto vacío. Por ejemplo, ghci> vacio {} vacio :: Conj a vacio = Cj [] 10 / 51
  • 11. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos como listas no ordenadas con duplicados Los conjuntos como listas no ordenadas con duplicados (inserta x c) es el conjunto obtenido añadiendo el elemento x al conjunto c. Por ejemplo, c1 == {2,5,1,3,7,5,3,2,1,9,0} inserta 5 c1 == {5,2,5,1,3,7,5,3,2,1,9,0} inserta :: Eq a => a -> Conj a -> Conj a inserta x (Cj ys) = Cj (x:ys) (elimina x c) es el conjunto obtenido eliminando el elemento x del conjunto c. Por ejemplo, c1 == {2,5,1,3,7,5,3,2,1,9,0} elimina 3 c1 == {2,5,1,7,5,2,1,9,0} elimina :: Eq a => a -> Conj a -> Conj a elimina x (Cj ys) = Cj (filter (/= x) ys) 11 / 51
  • 12. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos como listas no ordenadas con duplicados Los conjuntos como listas no ordenadas con duplicados (pertenece x c) se verifica si x pertenece al conjunto c. Por ejemplo, c1 == {2,5,1,3,7,5,3,2,1,9,0} pertenece 3 c1 == True pertenece 4 c1 == False pertenece :: Eq a => a -> Conj a -> Bool pertenece x (Cj xs) = elem x xs (esVacio c) se verifica si c es el conjunto vacío. Por ejemplo, esVacio c1 False esVacio vacio True esVacio :: Conj a -> Bool esVacio (Cj xs) = null xs 12 / 51
  • 13. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos como listas no ordenadas con duplicados Los conjuntos como listas no ordenadas con duplicados (subconjunto c1 c2) se verifica si c1 es un subconjunto de c2. Por ejemplo, subconjunto (Cj [1,3,2,1]) (Cj [3,1,3,2]) True subconjunto (Cj [1,3,4,1]) (Cj [3,1,3,2]) False subconjunto :: Eq a => Conj a -> Conj a -> Bool subconjunto (Cj xs) (Cj ys) = sublista xs ys where sublista [] _ = True sublista (x:xs) ys = elem x ys && sublista xs ys 13 / 51
  • 14. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos como listas no ordenadas con duplicados Los conjuntos como listas no ordenadas con duplicados (igualConjunto c1 c2) se verifica si los conjuntos c1 y c2 son iguales. Por ejemplo, igualConjunto (Cj [1,3,2,1]) (Cj [3,1,3,2]) True igualConjunto (Cj [1,3,4,1]) (Cj [3,1,3,2]) False igualConjunto :: Eq a => Conj a -> Conj a -> Bool igualConjunto c1 c2 = subconjunto c1 c2 && subconjunto c2 c1 Los conjuntos son comparables por igualdad. instance Eq a => Eq (Conj a) where (==) = igualConjunto 14 / 51
  • 15. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos como listas no ordenadas sin duplicados Tema 17: El TAD de los conjuntos 1. Especificación del TAD de los conjuntos 2. Implementaciones del TAD de los conjuntos Los conjuntos como listas no ordenadas con duplicados Los conjuntos como listas no ordenadas sin duplicados Los conjuntos como listas ordenadas sin duplicados Los conjuntos de números enteros mediante números binarios 3. Comprobación de las implementaciones con QuickCheck 15 / 51
  • 16. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos como listas no ordenadas sin duplicados Los conjuntos como listas no ordenadas sin duplicados Cabecera del módulo. module ConjuntoConListasNoOrdenadasSinDuplicados (Conj, vacio, -- Conj a esVacio, -- Conj a -> Bool pertenece, -- Eq a => a -> Conj a -> Bool inserta, -- Eq a => a -> Conj a -> Conj a elimina -- Eq a => a -> Conj a -> Conj a ) where 16 / 51
  • 17. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos como listas no ordenadas sin duplicados Los conjuntos como listas no ordenadas sin duplicados Los conjuntos como listas no ordenadas sin repeticiones. newtype Conj a = Cj [a] Procedimiento de escritura de los conjuntos. instance (Show a) => Show (Conj a) where showsPrec _ (Cj s) cad = showConj s cad showConj [] cad = showString "{}" cad showConj (x:xs) cad = showChar '{' (shows x (showl xs cad) where showl [] cad = showChar '}' cad showl (x:xs) cad = showChar ',' (shows x (showl xs cad)) 17 / 51
  • 18. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos como listas no ordenadas sin duplicados Los conjuntos como listas no ordenadas sin duplicados Ejemplo de conjunto: c1 es el conjunto obtenido añadiéndole al conjunto vacío los elementos 2, 5, 1, 3, 7, 5, 3, 2, 1, 9 y 0. ghci> c1 {7,5,3,2,1,9,0} c1 :: Conj Int c1 = foldr inserta vacio [2,5,1,3,7,5,3,2,1,9,0] vacio es el conjunto vacío. Por ejemplo, ghci> vacio {} vacio :: Conj a vacio = Cj [] 18 / 51
  • 19. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos como listas no ordenadas sin duplicados Los conjuntos como listas no ordenadas sin duplicados (esVacio c) se verifica si c es el conjunto vacío. Por ejemplo, esVacio c1 False esVacio vacio True esVacio :: Conj a -> Bool esVacio (Cj xs) = null xs (pertenece x c) se verifica si x pertenece al conjunto c. Por ejemplo, c1 == {2,5,1,3,7,5,3,2,1,9,0} pertenece 3 c1 == True pertenece 4 c1 == False pertenece :: Eq a => a -> Conj a -> Bool pertenece x (Cj xs) = elem x xs 19 / 51
  • 20. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos como listas no ordenadas sin duplicados Los conjuntos como listas no ordenadas sin duplicados (inserta x c) es el conjunto obtenido añadiendo el elemento x al conjunto c. Por ejemplo, inserta 4 c1 == {4,7,5,3,2,1,9,0} inserta 5 c1 == {7,5,3,2,1,9,0} inserta :: Eq a => a -> Conj a -> Conj a inserta x s@(Cj xs) | pertenece x s = s | otherwise = Cj (x:xs) (elimina x c) es el conjunto obtenido eliminando el elemento x del conjunto c. Por ejemplo, elimina 3 c1 == {7,5,2,1,9,0} elimina :: Eq a => a -> Conj a -> Conj a elimina x (Cj ys) = Cj [y | y <- ys, y /= x] 20 / 51
  • 21. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos como listas no ordenadas sin duplicados Los conjuntos como listas no ordenadas sin duplicados (subconjunto c1 c2) se verifica si c1 es un subconjunto de c2. Por ejemplo, subconjunto (Cj [1,3,2]) (Cj [3,1,2]) True subconjunto (Cj [1,3,4,1]) (Cj [1,3,2]) False subconjunto :: Eq a => Conj a -> Conj a -> Bool subconjunto (Cj xs) (Cj ys) = sublista xs ys where sublista [] _ = True sublista (x:xs) ys = elem x ys && sublista xs ys 21 / 51
  • 22. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos como listas no ordenadas sin duplicados Los conjuntos como listas no ordenadas sin duplicados (igualConjunto c1 c2) se verifica si los conjuntos c1 y c2 son iguales. Por ejemplo, igualConjunto (Cj [3,2,1]) (Cj [1,3,2]) True igualConjunto (Cj [1,3,4]) (Cj [1,3,2]) False igualConjunto :: Eq a => Conj a -> Conj a -> Bool igualConjunto c1 c2 = subconjunto c1 c2 && subconjunto c2 c1 Los conjuntos son comparables por igualdad. instance Eq a => Eq (Conj a) where (==) = igualConjunto 22 / 51
  • 23. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos como listas ordenadas sin duplicados Tema 17: El TAD de los conjuntos 1. Especificación del TAD de los conjuntos 2. Implementaciones del TAD de los conjuntos Los conjuntos como listas no ordenadas con duplicados Los conjuntos como listas no ordenadas sin duplicados Los conjuntos como listas ordenadas sin duplicados Los conjuntos de números enteros mediante números binarios 3. Comprobación de las implementaciones con QuickCheck 23 / 51
  • 24. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos como listas ordenadas sin duplicados Los conjuntos como listas ordenadas sin duplicados Cabecera del módulo module ConjuntoConListasOrdenadasSinDuplicados (Conj, vacio, -- Conj a esVacio, -- Conj a -> Bool pertenece, -- Ord a => a -> Conj a -> Bool inserta, -- Ord a => a -> Conj a -> Conj a elimina -- Ord a => a -> Conj a -> Conj a ) where Los conjuntos como listas ordenadas sin repeticiones. newtype Conj a = Cj [a] deriving Eq 24 / 51
  • 25. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos como listas ordenadas sin duplicados Los conjuntos como listas ordenadas sin duplicados Procedimiento de escritura de los conjuntos. instance (Show a) => Show (Conj a) where showsPrec _ (Cj s) cad = showConj s cad showConj [] cad = showString "{}" cad showConj (x:xs) cad = showChar '{' (shows x (showl xs cad)) where showl [] cad = showChar '}' cad showl (x:xs) cad = showChar ',' (shows x (showl xs 25 / 51
  • 26. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos como listas ordenadas sin duplicados Los conjuntos como listas ordenadas sin duplicados Ejemplo de conjunto: c1 es el conjunto obtenido añadiéndole al conjunto vacío los elementos 2, 5, 1, 3, 7, 5, 3, 2, 1, 9 y 0. ghci> c1 {0,1,2,3,5,7,9} c1 :: Conj Int c1 = foldr inserta vacio [2,5,1,3,7,5,3,2,1,9,0] vacio es el conjunto vacío. Por ejemplo, ghci> vacio {} vacio :: Conj a vacio = Cj [] 26 / 51
  • 27. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos como listas ordenadas sin duplicados Los conjuntos como listas ordenadas sin duplicados (esVacio c) se verifica si c es el conjunto vacío. Por ejemplo, esVacio c1 False esVacio vacio True esVacio :: Conj a -> Bool esVacio (Cj xs) = null xs (pertenece x c) se verifica si x pertenece al conjunto c. Por ejemplo, c1 == {0,1,2,3,5,7,9} pertenece 3 c1 == True pertenece 4 c1 == False pertenece :: Ord a => a -> Conj a -> Bool pertenece x (Cj ys) = elem x (takeWhile (<= x) ys) 27 / 51
  • 28. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos como listas ordenadas sin duplicados Los conjuntos como listas ordenadas sin duplicados (inserta x c) es el conjunto obtenido añadiendo el elemento x al conjunto c. Por ejemplo, c1 == {0,1,2,3,5,7,9} inserta 5 c1 == {0,1,2,3,5,7,9} inserta 4 c1 == {0,1,2,3,4,5,7,9} inserta :: Ord a => a -> Conj a -> Conj a inserta x (Cj s) = Cj (agrega x s) where agrega x [] = [x] agrega x s@(y:ys) | x > y = y : (agrega x ys) | x < y = x : s | otherwise = s 28 / 51
  • 29. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos como listas ordenadas sin duplicados Los conjuntos como listas ordenadas sin duplicados (elimina x c) es el conjunto obtenido eliminando el elemento x del conjunto c. Por ejemplo, c1 == {0,1,2,3,5,7,9} elimina 3 c1 == {0,1,2,5,7,9} elimina :: Ord a => a -> Conj a -> Conj a elimina x (Cj s) = Cj (elimina x s) where elimina x [] = [] elimina x s@(y:ys) | x > y = y : elimina x ys | x < y = s | otherwise = ys 29 / 51
  • 30. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos de números enteros mediante números binarios Tema 17: El TAD de los conjuntos 1. Especificación del TAD de los conjuntos 2. Implementaciones del TAD de los conjuntos Los conjuntos como listas no ordenadas con duplicados Los conjuntos como listas no ordenadas sin duplicados Los conjuntos como listas ordenadas sin duplicados Los conjuntos de números enteros mediante números binarios 3. Comprobación de las implementaciones con QuickCheck 30 / 51
  • 31. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos de números enteros mediante números binarios Los conjuntos de enteros mediante números binarios Los conjuntos que sólo contienen números (de tipo Int) entre 0 y n − 1, se pueden representar como números binarios con n bits donde el bit i (0 ≤ i < n) es 1 syss el número i pertenece al conjunto. Por ejemplo, 43210 {3,4} en binario es 11000 en decimal es 24 {1,2,3,4} en binario es 11110 en decimal es 30 {1,2,4} en binario es 10110 en decimal es 22 31 / 51
  • 32. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos de números enteros mediante números binarios Los conjuntos de enteros mediante números binarios Cabecera del módulo module ConjuntoConNumerosBinarios (Conj, vacio, -- Conj esVacio, -- Conj -> Bool pertenece, -- Int -> Conj -> Bool inserta, -- Int -> Conj -> Conj elimina -- Int -> Conj -> Conj ) where Los conjuntos de números enteros como números binarios. newtype Conj = Cj Int deriving Eq 32 / 51
  • 33. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos de números enteros mediante números binarios Los conjuntos de enteros mediante números binarios (conj2Lista c) es la lista de los elementos del conjunto c. Por ejemplo, conj2Lista (Cj 24) [3,4] conj2Lista (Cj 30) [1,2,3,4] conj2Lista (Cj 22) [1,2,4] conj2Lista (Cj s) = c2l s 0 where c2l 0 _ = [] c2l n i | odd n = i : c2l (n `div` 2) (i+1) | otherwise = c2l (n `div` 2) (i+1) 33 / 51
  • 34. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos de números enteros mediante números binarios Los conjuntos de enteros mediante números binarios Procedimiento de escritura de conjuntos. instance Show Conj where showsPrec _ s cad = showConj (conj2Lista s) cad showConj [] cad = showString "{}" cad showConj (x:xs) cad = showChar '{' (shows x (showl xs cad)) where showl [] cad = showChar '}' cad showl (x:xs) cad = showChar ',' (shows x (showl xs cad)) 34 / 51
  • 35. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos de números enteros mediante números binarios Los conjuntos de enteros mediante números binarios maxConj es el máximo número que puede pertenecer al conjunto. Depende de la implementación de Haskell. Por ejemplo, maxConj 29 maxConj :: Int maxConj = truncate (logBase 2 (fromIntegral maxInt)) - 1 where maxInt = maxBound::Int Ejemplo de conjunto: c1 es el conjunto obtenido añadiéndole al conjunto vacío los elementos 2, 5, 1, 3, 7, 5, 3, 2, 1, 9 y 0. ghci> c1 {0,1,2,3,5,7,9} c1 :: Conj c1 = foldr inserta vacio [2,5,1,3,7,5,3,2,1,9,0] 35 / 51
  • 36. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos de números enteros mediante números binarios Los conjuntos de enteros mediante números binarios vacio es el conjunto vacío. Por ejemplo, ghci> vacio {} vacio :: Conj vacio = Cj 0 (esVacio c) se verifica si c es el conjunto vacío. Por ejemplo, esVacio c1 False esVacio vacio True esVacio :: Conj -> Bool esVacio (Cj n) = n == 0 36 / 51
  • 37. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos de números enteros mediante números binarios Los conjuntos de enteros mediante números binarios (pertenece x c) se verifica si x pertenece al conjunto c. Por ejemplo, c1 == {0,1,2,3,5,7,9} pertenece 3 c1 == True pertenece 4 c1 == False pertenece :: Int -> Conj -> Bool pertenece i (Cj s) | (i>=0) && (i<=maxConj) = odd (s `div` (2^i)) | otherwise = error ("pertenece: elemento ilegal =" ++ show i) 37 / 51
  • 38. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos de números enteros mediante números binarios Los conjuntos de enteros mediante números binarios (inserta x c) es el conjunto obtenido añadiendo el elemento x al conjunto c. Por ejemplo, c1 == {0,1,2,3,5,7,9} inserta 5 c1 == {0,1,2,3,5,7,9} inserta 4 c1 == {0,1,2,3,4,5,7,9} inserta i (Cj s) | (i>=0) && (i<=maxConj) = Cj (d'*e+m) | otherwise = error ("inserta: elemento ilegal =" ++ show i) where (d,m) = divMod s e e = 2^i d' = if odd d then d else d+1 38 / 51
  • 39. IM Tema 17: El TAD de los conjuntos Implementaciones del TAD de los conjuntos Los conjuntos de números enteros mediante números binarios Los conjuntos de enteros mediante números binarios (elimina x c) es el conjunto obtenido eliminando el elemento x del conjunto c. Por ejemplo, c1 == {0,1,2,3,5,7,9} elimina 3 c1 == {0,1,2,5,7,9} elimina i (Cj s) | (i>=0) && (i<=maxConj) = Cj (d'*e+m) | otherwise = error ("elimina: elemento ilegal =" ++ show i) where (d,m) = divMod s e e = 2^i d' = if odd d then d-1 else d 39 / 51
  • 40. IM Tema 17: El TAD de los conjuntos Comprobación de las implementaciones con QuickCheck Librerías auxiliares Tema 17: El TAD de los conjuntos 1. Especificación del TAD de los conjuntos 2. Implementaciones del TAD de los conjuntos 3. Comprobación de las implementaciones con QuickCheck Librerías auxiliares Generador de conjuntos Especificación de las propiedades de los conjuntos Comprobación de las propiedades 40 / 51
  • 41. IM Tema 17: El TAD de los conjuntos Comprobación de las implementaciones con QuickCheck Librerías auxiliares Comprobación de las propiedades de los conjuntos Importación de la implementación de los conjuntos que se desea verificar. import ConjuntoConListasNoOrdenadasConDuplicados -- import ConjuntoConListasNoOrdenadasSinDuplicados -- import ConjuntoConListasOrdenadasSinDuplicados Importación de las librerías de comprobación import Test.QuickCheck import Test.Framework import Test.Framework.Providers.QuickCheck2 41 / 51
  • 42. IM Tema 17: El TAD de los conjuntos Comprobación de las implementaciones con QuickCheck Generador de conjuntos Tema 17: El TAD de los conjuntos 1. Especificación del TAD de los conjuntos 2. Implementaciones del TAD de los conjuntos 3. Comprobación de las implementaciones con QuickCheck Librerías auxiliares Generador de conjuntos Especificación de las propiedades de los conjuntos Comprobación de las propiedades 42 / 51
  • 43. IM Tema 17: El TAD de los conjuntos Comprobación de las implementaciones con QuickCheck Generador de conjuntos Generador de conjuntos genConjunto es un generador de conjuntos. Por ejemplo, ghci> sample genConjunto {3,-2,-2,-3,-2,4} {-8,0,4,6,-5,-2} {} genConjunto :: Gen (Conj Int) genConjunto = do xs <- listOf arbitrary return (foldr inserta vacio xs) instance Arbitrary (Conj Int) where arbitrary = genConjunto 43 / 51
  • 44. IM Tema 17: El TAD de los conjuntos Comprobación de las implementaciones con QuickCheck Especificación de las propiedades de los conjuntos Tema 17: El TAD de los conjuntos 1. Especificación del TAD de los conjuntos 2. Implementaciones del TAD de los conjuntos 3. Comprobación de las implementaciones con QuickCheck Librerías auxiliares Generador de conjuntos Especificación de las propiedades de los conjuntos Comprobación de las propiedades 44 / 51
  • 45. IM Tema 17: El TAD de los conjuntos Comprobación de las implementaciones con QuickCheck Especificación de las propiedades de los conjuntos Especificación de las propiedades de los conjuntos El número de veces que se añada un elemento a un conjunto no importa. prop_independencia_repeticiones :: Int -> Conj Int -> Bool prop_independencia_repeticiones x c = inserta x (inserta x c) == inserta x c El orden en que se añadan los elementos a un conjunto no importa. prop_independencia_del_orden :: Int -> Int -> Conj Int -> Bool prop_independencia_del_orden x y c = inserta x (inserta y c) == inserta y (inserta x c) 45 / 51
  • 46. IM Tema 17: El TAD de los conjuntos Comprobación de las implementaciones con QuickCheck Especificación de las propiedades de los conjuntos Especificación de las propiedades de los conjuntos El conjunto vacío no tiene elementos. prop_vacio_no_elementos:: Int -> Bool prop_vacio_no_elementos x = not (pertenece x vacio) Un elemento pertenece al conjunto obtenido añadiendo x al conjunto c syss es igual a x o pertenece a c. prop_pertenece_inserta :: Int -> Int -> Conj Int -> Bool prop_pertenece_inserta x y c = pertenece y (inserta x c) == (x==y) || pertenece y c 46 / 51
  • 47. IM Tema 17: El TAD de los conjuntos Comprobación de las implementaciones con QuickCheck Especificación de las propiedades de los conjuntos Especificación de las propiedades de los conjuntos Al eliminar cualquier elemento del conjunto vacío se obtiene el conjunto vacío. prop_elimina_vacio :: Int -> Bool prop_elimina_vacio x = elimina x vacio == vacio El resultado de eliminar x en el conjunto obtenido añadiéndole x al conjunto c es c menos x, si x e y son iguales y es el conjunto obtenido añadiéndole y a c menos x, en caso contrario. prop_elimina_inserta :: Int -> Int -> Conj Int -> Bool prop_elimina_inserta x y c = elimina x (inserta y c) == if x == y then elimina x c else inserta y (elimina x c) 47 / 51
  • 48. IM Tema 17: El TAD de los conjuntos Comprobación de las implementaciones con QuickCheck Especificación de las propiedades de los conjuntos Especificación de las propiedades de los conjuntos vacio es vacío. prop_vacio_es_vacio :: Bool prop_vacio_es_vacio = esVacio (vacio :: Conj Int) Los conjuntos construidos con inserta no son vacío. prop_inserta_es_no_vacio :: Int -> Conj Int -> Bool prop_inserta_es_no_vacio x c = not (esVacio (inserta x c)) 48 / 51
  • 49. IM Tema 17: El TAD de los conjuntos Comprobación de las implementaciones con QuickCheck Comprobación de las propiedades Tema 17: El TAD de los conjuntos 1. Especificación del TAD de los conjuntos 2. Implementaciones del TAD de los conjuntos 3. Comprobación de las implementaciones con QuickCheck Librerías auxiliares Generador de conjuntos Especificación de las propiedades de los conjuntos Comprobación de las propiedades 49 / 51
  • 50. IM Tema 17: El TAD de los conjuntos Comprobación de las implementaciones con QuickCheck Comprobación de las propiedades Definición del procedimiento de comprobación compruebaPropiedades comprueba todas las propiedades con la plataforma de verificación. compruebaPropiedades = defaultMain [testGroup "Propiedades del TAD conjunto:" [testProperty "P1" prop_vacio_es_vacio, testProperty "P2" prop_inserta_es_no_vacio, testProperty "P3" prop_independencia_repeticiones, testProperty "P4" prop_independencia_del_orden, testProperty "P5" prop_vacio_no_elementos, testProperty "P6" prop_pertenece_inserta, testProperty "P7" prop_elimina_vacio, testProperty "P8" prop_elimina_inserta]] 50 / 51
  • 51. IM Tema 17: El TAD de los conjuntos Comprobación de las implementaciones con QuickCheck Comprobación de las propiedades Comprobación de las propiedades de los conjuntos ghci> compruebaPropiedades Propiedades del TAD conjunto: P1: [OK, passed 100 tests] P2: [OK, passed 100 tests] P3: [OK, passed 100 tests] P4: [OK, passed 100 tests] P5: [OK, passed 100 tests] P6: [OK, passed 100 tests] P7: [OK, passed 100 tests] P8: [OK, passed 100 tests] Properties Total Passed 8 8 Failed 0 0 Total 8 8 51 / 51