84
Tema 17: El TAD de los conjuntos Informática (2019–20) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla

Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

Tema 17: El TAD de los conjuntosInformática (2019–20)

José A. Alonso Jiménez

Grupo de Lógica ComputacionalDepartamento de Ciencias de la Computación e I.A.

Universidad de Sevilla

Page 2: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntos

Tema 17: El TAD de los conjuntos1. Especificación del TAD de los conjuntos

Signatura del TAD de los conjuntosPropiedades del TAD de los conjuntos

2. Implementaciones del TAD de los conjuntosLos conjuntos como listas no ordenadas con duplicadosLos conjuntos como listas no ordenadas sin duplicadosLos conjuntos como listas ordenadas sin duplicadosLos conjuntos de números enteros mediante números binarios

3. Comprobación de las implementaciones con QuickCheckLibrerías auxiliaresGenerador de conjuntosEspecificación de las propiedades de los conjuntosComprobación de las propiedades

2 / 51

Page 3: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosEspecificació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 conjuntosSignatura del TAD de los conjuntosPropiedades del TAD de los conjuntos

2. Implementaciones del TAD de los conjuntos

3. Comprobación de las implementaciones con QuickCheck

3 / 51

Page 4: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosEspecificación del TAD de los conjuntos

Signatura del TAD de los conjuntos

Signatura del TAD de los conjuntos

I Signatura:vacio, :: Conj ainserta :: Eq a => a -> Conj a -> Conj aelimina :: Eq a => a -> Conj a -> Conj apertenece :: Eq a => a -> Conj a -> BoolesVacio :: Conj a -> Bool

I Descripción de las operaciones:I vacio es el conjunto vacío.I (inserta x c) es el conjunto obtenido añadiendo el elemento x

al conjunto c.I (elimina x c) es el conjunto obtenido eliminando el elemento x

del conjunto c.I (pertenece x c) se verifica si x pertenece al conjunto c.I (esVacio c) se verifica si c es el conjunto vacío.

4 / 51

Page 5: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosEspecificació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 conjuntosSignatura del TAD de los conjuntosPropiedades del TAD de los conjuntos

2. Implementaciones del TAD de los conjuntos

3. Comprobación de las implementaciones con QuickCheck

5 / 51

Page 6: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosEspecificació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, entonceselimina x (inserta y c) == elimina x c

7. Si x /= y, entonceselimina x (inserta y c) == inserta y (elimina x c)

8. esVacio vacio

9. not (esVacio (inserta x c))

6 / 51

Page 7: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones 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 conjuntosLos conjuntos como listas no ordenadas con duplicadosLos conjuntos como listas no ordenadas sin duplicadosLos conjuntos como listas ordenadas sin duplicadosLos conjuntos de números enteros mediante números binarios

3. Comprobación de las implementaciones con QuickCheck

7 / 51

Page 8: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas con duplicados

Los conjuntos como listas no ordenadas con duplicados

I Cabecera del módulo:

module ConjuntoConListasNoOrdenadasConDuplicados(Conj,vacio, -- Conj ainserta, -- Eq a => a -> Conj a -> Conj aelimina, -- Eq a => a -> Conj a -> Conj apertenece, -- Eq a => a -> Conj a -> BoolesVacio, -- Conj a -> Bool

) where

8 / 51

Page 9: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas con duplicados

Los conjuntos como listas no ordenadas con duplicadosI El tipo de los conjuntos.

newtype Conj a = Cj [a]

I Procedimiento de escritura de los conjuntos.

instance Show a => Show (Conj a) whereshowsPrec _ (Cj s) cad = showConj s cad

showConj [] cad = showString "{}" cadshowConj (x:xs) cad =

showChar ’{’ (shows x (showl xs cad))whereshowl [] cad = showChar ’}’ cadshowl (x:xs) cad = showChar ’,’ (shows x (showl xs cad))

9 / 51

Page 10: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas con duplicados

Los conjuntos como listas no ordenadas con duplicadosI 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 Intc1 = foldr inserta vacio [2,5,1,3,7,5,3,2,1,9,0]

I vacio es el conjunto vacío. Por ejemplo,ghci> vacio{}

vacio :: Conj avacio = Cj []

10 / 51

Page 11: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas con duplicados

Los conjuntos como listas no ordenadas con duplicadosI 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 Intc1 = foldr inserta vacio [2,5,1,3,7,5,3,2,1,9,0]

I vacio es el conjunto vacío. Por ejemplo,ghci> vacio{}

vacio :: Conj avacio = Cj []

10 / 51

Page 12: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas con duplicados

