Upload
elisa-iglesias-vazquez
View
224
Download
0
Embed Size (px)
Citation preview
Métodos Formales y Análisis de Herramientas para la Producción de Software
Aristides Dasso, Ana Funes
{arisdas, afunes}@unsl.edu.arUniversidad Nacional de San Luis
Universidad Nacional de San Luis2006
Listas
A. Dasso, A. Funes Métodos Formales ... 3
Listas
Una lista es una colección ordenada de valores del mismo tipo.
Ejemplos:
<2, 5, 0, 1, 2>
<“Juan”, “María”>
<true, false, false>
A. Dasso, A. Funes Métodos Formales ... 4
Expresiones de tipo lista
La expresión de tipo
expr_de_tipo*
representa el tipo que contiene todas las listas finitas de tipo expr_de_tipo.
A. Dasso, A. Funes Métodos Formales ... 5
Expresiones de tipo lista
Ejemplo: Bool*
Este tipo representa infinitas secuencias finitas de Booleanos:
<> --lista vacía<true><false><true, true><true, false>. . .
A. Dasso, A. Funes Métodos Formales ... 6
Expresiones de tipo lista
La expresión de tipo
expr_de_tipo
representa el tipo que contiene las listas infinitas así como las listas finitas de tipo expr_de_tipo .
A. Dasso, A. Funes Métodos Formales ... 7
Expresiones de tipo lista
Ejemplo: Bool
Este tipo contiene las infinitas secuencias finitas de Booleanos además de las infinitas:
<><true><false><true, true><true, false>. . .<false, true, true, false, ...>. . .
A. Dasso, A. Funes Métodos Formales ... 8
Propiedades de las listas
•Pueden existir valores repetidos. Por lo tanto, <10, 2, 2> <10, 2>
• Cuando decimos que una lista es ordenada significa que podemos hablar de un primer elemento, un segundo elemento, etc. Es decir que el orden es relevante, p.e.: <10, 2> <2, 10>.
•Para cualquier tipo T, T* es un subtipo de T.
A. Dasso, A. Funes Métodos Formales ... 9
ListasUna lista puede ser definida explícitamente enumerando sus elementos:
<expr1,...,exprn>
donde expri tienen un tipo maximal común y n 0.
Ejemplos :<1, 2, 3, 1><“Juan”, “Pedro”>< >
A. Dasso, A. Funes Métodos Formales ... 10
Listas
Una lista puede ser definida usando una expresión de listas con rango:
<expr1 . . expr2>
donde expr1 y expr2 son expresiones enteras.
Representa la lista de enteros ordenados en forma creciente, incluyendo ambos límites.
Si expr1 > expr2 la lista resultante es la lista vacía.
A. Dasso, A. Funes Métodos Formales ... 11
Listas
Ejemplos:
<3 .. 7> = <3, 4, 5, 6, >
<3 .. 3> = <3>
<3 .. 2> = < >
<3 .. 23*4> = <3 .. 92> = <3, 4, 5, 6, 7,..., 92>
A. Dasso, A. Funes Métodos Formales ... 12
Listas
Una lista puede ser definida implícitamente:
<expr binding in expr_de_lista • expr_boolena>
El binding debe hacer matching con los elementos de la lista representada por expr_de_lista .
A. Dasso, A. Funes Métodos Formales ... 13
Listas
Ejemplo 1:
<2*n n in <0 .. 3>>
•se lee “la lista de valores 2n donde n varía sobre la lista <0 .. 3>”.
•es igual a la lista <0, 2, 4, 6 >.
•notar que el ordenamiento en la lista <0..3> se preserva en la nueva lista.
A. Dasso, A. Funes Métodos Formales ... 14
Listas
Ejemplo 2:
<nn in <1 .. 100> • es_primo(n) >
• se lee “la lista de valores n donde n varía sobre la lista <1 .. 100> considerando solamente los números primos”.
• es igual a la lista <2, 3, 5, 7, ..., 97>.
A. Dasso, A. Funes Métodos Formales ... 15
Listas
Ejemplo 3:
type
Database = Record*,
Record = Key Data,
Key, Data
Supongamos que queremos un reporte de aquellos registros interesantes, definidos por alguna función booleana sobre las claves. El report contendrá entradas consistiendo de la clave y una transformación sobre el dato asociado.
A. Dasso, A. Funes Métodos Formales ... 16
Listas
Ejemplo 3 (cont.):value
es_interesante: Key Bool,
transformacion: Data Report_Data,
report: Database (Key Report_Data)*
report (db) < (k, transformacion(d)) | (k, d) in db • es_interesante(k) >
type
Report_Data
A. Dasso, A. Funes Métodos Formales ... 17
Indexando Listas
•Se puede extraer un elemento particular de una lista usando un índice.
•Un índice debe ser un número entero mayor o igual a 1 y menor o igual a la longitud de la lista (finita).
•Forma general:expr_lista(expr_entera)
A. Dasso, A. Funes Métodos Formales ... 18
Indexando Listas
Ejemplo:value l: Nat* = <10, 20, 30>
l(2) = 20<1, 25, 2> (3) = 2<<‘a’, ‘b’>, <‘9’, ‘g’, ‘p’>>(1) = <‘a’, ‘b’><<‘a’, ‘b’>, <‘9’, ‘g’, ‘p’>>(1) (2) = ‘b’
A. Dasso, A. Funes Métodos Formales ... 19
Definición de listas infinitas
Una lista infinita puede ser definida:1) a través de una definición de un value, y un axioma que especifica que es infinita. Ejemplo: value todos_los_naturales: Nat
axiom todos_los_naturales(1) = 0, i: Nat • i 2 todos_los_naturales(i) =
todos_los_naturales(i-1) +1
A. Dasso, A. Funes Métodos Formales ... 20
Definición de listas infinitas
2) a partir de otra lista infinita.
Ejemplo:
<nn in todos_los_naturales • es_primo(n) >
A partir de la lista infinita de números naturales define la lista de todos los números primos.
A. Dasso, A. Funes Métodos Formales ... 21
Operadores de listasConcatenación
^ : T* T T
Produce una lista que consiste de todos los elementos del primer argumento seguidos por todos los elementos del segundo:
<e1,...,en> ^ <en+1, ...> = <e1,..., en, en+1, ...>
Ejemplos:<1, 2, 3> ^ <4, 5> = <1, 2, 3, 4, 5> <1, 2, 3> ^ < > = <1, 2, 3>
A. Dasso, A. Funes Métodos Formales ... 22
Operadores de listasConcatenación
•Notar que el primer argumento de la concatenación debe ser una lista finita (no se puede agregar nada al final de una lista infinita ya que no tiene fin).
•El segundo argumento, sin embargo, puede ser una lista infinita, p.e:
<0> ^ todos_los_naturales = <0, 0, 1, 2, 3, 4,...>
A. Dasso, A. Funes Métodos Formales ... 23
Operadores de listasObtener cabeza de una lista
hd: T T
Devuelve el primer elemento de la lista:
hd <e1, e2...> = e1
Ejemplos:
hd <1, 2, 3> = 1
hd todos_los_naturales = 0
~
A. Dasso, A. Funes Métodos Formales ... 24
Operadores de Listas Obtener cola de una lista
tl: T T
Devuelve la lista original sin la cabeza:
tl <e1, e2...> = <e2 , e3, ...> Ejemplos:
tl <1, 2, 3> = <2, 3> tl todos_los_naturales = <1, 2, 3, 4,...>
~
A. Dasso, A. Funes Métodos Formales ... 25
Operadores de Listas Obtener longitud de una lista
len: T Nat• Devuelve la longitud de una lista finita.
len <e1, e2...en> = n
Ejemplos:
len <1, 7, 2> = 3
len < > = 0• La aplicación a una lista infinita devuelve chaos.
len todos_los_naturales chaos
~
A. Dasso, A. Funes Métodos Formales ... 26
Operadores de Listas Obtener índices de una lista
inds: T Nat-infset
•Devuelve los índices de una lista.
•Sea lf una lista finita
inds lf = {1.. len lf}
•Sea li una lista infinita
inds li = {i i: Nat • i 1}
A. Dasso, A. Funes Métodos Formales ... 27
Operadores de Listas Obtener índices de una lista
Ejemplos
inds <2, 4, 2> = {1,2,3}
inds < > = {}
inds todos_los_naturales = {indind: Nat • ind 1}
A. Dasso, A. Funes Métodos Formales ... 28
Operadores de Listas Obtener elementos de una lista
elems: T T-infset
Devuelve los elementos de una lista.
elems l = {l(i) i: Nat • i inds 1}
Ejemplos:
elems <2,4,2> = {2,4}
elems < > = {}
elems todos_los_naturales = {nn: Nat }
A. Dasso, A. Funes Métodos Formales ... 29
Listas de Caracteres (Text)
• Text es una abreviatura para Char*
• Todas las operaciones para listas pueden ser aplicadas a Text.
A. Dasso, A. Funes Métodos Formales ... 30
Listas de Caracteres (Text)
“abc” = <‘a’, ‘b’, ‘c’>“” = < >hd “abd” = ‘a’tl “a” = “”“abc” ^ “de” ^ “f” = “abcdef”inds “abc” = {1,2,3}elems “abba” = {‘a’, ‘b’}len “abba” = 4
A. Dasso, A. Funes Métodos Formales ... 31
Ejemplo Cola o Fila
Los elementos pueden ser puestos y pueden dejar la cola uno a uno, siempre siguiendo la política FIFO (First In-Fist Out).
A. Dasso, A. Funes Métodos Formales ... 32
A. Dasso, A. Funes Métodos Formales ... 33
EjemploSorting
Consideremos la especificación de una función que dada una lista de enteros devuelve la lista ordenada de menor a mayor.
A. Dasso, A. Funes Métodos Formales ... 34
A. Dasso, A. Funes Métodos Formales ... 35
EjemploBase de Datos
Un paso de desarrollo
A. Dasso, A. Funes Métodos Formales ... 36
Representaciones para la BDtype Databaseemptyinsert(k2, d2, insert(k1, d1, empty))
type Database = (Key Data)-set{}{(k1,d1), (k2, d2)}
type Database = (Key Data)*
< ><(k1,d1), (k2, d2)>
A. Dasso, A. Funes Métodos Formales ... 37
A. Dasso, A. Funes Métodos Formales ... 38
) ,
A. Dasso, A. Funes Métodos Formales ... 39
A. Dasso, A. Funes Métodos Formales ... 40
Ejemplo Base de datos (II)
• Supongamos además que se requiere que la base de datos se encuentre ordenada por las claves.
A. Dasso, A. Funes Métodos Formales ... 41
scheme KEY = class type Key value less_than : Key Key Bool axiom [anti_reflexiva] k : Key • ~less_than(k, k), [transitiva] k1, k2, k3 : Key • less_than(k1, k2) less_than(k2, k3) less_than(k1, k3), [orden_total] k1, k2 : Key • less_than(k1, k2) less_than(k2, k1) k1 = k2 end
A. Dasso, A. Funes Métodos Formales ... 42
Notar que:
• El tipo Key y la función less_than se encuentran definidos en un módulo separado.
• La función less_than define un orden total sobre las claves. Si las claves fueran enteros, el orden podría ser <.
A. Dasso, A. Funes Métodos Formales ... 43
scheme LIST_DATABASE_II =
extend KEY with extend DATA with
class
type
Record = Key Data,
Database = {| db : Record* • is_wf_Database(db) |}
value
is_wf_Database : Record* Bool
is_wf_Database(rl)
( (k1, d1), (k2, d2) : Record, left, right : Record* •
rl = left ^ < (k1, d1), (k2, d2) > ^ right
less_than(k1, k2)),
A. Dasso, A. Funes Métodos Formales ... 44
Notar que:
• El tipo Database está definido como un subtipo de listas de registros bien formados.
• Un registro es bien formado si para cualquier par de registros sucesivos , la clave del registro de la “izquierda” es menor que el registro de la “derecha”. Esta condición previene las claves duplicadas ya que es consecuencia del axioma anti-reflexiva del módulo KEY.
A. Dasso, A. Funes Métodos Formales ... 45
empty : Database = < >, insert : Key Data Database Database insert(k, d, db) if db = < > then < (k, d) > else let (k1, d1) = hd db in if k = k1 then < (k, d) > ^ tl db elsif less_than(k, k1) then < (k, d) > ^ db else < hd db > ^ insert(k, d, tl db) end end end,
A. Dasso, A. Funes Métodos Formales ... 46
remove : Key Database Database remove(k, db) < (k1, d) | (k1, d) in db • k1 k >, defined : Key Database Bool defined(k, db) if db = < > then false else let (k1, d1) = hd db in if less_than(k, k1) then false elsif k1 = k then true else defined(k, tl db) end end end,
A. Dasso, A. Funes Métodos Formales ... 47
lookup : Key Database Data
lookup(k, db)
if db = < > then not_found
else
let (k1, d1) = hd db in
if less_than(k, k1) then not_found
elsif k1 = k then d1
else lookup(k, tl db)
end
end
end
end
A. Dasso, A. Funes Métodos Formales ... 48
Notar que:• Las funciones insert, defined and lookup han sido
definidas orientadas a la implementación, aprovechando el hecho que la base de datos se encuentra ordenada.
• La función lookup se hizo total (para bases de datos bien formadas), retornando un valor de error en el caso de no encontrarse la clave. Por lo tanto definimos un valor de error not_found de tipo Data, el cual quedó sub-especificado.
• Tanto Data como not_found se encuentran definidos en un módulo separado
A. Dasso, A. Funes Métodos Formales ... 49
scheme DATA =
class
type Data
value
not_found : Data
end
A. Dasso, A. Funes Métodos Formales ... 50
Ejercicios
A. Dasso, A. Funes Métodos Formales ... 51
Ejercicios
A. Dasso, A. Funes Métodos Formales ... 52
Ejercicios
A. Dasso, A. Funes Métodos Formales ... 53
Mapas
A. Dasso, A. Funes Métodos Formales ... 54
Mapas
• Un mapa es una colección desordenada de pares de valores.
• Tienen una estructura tipo tabla, similar a una función, que transforma valores de un tipo en valores de otro tipo.
A. Dasso, A. Funes Métodos Formales ... 55
Mapas
Ejemplos:
[3 | true, 5 | false]
mapa de enteros en booleanos.
[“Carlos” | 7, “Juan” | 2, “Maria” | 7]
mapa de textos en enteros.
A. Dasso, A. Funes Métodos Formales ... 56
Dominio de un Mapa
El conjunto de valores para los cuales un mapa está definido es referido como el dominio del mapa.
Ejemplo:
[“Carlos” | 7, “Juan” | 2, “Maria” | 7]
el dominio es {“Carlos”, “Juan”, “María”}
A. Dasso, A. Funes Métodos Formales ... 57
Rango de un Mapa
El conjunto de valores a los cuales un mapa transforma es referido como el rango del mapa.
Ejemplo:
[“Carlos” | 7, “Juan” | 2, “Maria” | 7]
el rango es {2, 7}
A. Dasso, A. Funes Métodos Formales ... 58
Expresiones de tipo Mapa
Una expresión de tipo de la forma
expr_de_tipo1 expr_de_tipo2
representa los mapas finitos determinísticos que transforman valores de tipo expr_de_tipo1 en valores de tipo expr_de_tipo2 .
m
A. Dasso, A. Funes Métodos Formales ... 59
Expresiones de tipo Mapa
Ejemplo:
A. Dasso, A. Funes Métodos Formales ... 60
Expresiones de tipo Mapa
Una expresión de tipo de la forma
expr_de_tipo1 expr_de_tipo2
representa los mapas parciales que transforman valores de tipo expr_de_tipo1 en valores de tipo expr_de_tipo2 .Pueden ser infinitos y no deterministicos.
m~
A. Dasso, A. Funes Métodos Formales ... 61
Expresiones de tipo Mapa
Ejemplo:
A. Dasso, A. Funes Métodos Formales ... 62
Definiciones explícitas de Mapas
Un mapa puede ser definido explícitamente enumerando sus asociaciones:
con n0
Ejemplos :
A. Dasso, A. Funes Métodos Formales ... 63
Definiciones implícitas de Mapas
Un mapa puede ser definido implícitamente
dando un predicado para definir sus
asociaciones:
donde n1 .
A. Dasso, A. Funes Métodos Formales ... 64
Definiciones implícitas de Mapas
Ejemplo:
Se lee “el mapa de n en 2 * n donde n es un
número natural tal que n es menor o igual a 2”.
Es igual a:
A. Dasso, A. Funes Métodos Formales ... 65
Mapas Infinitos
Es posible por medio de una expresión por comprensión crear un mapa infinito.
Ejemplo:
es igual al mapa infinito:
A. Dasso, A. Funes Métodos Formales ... 66
La aplicación
• Un mapa puede ser aplicado a un valor si ese valor pertenece al dominio del mapa.
• La forma básica de la aplicación es:
• y la forma derivada es:
A. Dasso, A. Funes Métodos Formales ... 67
Aplicación
Ejemplos:
A. Dasso, A. Funes Métodos Formales ... 68
Operadores de MapasObtener dominio
Retorna el conjunto de valores para los cuales el mapa está definido.
Ejemplos:
dom [n | 2n | n: Nat] = {n | n: Nat}
dom [ ] = { }
A. Dasso, A. Funes Métodos Formales ... 69
Operadores de MapasObtener rango
Retorna el rango del mapa.
Ejemplos:
rng [n | 2 n | n: Nat] = {2 n | n: Nat}
rng [ ] = { }
A. Dasso, A. Funes Métodos Formales ... 70
Operadores de MapasSobre-escritura
Sobre-escribe un mapa con otro.
Ejemplos:
[3 | true, 5 | false] † [5 | true] =
[3 | true, 5 | true]
[3 | true] † [5 | true] = [3 | true, 5 | true]
[3 | true] † [ ] = [3 | true]
A. Dasso, A. Funes Métodos Formales ... 71
Operadores de MapasUnión
Ejemplos:
A. Dasso, A. Funes Métodos Formales ... 72
Operadores de MapasRestricción por
La operación “restricción por” remueve un conjunto de valores del dominio de un mapa.
A. Dasso, A. Funes Métodos Formales ... 73
Operadores de MapasRestricción por
Ejemplos:
[3 | true, 5 | false] \ {3} = [5 | false]
[3 | true, 5 | false] \ {5,7} = [3 | true]
[3 | true] \ {} = [3 | true]
A. Dasso, A. Funes Métodos Formales ... 74
Operadores de MapasRestricción a
La “restricción a” restringe el dominio de un mapa a un conjunto de valores de dominio.
Ejemplos:
A. Dasso, A. Funes Métodos Formales ... 75
Operadores de MapasRestricción a
Ejemplos:
[3 | true, 5 | false] / {3} = [3 | true]
[3 | true, 5 | false] / {5,7} = [5 | false]
[3 | true] / {} = [ ]
A. Dasso, A. Funes Métodos Formales ... 76
Operadores de MapasComposición
la composición de dos mapas m1 y m2 se define:
A. Dasso, A. Funes Métodos Formales ... 77
Operadores de MapasComposición
Ejemplo:[3 | true, 5 | false] º [“Klaus” | 3, “John” | 7]
= [“Klaus” | true]
[3 | true] º [“John” | 7] = [ ]
[3 | true, 3 | false] º [“Klaus” | 3]
= [“Klaus” | true, “Klaus” | false ]
A. Dasso, A. Funes Métodos Formales ... 78
Un paso de desarrollo
A. Dasso, A. Funes Métodos Formales ... 79
Representaciones para la BD
A. Dasso, A. Funes Métodos Formales ... 80
A. Dasso, A. Funes Métodos Formales ... 81
A. Dasso, A. Funes Métodos Formales ... 82
class
type
Relation = Element Partition_Id,
Element,
Partition_Id
m
Ejemplo: Relaciones de Equivalencia
A. Dasso, A. Funes Métodos Formales ... 83
value
well_formed : Relation Bool,
initial : Relation,
make_equivalent : Element Element Relation Relation,
are_equivalent : Element Element Relation Bool
A. Dasso, A. Funes Métodos Formales ... 84
axiom
r : Relation • well_formed(r) (all e : Element • e dom r),
well_formed(initial),
e1, e2 : Element • e1 e2 => initial(e1) initial(e2),
e1, e2 : Element, r : Relation :- make_equivalent(e1, e2, r)
r † [e | r(e2) | e : Element • r(e) = r(e1)] pre {e1, e2} dom r,
e1, e2 : Element, r : Relation • are_equivalent(e1, e2, r)
r(e1) = r(e2) pre {e1, e2} dom r
end
A. Dasso, A. Funes Métodos Formales ... 85
Ejercicios