| 123456789101112131415 |
- \begin{tipo}{Drone}
- \observador{id}{d: Drone}{\id}
- \observador{bateria}{d: Drone}{\carga}
- \observador{enVuelo}{d: Drone}{\bool}
- \observador{vueloRealizado}{d: Drone}{[(\ent, \ent)]}
- \observador{posicionActual}{d: Drone}{(\ent, \ent)}
- \observador{productosDisponibles}{d: Drone}{[Producto]}
- \medskip
- \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 }
- \invariante[bateriaOk]{0 \leq bateria(d) \leq 100}
- \end{tipo}
- \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}
- \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)}
|