Los conjuntos como listas no ordenadas con duplicadosI (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 ainserta x (Cj ys) = Cj (x:ys)

I (elimina x c) es el conjunto obtenido eliminando el elementox 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 aelimina x (Cj ys) = Cj (filter (/= x) ys)

11 / 51

Page 13: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas con duplicados

Los conjuntos como listas no ordenadas con duplicadosI (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 ainserta x (Cj ys) = Cj (x:ys)

I (elimina x c) es el conjunto obtenido eliminando el elementox 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 aelimina x (Cj ys) = Cj (filter (/= x) ys)

11 / 51

Page 14: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas con duplicados

Los conjuntos como listas no ordenadas con duplicadosI (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 ainserta x (Cj ys) = Cj (x:ys)

I (elimina x c) es el conjunto obtenido eliminando el elementox 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 aelimina x (Cj ys) = Cj (filter (/= x) ys)

11 / 51

Page 15: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas con duplicados

Los conjuntos como listas no ordenadas con duplicadosI (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 == Truepertenece 4 c1 == False

pertenece :: Eq a => a -> Conj a -> Boolpertenece x (Cj xs) = elem x xs

I (esVacio c) se verifica si c es el conjunto vacío. Por ejemplo,esVacio c1 FalseesVacio vacio True

esVacio :: Conj a -> BoolesVacio (Cj xs) = null xs

12 / 51

Page 16: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas con duplicados

Los conjuntos como listas no ordenadas con duplicadosI (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 == Truepertenece 4 c1 == False

pertenece :: Eq a => a -> Conj a -> Boolpertenece x (Cj xs) = elem x xs

I (esVacio c) se verifica si c es el conjunto vacío. Por ejemplo,esVacio c1 FalseesVacio vacio True

esVacio :: Conj a -> BoolesVacio (Cj xs) = null xs

12 / 51

Page 17: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas con duplicados

Los conjuntos como listas no ordenadas con duplicadosI (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 == Truepertenece 4 c1 == False

pertenece :: Eq a => a -> Conj a -> Boolpertenece x (Cj xs) = elem x xs

I (esVacio c) se verifica si c es el conjunto vacío. Por ejemplo,esVacio c1 FalseesVacio vacio True

esVacio :: Conj a -> BoolesVacio (Cj xs) = null xs

12 / 51

Page 18: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas con duplicados

Los conjuntos como listas no ordenadas con duplicados

I (subconjunto c1 c2) se verifica si c1 es un subconjunto dec2. Por ejemplo,subconjunto (Cj [1,3,2,1]) (Cj [3,1,3,2]) Truesubconjunto (Cj [1,3,4,1]) (Cj [3,1,3,2]) False

subconjunto :: Eq a => Conj a -> Conj a -> Boolsubconjunto (Cj xs) (Cj ys) = sublista xs ys

where sublista [] _ = Truesublista (x:xs) ys = elem x ys &&

sublista xs ys

13 / 51

Page 19: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas con duplicados

Los conjuntos como listas no ordenadas con duplicados

I (subconjunto c1 c2) se verifica si c1 es un subconjunto dec2. Por ejemplo,subconjunto (Cj [1,3,2,1]) (Cj [3,1,3,2]) Truesubconjunto (Cj [1,3,4,1]) (Cj [3,1,3,2]) False

subconjunto :: Eq a => Conj a -> Conj a -> Boolsubconjunto (Cj xs) (Cj ys) = sublista xs ys

where sublista [] _ = Truesublista (x:xs) ys = elem x ys &&

sublista xs ys

13 / 51

Page 20: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas con duplicados

Los conjuntos como listas no ordenadas con duplicados

I (igualConjunto c1 c2) se verifica si los conjuntos c1 y c2 soniguales. Por ejemplo,igualConjunto (Cj [1,3,2,1]) (Cj [3,1,3,2]) TrueigualConjunto (Cj [1,3,4,1]) (Cj [3,1,3,2]) False

igualConjunto :: Eq a => Conj a -> Conj a -> BooligualConjunto c1 c2 =

subconjunto c1 c2 && subconjunto c2 c1

I Los conjuntos son comparables por igualdad.

instance Eq a => Eq (Conj a) where(==) = igualConjunto

14 / 51

Page 21: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas con duplicados

Los conjuntos como listas no ordenadas con duplicados

I (igualConjunto c1 c2) se verifica si los conjuntos c1 y c2 soniguales. Por ejemplo,igualConjunto (Cj [1,3,2,1]) (Cj [3,1,3,2]) TrueigualConjunto (Cj [1,3,4,1]) (Cj [3,1,3,2]) False

igualConjunto :: Eq a => Conj a -> Conj a -> BooligualConjunto c1 c2 =

subconjunto c1 c2 && subconjunto c2 c1

I Los conjuntos son comparables por igualdad.

instance Eq a => Eq (Conj a) where(==) = igualConjunto

14 / 51

Page 22: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones 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 conjuntosLos conjuntos como listas no ordenadas con duplicadosLos conjuntos como listas no ordenadas sin duplicadosLos conjuntos como listas ordenadas sin duplicadosLos conjuntos de números enteros mediante números binarios

3. Comprobación de las implementaciones con QuickCheck

15 / 51

Page 23: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas sin duplicados

Los conjuntos como listas no ordenadas sin duplicados

I Cabecera del módulo.

module ConjuntoConListasNoOrdenadasSinDuplicados(Conj,vacio, -- Conj aesVacio, -- Conj a -> Boolpertenece, -- Eq a => a -> Conj a -> Boolinserta, -- Eq a => a -> Conj a -> Conj aelimina -- Eq a => a -> Conj a -> Conj a

) where

16 / 51

Page 24: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas sin duplicados

Los conjuntos como listas no ordenadas sin duplicados

I Los conjuntos como listas no ordenadas sin repeticiones.

newtype Conj a = Cj [a]

I Procedimiento de escritura de los conjuntos.

instance (Show a) => Show (Conj a) whereshowsPrec _ (Cj s) cad = showConj s cad

showConj [] cad = showString "{}" cadshowConj (x:xs) cad = showChar ’{’ (shows x (showl xs cad))

whereshowl [] cad = showChar ’}’ cadshowl (x:xs) cad = showChar ’,’ (shows x (showl xs cad))

17 / 51

Page 25: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas sin duplicados

Los conjuntos como listas no ordenadas sin duplicadosI 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 Intc1 = foldr inserta vacio [2,5,1,3,7,5,3,2,1,9,0]

I vacio es el conjunto vacío. Por ejemplo,ghci> vacio{}

vacio :: Conj avacio = Cj []

18 / 51

Page 26: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas sin duplicados

Los conjuntos como listas no ordenadas sin duplicadosI 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 Intc1 = foldr inserta vacio [2,5,1,3,7,5,3,2,1,9,0]

I vacio es el conjunto vacío. Por ejemplo,ghci> vacio{}

vacio :: Conj avacio = Cj []

18 / 51

Page 27: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas sin duplicados

Los conjuntos como listas no ordenadas sin duplicadosI (esVacio c) se verifica si c es el conjunto vacío. Por ejemplo,

esVacio c1 FalseesVacio vacio True

esVacio :: Conj a -> BoolesVacio (Cj xs) = null xs

I (pertenece x c) se verifica si x pertenece al conjunto c. Porejemplo,c1 == {2,5,1,3,7,5,3,2,1,9,0}pertenece 3 c1 == Truepertenece 4 c1 == False

pertenece :: Eq a => a -> Conj a -> Boolpertenece x (Cj xs) = elem x xs

19 / 51

Page 28: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas sin duplicados

Los conjuntos como listas no ordenadas sin duplicadosI (esVacio c) se verifica si c es el conjunto vacío. Por ejemplo,

esVacio c1 FalseesVacio vacio True

esVacio :: Conj a -> BoolesVacio (Cj xs) = null xs

I (pertenece x c) se verifica si x pertenece al conjunto c. Porejemplo,c1 == {2,5,1,3,7,5,3,2,1,9,0}pertenece 3 c1 == Truepertenece 4 c1 == False

pertenece :: Eq a => a -> Conj a -> Boolpertenece x (Cj xs) = elem x xs

19 / 51

Page 29: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas sin duplicados

Los conjuntos como listas no ordenadas sin duplicadosI (esVacio c) se verifica si c es el conjunto vacío. Por ejemplo,

esVacio c1 FalseesVacio vacio True

esVacio :: Conj a -> BoolesVacio (Cj xs) = null xs

I (pertenece x c) se verifica si x pertenece al conjunto c. Porejemplo,c1 == {2,5,1,3,7,5,3,2,1,9,0}pertenece 3 c1 == Truepertenece 4 c1 == False

pertenece :: Eq a => a -> Conj a -> Boolpertenece x (Cj xs) = elem x xs

19 / 51

Page 30: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas sin duplicados

Los conjuntos como listas no ordenadas sin duplicadosI (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 ainserta x s@(Cj xs) | pertenece x s = s

| otherwise = Cj (x:xs)

I (elimina x c) es el conjunto obtenido eliminando el elementox del conjunto c. Por ejemplo,elimina 3 c1 == {7,5,2,1,9,0}

elimina :: Eq a => a -> Conj a -> Conj aelimina x (Cj ys) = Cj [y | y <- ys, y /= x]

20 / 51

Page 31: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas sin duplicados

Los conjuntos como listas no ordenadas sin duplicadosI (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 ainserta x s@(Cj xs) | pertenece x s = s

| otherwise = Cj (x:xs)

I (elimina x c) es el conjunto obtenido eliminando el elementox del conjunto c. Por ejemplo,elimina 3 c1 == {7,5,2,1,9,0}

elimina :: Eq a => a -> Conj a -> Conj aelimina x (Cj ys) = Cj [y | y <- ys, y /= x]

20 / 51

Page 32: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas sin duplicados

Los conjuntos como listas no ordenadas sin duplicadosI (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 ainserta x s@(Cj xs) | pertenece x s = s

| otherwise = Cj (x:xs)

I (elimina x c) es el conjunto obtenido eliminando el elementox del conjunto c. Por ejemplo,elimina 3 c1 == {7,5,2,1,9,0}

elimina :: Eq a => a -> Conj a -> Conj aelimina x (Cj ys) = Cj [y | y <- ys, y /= x]

20 / 51

Page 33: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas sin duplicados

Los conjuntos como listas no ordenadas sin duplicados

I (subconjunto c1 c2) se verifica si c1 es un subconjunto dec2. Por ejemplo,subconjunto (Cj [1,3,2]) (Cj [3,1,2]) Truesubconjunto (Cj [1,3,4,1]) (Cj [1,3,2]) False

subconjunto :: Eq a => Conj a -> Conj a -> Boolsubconjunto (Cj xs) (Cj ys) = sublista xs ys

where sublista [] _ = Truesublista (x:xs) ys = elem x ys &&

sublista xs ys

21 / 51

Page 34: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas sin duplicados

Los conjuntos como listas no ordenadas sin duplicados

I (subconjunto c1 c2) se verifica si c1 es un subconjunto dec2. Por ejemplo,subconjunto (Cj [1,3,2]) (Cj [3,1,2]) Truesubconjunto (Cj [1,3,4,1]) (Cj [1,3,2]) False

subconjunto :: Eq a => Conj a -> Conj a -> Boolsubconjunto (Cj xs) (Cj ys) = sublista xs ys

where sublista [] _ = Truesublista (x:xs) ys = elem x ys &&

sublista xs ys

21 / 51

Page 35: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas sin duplicados

Los conjuntos como listas no ordenadas sin duplicados

I (igualConjunto c1 c2) se verifica si los conjuntos c1 y c2 soniguales. Por ejemplo,igualConjunto (Cj [3,2,1]) (Cj [1,3,2]) TrueigualConjunto (Cj [1,3,4]) (Cj [1,3,2]) False

igualConjunto :: Eq a => Conj a -> Conj a -> BooligualConjunto c1 c2 =

subconjunto c1 c2 && subconjunto c2 c1

I Los conjuntos son comparables por igualdad.

instance Eq a => Eq (Conj a) where(==) = igualConjunto

22 / 51

Page 36: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas no ordenadas sin duplicados

Los conjuntos como listas no ordenadas sin duplicados

I (igualConjunto c1 c2) se verifica si los conjuntos c1 y c2 soniguales. Por ejemplo,igualConjunto (Cj [3,2,1]) (Cj [1,3,2]) TrueigualConjunto (Cj [1,3,4]) (Cj [1,3,2]) False

igualConjunto :: Eq a => Conj a -> Conj a -> BooligualConjunto c1 c2 =

subconjunto c1 c2 && subconjunto c2 c1

I Los conjuntos son comparables por igualdad.

instance Eq a => Eq (Conj a) where(==) = igualConjunto

22 / 51

Page 37: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones 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 conjuntosLos conjuntos como listas no ordenadas con duplicadosLos conjuntos como listas no ordenadas sin duplicadosLos conjuntos como listas ordenadas sin duplicadosLos conjuntos de números enteros mediante números binarios

3. Comprobación de las implementaciones con QuickCheck

23 / 51

Page 38: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas ordenadas sin duplicados

Los conjuntos como listas ordenadas sin duplicadosI Cabecera del módulo

module ConjuntoConListasOrdenadasSinDuplicados(Conj,vacio, -- Conj aesVacio, -- Conj a -> Boolpertenece, -- Ord a => a -> Conj a -> Boolinserta, -- Ord a => a -> Conj a -> Conj aelimina -- Ord a => a -> Conj a -> Conj a

) where

I Los conjuntos como listas ordenadas sin repeticiones.

newtype Conj a = Cj [a]deriving Eq

24 / 51

Page 39: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas ordenadas sin duplicados

Los conjuntos como listas ordenadas sin duplicadosI Procedimiento de escritura de los conjuntos.

instance (Show a) => Show (Conj a) whereshowsPrec _ (Cj s) cad = showConj s cad

showConj [] cad = showString "{}" cadshowConj (x:xs) cad = showChar ’{’ (shows x (showl xs cad))

where showl [] cad = showChar ’}’ cadshowl (x:xs) cad = showChar ’,’ (shows x (showl xs cad))

25 / 51

Page 40: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas ordenadas sin duplicados

Los conjuntos como listas ordenadas sin duplicadosI 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 Intc1 = foldr inserta vacio [2,5,1,3,7,5,3,2,1,9,0]

I vacio es el conjunto vacío. Por ejemplo,ghci> vacio{}

vacio :: Conj avacio = Cj []

26 / 51

Page 41: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas ordenadas sin duplicados

Los conjuntos como listas ordenadas sin duplicadosI 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 Intc1 = foldr inserta vacio [2,5,1,3,7,5,3,2,1,9,0]

I vacio es el conjunto vacío. Por ejemplo,ghci> vacio{}

vacio :: Conj avacio = Cj []

26 / 51

Page 42: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas ordenadas sin duplicados

Los conjuntos como listas ordenadas sin duplicadosI (esVacio c) se verifica si c es el conjunto vacío. Por ejemplo,

esVacio c1 FalseesVacio vacio True

esVacio :: Conj a -> BoolesVacio (Cj xs) = null xs

I (pertenece x c) se verifica si x pertenece al conjunto c. Porejemplo,c1 == {0,1,2,3,5,7,9}pertenece 3 c1 == Truepertenece 4 c1 == False

pertenece :: Ord a => a -> Conj a -> Boolpertenece x (Cj ys) = elem x (takeWhile (<= x) ys)

27 / 51

Page 43: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas ordenadas sin duplicados

Los conjuntos como listas ordenadas sin duplicadosI (esVacio c) se verifica si c es el conjunto vacío. Por ejemplo,

esVacio c1 FalseesVacio vacio True

esVacio :: Conj a -> BoolesVacio (Cj xs) = null xs

I (pertenece x c) se verifica si x pertenece al conjunto c. Porejemplo,c1 == {0,1,2,3,5,7,9}pertenece 3 c1 == Truepertenece 4 c1 == False

pertenece :: Ord a => a -> Conj a -> Boolpertenece x (Cj ys) = elem x (takeWhile (<= x) ys)

27 / 51

Page 44: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas ordenadas sin duplicados

Los conjuntos como listas ordenadas sin duplicadosI (esVacio c) se verifica si c es el conjunto vacío. Por ejemplo,

esVacio c1 FalseesVacio vacio True

esVacio :: Conj a -> BoolesVacio (Cj xs) = null xs

I (pertenece x c) se verifica si x pertenece al conjunto c. Porejemplo,c1 == {0,1,2,3,5,7,9}pertenece 3 c1 == Truepertenece 4 c1 == False

pertenece :: Ord a => a -> Conj a -> Boolpertenece x (Cj ys) = elem x (takeWhile (<= x) ys)

27 / 51

Page 45: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas ordenadas sin duplicados

Los conjuntos como listas ordenadas sin duplicados

I (inserta x c) es el conjunto obtenido añadiendo el elemento xal 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 ainserta 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

Page 46: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas ordenadas sin duplicados

Los conjuntos como listas ordenadas sin duplicados

I (inserta x c) es el conjunto obtenido añadiendo el elemento xal 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 ainserta 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

Page 47: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas ordenadas sin duplicados

Los conjuntos como listas ordenadas sin duplicados

I (elimina x c) es el conjunto obtenido eliminando el elementox 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 aelimina 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

Page 48: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos como listas ordenadas sin duplicados

Los conjuntos como listas ordenadas sin duplicados

I (elimina x c) es el conjunto obtenido eliminando el elementox 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 aelimina 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

Page 49: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones 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 conjuntosLos conjuntos como listas no ordenadas con duplicadosLos conjuntos como listas no ordenadas sin duplicadosLos conjuntos como listas ordenadas sin duplicadosLos conjuntos de números enteros mediante números binarios

3. Comprobación de las implementaciones con QuickCheck

30 / 51

Page 50: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos de números enteros mediante números binarios

Los conjuntos de enteros mediante números binarios

I Los conjuntos que sólo contienen números (de tipo Int) entre 0y n − 1, se pueden representar como números binarios con n bitsdonde el bit i (0 ≤ i < n) es 1 syss el número i pertenece alconjunto. 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

Page 51: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos de números enteros mediante números binarios

Los conjuntos de enteros mediante números binarios

I Cabecera del módulo

module ConjuntoConNumerosBinarios(Conj,vacio, -- ConjesVacio, -- Conj -> Boolpertenece, -- Int -> Conj -> Boolinserta, -- Int -> Conj -> Conjelimina -- Int -> Conj -> Conj

) where

I Los conjuntos de números enteros como números binarios.

newtype Conj = Cj Int deriving Eq

32 / 51

Page 52: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos de números enteros mediante números binarios

Los conjuntos de enteros mediante números binarios

I (conj2Lista c) es la lista de los elementos del conjunto c. Porejemplo,conj2Lista (Cj 24) [3,4]conj2Lista (Cj 30) [1,2,3,4]conj2Lista (Cj 22) [1,2,4]

conj2Lista (Cj s) = c2l s 0where

c2l 0 _ = []c2l n i | odd n = i : c2l (n ‘div‘ 2) (i+1)

| otherwise = c2l (n ‘div‘ 2) (i+1)

33 / 51

Page 53: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos de números enteros mediante números binarios

Los conjuntos de enteros mediante números binarios

I (conj2Lista c) es la lista de los elementos del conjunto c. Porejemplo,conj2Lista (Cj 24) [3,4]conj2Lista (Cj 30) [1,2,3,4]conj2Lista (Cj 22) [1,2,4]

conj2Lista (Cj s) = c2l s 0where

c2l 0 _ = []c2l n i | odd n = i : c2l (n ‘div‘ 2) (i+1)

| otherwise = c2l (n ‘div‘ 2) (i+1)

33 / 51

Page 54: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos de números enteros mediante números binarios

Los conjuntos de enteros mediante números binariosI Procedimiento de escritura de conjuntos.

instance Show Conj whereshowsPrec _ s cad = showConj (conj2Lista s) cad

showConj [] cad = showString "{}" cadshowConj (x:xs) cad =

showChar ’{’ (shows x (showl xs cad))where

showl [] cad = showChar ’}’ cadshowl (x:xs) cad = showChar ’,’ (shows x (showl xs cad))

34 / 51

Page 55: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos de números enteros mediante números binarios

Los conjuntos de enteros mediante números binariosI maxConj es el máximo número que puede pertenecer al conjunto.

Depende de la implementación de Haskell. Por ejemplo,maxConj 29

maxConj :: IntmaxConj =

truncate (logBase 2 (fromIntegral maxInt)) - 1where maxInt = maxBound::Int

I Ejemplo de conjunto: c1 es el conjunto obtenido añadiéndole alconjunto 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 :: Conjc1 = foldr inserta vacio [2,5,1,3,7,5,3,2,1,9,0] 35 / 51

Page 56: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos de números enteros mediante números binarios

Los conjuntos de enteros mediante números binarios

I vacio es el conjunto vacío. Por ejemplo,ghci> vacio{}

vacio :: Conjvacio = Cj 0

I (esVacio c) se verifica si c es el conjunto vacío. Por ejemplo,esVacio c1 FalseesVacio vacio True

esVacio :: Conj -> BoolesVacio (Cj n) = n == 0

36 / 51

Page 57: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos de números enteros mediante números binarios

Los conjuntos de enteros mediante números binarios

I vacio es el conjunto vacío. Por ejemplo,ghci> vacio{}

vacio :: Conjvacio = Cj 0

I (esVacio c) se verifica si c es el conjunto vacío. Por ejemplo,esVacio c1 FalseesVacio vacio True

esVacio :: Conj -> BoolesVacio (Cj n) = n == 0

36 / 51

Page 58: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos de números enteros mediante números binarios

Los conjuntos de enteros mediante números binarios

I vacio es el conjunto vacío. Por ejemplo,ghci> vacio{}

vacio :: Conjvacio = Cj 0

I (esVacio c) se verifica si c es el conjunto vacío. Por ejemplo,esVacio c1 FalseesVacio vacio True

esVacio :: Conj -> BoolesVacio (Cj n) = n == 0

36 / 51

Page 59: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos de números enteros mediante números binarios

Los conjuntos de enteros mediante números binarios

I (pertenece x c) se verifica si x pertenece al conjunto c. Porejemplo,c1 == {0,1,2,3,5,7,9}pertenece 3 c1 == Truepertenece 4 c1 == False

pertenece :: Int -> Conj -> Boolpertenece i (Cj s)

| (i>=0) && (i<=maxConj) = odd (s ‘div‘ (2^i))| otherwise

= error ("pertenece: elemento ilegal =" ++ show i)

37 / 51

Page 60: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos de números enteros mediante números binarios

Los conjuntos de enteros mediante números binarios

I (pertenece x c) se verifica si x pertenece al conjunto c. Porejemplo,c1 == {0,1,2,3,5,7,9}pertenece 3 c1 == Truepertenece 4 c1 == False

pertenece :: Int -> Conj -> Boolpertenece i (Cj s)

| (i>=0) && (i<=maxConj) = odd (s ‘div‘ (2^i))| otherwise

= error ("pertenece: elemento ilegal =" ++ show i)

37 / 51

Page 61: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos de números enteros mediante números binarios

Los conjuntos de enteros mediante números binarios

I (inserta x c) es el conjunto obtenido añadiendo el elemento xal 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^id’ = if odd d then d else d+1

38 / 51

Page 62: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos de números enteros mediante números binarios

Los conjuntos de enteros mediante números binarios

I (inserta x c) es el conjunto obtenido añadiendo el elemento xal 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^id’ = if odd d then d else d+1

38 / 51

Page 63: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos de números enteros mediante números binarios

Los conjuntos de enteros mediante números binarios

I (elimina x c) es el conjunto obtenido eliminando el elementox 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^id’ = if odd d then d-1 else d

39 / 51

Page 64: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosImplementaciones del TAD de los conjuntos

Los conjuntos de números enteros mediante números binarios

Los conjuntos de enteros mediante números binarios

I (elimina x c) es el conjunto obtenido eliminando el elementox 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^id’ = if odd d then d-1 else d

39 / 51

Page 65: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosComprobació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 QuickCheckLibrerías auxiliaresGenerador de conjuntosEspecificación de las propiedades de los conjuntosComprobación de las propiedades

40 / 51

Page 66: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosComprobación de las implementaciones con QuickCheck

Librerías auxiliares

Comprobación de las propiedades de los conjuntos

I Importación de la implementación de los conjuntos que se deseaverificar.

import ConjuntoConListasNoOrdenadasConDuplicados-- import ConjuntoConListasNoOrdenadasSinDuplicados-- import ConjuntoConListasOrdenadasSinDuplicados

I Importación de las librerías de comprobación

import Test.QuickCheckimport Test.Frameworkimport Test.Framework.Providers.QuickCheck2

41 / 51

Page 67: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosComprobació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 QuickCheckLibrerías auxiliaresGenerador de conjuntosEspecificación de las propiedades de los conjuntosComprobación de las propiedades

42 / 51

Page 68: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosComprobación de las implementaciones con QuickCheck

Generador de conjuntos

Generador de conjuntos

I 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) wherearbitrary = genConjunto

43 / 51

Page 69: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosComprobació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 QuickCheckLibrerías auxiliaresGenerador de conjuntosEspecificación de las propiedades de los conjuntosComprobación de las propiedades

44 / 51

Page 70: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de los conjuntos

Especificación de las propiedades de los conjuntosI 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

I El orden en que se añadan los elementos a un conjunto noimporta.

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

Page 71: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de los conjuntos

Especificación de las propiedades de los conjuntosI 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

I El orden en que se añadan los elementos a un conjunto noimporta.

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

Page 72: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de los conjuntos

Especificación de las propiedades de los conjuntosI 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

I El orden en que se añadan los elementos a un conjunto noimporta.

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

Page 73: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de los conjuntos

Especificación de las propiedades de los conjuntos

I El conjunto vacío no tiene elementos.

prop_vacio_no_elementos:: Int -> Boolprop_vacio_no_elementos x =

not (pertenece x vacio)

I Un elemento pertenece al conjunto obtenido añadiendo x alconjunto c syss es igual a x o pertenece a c.

prop_pertenece_inserta :: Int -> Int -> Conj Int -> Boolprop_pertenece_inserta x y c =

pertenece y (inserta x c) == (x==y) || pertenece y c

46 / 51

Page 74: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de los conjuntos

Especificación de las propiedades de los conjuntos

I El conjunto vacío no tiene elementos.

prop_vacio_no_elementos:: Int -> Boolprop_vacio_no_elementos x =

not (pertenece x vacio)

I Un elemento pertenece al conjunto obtenido añadiendo x alconjunto c syss es igual a x o pertenece a c.

prop_pertenece_inserta :: Int -> Int -> Conj Int -> Boolprop_pertenece_inserta x y c =

pertenece y (inserta x c) == (x==y) || pertenece y c

46 / 51

Page 75: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de los conjuntos

Especificación de las propiedades de los conjuntos

I El conjunto vacío no tiene elementos.

prop_vacio_no_elementos:: Int -> Boolprop_vacio_no_elementos x =

not (pertenece x vacio)

I Un elemento pertenece al conjunto obtenido añadiendo x alconjunto c syss es igual a x o pertenece a c.

prop_pertenece_inserta :: Int -> Int -> Conj Int -> Boolprop_pertenece_inserta x y c =

pertenece y (inserta x c) == (x==y) || pertenece y c

46 / 51

Page 76: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de los conjuntos

Especificación de las propiedades de los conjuntosI Al eliminar cualquier elemento del conjunto vacío se obtiene el

conjunto vacío.

prop_elimina_vacio :: Int -> Boolprop_elimina_vacio x =

elimina x vacio == vacio

I El resultado de eliminar x en el conjunto obtenido añadiéndole xal conjunto c es c menos x, si x e y son iguales y es el conjuntoobtenido añadiéndole y a c menos x, en caso contrario.

prop_elimina_inserta :: Int -> Int -> Conj Int -> Boolprop_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

Page 77: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de los conjuntos

Especificación de las propiedades de los conjuntosI Al eliminar cualquier elemento del conjunto vacío se obtiene el

conjunto vacío.

prop_elimina_vacio :: Int -> Boolprop_elimina_vacio x =

elimina x vacio == vacio

I El resultado de eliminar x en el conjunto obtenido añadiéndole xal conjunto c es c menos x, si x e y son iguales y es el conjuntoobtenido añadiéndole y a c menos x, en caso contrario.

prop_elimina_inserta :: Int -> Int -> Conj Int -> Boolprop_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

Page 78: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de los conjuntos

Especificación de las propiedades de los conjuntosI Al eliminar cualquier elemento del conjunto vacío se obtiene el

conjunto vacío.

prop_elimina_vacio :: Int -> Boolprop_elimina_vacio x =

elimina x vacio == vacio

I El resultado de eliminar x en el conjunto obtenido añadiéndole xal conjunto c es c menos x, si x e y son iguales y es el conjuntoobtenido añadiéndole y a c menos x, en caso contrario.

prop_elimina_inserta :: Int -> Int -> Conj Int -> Boolprop_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

Page 79: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de los conjuntos

Especificación de las propiedades de los conjuntos

I vacio es vacío.

prop_vacio_es_vacio :: Boolprop_vacio_es_vacio =

esVacio (vacio :: Conj Int)

I Los conjuntos construidos con inserta no son vacío.

prop_inserta_es_no_vacio :: Int -> Conj Int -> Boolprop_inserta_es_no_vacio x c =

not (esVacio (inserta x c))

48 / 51

Page 80: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de los conjuntos

Especificación de las propiedades de los conjuntos

I vacio es vacío.

prop_vacio_es_vacio :: Boolprop_vacio_es_vacio =

esVacio (vacio :: Conj Int)

I Los conjuntos construidos con inserta no son vacío.

prop_inserta_es_no_vacio :: Int -> Conj Int -> Boolprop_inserta_es_no_vacio x c =

not (esVacio (inserta x c))

48 / 51

Page 81: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosComprobación de las implementaciones con QuickCheck

Especificación de las propiedades de los conjuntos

Especificación de las propiedades de los conjuntos

I vacio es vacío.

prop_vacio_es_vacio :: Boolprop_vacio_es_vacio =

esVacio (vacio :: Conj Int)

I Los conjuntos construidos con inserta no son vacío.

prop_inserta_es_no_vacio :: Int -> Conj Int -> Boolprop_inserta_es_no_vacio x c =

not (esVacio (inserta x c))

48 / 51

Page 82: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosComprobació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 QuickCheckLibrerías auxiliaresGenerador de conjuntosEspecificación de las propiedades de los conjuntosComprobación de las propiedades

49 / 51

Page 83: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosComprobación de las implementaciones con QuickCheck

Comprobación de las propiedades

Definición del procedimiento de comprobaciónI 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

Page 84: Tema 17: El TAD de los conjuntos - Informática (2019 20)jalonso/cursos/i1m-19/temas/tema-17.pdf · 2019-09-11 · IMTema17: ElTADdelosconjuntos Tema17:ElTADdelosconjuntos 1.EspecificacióndelTADdelosconjuntos

IM Tema 17: El TAD de los conjuntosComprobación de las implementaciones con QuickCheck

Comprobación de las propiedades

Comprobación de las propiedades de los conjuntos

ghci> compruebaPropiedadesPropiedades 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 TotalPassed 8 8Failed 0 0Total 8 8

51 / 51