Metodo BDesarrollo de caso:
Especificacion de un cruceCamilo Rueda
Universidad Javeriana-Cali
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.1/35
El Caso:
Controlar vehiculos en un cruce. La especificación debepermitir:
Varias topologías
Distintos medios de control
Distintas secuencias de señales
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.2/35
Requerimientos del cruce
Generales
El cruce se compone de un número de vías que se cruzan
El cruce puede estar regulado
Disponibilidad
Al menos una vía puede siempre cruzar
Seguridad
No más de una vía puede cruzar en un momento dado
Antes de cambiar de una vía a otra, el cruce debe despejarse de vehículos
Justicia
Cada vía puede cruzar por turnos
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.3/35
Requerimientos del cruce
Generales
El cruce se compone de un número de vías que se cruzan
El cruce puede estar regulado
Disponibilidad
Al menos una vía puede siempre cruzar
Seguridad
No más de una vía puede cruzar en un momento dado
Antes de cambiar de una vía a otra, el cruce debe despejarse de vehículos
Justicia
Cada vía puede cruzar por turnos
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.3/35
Requerimientos del cruce
Generales
El cruce se compone de un número de vías que se cruzan
El cruce puede estar regulado
Disponibilidad
Al menos una vía puede siempre cruzar
Seguridad
No más de una vía puede cruzar en un momento dado
Antes de cambiar de una vía a otra, el cruce debe despejarse de vehículos
Justicia
Cada vía puede cruzar por turnos
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.3/35
Requerimientos del cruce
Generales
El cruce se compone de un número de vías que se cruzan
El cruce puede estar regulado
Disponibilidad
Al menos una vía puede siempre cruzar
Seguridad
No más de una vía puede cruzar en un momento dado
Antes de cambiar de una vía a otra, el cruce debe despejarse de vehículos
Justicia
Cada vía puede cruzar por turnos
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.3/35
Requerimientos del semáforo
Tres luces de tres colores diferentes, on/off oparpadeo.
El estado del semáaforo es la conjunción de losestados de las luces
No todas las conjunciones posibles se usan
La operación del semáforo es un ciclo de estados
La semántica es interpretación de cada estado(dependiente del sitio en el ciclo)
El semáforo inicia en estado "no regulado"
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.4/35
Arquitectura
A.color_semaf2
CRUCE3
CRUCE2
indeterminismo
CRUCE
Estado_via
MONITOR_SEMAF_COL
MONITOR_SEMAF2
MONITOR_SEMAF
Estado semaf
A.color_semaf
B,color2
B.color_semaf
B.rr.luz
B.aa.luz
B.vv.luz
A.rr.luz
A.aa.luz
A.vv.luz
Constantes
estados deautomata
Refinam. datosciclo de colores
Implementacion
implementacion
colores paravia A
Implementacion
colores del semafpara via B
Estado de luces
luz verde A
luz amarilla A
luz roja A
luz verde B
luz amarilla B
luz roja B
implementacion
menos
Anillo dederechos de cruce
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.5/35
Máquinas: CRUCE
Tres nociones:
Derecho a cruzar: En cada vía, modela si susvehículos tienen derecho a cruzar. Dos constantes:cruce, pare.
Fase de transición: Desocupar el cruce. Constantes:fin_cruce, fin_pare.
Ciclos de estados de vía: modelados por la función,siguiente =
cruce→ fin_cruce→ pare→ fin_pare→ cruce
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.6/35
Máquinas: CRUCE (cont)
Suponemos dos vías. Como los estados son opuestos (o catástrofe!), el estado de
la segunda vía se deduce del de la primera.
Esto lo modela la función (constante):
estado_opuesto =
{cruce 7→ pare, pare 7→ cruce,
fin_cruce 7→ fin_pare, fin_pare 7→ fin_cruce, }
El estado de la vía B se deduce de A así:
estadoV iaA = estado_opuesto(estadoV iaB)
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.7/35
Máquina ESTADO_VIA
Encapsula las constantes y conjuntos usadas porCRUCE y MONITOR_SEMAF.
Define el conjunto de derechos de cruce.
El estado off indica una vía no regulada.
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.8/35
Máquina ESTADO_VIA: Definición
MACHINE ESTADO_V IA
SETS
ESTADO = {cruce, fin_cruce, pare, fin_pare, off}
CONSTANTS
estado_opuesto
PROPERTIES
estado_opuesto ∈ ESTADO � ESTADO
estado_opuesto = {cruce 7→ pare, pare 7→ cruce,
fin_cruce 7→ fin_pare, fin_pare 7→ fin_cruce, off 7→ off}
ENDMetodo BDesarrollo de caso: Especificacion de un cruce -- p.9/35
Máquina CRUCE: Definición (1)
MACHINE CRUCE
IINCLUDES Estado_via
ABSTRACT_CONSTANTS siguiente
SETS CESTADO = {regulado, no_regulado}
PROPERTIES
siguiente ∈ ESTADO � ESTADO∧
siguiente =
{cruce 7→ fin_cruce, fin_cruce 7→ pare,
pare 7→ fin_pare, fin_pare 7→ cruce, off 7→ off}
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.10/35
Máquina CRUCE: Definición (1)
MACHINE CRUCE
IINCLUDES Estado_via
ABSTRACT_CONSTANTS siguiente
SETS CESTADO = {regulado, no_regulado}
PROPERTIES
siguiente ∈ ESTADO � ESTADO∧
siguiente = {cruce 7→ fin_cruce, fin_cruce 7→ pare,
pare 7→ fin_pare, fin_pare 7→ cruce, off 7→ off}
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.10/35
Máquina CRUCE: Definición (1)
MACHINE CRUCE
IINCLUDES Estado_via
ABSTRACT_CONSTANTS siguiente
SETS CESTADO = {regulado, no_regulado}
PROPERTIES
siguiente ∈ ESTADO � ESTADO∧
siguiente = {cruce 7→ fin_cruce, fin_cruce 7→ pare,
pare 7→ fin_pare, fin_pare 7→ cruce, off 7→ off}
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.10/35
Máquina CRUCE (2)
VARIABLES
estado_global, estadoV iaA, estadoV iaB
INVARIANT
estado_global ∈ CESTADO∧
estadoV iaA ∈ ESTADO ∧ estadoV iaB ∈ ESTADO∧
estadoV iaB = estado_opuesto(estadoV iaA)∧
(estado_global = no_regulado)⇔ (estadoV iaA = off)
INITIALISATION
estado_global, estadoV iaA, estadoV iaB := no_regulado, off, off
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.11/35
Máquina CRUCE (2)
VARIABLES
estado_global, estadoV iaA, estadoV iaB
INVARIANT
estado_global ∈ CESTADO∧
estadoV iaA ∈ ESTADO ∧ estadoV iaB ∈ ESTADO∧
estadoV iaB = estado_opuesto(estadoV iaA)∧
(estado_global = no_regulado)⇔ (estadoV iaA = off)
INITIALISATION
estado_global, estadoV iaA, estadoV iaB := no_regulado, off, off
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.11/35
Máquina CRUCE (2)
VARIABLES
estado_global, estadoV iaA, estadoV iaB
INVARIANT
estado_global ∈ CESTADO∧
estadoV iaA ∈ ESTADO ∧ estadoV iaB ∈ ESTADO∧
estadoV iaB = estado_opuesto(estadoV iaA)∧
(estado_global = no_regulado)⇔ (estadoV iaA = off)
INITIALISATION
estado_global, estadoV iaA, estadoV iaB := no_regulado, off, off
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.11/35
Máquina CRUCE (2)
VARIABLES
estado_global, estadoV iaA, estadoV iaB
INVARIANT
estado_global ∈ CESTADO∧
estadoV iaA ∈ ESTADO ∧ estadoV iaB ∈ ESTADO∧
estadoV iaB = estado_opuesto(estadoV iaA)∧
(estado_global = no_regulado)⇔ (estadoV iaA = off)
INITIALISATION
estado_global, estadoV iaA, estadoV iaB := no_regulado, off, off
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.11/35
Máquina CRUCE (3)
OPERATIONS
arranque =
PRE estado_global = no_reguladoTHEN
estado_global := regulado||
ANY aaWHERE aa ∈ ESTADO − {off}
THEN estadoV iaA, estadoV iaB := aa, estado_opuesto(aa)
END
END
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.12/35
Máquina CRUCE (4)
cambio_estado_via =
PRE
estado_global = regulado
THEN
estadoV iaA := siguiente(estadoV iaA) ||
estadoV iaB := siguiente(estadoV iaB)
END
END
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.13/35
Refinamiento de CRUCE
REFINEMENTCRUCE2
REFINESCRUCE
INCLUDESESTADO_V IA
ABSTRACT_CONSTANTS
siguiente
VARIABLES
estadoV iaA2, estadoV iaB2
INVARIANT
estadoV iaA2 = estadoV iaA ∧ estadoV iaB2 = estadoV iaB
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.14/35
Refinamiento CRUCE (2)
INITIALISATION
estadoV iaA2, estadoV iaB2 := off, off
OPERATIONS
arranque =
BEGIN estadoV iaA2, estadoV iaB2 := cruce, pareEND
cambio_estado_via = BEGIN
estadoV iaA2 := siguiente(estadoV iaA2) ||
estadoV iaB2 := siguiente(estadoV iaB2)
END
END
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.15/35
Monitor de Semáforo
Autómata de 5 estados (función prox). s0 = no_regulado.
prox = {(s0, s0), (s1, s2), (s2, s3), (s3, s4), (s4s1)}
Convención: Interpretación de los estados:
{(off, s0), (cruce, s1), (fin_cruce, s2), (pare, s3), (fin_pare, s4)}
cruce via Colombia Francia
off s0 parpadeoAm parpadeoAm
cruce s1 verde verde
fin_cruce s2 am am
pare s3 rojo rojo
fin_pare s4 am rojo
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.16/35
Monitor semáforo (2)
El ciclo de estados del cruce se implementa por lasfunciones convencion y prox:
siguiente = convencion; prox; convencion−1
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.17/35
Máquina MONITOR_ SEMAF (1)
MACHINE MONITOR_SEMAF
IINCLUDES Estado_via
CONSTANTS convencion, prox
SETS
ESTADO_SEM = {s0.s1, s2, s3, s4}
PROPERTIES
convencion ∈ ESTADO � ESTADO_SEM∧
prox ∈ ESTADO_SEM � ESTADO_SEM∧
convencion = {(off, s0), (cruce, s1), (fin_cruce, s2), (pare, s3), (fin_pare, s4)}∧
prox = {(s0, s0), (s1, s2), (s2, s3), (s3, s4), (s4s1)}
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.18/35
Máquina MONITOR_ SEMAF (2)
VARIABLES
semA_estado, semB_estado
INVARIANT
semA_estado ∈ ESTADO_SEM ∧ semB_estado ∈ ESTADO_SEM∧
semB_estado =
convencion(estado_opuesto(convencion−1(semA_estado)))
INITIALISATION
semA_estado, semB_estado := convencion(off), convencion(off)
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.19/35
MONITOR_ SEMAF (3)
OPERATIONS
arranque(es) =
PRE es ∈ ESTADO − {off} ∧ semA_estado = convencion(off)
THEN
semA_estado := convencion(es) ||
semB_estado := convencion(estado_opuesto(es))
END
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.20/35
MONITOR_ SEMAF (4)
cambio_sem =
PRE¬(semA_estado = convencion(off))
THEN
semA_estado := prox(semA_estado) ||
semB_estado := prox(semB_estado)
END
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.21/35
Implementación de CRUCE
IMPLEMENTATIONCRUCE3
REFINESCRUCE2
IMPORTSms.Monitor_semaf
PROPERTIES
siguiente = (convencion; (prox; convencion−1))
INVARIANT
ms.semA_estado = convencion(estadoV iaA2)
OPERATIONS
arranque = BEGIN ms.arranque(cruce) END
cambio_estado_via = BEGIN ms.cambio_sem END
END
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.22/35
Refinamiento de Monitor_ Semaf
REFINEMENTMONITOR_SEMAF2
REFINESMONITOR_SEMAF
INCLUDESESTADO_V IA
CONSTANTS color
SETS
COLOR = {verde, am, rojo, parpadeoAm, negro, rojoAm}
PROPERTIES
color ∈ ESTADO_SEM → COLOR
VARIABLES
semA_estado2, semB_estado2, colorA2, colorB2
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.23/35
Refinamiento de Monitor_ Semaf (2)
INVARIANT
semA_estado2 = semA_estado ∧ colorA2 ∈ COLOR∧
colorA2 = color(semA_estado) ∧ semB_estado2 = semB_estado∧
colorB2 ∈ COLOR ∧ colorB2 = color(semB_estado)
INITIALISATION
colorA2, colorB2 := color(convencion(off)), color(convencion(off)) ||
semA_estado2, semB_estado2 := convencion(off), convencion(off)
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.24/35
Refinamiento de Monitor_ Semaf (2)
INVARIANT
semA_estado2 = semA_estado ∧ colorA2 ∈ COLOR∧
colorA2 = color(semA_estado) ∧ semB_estado2 = semB_estado∧
colorB2 ∈ COLOR ∧ colorB2 = color(semB_estado)
INITIALISATION
colorA2, colorB2 := color(convencion(off)), color(convencion(off)) ||
semA_estado2, semB_estado2 := convencion(off), convencion(off)
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.24/35
Refinamiento de Monitor_ Semaf (2)
INVARIANT
semA_estado2 = semA_estado ∧ colorA2 ∈ COLOR∧
colorA2 = color(semA_estado) ∧ semB_estado2 = semB_estado∧
colorB2 ∈ COLOR ∧ colorB2 = color(semB_estado)
INITIALISATION
colorA2, colorB2 := color(convencion(off)), color(convencion(off)) ||
semA_estado2, semB_estado2 := convencion(off), convencion(off)
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.24/35
Refinamiento de Monitor_ Semaf (3)
OPERATIONS
arranque(es) = BEGIN
colorA2, semA_estado2 := color(convencion(es)), convencion(es) ||
colorB2 := color(convencion(estado_opuesto(es))) ||
semB_estado2 := convencion(estado_opuesto(es))
END
cambio_sem = BEGIN
colorA2, semA_estado2 := color(prox(semA_estado2)), prox(semA_estado2) ||
colorB2, semB_estado2 := color(prox(semB_estado2)), prox(semB_estado2)
END
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.25/35
Refinamiento de Monitor_ Semaf (3)
OPERATIONS
arranque(es) = BEGIN
colorA2, semA_estado2 := color(convencion(es)), convencion(es) ||
colorB2 := color(convencion(estado_opuesto(es))) ||
semB_estado2 := convencion(estado_opuesto(es))
END
cambio_sem = BEGIN
colorA2, semA_estado2 := color(prox(semA_estado2)), prox(semA_estado2) ||
colorB2, semB_estado2 := color(prox(semB_estado2)), prox(semB_estado2)
END
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.25/35
Refinamiento de Monitor_ Semaf (3)
OPERATIONS
arranque(es) = BEGIN
colorA2, semA_estado2 := color(convencion(es)), convencion(es) ||
colorB2 := color(convencion(estado_opuesto(es))) ||
semB_estado2 := convencion(estado_opuesto(es))
END
cambio_sem = BEGIN
colorA2, semA_estado2 := color(prox(semA_estado2)), prox(semA_estado2) ||
colorB2, semB_estado2 := color(prox(semB_estado2)), prox(semB_estado2)
END
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.25/35
Refinamiento de Monitor_ Semaf (3)
OPERATIONS
arranque(es) = BEGIN
colorA2, semA_estado2 := color(convencion(es)), convencion(es) ||
colorB2 := color(convencion(estado_opuesto(es))) ||
semB_estado2 := convencion(estado_opuesto(es))
END
cambio_sem = BEGIN
colorA2, semA_estado2 := color(prox(semA_estado2)), prox(semA_estado2) ||
colorB2, semB_estado2 := color(prox(semB_estado2)), prox(semB_estado2)
END
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.25/35
Refinamiento de Monitor_ Semaf (3)
OPERATIONS
arranque(es) = BEGIN
colorA2, semA_estado2 := color(convencion(es)), convencion(es) ||
colorB2 := color(convencion(estado_opuesto(es))) ||
semB_estado2 := convencion(estado_opuesto(es))
END
cambio_sem = BEGIN
colorA2, semA_estado2 := color(prox(semA_estado2)), prox(semA_estado2) ||
colorB2, semB_estado2 := color(prox(semB_estado2)), prox(semB_estado2)
END
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.25/35
Refinamiento de Monitor_ Semaf (3)
OPERATIONS
arranque(es) = BEGIN
colorA2, semA_estado2 := color(convencion(es)), convencion(es) ||
colorB2 := color(convencion(estado_opuesto(es))) ||
semB_estado2 := convencion(estado_opuesto(es))
END
cambio_sem = BEGIN
colorA2, semA_estado2 := color(prox(semA_estado2)), prox(semA_estado2) ||
colorB2, semB_estado2 := color(prox(semB_estado2)), prox(semB_estado2)
END
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.25/35
Máquina Estado_ sem
Define constantes básicas para el controlador
MACHINEESTADO_SEM
SETS
ESTADO_SEM = {s0, s1, s2, s3, s4}
VARIABLES estado
INVARIANT estado ∈ ESTADO_SEM
INITIALISATION estado := s0
OPERATIONS
set(val) = PRE val ∈ ESTADO_SEM THEN estado := val END
res← valor = BEGIN res := estadoEND
END
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.26/35
Máquina Color_ sem
Define colores para las señales.
MACHINECOLOR_SEM
SETS
COLOR = {verde, am, rojo, parpadeoAm, negro, rojo_am}
VARIABLES color
INVARIANT color ∈ COLOR
INITIALISATION color := negro
OPERATIONS
set(val) = PRE val ∈ COLOR THEN color := val END
END
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.27/35
Implementación del semáforo colom-biano
Cuando no llueve, el semáforo en Colombia tiene lasecuenciaverde→ amarillo→ rojo→ amarillo→ ...La implementación de Monitor_ sem importa:
Dos instancias de Color_ sem, una para cada vía.
Una instancia de Estado_ sem para representar elestado.
La cláusula VALUES da valores específicos en la imple-
mentación a las constantes.
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.28/35
Máquina Monitor_ sem_ col
MACHINEMONITOR_SEM_COL
REFINES MONITOR_SEM2
INCLUDES ESTADO_V IA
IMPORTS cA.Color_sem, cB.Color_sem, es.Estado_sem
VALUES
convencion =
{cruce 7→ s1, f in_cruce 7→ s2, pare 7→ s3, f in_pare 7→ s4, off 7→ s0}
prox = {s0 7→ s0, s1 7→ s2, s2 7→ s3, s3 7→ s4, s4 7→ s1}
color =
{s1 7→ verde, s2 7→ am, s3 7→ rojo, s4 7→ am, s0 7→ parpadeoAm}
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.29/35
Máquina Monitor_ sem_ col (2)
INVARIANT
colorA2 = cA.color ∧ semA_estado = es.estado∧
colorB2 = cB.color∧
semB_estado =
convencion(estado_opuesto(convencion−1(es.estado)))
INITIALISATION
cA.set(color(convencion(off)));
cB.set(color(convencion(off)));
es.set(convencion(off))
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.30/35
Máquina Monitor_ sem_ col (3)
OPERATIONS
arranque(est) = BEGIN
cA.set(color(convencion(est))); es.set(convencion(est));
cB.set(color(convencion(estado_opuesto(est))));
END
cambio_sem = BEGINVAR esestado IN
esestado←− es.valor; es.set(prox(esestado));
cB.set(color(next(convencion
(estado_opuesto(convencion−1(esestado))))))
END
END
END
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.31/35
Máquina LUZ
Especifica una luz de un semáforo.
MACHINELUZ
SETS
ESTADO_LUZ = {lon, loff, lparpadeo}
VARIABLES luz
INVARIANT luz ∈ ESTADO_LUZ
INITIALISATION luz := loff
OPERATIONS
set(es) = PRE es ∈ ESTADO_LUZ THEN luz := esEND
END
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.32/35
Implementación de Color_ sem
MACHINECOLOR_SEM2
REFINES COLOR_SEM
IMPORTS vv.Luz, aa.Luz, rr.Luz
INVARIANT
((color = verde)⇒ ((vv.luz = lon) ∧ (aa.luz = loff) ∧ (rr.luz = loff)))∧
((color = am)⇒ ((vv.luz = loff) ∧ (aa.luz = lon) ∧ (rr.luz = loff)))∧
((color = rojo)⇒ ((vv.luz = loff) ∧ (aa.luz = loff) ∧ (rr.luz = lon)))∧
((color = rojo_am)⇒ ((vv.luz = loff) ∧ (aa.luz = lon) ∧ (rr.luz = lon)))∧
((color = parpadeoAm)⇒
((vv.luz = loff) ∧ (aa.luz = parpadeo) ∧ (rr.luz = loff)))
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.33/35
Implementación de Color_ sem (2)
OPERATIONS
set(val) = PRE val ∈ COLOR THEN
CASE val OF
EITHER verde THEN rr.set(loff); aa.set(loff); vv.set(lon)
OR am THEN rr.set(loff); aa.set(lon); vv.set(loff)
OR rojo THEN rr.set(lon); aa.set(loff); vv.set(loff)
OR parpadeoAm THEN rr.set(loff); aa.set(parpadeo); vv.set(loff)
OR negro THEN rr.set(loff); aa.set(loff); vv.set(loff)
OR rojo_am THEN rr.set(lon); aa.set(lon); vv.set(loff)
END
END
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.34/35
Ejercicios
Qué habría que cambiar para implementar elsemáforo de Inglaterra, que de rojo pasa a rojo_amarillo y no regulado es negro?
Qué habría que cambiar para implementar un crucede 3 vías?
Pruebe que CRUCE2 es refinamiento de CRUCE
puebe que MONITOR_ SEM2 es refinamiento deMONITOR_ SEM
Metodo BDesarrollo de caso: Especificacion de un cruce -- p.35/35