drone.tex 1.3 KB

123456789101112131415
  1. \begin{tipo}{Drone}
  2. \observador{id}{d: Drone}{\id}
  3. \observador{bateria}{d: Drone}{\carga}
  4. \observador{enVuelo}{d: Drone}{\bool}
  5. \observador{vueloRealizado}{d: Drone}{[(\ent, \ent)]}
  6. \observador{posicionActual}{d: Drone}{(\ent, \ent)}
  7. \observador{productosDisponibles}{d: Drone}{[Producto]}
  8. \medskip
  9. \invariante[vuelosOk]{\\ enVuelo(d) \Rightarrow (\longitud{vueloRealizado(d)} > 0 \land posicionActual(d) == vueloRealizado(d)_{\longitud{vueloRealizado(d)}-1} \land \\ posicionesPositivas(d) \land movimientosOK(d)) \land \neg enVuelo(d) \Rightarrow \longitud{vueloRealizado(d)} == 0 }
  10. \invariante[bateriaOk]{0 \leq bateria(d) \leq 100}
  11. \end{tipo}
  12. \noindent \aux{posicionesPositivas}{d: Drone}{\bool}{(\forall i \selec \rangoca{0}{\longitud{vueloRealizado(d)}}) prm(vueloRealizado(d)_i) \geq 0 \land \\ sgd(vueloRealizado(d)_i \geq 0}
  13. \noindent \aux{movimientosOK}{d: Drone}{\bool}{(\forall i \selec \rangoca{1}{\longitud{vueloRealizado(d)}}) \\ prm(vueloRealizado(d)_i) == prm(vueloRealizado(d)_{i-1}) \land (sgd(vueloRealizado(d)_i) == sgd(vueloRealizado(d)_{i-1}) - 1 \lor sgd(vueloRealizado(d)_i) == sgd(vueloRealizado(d)_{i-1}) + 1) \lor sgd(vueloRealizado(d)_i) == sgd(vueloRealizado(d)_{i-1}) \\ \land (prm(vueloRealizado(d)_i) == prm(vueloRealizado(d)_{i-1}) - 1 \lor prm(vueloRealizado(d)_{i-1}) == prm(vueloRealizado(d)_{i-1}) + 1)}