Métodos Formales y Análisis de Herramientas para la Producción de Software Aristides Dasso, Ana...

Post on 24-Jan-2016

221 views 0 download

Transcript of Métodos Formales y Análisis de Herramientas para la Producción de Software Aristides Dasso, Ana...

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