SlideShare une entreprise Scribd logo
1  sur  51
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

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
 

Tendances (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
 

En vedette

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
 

En vedette (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
 

Similaire à 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
 

Similaire à 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
 

Plus 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
 

Plus 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
 

Dernier

periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas123yudy
 
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdfBIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdfCESARMALAGA4
 
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)veganet
 
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfEstrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfAlfredoRamirez953210
 
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDUFICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDUgustavorojas179704
 
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOTUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOweislaco
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptxJunkotantik
 
LA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdf
LA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdfLA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdf
LA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdfNataliaMalky1
 
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfTema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfDaniel Ángel Corral de la Mata, Ph.D.
 
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxc3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxMartín Ramírez
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialpatriciaines1993
 
Los Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadLos Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadJonathanCovena1
 
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdfOswaldoGonzalezCruz
 
cuadernillo de lectoescritura para niños de básica
cuadernillo de lectoescritura para niños de básicacuadernillo de lectoescritura para niños de básica
cuadernillo de lectoescritura para niños de básicaGianninaValeskaContr
 
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfFisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfcoloncopias5
 
Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...Angélica Soledad Vega Ramírez
 

Dernier (20)

Sesión La luz brilla en la oscuridad.pdf
Sesión  La luz brilla en la oscuridad.pdfSesión  La luz brilla en la oscuridad.pdf
Sesión La luz brilla en la oscuridad.pdf
 
periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas
 
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdfBIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
 
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
Instrucciones para la aplicacion de la PAA-2024b - (Mayo 2024)
 
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfEstrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
 
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDUFICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
 
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOTUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptx
 
LA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdf
LA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdfLA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdf
LA OVEJITA QUE VINO A CENAR CUENTO INFANTIL.pdf
 
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfTema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
 
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxc3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundial
 
Aedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptxAedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptx
 
TL/CNL – 2.ª FASE .
TL/CNL – 2.ª FASE                       .TL/CNL – 2.ª FASE                       .
TL/CNL – 2.ª FASE .
 
Los Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la SostenibilidadLos Nueve Principios del Desempeño de la Sostenibilidad
Los Nueve Principios del Desempeño de la Sostenibilidad
 
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
 
cuadernillo de lectoescritura para niños de básica
cuadernillo de lectoescritura para niños de básicacuadernillo de lectoescritura para niños de básica
cuadernillo de lectoescritura para niños de básica
 
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfFisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
 
Aedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptxAedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptx
 
Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...Contextualización y aproximación al objeto de estudio de investigación cualit...
Contextualización y aproximación al objeto de estudio de investigación cualit...
 

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