TAD Ascensor Automático géneros ascensor exporta observadores, generadores usa piso, nat, bool igualdad observacional (∀a, a0 : ascensor) a =obs pisoActual(a) = pisoActual(a0 ) ∧ a0 ⇐⇒ personas(a, P B) = personas(a0 , P B) ∧ personas(a, 1er) = personas(a0 , 1er) observadores básicos pisoActual : ascensor −→ piso #personas : ascensor × piso −→ nat generadores nuevoAscensor : −→ ascensor llegaPersona : ascensor × piso −→ ascensor ... axiomas pisoActual(nuevoAscensor) ≡ PB pisoActual(llegaPersona(a, p)) ≡ if p 6= pisoActual(a) then pisoActual(a) else if #personas(a, pisoActual(a)) < 2 then pisoActual(a) else if #personas(a, otroPiso(pisoActual(a)) < 3 then otroPiso(pisoActual(a)) else pisoActual(a) fi fi fi #personas(nuevoAscensor, p) ≡ 0 #personas(llegaPersona(a, p), p0 )) ≡ if p 6= pisoActual(a) ∨ #personas(a, pisoActual(a)) < 2 then #personas(a, p0 ) + β(p = p0 ) else if p0 = pisoActual(a) then 0 else if #personas(a, otroPiso(pisoActual(a))) < 3 then #personas(a, otroPiso(pisoActual(a))) else #personas(a, otroPiso(pisoActual(a))) - 3 fi fi fi Fin TAD 1 TAD Ascensor Automático 2.0 géneros ascensor exporta observadores, generadores usa piso, nat, bool igualdad observacional (∀a, a0 : ascensor) a =obs pisoActual(a) = pisoActual(a0 ) ∧ a0 ⇐⇒ personas(a, P B) = personas(a0 , P B) ∧ personas(a, 1er) = personas(a0 , 1er) observadores básicos pisoActual : ascensor #personas : ascensor × piso −→ piso −→ nat generadores nuevoAscensor: −→ ascensor llegaPersona : ascensor × piso −→ ascensor botón : ascensor a × piso p −→ ascensor {#personas(a, p) > 0} ... axiomas pisoActual(nuevoAscensor) ≡ PB pisoActual(llegaPersona(a, p)) ≡ if p 6= pisoActual(a) then pisoActual(a) else if #personas(a, pisoActual(a)) < 2 then pisoActual(a) else if #personas(a, otroPiso(pisoActual(a)) < 3 then otroPiso(pisoActual(a)) else pisoActual(a) fi fi fi pisoActual(botón(a, p)) ≡ if p = pisoActual(a) ∨ #personas(a, otroPiso(pisoActual(a))) ≥ 3 then pisoActual(a) else otroPiso(pisoActual(a)) fi #personas(nuevoAscensor, p) ≡ 0 #personas(llegaPersona(a, p), p0 )) ≡ if p 6= pisoActual(a) ∨ #personas(a, pisoActual(a)) < 2 then #personas(a, p0 ) + β(p = p0 ) else if p0 = pisoActual(a) then 0 else if #personas(a, otroPiso(pisoActual(a))) < 3 then #personas(a, otroPiso(pisoActual(a))) else #personas(a, otroPiso(pisoActual(a))) - 3 fi fi fi 2 #personas(botón(a, p), p0 ) ≡ if p = pisoActual(a) then #personas(a, p0 ) else if p 6= p0 then 0 else #personas(a, p0 ) - if #personas(a, p0 ) ≥ 3 then 3 else 0 fi fi fi Fin TAD 3