Fundamentos de la especificación formal

Anuncio
Fundamentos de la
especificación formal
Métodos Formales en
Ingeniería del Software
María Alpuente
El lenguaje Maude
• Sintaxis: se utilizan reglas de reescritura
(como Haskell, ML, Scheme o Lisp)
• Semántica: Lógica de Reescritura
(modela concurrencia y objetos)
Ejemplo
mod SIMPLE-VENDING-MACHINE is
sorts Coin Item State .
subsorts Coin Item < State .
op
op
op
op
op
op
null : -> State .
_ _ : State State -> State [assoc id: null] .
$ : -> Coin .
q : -> Coin .
c : -> Item .
b : -> Item .
var St : State .
rl $ => c .
--- da 1 café por 1 $
rl $ => b q .
--- o da 1 bollo y el cambio (1/4 de $)
rl q q q q => $ . --- cambia 4 monedas de 1/4 en 1 $
mod SIMPLE-VENDING-MACHINE is
sorts Coin Item State .
op
op
op
op
op
op
Signatura
null : -> State .
_ _ : State State -> State . [assoc id: null] .
$ : -> Coin .
q : -> Coin .
c : -> Item .
b : -> Item .
var St : State .
rl $ => c .
rl $ => b q .
rl q q q q => $ .
Presentación
Maude> rew q q q q null .
rl $ => c .
rl $ => a q .
rl q q q q => $ .
Maude> rew q q q q null .
rl $ => c .
rl $ => b q .
rl q q q q => $ .
q q q q null
$
c
b q
Maude> rew q q q q null .
rewrite in SIMPLE-VENDING-MACHINE : q q q q .
rewrites: 2 in 0ms cpu (0ms real) (~ rewrites/second)
result Item: c
q q q q
rl $ => c .
rl $ => b q .
rl q q q q => $ .
$
c
b q
Maude> search q q q q =>! X:State .
search in VENDING-MACHINE : q q q q =>! X:State .
Solution 1 (state 2)
X:State --> c
Solution 2 (state 3)
X:State --> b q
No more solutions.
q q q q
rl $ => c .
rl $ => b q .
rl q q q q => $ .
$
c
b q
Maude> search $ q q q =>! X:State .
search in VENDING-MACHINE : $ q q q =>! X:State .
Solution 1 (state 1)
X:State --> c q q q
Solution 2 (state 4)
X:State --> b c
Solution 3 (state 5)
X:State --> b b q
No more solutions.
0
Maude> show search graph .
state 0, State: $ q q q
arc 0 ===> state 1 (rl $ => c .)
arc 1 ===> state 2 (rl $ => b q .)
1
$ q q q
2
c q q q
b q q q q
state 1, State: c q q q
state 2, State: b q q q q
arc 0 ===> state 3 (rl q q q q => $ .)
state 3, State: b $
arc 0 ===> state 4 (rl $ => c .)
arc 1 ===> state 5 (rl $ => b q .)
state 4, State: b c
state 5, State: b b q
3
4
b c
b $
5
b q b
Evaluación de expresiones (i)
Reducción
e
e’
l
=>
lhs
r
rhs
Evaluación de expresiones (ii)
Reducción
e ≡
e’ ≡
b $
$
=>
b q
b b q
Evaluación de expresiones (iii)
Reducción
e ≡
sqr(inc(2))
inc(X)
e’ ≡
=>
sqr(2+1)
X + 1
sqr(inc(2))
inc(X) => X + 1
sqr(2+1)
sqr(X) => X * X
inc(2)*inc(2)
Evaluación de expresiones (iv)
Reducción
e ≡
sqr(inc(2))
sqr(X)
e’ ≡
=>
inc(2)*inc(2)
X * X
Definiciones
• Un redex es una instancia lσ de una parte
izquierda l de una regla l => r
• Una expresión e se reduce (se reescribe) a e’ si:
– contiene un redex lσ de una ecuación l = r
– e’ se obtiene reemplazando en e el redex
lσ por rσ
• El reemplazamiento, dentro de una expresión, de
una instancia de la lhs de una regla por la
correspondiente instancia de la rhs se denomina
paso de reescritura o reducción
Evaluación de expresiones (v)
Reducción
r
l
lσ
rσ
e
e’
l
=
r
• La evaluación de una expresión e consiste
en aplicar sucesivos pasos de reducción →
hasta obtener una forma normal o
irreducible n (es decir, una expresión que no
contiene redexes). En símbolos:
e →! n sii e →∗ n y n →/
• Según la estrategia de reducción escogida,
el resultado puede cambiar
Estrategias de evaluación
sqr(inc(2))
inc(X) => X + 1
sqr(2+1)
Impaciente
sqr(X) => X * X
inc(2)*inc(2)
Estrategias de evaluación
sqr(inc(2))
inc(X) => X + 1
sqr(2+1)
sqr(X) => X * X
inc(2)*inc(2)
Perezosa
Estrategias de evaluación
• Maude es un lenguaje impaciente (a diferencia
de otro lenguajes funcionales como Haskell, que
son perezosos)
• Para garantizar la terminación de los cómputos,
es necesario imponer condiciones a las reglas
Terminación
• Un programa (i.e., un conjunto de reglas) es
terminante si no existen cadenas infinitas de pasos
de reducción:
t1 → t2 → t3 … → …
• Cuando un programa es terminante, la forma
normal de cualquier término siempre existe
• La terminación es una propiedad indecidible de los
programas (pero hay condiciones suficientes)
Terminación
Ejemplos de reglas no terminantes:
inf X => X:(inf X+1) .
loop => loop .
X => a .
St => St $ .
and(X,Y) => and(Y,X)
Confluencia
• Un programa (i.e., un conjunto de reglas) es
confluente si siempre que un término se puede
reescribir a dos términos distintos, éstos, a su vez,
convergen a un mismo término. En símbolos:
∀ t, s1, s2 tal que
t →∗ R s 1 y t →∗ R s 2
∃ u tal que
s1 →∗R u y s2 →∗R us1
t
s2
u
Confluencia
• Cuando un programa es confluente, la forma
normal de cualquier término, si existe, es única
• La confluencia es una propiedad indecidible de
los programas (pero hay condiciones suficientes,
por ejemplo ortogonalidad = “linealidad por la
izquierda”+ “no solapamiento de lhs’s”)
• Ejemplo TRS no lineal donde f(c,c) tiene dos
formas nomales, a y b
f(x,x)=> a
f(x,g(x))=>b
c=>g(c)
Confluencia
Ejemplos de programa no confluentes:
$ => c .
$ => b q
.
Ecuaciones
• Las reglas que son terminantes y confluentes
(no dan resultados divergentes) se pueden escribir
como ecuaciones dentro de módulos funcionales
y se usan como reglas de simplificación ecuacional.
op nil : -> List .
op _._ : Nat List -> List .
op length: List -> Nat .
eq length(nil) = 0 .
eq length(I.L) = s length(L) .
Reescritura ecuacional
• Si tenemos un programa P = R ∪ E
t →R ∪ E s sii
t →!
E
t’ y t’ →R s’ y s’ →!E s
Ejemplo de
reescritura ecuacional
• Dado el conjunto E de ecuaciones para
las funciones length y +
y R={ inf X => X.(inf X+1) }
inf (length(0.1.nil)) →R ∪ E 2.inf(3)
Atributos
• Cuando aparecen operadores asociativos,
conmutativos, etc, la reescritura no es capaz
de computar de forma efectiva con ellos
(espacio de búsqueda infinito)
• Por ello, dichas propiedades se tratan aparte,
predefinidas como ATRIBUTOS
Ejemplo de
Reescritura con atributos
and(X,Y) = and(Y,X)
and(X,true) => X
and(X,false) => false
> rew and(true,X) →[regla1]
and(X,true) →[regla1]
and(true,X) →[regla1] … ∞ …
Ejemplo de
Reescritura con atributos
and(X,Y) = and(Y,X)
op and : Bool Bool -> Bool [comm] .
and(X,true) => X
and(X,false) => false
> rew and(true,X) →[comm]
X
Reescritura condicional
• Las reglas condicionales tienen la forma general:
crl
l
=> r
if
C
donde C es una conjunción (/\) de expresiones de
la forma
•
•
•
•
t=t’ (equation)
t:=t’ (matching equation)
t=>t’ (rule)
t: S (sort expression)
(una expresion booleana b se considera b=true)
• Ej. b(X)=>c(X*2) if a(X)=>b(Y)
Reescritura condicional
• Relación de reducción condicional:
(para expresiones t:=t’)
Un redex lσ se reescribe a la expresión rσβ
si existe una sustitución β que hace emparejar con el
patrón tσ
la forma normal de t’σ, es decir, si tσβ=t’σ↓
Ejemplo de
Reescritura condicional
crl f(X)=>X+N if X>0/\s(N):=s(0)
Ejemplo de reducción condicional:
σ={X/2}
β={N /0}
f(2)
→
2+0
Maude> search $ q q q q =>! X:State .
search in VENDING-MACHINE : $ q q q q =>! X:State .
Solution 1 (state 6)
X:State --> c c
Solution 2 (state 7)
X:State --> q b c
Solution 3 (state 8)
X:State --> q q b b
No more solutions.
Maude> show search graph .
state
arc 0
arc 1
arc 2
0, State: $ q q q q
===> state 1 (rl q q q q => $ .)
===> state 2 (rl $ => c .)
===> state 3 (rl $ => q b .)
state 1, State: $ $
arc 0 ===> state 4 (rl $ => c .)
arc 1 ===> state 5 (rl $ => q b .)
state 2, State: q q q q c
arc 0 ===> state 4 (rl q q q q => $ .)
state 3, State: q q q q q b
arc 0 ===> state 5 (rl q q q q => $ .)
state 4, State: $ c
arc 0 ===> state 6 (rl $ => c .)
arc 1 ===> state 7 (rl $ => q b .)
state 5, State: $ q b
arc 0 ===> state 7 (rl $ => c .)
arc 1 ===> state 8 (rl $ => q b .)
state 6, State: c c
state 7, State: q b c
state 8, State: q q b b
Maude> show search graph .
state
arc 0
arc 1
arc 2
0, State: $ q q q q
===> state 1 (rl q q q q => $ .)
===> state 2 (rl $ => c .)
===> state 3 (rl $ => q b .)
0
1
state 1, State: $ $
arc 0 ===> state 4 (rl $ => c .)
arc 1 ===> state 5 (rl $ => q b .)
4
$ $
2
$ c
state 3, State: q q q q q b
arc 0 ===> state 5 (rl q q q q => $ .)
state 4, State: $ c
arc 0 ===> state 6 (rl $ => c .)
arc 1 ===> state 7 (rl $ => q b .)
state 5, State: $ q b
arc 0 ===> state 7 (rl $ => c .)
arc 1 ===> state 8 (rl $ => q b .)
state 6, State: c c
state 7, State: q b c
state 8, State: q q b b
c c
c q q q q
5
state 2, State: q q q q c
arc 0 ===> state 4 (rl q q q q => $ .)
6
$ q q q q
7
q b c
3
$ q b
8
q q b c
q b q q q q
Descargar