Método B Desarrollo de caso: Especificación de un cruce Camilo Rueda Universidad Javeriana-Cali Método BDesarrollo de caso: Especificación de un cruce -- p.1/35 El Caso: Controlar vehiculos en un cruce. La especificación debe permitir: Varias topologías Distintos medios de control Distintas secuencias de señales Método BDesarrollo de caso: Especificación 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 Método BDesarrollo de caso: Especificación 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 Método BDesarrollo de caso: Especificación 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 Método BDesarrollo de caso: Especificación 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 Método BDesarrollo de caso: Especificación de un cruce -- p.3/35 Requerimientos del semáforo Tres luces de tres colores diferentes, on/off o parpadeo. El estado del semáaforo es la conjunción de los estados 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" Método BDesarrollo de caso: Especificación de un cruce -- p.4/35 Arquitectura A.vv.luz luz verde A A.color_semaf2 implementacion MONITOR_SEMAF_COL CRUCE3 Implementacion implementacion MONITOR_SEMAF2 Refinam. datos ciclo de colores CRUCE2 menos indeterminismo MONITOR_SEMAF CRUCE estados de automata Anillo de derechos de cruce A.color_semaf colores para via A B,color2 A.aa.luz luz amarilla A A.rr.luz luz roja A B.vv.luz Implementacion luz verde B B.color_semaf colores del semaf para via B B.aa.luz luz amarilla B B.rr.luz Estado_via Constantes Estado semaf luz roja B Estado de luces Método BDesarrollo de caso: Especificación de un cruce -- p.5/35 Máquinas: CRUCE Tres nociones: Derecho a cruzar: En cada vía, modela si sus vehículos tienen derecho a cruzar. Dos constantes: cruce, pare. Fase de transición: Desocupar el cruce. Constantes: f in_cruce, f in_pare. Ciclos de estados de vía: modelados por la función, siguiente = cruce → f in_cruce → pare → f in_pare → cruce Método BDesarrollo de caso: Especificación 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, f in_cruce 7→ f in_pare, f in_pare 7→ f in_cruce, } El estado de la vía B se deduce de A así: estadoV iaA = estado_opuesto(estadoV iaB) Método BDesarrollo de caso: Especificación de un cruce -- p.7/35 Máquina ESTADO_VIA Encapsula las constantes y conjuntos usadas por CRUCE y MONITOR_SEMAF. Define el conjunto de derechos de cruce. El estado off indica una vía no regulada. Método BDesarrollo de caso: Especificación de un cruce -- p.8/35 Máquina ESTADO_VIA: Definición MACHINE EST ADO_V IA SETS EST ADO = {cruce, f in_cruce, pare, f in_pare, of f } CONSTANTS estado_opuesto PROPERTIES estado_opuesto ∈ EST ADO EST ADO estado_opuesto = {cruce 7→ pare, pare 7→ cruce, f in_cruce 7→ f in_pare, f in_pare 7→ f in_cruce, of f 7→ of f } EN D Método BDesarrollo de caso: Especificación de un cruce -- p.9/35 Máquina CRUCE: Definición (1) MACHINE CRU CE IINCLUDES Estado_via ABSTRACT_CONSTANTS siguiente SETS CEST ADO = {regulado, no_regulado} PROPERTIES siguiente ∈ EST ADO EST ADO∧ siguiente = Método BDesarrollo de caso: Especificación de un cruce -- p.10/35 Máquina CRUCE: Definición (1) MACHINE CRU CE IINCLUDES Estado_via ABSTRACT_CONSTANTS siguiente SETS CEST ADO = {regulado, no_regulado} PROPERTIES siguiente ∈ EST ADO EST ADO∧ siguiente = {cruce 7→ f in_cruce, f in_cruce 7→ pare, Método BDesarrollo de caso: Especificación de un cruce -- p.10/35 Máquina CRUCE: Definición (1) MACHINE CRU CE IINCLUDES Estado_via ABSTRACT_CONSTANTS siguiente SETS CEST ADO = {regulado, no_regulado} PROPERTIES siguiente ∈ EST ADO EST ADO∧ siguiente = {cruce 7→ f in_cruce, f in_cruce 7→ pare, pare 7→ f in_pare, f in_pare 7→ cruce, of f 7→ of f } Método BDesarrollo de caso: Especificación de un cruce -- p.10/35 Máquina CRUCE (2) VARIABLES estado_global, estadoV iaA, estadoV iaB INVARIANT estado_global ∈ CEST ADO∧ estadoV iaA ∈ EST ADO ∧ estadoV iaB ∈ EST ADO∧ INITIALISATION Método BDesarrollo de caso: Especificación de un cruce -- p.11/35 Máquina CRUCE (2) VARIABLES estado_global, estadoV iaA, estadoV iaB INVARIANT estado_global ∈ CEST ADO∧ estadoV iaA ∈ EST ADO ∧ estadoV iaB ∈ EST ADO∧ estadoV iaB = estado_opuesto(estadoV iaA)∧ INITIALISATION Método BDesarrollo de caso: Especificación de un cruce -- p.11/35 Máquina CRUCE (2) VARIABLES estado_global, estadoV iaA, estadoV iaB INVARIANT estado_global ∈ CEST ADO∧ estadoV iaA ∈ EST ADO ∧ estadoV iaB ∈ EST ADO∧ estadoV iaB = estado_opuesto(estadoV iaA)∧ (estado_global = no_regulado) ⇔ (estadoV iaA = of f ) INITIALISATION Método BDesarrollo de caso: Especificación de un cruce -- p.11/35 Máquina CRUCE (2) VARIABLES estado_global, estadoV iaA, estadoV iaB INVARIANT estado_global ∈ CEST ADO∧ estadoV iaA ∈ EST ADO ∧ estadoV iaB ∈ EST ADO∧ estadoV iaB = estado_opuesto(estadoV iaA)∧ (estado_global = no_regulado) ⇔ (estadoV iaA = of f ) INITIALISATION estado_global, estadoV iaA, estadoV iaB := no_regulado, of f, of f Método BDesarrollo de caso: Especificación de un cruce -- p.11/35 Máquina CRUCE (3) OPERATIONS arranque = PRE estado_global = no_regulado THEN estado_global := regulado|| ANY aa WHERE aa ∈ EST ADO − {of f } THEN estadoV iaA, estadoV iaB := aa, estado_opuesto(aa) END END Método BDesarrollo de caso: Especificación 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 Método BDesarrollo de caso: Especificación de un cruce -- p.13/35 Refinamiento de CRUCE REFINEMENT CRU CE2 REFINES CRU CE INCLUDES EST ADO_V IA ABSTRACT_CONSTANTS siguiente VARIABLES estadoV iaA2, estadoV iaB2 INVARIANT estadoV iaA2 = estadoV iaA ∧ estadoV iaB2 = estadoV iaB Método BDesarrollo de caso: Especificación de un cruce -- p.14/35 Refinamiento CRUCE (2) INITIALISATION estadoV iaA2, estadoV iaB2 := of f, of f OPERATIONS arranque = BEGIN estadoV iaA2, estadoV iaB2 := cruce, pare END cambio_estado_via = BEGIN estadoV iaA2 := siguiente(estadoV iaA2) || estadoV iaB2 := siguiente(estadoV iaB2) END END Método BDesarrollo de caso: Especificación 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 ), (s4 s1 )} Convención: Interpretación de los estados: {(of f, s0 ), (cruce, s1), (f in_cruce, s2 ), (pare, s3 ), (f in_pare, s4 )} cruce via Colombia F rancia of f s0 parpadeoAm parpadeoAm cruce s1 verde verde f in_cruce s2 am am pare s3 rojo rojo f in_pare s4 am rojo Método BDesarrollo de caso: Especificación de un cruce -- p.16/35 Monitor semáforo (2) El ciclo de estados del cruce se implementa por las funciones convencion y prox: siguiente = convencion; prox; convencion−1 Método BDesarrollo de caso: Especificación de un cruce -- p.17/35 Máquina MONITOR_ SEMAF (1) MACHINE M ON IT OR_SEM AF IINCLUDES Estado_via CONSTANTS convencion, prox SETS EST ADO_SEM = {s0 .s1 , s2 , s3 , s4 } PROPERTIES convencion ∈ EST ADO EST ADO_SEM ∧ prox ∈ EST ADO_SEM EST ADO_SEM ∧ convencion = {(of f, s0 ), (cruce, s1), (f in_cruce, s2 ), (pare, s3 ), (f in_pare, s4 )}∧ prox = {(s0 , s0 ), (s1 , s2 ), (s2 , s3 ), (s3 , s4 ), (s4 s1 )} Método BDesarrollo de caso: Especificación de un cruce -- p.18/35 Máquina MONITOR_ SEMAF (2) VARIABLES semA_estado, semB_estado INVARIANT semA_estado ∈ EST ADO_SEM ∧ semB_estado ∈ EST ADO_SEM ∧ semB_estado = convencion(estado_opuesto(convencion−1 (semA_estado))) INITIALISATION semA_estado, semB_estado := convencion(of f ), convencion(of f ) Método BDesarrollo de caso: Especificación de un cruce -- p.19/35 MONITOR_ SEMAF (3) OPERATIONS arranque(es) = PRE es ∈ EST ADO − {of f } ∧ semA_estado = convencion(of f ) THEN semA_estado := convencion(es) || semB_estado := convencion(estado_opuesto(es)) END Método BDesarrollo de caso: Especificación de un cruce -- p.20/35 MONITOR_ SEMAF (4) cambio_sem = PRE ¬(semA_estado = convencion(of f )) THEN semA_estado := prox(semA_estado) || semB_estado := prox(semB_estado) END Método BDesarrollo de caso: Especificación de un cruce -- p.21/35 Implementación de CRUCE IMPLEMENTATION CRU CE3 REFINES CRU CE2 IMPORTS ms.M onitor_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 Método BDesarrollo de caso: Especificación de un cruce -- p.22/35 Refinamiento de Monitor_ Semaf REFINEMENT M ON IT OR_SEM AF 2 REFINES M ON IT OR_SEM AF INCLUDES EST ADO_V IA CONSTANTS color SETS COLOR = {verde, am, rojo, parpadeoAm, negro, rojoAm} PROPERTIES color ∈ EST ADO_SEM → COLOR VARIABLES semA_estado2, semB_estado2, colorA2, colorB2 Método BDesarrollo de caso: Especificación 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 Método BDesarrollo de caso: Especificación 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(of f )), color(convencion(of f )) || Método BDesarrollo de caso: Especificación 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(of f )), color(convencion(of f )) || semA_estado2, semB_estado2 := convencion(of f ), convencion(of f ) Método BDesarrollo de caso: Especificación de un cruce -- p.24/35 Refinamiento de Monitor_ Semaf (3) OPERATIONS arranque(es) = BEGIN END cambio_sem = BEGIN END Método BDesarrollo de caso: Especificación de un cruce -- p.25/35 Refinamiento de Monitor_ Semaf (3) OPERATIONS arranque(es) = BEGIN colorA2, semA_estado2 := color(convencion(es)), convencion(es) || END cambio_sem = BEGIN END Método BDesarrollo de caso: Especificación 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))) || END cambio_sem = BEGIN END Método BDesarrollo de caso: Especificación 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 END Método BDesarrollo de caso: Especificación 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) || END Método BDesarrollo de caso: Especificación 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 Método BDesarrollo de caso: Especificación de un cruce -- p.25/35 Máquina Estado_ sem Define constantes básicas para el controlador MACHINE EST ADO_SEM SETS EST ADO_SEM = {s0 , s1 , s2 , s3 , s4 } VARIABLES estado INVARIANT estado ∈ EST ADO_SEM INITIALISATION estado := s0 OPERATIONS set(val) = PRE val ∈ EST ADO_SEM THEN estado := val END res ← valor = BEGIN res := estado END END Método BDesarrollo de caso: Especificación de un cruce -- p.26/35 Máquina Color_ sem Define colores para las señales. MACHINE COLOR_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 Método BDesarrollo de caso: Especificación de un cruce -- p.27/35 Implementación del semáforo colombiano Cuando no llueve, el semáforo en Colombia tiene la secuencia verde → 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 el estado. La cláusula VALUES da valores específicos en la implementación a las constantes. Método BDesarrollo de caso: Especificación de un cruce -- p.28/35 Máquina Monitor_ sem_ col MACHINE M ON IT OR_SEM _COL REFINES M ON IT OR_SEM 2 INCLUDES EST ADO_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 , of f 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} Método BDesarrollo de caso: Especificación 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(of f ))); cB.set(color(convencion(of f ))); es.set(convencion(of f )) Método BDesarrollo de caso: Especificación 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 = BEGIN VAR esestado IN esestado ←− es.valor; es.set(prox(esestado)); cB.set(color(next(convencion (estado_opuesto(convencion−1 (esestado)))))) END END END Método BDesarrollo de caso: Especificación de un cruce -- p.31/35 Máquina LUZ Especifica una luz de un semáforo. MACHINE LU Z SETS EST ADO_LU Z = {lon, lof f, lparpadeo} VARIABLES luz INVARIANT luz ∈ EST ADO_LU Z INITIALISATION luz := lof f OPERATIONS set(es) = PRE es ∈ EST ADO_LU Z THEN luz := es END END Método BDesarrollo de caso: Especificación de un cruce -- p.32/35 Implementación de Color_ sem MACHINE COLOR_SEM 2 REFINES COLOR_SEM IMPORTS vv.Luz, aa.Luz, rr.Luz INVARIANT ((color = verde) ⇒ ((vv.luz = lon) ∧ (aa.luz = lof f ) ∧ (rr.luz = lof f )))∧ ((color = am) ⇒ ((vv.luz = lof f ) ∧ (aa.luz = lon) ∧ (rr.luz = lof f )))∧ ((color = rojo) ⇒ ((vv.luz = lof f ) ∧ (aa.luz = lof f ) ∧ (rr.luz = lon)))∧ ((color = rojo_am) ⇒ ((vv.luz = lof f ) ∧ (aa.luz = lon) ∧ (rr.luz = lon)))∧ ((color = parpadeoAm) ⇒ ((vv.luz = lof f ) ∧ (aa.luz = parpadeo) ∧ (rr.luz = lof f ))) Método BDesarrollo de caso: Especificación 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(lof f ); aa.set(lof f ); vv.set(lon) OR am THEN rr.set(lof f ); aa.set(lon); vv.set(lof f ) OR rojo THEN rr.set(lon); aa.set(lof f ); vv.set(lof f ) OR parpadeoAm THEN rr.set(lof f ); aa.set(parpadeo); vv.set(lof f ) OR negro THEN rr.set(lof f ); aa.set(lof f ); vv.set(lof f ) OR rojo_am THEN rr.set(lon); aa.set(lon); vv.set(lof f ) END END Método BDesarrollo de caso: Especificación de un cruce -- p.34/35 Ejercicios Qué habría que cambiar para implementar el semáforo de Inglaterra, que de rojo pasa a rojo_ amarillo y no regulado es negro? Qué habría que cambiar para implementar un cruce de 3 vías? Pruebe que CRUCE2 es refinamiento de CRUCE puebe que MONITOR_ SEM2 es refinamiento de MONITOR_ SEM Método BDesarrollo de caso: Especificación de un cruce -- p.35/35