Desarrollo formal deprogramas
Estructuraci on de MaquinasCarlos Olarte
Universidad Javeriana-Cali
Desarrollo formal de programasEstructuraci on de Maquinas-- p. 1/28
Obligaciones de Prueba (INCLUDE)
∃p2.C2
C1 ∧ C2 → ∃st1, ..k1.B1 ∧ B2
C1 ∧ C2 ∧B1 ∧ B2 → ∃v1...vn.I1 ∧ I2
C1 ∧ C2 ∧B1 ∧ B2 → [T1;T2]I2
C1 ∧ C2 ∧B1 ∧ B2 ∧ I1 ∧ I2 → [S]I2
Desarrollo formal de programasEstructuraci on de Maquinas-- p. 2/28
Estructuración con SEES
Provee acceso de lectura sobre M1 a M2
El estado, constantes y conjuntos de M1 son visiblespor M2 en Operaciones e inicialización
M1 NO está bajo el control de M2
Operaciones Query de M1 pueden ser utilizadas enoperaciones de M2
Si M4 está incluida en M2 y M1 sees M2, M1 puede verel estado de M4 porque hace parte de la definición deM2
Desarrollo formal de programasEstructuraci on de Maquinas-- p. 3/28
Continuación
Desarrollo formal de programasEstructuraci on de Maquinas-- p. 4/28
Uso deSEES
Definición de conjuntos (tipos) comunes a variasmáquinas
MACHINE ProductosSETS PRODUCTOSEND
Desarrollo formal de programasEstructuraci on de Maquinas-- p. 5/28
RelacionesUSES
Son como relaciones SEES pero el invariante de M2
puede hacer referencia al estado de M1
Que pasa si las operaciones de M1 no garantizan elinvariante de M2?. Una máquina M3 debe incluir a M1 yM2 imponiendo las condiciones de ejecución de las dos
Desarrollo formal de programasEstructuraci on de Maquinas-- p. 6/28
Obligaciones de Prueba
∃p2.C2
C1 ∧ C2 ∧B1 → ∃st1, ..k1.B2
C1 ∧ C2 ∧B1 ∧ B2 → ∃v1...vn.I2
C1 ∧ C2 ∧B1 ∧ B2 → [T1;T2]I2
C1 ∧ C2 ∧B1 ∧ B2 ∧ I1 ∧ I2 → [S]I2
Desarrollo formal de programasEstructuraci on de Maquinas-- p. 7/28
Un Ejemplo
MACHINE LifeSETS PERSON;SEX={boy, girl}
VARIABLES male, femaleINVARIANTmale ⊆ PERSON ∧ female ⊆ PERSON ∧male ∩ female = {}
INITIALISATION male := {}||female := {}
OPERATIONS born(pp,ss) =
PREpp ∈ PERSON ∧ ss ∈ SEX ∧ pp /∈ (male ∪ female) THENIF ss= boy THEN male := male ∪ {pp} ELSE female := female ∪ {pp}
ENDEND;die(pp) =
PREpp ∈ PERSON ∧ pp ∈ (female ∪male) THENIF pp ∈ male THEN male := male− {pp} ELSE female := female− {pp}
ENDEND;
Desarrollo formal de programasEstructuraci on de Maquinas-- p. 8/28
Continuación
MACHINE MarriageUSES LifeVARIABLES marriageINVARIANT marriage ∈ male p female
INITIALISE marriage:={}OPERATIONS wed(mm,ff)=PREmm ∈ male ∧ ff ∈ female ∧mm /∈ dom(marriage) ∧ ff /∈
range(marraige) THEN marriage := marriage = {〈mm, ff〉} END END;part(mm,ff)=PREmm ∈ male ∧ ff ∈ female ∧ 〈mm, ff〉 ∈ marriage THENmarriage := marriage− 〈mm, ff〉 END END;pp← partner(xx)=PRE xx ∈ (dom(marriage) ∪ ran(marriage)) THENIF xx ∈ dom(marriage) THEN pp := marriage(xx) ELSEpp := marraige−1(xx) END END;
Desarrollo formal de programasEstructuraci on de Maquinas-- p. 9/28
Continuación
MACHINE RegisterEXTENDS MarriageINCLUDE LifePROMOTES bornOPERATIONS die(pp) =
PREpp ∈ PERSON ∧ pp ∈ (female ∪male) THENdie(pp)|| IF pp ∈ dom(marriage) THEN part(pp, marriage(pp)) ELSEIFpp ∈ ran(marriage) THEN part(marriage−1(pp), pp) END END;
Desarrollo formal de programasEstructuraci on de Maquinas-- p. 10/28
Continuación
Desarrollo formal de programasEstructuraci on de Maquinas-- p. 11/28
Refinamiento
En una máquina abstracta M que especifica un sistema
1. Al usuario le concierne el qué (interfaz), no el cómo
2. No le interesa cómo se representa la información.
3. La especificación de M le da ideas generales sobre sufuncionamiento
4. Mientras los parámetros estén bien, le interesa sólo el resultado delas operaciones.
La representación de una máquina es otra máquina M1: Refinamiento.
M1 debe tener exactamente las mismas operaciones que M
Debe proveer un invariante de encadenamiento
Desarrollo formal de programasEstructuraci on de Maquinas-- p. 12/28
Ejemplo de refinamiento
Un equipo de fútbol, con jugadores que se reemplazan a veces.
Operación sustituir. Cambia un jugador por otro
Operación consulta. Dice si un jugador está en el equipo.
El usuario no ve el estado interno de esta máquina. Sólo susoperaciones.
Desarrollo formal de programasEstructuraci on de Maquinas-- p. 13/28
Especificación
MACHINE EquipoSETS RESP = {dentro, fuera}
VARIABLES equipo
INVARIANT equipo ⊆ 1.,22 ∧ card(equipo) = 11
INICIALIZATION equipo := 1.,11
OPERATIONSsustituir(jj, rr) = PRE jj ∈ equipo ∧ rr ∈ 1.,22 ∧ rr 6∈ equipoTHEN
equipo := equipo ∪ {rr} − {jj}END
aa← consulta(jj) = PRE jj ∈ 1.,22THEN
if jj ∈ equipo then aa := dentroelse aa := fuera
END
Desarrollo formal de programasEstructuraci on de Maquinas-- p. 14/28
Refinamiento
equipo: arreglo de 11 elementos: los miembros del equipoREFINEMENT EquipoRREFINES Equipo
VARIABLES equipoR
INVARIANT equipoR ∈ 1.,11 1.,22 ∧ ran(equipoR) = equipo
INICIALIZATION equipoR := id(1.,11)
OPERATIONSsustituir(jj, rr) =
equipoR(equipoR−1(jj)) := rr;
aa← consulta(jj) =
if jj ∈ ran(equipoR) then aa := dentro else aa := fuera
END
Desarrollo formal de programasEstructuraci on de Maquinas-- p. 15/28
Otro Refinamiento
equipo: arreglo de 22 elementos: valores en {dentro, fuera}
REFINEMENT EquipoAREFINES Equipo
VARIABLES equipoa
INVARIANT equipoa ∈ 1.,22→ RESP ∧ equipo = equipoa−1[{dentro}]
INICIALIZATION equipoa := (1.,11)× {dentro} ∪ (12.,22)× {fuera}
OPERATIONSsustituir(jj, rr) =
equipoa(jj), equipoa(rr) := fuera, dentro;
aa← consulta(jj) =
aa := equipoa(jj)
END
Desarrollo formal de programasEstructuraci on de Maquinas-- p. 16/28
Pérdida de información
Otra manera de refinar: Eliminar información redundante.
1. El refinamiento puede especificar solamente la información querequieren las operaciones.
2. Es posible que algún estado de la especificación no se requiera en elrefinamiento.
Ejemplo: Una máquina que registra las notas de un curso y puedecalcular estadísticas sobre ellas.
Operación registrar : entra la nota de un estudiante
Operación promedio: calcula el promedio del curso
Operación tamaño: devuelve el tamaño del curso
Desarrollo formal de programasEstructuraci on de Maquinas-- p. 17/28
Especificación
MACHINE ExamenSETS CANDIDATO
VARIABLES notas
INVARIANTnotas ∈ CANDIDATO 6→ 0.,100
INICIALIZATION notas := ∅
OPERATIONSregistrar(cc, nn) = PRE cc ∈ CANDIDATO ∧ cc 6∈ dom(notas) ∧ nn ∈
0.,100THEN
notas(cc) := nnEND;
aa← promedio =
aa :=∑
z∈dom(notas) .notas(zz)
card(dom(notas))
END
tt← tamano = tt := card(dom(notas))
ENDDesarrollo formal de programasEstructuraci on de Maquinas-- p. 18/28
Refinamiento
REFINEMENT ExamenRREFINES Examen
VARIABLES total, num
INVARIANT num = card(dom(notas)) ∧ total =∑
z∈dom(notas) .(notas(z))
INICIALIZATION total, num := 0, 0
OPERATIONSregistrar(cc, nn) =
BEGINtotal, num := total + nn, num + 1END;
aa← promedio =
aa := total/num;
tt← tamano = tt := num
END
Agregar operación m← maxima_nota?
Desarrollo formal de programasEstructuraci on de Maquinas-- p. 19/28
Herencia
El refinamiento R hereda información de la especificación M
R puede referirse a parámetros, conjuntos y constantes de M
También a conjuntos y constantes de máquinas incluídas por M
NO tiene acceso a información en máquinas vistas (SEES) o usadas(USES) por M
R tiene acceso al estado de M sólo “en compilación”, no en“ejecución” (el refinamiento no puede conocer el estado de lasvariables en tiempo de ejecución).
El refinamiento R es independiente de la máquina abstracta (secomporta “correctamente” sin necesidad de la máquina abstracta)
Desarrollo formal de programasEstructuraci on de Maquinas-- p. 20/28
Ejemplo: Estante
Un estante en que se pueden apilar objetos (items)MACHINE Estante(limite)CONSTRAINTS limite ∈ N1
SEES Bool_TY PE
SETS ITEM
VARIABLES pila
INVARIANT pila ∈ seq( ITEM ) ∧ size(pila) ≤ limite
INICIALIZATION pila := ∅
OPERATIONSput(ii) = PRE ii ∈ ITEM ∧ size(pila) < limiteTHEN
pila := pila← iiEND;
ii← pop = PRE pila 6= ∅THEN
pila := front(pila) || ii := last(pila)
END;
bb← esta(ii) = PRE ii ∈ ITEM THEN
bb := bool(ii ∈ ran(pila))ENDDesarrollo formal de programasEstructuraci on de Maquinas-- p. 21/28
Refinamiento
Arreglo representa la secuenciaREFINEMENT EstanteRREFINES EstanteSEES Bool_TY PE
VARIABLES arpila, contador
INVARIANT arpila ∈ 1..limite→ ITEM∧
contador ∈ 0..limite ∧ (1..contador) ⊳ arpila = pila
INICIALIZATION arpila, contador := ∅, 0
OPERATIONSput(ii) = BEGIN contador := contador + 1; arpila(contador) := iiEND;
ii← pop = BEGIN
ii := arpila(contador) ; contador := contador − 1
END;
bb← esta(ii) =
if ii ∈ arpila[1..contador] then bb := true else bb := falseEND
Desarrollo formal de programasEstructuraci on de Maquinas-- p. 22/28
Refinamiento e inclusión
En refinamientos:
1. Pueden incluírse o extenderse máquinas abstractas
2. Pueden promoverse operaciones
3. PERO: la cláusula USES no puede aparecer en un refinamiento: escláusula para la especificación
4. El invariante de encadenamiento liga todo su estado (incluyendo elde máquinas extendidas o incluídas) con el de la abstracción
5. El estado de máquinas incluídas, extendidas o vistas es accesible
6. Pero sólo modificable usando las operaciones pertinentes
Desarrollo formal de programasEstructuraci on de Maquinas-- p. 23/28
ejemplo
Un software para seguimiento de barcos en un muelle
1. Los barcos que llegan entran a cola de espera.
2. Hay muelles que acogen los barcos. Cada muelle puede acoger unsólo barco.
3. Los barcos, llegan, van al muelle indicado, descargan y se van.
4. Operaciones para llegar, atracar, salir
Desarrollo formal de programasEstructuraci on de Maquinas-- p. 24/28
Especificación
MACHINE PuertoSETS BARCO, MUELLE
VARIABLES espera, enMuelle
INVARIANT espera ∈ seq(BARCO)∧
enMuelle ∈MUELLE 6 BARCO ∧ ran(espera) ∩ ran(enMuelle) = ∅
INICIALIZATION espera, enMuelle := [ ], ∅
OPERATIONSllegar(bb) = PRE bb ∈ BARCO ∧ bb 6∈ ran(espera) ∧ bb 6∈ ran(enMuelle)
THEN espera := espera← bbEND;
atracar(mm) =
PREmm ∈MUELLE ∧mm 6∈ dom(enMuelle) ∧ espera 6= [ ]
THEN espera, enMuelle(mm) := tail(espera), first(espera)END;
mm← salir(bb) = PRE bb ∈ BARCO ∧ bb ∈ ran(enMuelle)THEN
enMuelle := enMuelle ⊲ {bb} ||mm := enMuelle−1(bb)END
nn← cuantos = nn := size(enEspera)
ENDDesarrollo formal de programasEstructuraci on de Maquinas-- p. 25/28
Refinamiento
Una cola FIFO para representar los barcos en espera. Proviene de unamáquina que encapsula esa nociónMACHINE FIFO(ELEMENTO)VARIABLES lista
INVARIANT lista ∈ seq( ELEMENTO )
INICIALIZATION lista := [ ]
OPERATIONSagregue(ii) = PRE ii ∈ ELEMENTO THEN
lista := lista← iiEND;
ii← elimine = PRE lista 6= [ ]THEN
lista := tail(lista) || ii := first(lista)
END;
Desarrollo formal de programasEstructuraci on de Maquinas-- p. 26/28
Refinamiento(2)
Una función para representar enMuelle. Proviene de una máquina queencapsula esa nociónMACHINE FUNCION(INDICE, ITEM)VARIABLES fun
INVARIANT fun ∈ INDICE 6→ ITEM
INICIALIZATION fun := ∅
OPERATIONSinserte(i1, i2) = PRE i1 ∈ INDICE ∧ i2 ∈ ITEM THEN
fun(i1) := i2 END;
remover(i1) = PRE i1 ∈ INDICE THEN
fun := {i1} ⊳ fun
END;
i2 ← consulta(i1) = PRE i1 ∈ dom(fun)THEN i2 := fun(i1) END
END
Desarrollo formal de programasEstructuraci on de Maquinas-- p. 27/28
Refinamiento(3)
REFINEMENT PuertoRREFINES Puerto
INCLUDES Fifo(BARCO), Funcion(BARCO, MUELLE)
VARIABLES num
INVARIANT espera = lista ∧ enMuelle−1 = fun ∧ num = size(espera)
INICIALIZATION num := 0
OPERATIONSllegar(bb) = BEGIN agregue(bb); num := num + 1END;
atracar(mm) =
BEGINVAR barco IN barco← elimine; inserte(barco, mm)END;
num := num− 1
END;
mm← salir(bb) = BEGINmm← consulta(bb); remover(bb)END;
nn← cuantos = nn := num
END
Desarrollo formal de programasEstructuraci on de Maquinas-- p. 28/28