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