Title: RSL
1RSL
- Raise
- Specification
- Language
2Producto Cartesiano
3Producto Cartesiano
- La expresión de tipo Producto Cartesiano
- tipo1 ? ... ? tipon n?2
- representa el tipo conteniendo los productos (v1,
..., vn) - donde vi es un valor de tipo tipoi
4Producto, ejemplos
- Bool ? Bool representa los productos
- (true, true), (true, false), (false, true),
(false, false) - (Nat ? Nat) ? Bool representa los productos
- ((0, 0), true), ((0, 0), false), ((0, 1), true),
((0, 1), false), ... - Nat ? Nat ? Bool representa los productos
- (0, 0, true), (0, 0, false), (0, 1, true), (0, 1,
false), ...
5Ejemplo Un sistema de Coordenadas (1)
- Un sistema de coordenadas provee un conjunto de
posiciones (x, y) donde x e y son números reales.
- El centro del sistema de coordenadas es (0.0,
0.0) y es referenciado como el origen. - La distancia entre dos posiciones es obtenida por
el teorema de Pitágoras.
6Ejemplo Un sistema de Coordenadas (2)
7Ejemplo Un sistema de Coordenadas (3)
8Expresiones Let (1)
- Usadas especialmente en dos formas
- 1. Para destruir un producto, p.e.
- let (x, y) (1, 2) in x y end
- que evaluará a 3.
- Primero se evalúa la expresión que sigue al .
- Luego se asocia x a la primera parte e y a la
segunda. - Finalmente se evalúa la expresión que sigue a in.
9Expresiones Let (2)
- 2. Para organizar una evaluación en varios pasos.
- Por ejemplo una función que suma una lista de
enteros puede ser - value
- sum Int ? Int
- sum(s) ? if s lt gt then 0
- else
- let h hd s, t tl s, x sum(t)
- in h x end
- end
10Funciones
11Funciones
- Una función es una transformación de valores de
un tipo a valores de otro tipo. - Pueden ser
- Totales
- Parciales
12Funciones totales
- Una función f, que transforma valores de un tipo
T1 en un tipo T2 es total si para todo valor en
T1 devuelve un único valor en T2. - La denotamos en RSL
- f T1 ? T2
- y satisface la propiedad
- ?x T1 ? ?! y T2 ? f(x) ? y
13Funciones totales Ejemplos
- value
- check Person ? Database ? Bool
- check(p, db) ? p ? db
- value
- distance Position ? Position ? Real
- distance ((x1, y1), (x2, y2)) ?
- ((x2 - x1)?2.0 (y2 - y1) ? 2.0) ? 0.5
14Funciones parciales
- Una función f, que transforma valores de un tipo
T1 en un tipo T2 es parcial si existe un valor en
T1 para el cual f puede fallar en retornar un
valor (es decir, es no terminante), o el
resultado es no determinístico. - La denotamos en RSL
- f T1 T2
15Funciones parciales
- La expresión de tipo
- T1 T2
- representa el tipo conteniendo todas las
funciones parciales así como las totales.
16Funciones parciales
- Muchas funciones parciales son potencialmente
totales porque son parciales como resultado de
una sub-especificación. - value func_parcial Real Real
- axiom ?x Real x ? 0.0 ? (func_parcial(x) ?
1.0 / x)
17Funciones parciales
Las funciones parciales son usualmente definidas
con precondiciones, p.e. factorial Int
Int factorial(x) ? if x 0 then 1 else x ?
factorial(x 1) end pre x ? 0 Esto dice que
cuando la precondición es true, la aplicación de
la función es equivalente a la expresión que la
define. La precondición nos dice que usemos
factorial sólo cuando x ? 0. No nos dice qué
sucede en otro caso.
18Expresiones de aplicación de funciones
- Ejemplos
- factorial(10)
- sqrt(4)
- Forma típica expr_función(expr1, ..., exprn)
- Condiciones de contexto
- expr1, ..., exprn debe ser del tipo argumento de
expr_función
19Definición de funciones
- Elegir nombre
- Decidir signatura
- tipo argumento Ta
- tipo resultado Tr
- Total (?) o Parcial ( )
- total si podemos definirla para todos los
valores en Ta - parcial si se necesita una precondición.
- Decidir el estilo.
20Estilo de definición de funciones explícito
- Si es posible establecer una fórmula.
- f(x) ? exprx
- Ejemplo
- value
- f Int ? Int
- f(x) ? x 1
21Estilo de definición de funciones implícito
- Si es posible establecer una relación entre los
datos de entrada y los de salida - px, r
- Ejemplo
- value
- f Int ? Int
- f(x) as r post r gt x
22Estilo de definición de funciones axiomático
- Siempre es posible
- Típicamente usado en conexión con los sorts.
- Signatura axioma(s)
- value value
- f Int ? Int f Int ? Int
- axiom axiom
- ? x Int f(x) gt x ? x Int
f(x) ? x 1
23Funciones parciales, ejemplos
- factorial Int Int
- factorial(x) ? if x 0 then 1 else x ?
factorial(x 1) end - pre x ? 0
- ________________es equivalente a_______________
- factorial Int Int
- axiom
- ?? xInt x ? 0 ?
- (factorial(x) ? if x 0 then 1 else x ?
factorial(x 1) end) - __________________y también a________________
- factorial Int Int
- axiom
- ?? xInt factorial(x) ? if x 0 then 1 else x
? factorial(x 1) end - pre x ? 0
24Composición de funciones
- º (T2 T3) ? (T1 T2) ? (T1 T3)
- (f º g) (x) f(g(x))
- scheme PRB
- class
- value
- f Int ? Nat
- f(x) ? x ? 2,
-
- g Int ? Int
- g(x) ? 2 x ,
-
- h Int ? Nat
- h(x) ?(f º g)(x)
- end
25Composición de funciones
- scheme PRB
- class
- value
- f Int ? Nat
- f(x) ? x ? 2,
- g Int ? Int
- g(x) ? 2 x,
- h ((Int ? Nat) ? (Int ? Int) ? Int) ?
Nat) - h(x, y, z) ? (x ºy) (z),
- uso_h Int ? Nat
- uso_h(x) ? h(f, g, x)
- end
26Definiciones algebraicas de funcionesEjemplo 1
Una lista
- Una lista es una secuencia ordenada de elementos.
- Se puede construir una nueva lista agregando un
elemento a una lista dada. - Se puede recuperar la cabeza de la lista (head)
que corresponde al último elemento agregado, así
como recuperar su cola (tail) que corresponde al
resto de la lista, sin la cabeza.
27- scheme LIST
- class
- type
- List
-
- value
- empty List,
- add Int ? List ? List,
- tail List List,
- head List Int
-
- axiom
- ?i Int, l List tail(add(i, l)) ? l,
- ? i Int, l List head(add(i, l)) ? i
- end
28Ejemplo 2 Una Base de Datos Requisitos (1)
- La base de datos asocia claves únicas con los
datos. Es decir, una clave se encuentra asociada
con a lo sumo un elemento de datos en la base de
datos. - Además, la base de datos deberá proveer las
siguientes funciones
29Ejemplo Una Base de Datos Requisitos (2)
- insert asocia una clave con un dato en la base de
datos. Si la clave ya se encuentra asociada a
otro elemento de datos, la nueva asociación borra
la anterior. - remove remueve una asociación entre una clave y
un dato. - defined verifica si una clave está asociada a
algún dato. - lookup retorna el dato asociado con una clave
particular.
30- scheme DATABASE
- class
- type Database, Key, Data
-
- value
- empty Database,
- insert Key ? Data ? Database ? Database,
- remove Key ? Database ? Database,
- defined Key ? Database ? Bool,
- lookup Key ? Database Data
-
31Técnica para identificar axiomas
- Identificar los constructores del tipo de
interés. - Definir las restantes funciones en términos de
los constructores.
32Técnica para identificar axiomas, aplicado al
ejemplo de la base de datos
- Los constructores son la constante empty y la
función insert. Cualquier base de datos puede ser
representada por una expresión de la forma - insert(k1, d1, insert(k2, d2, ... insert(kn, dn,
empty)...)) - remove, defined y lookup definidos en términos de
los constructores empty e insert. -
33- axiom
- remove_empty
- ? k Key remove(k, empty) ? empty,
- remove_insert
- ? k, k1 Key, d1 Data, db Database
- remove(k, insert(k1, d1, db)) ?
- if k k1 then remove(k, db)
- else insert(k1, d1, remove(k, db))
- end,
-
34- defined_empty
- ? k Key defined(k, empty) ? false,
- defined_insert
- ? k, k1 Key, d1 Data, db Database
- defined(k, insert(k1, d1, db)) ?
- k k1 ? defined(k, db),
- lookup_insert
- ? k, k1 Key, d1 Data, db Database
- lookup(k, insert(k1, d1, db)) ?
- if k k1 then d1 else lookup(k,
db) end - pre defined(k, db)
- end
35Conjuntos
36Conjuntos
- Un conjunto es una colección, no ordenada, de
valores distintos, del mismo tipo. - Ejemplos
- 1,4,8
-
- Juan, Pedro, María
37Expresión de tipo conjunto
- La expresión de tipo
- expr_de_tipo-set
- representa el tipo que contiene todos los
conjuntos finitos de elementos de tipo
expr_de_tipo
38Conjuntos, ejemplos
- Bool-set representa todos los conjuntos finitos
de Bool. Es decir - , true, false, true, false
- Nat-set representa todos los subconjuntos finitos
del conjunto de los naturales. Es decir , 0,
1, ...,0,1,...,1,2,...
39Conjuntos infinitos
- La expresión de tipo
- expr_de_tipo-infset
- representa el tipo que contiene todos los
conjuntos finitos así como los infinitos de
elementos de tipo expr_de_tipo
40Conjuntos infinitos, ejemplos
- Bool-infset representa los mismos conjuntos que
Bool-set. - Nat-infset contiene no sólo los conjuntos finitos
sino también los infinitos - , 0, 1, ...,0,1,...,1, 2,...
- 0, 1, 2, 3..., 1, 2, 3..., 1, 3, 5, 7,
9,...,...
41Conjuntos, propiedades
- No existe un orden de sus elementos, p.e.
- 1, 2, 3 3, 2, 1
- No contiene valores repetidos
- 1, 2, 3, 3 1, 2, 3
- Para cualquier tipo T, T-set es un subtipo de
- T-infset.
42Conjuntos definición explícita
- Un conjunto puede ser definido explícitamente
- expr1,...,exprn
- donde expri tienen un tipo maximal común y n ?
0. - Ejemplo
- 1, 2, 3
-
- Juan, Pedro
43Conjuntos, definición implícita
- Un conjunto puede ser definido implícitamente
- expr1 ? typing1,..., typingn expr2
- donde n ? 1 y expr2 es una expresión booleana.
44Conjuntos, definición implícita, ejemplo
- 2?n ?n Nat n ? 3
- Se lee el conjunto de valores 2?n donde n es un
número natural tal que n es menor o igual a
tres. - Es decir que es igual a 0, 2, 4, 6
45Conjuntos, ejemplos
- n ?n Nat es_primo(n)
- donde es_primo Nat ? Bool
- es igual al conjunto 2, 3, 5, 7, ...
- (x, y)?x, y Nat y x1
- es igual al conjunto (0, 1), (1, 2), (2,
3),...
46Expresiones de conjuntos con rangos
- expr1 .. expr2
- donde
- expr1 y expr2 son expresiones enteras
- Si expr1 gt expr2 el conjunto resultante es
vacío.
47Expresiones de conjuntos con rangos, ejemplos
- 3 .. 7 3, 4, 5, 6, 7
- 3 .. 3 3
- 3 .. 2
48Operadores de conjuntos Pertenencia
- ? T ? T-infset ? Bool
- ? T ? T-infset ? Bool
- e ? s es true sii e es un elemento de s.
- e ? s ?(e ? s)
- Ejemplos 1 ? 1, 2 true
- 1 ? 1, 2 false
- 2 ? n n Nat true true
49Operadores de conjuntosUnión
- ? T-infset ? T-infset ? T-infset
- Ejemplo
- 1, 2, 3 ? 2, 3, 4 1, 2, 3, 4
50Operadores de conjuntosIntersección
- ? T-infset ? T-infset ? T-infset
- Ejemplo
- 1, 2, 3 ? 2, 3, 4 2, 3
51Operadores de conjuntosUnión e Intersección
- Unión e intersección pueden ser definidos en
términos de pertenencia - s1 ? s2 ? e ? e T e?s1 ? e?s2
- s1 ? s2 ? e ? e T e?s1 ? e?s2
52Operadores de conjuntos Diferencia de conjuntos
- s1 \ s2 T-infset ? T-infset ? T-infset
- s1 \ s2 ? e ? e T e ?s1 ? e ?s2
53Operadores de conjuntos Diferencia de
conjuntos Ejemplos
- 1, 3, 4 \ 3, 4 1
- 1, 3, 4 \ 2 1, 3, 4
- 1, 3, 4 \ n ?n Nat es_primo(n) 1, 4
54Operadores de conjuntos Subconjunto
- ? T-infset ? T-infset ? Bool
- s1 ? s2 ? ? e T e ?s1 ? e ?s2
- Operador reverso
- ? T-infset ? T-infset ? Bool
- s1 ? s2 ? ? e T e ?s2 ? e ?s1
55Operadores de conjuntos Subconjunto propio
- ? T-infset ? T-infset ? Bool
- s1 ? s2 ? s1 ? s2 ? s1 ? s2
- Operador reverso
- ? T-infset ? T-infset ? Bool
- s1 ? s2 ? s1 ? s2 ? s1 ? s2
56Operadores de conjuntos Subconjunto, ejemplos
- 1, 2, 3 ? 1, 2, 3 true
- 1, 2 ? 1, 2, 3 true
- 1, 2, 3 ? 1, 2, 3 false
- 1, 4 ? 1, 2, 3 false
57Operadores de conjuntos Cardinalidad
- Retorna la cardinalidad de un conjunto finito.
La aplicación a un conjunto infinito retorna
chaos. - card T-infset Nat
- Ejemplos
- card 0
- card 1, 15, 23 3
- card n n Nat ? chaos
58Ejemplo Una Base de datos
- Consideremos los requisitos para la base de datos
del ejemplo anterior.
59Ejemplo Una Base de Datos (1)
- Requisitos
- La base de datos asocia claves únicas con los
datos. Es decir, una clave se encuentra asociada
con a lo sumo un elemento de datos en la base de
datos. - Además, la base de datos deberá proveer las
siguientes funciones
60Ejemplo Una Base de Datos (2)
- insert asocia una clave con un dato en la base de
datos. Si la clave ya se encuentra asociada a
otro elemento de datos, la nueva asociación borra
la anterior. - remove remueve una asociación entre una clave y
un dato. - defined verifica si una clave está asociada a
algún dato. - lookup retorna el dato asociado con una clave
particular.
61- scheme DATABASE
- class
- type Database, Key, Data
-
- value
- empty Database,
- insert Key ? Data ? Database ? Database,
- remove Key ? Database ? Database,
- defined Key ? Database ? Bool,
- lookup Key ? Database Data
-
62- axiom
- remove_empty
- ? k Key remove(k, empty) ? empty,
- remove_insert
- ? k, k1 Key, d1 Data, db Database
- remove(k, insert(k1, d1, db)) ?
- if k k1 then remove(k, db)
- else insert(k1, d1, remove(k, db))
- end,
-
63- defined_empty
- ? k Key defined(k, empty) ? false,
- defined_insert
- ? k, k1 Key, d1 Data, db Database
- defined(k, insert(k1, d1, db)) ?
- k k1 ? defined(k, db),
- lookup_insert
- ? k, k1 Key, d1 Data, db Database
- lookup(k, insert(k1, d1, db)) ?
- if k k1 then d1 else lookup(k,
db) end - pre defined(k, db)
- end
64(No Transcript)
65(No Transcript)
66(No Transcript)
67Un paso de desarrollo
68Relación de Refinamiento, condiciones
- El nuevo modelo (A1) debe incluir TODAS las
entidades del viejo (A0 ) - types, values, objects, variables y channels con
los mismos nombres y tipos maximales. - A1 puede tener más entidades que A0.
69Relación de Refinamiento, condiciones
- Todas las propiedades de A0 son válidas en A1.
- axiomas, defs. de funciones, constantes,
restricciones en subtipos. - No puede ser chequeada estáticamente, necesita
demostración.
70SET_DATABASE implementa a DATABASE
- SET_DATABASE define todos los tipos que define
DATABASE, el único cambio es que el sort Database
ha sido reemplazado por una definición concreta. - SET_DATABASE define, con las misma signaturas,
todas las constantes y funciones que son
definidas por DATABASE. - Todos los axiomas de DATABASE son verdaderos en
SET_DATABASE.
71Condiciones de Refinamiento
72Condiciones de Refinamiento (cont.)
73Condiciones de Refinamiento (cont.)
74Verificación de una cond. de refinamiento