sistema.tex 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. \begin{problema}{crearS}{c: Campo, ds: [Drone]}{Sistema}
  2. \asegura{igualdadCamapo(campo(res),c)}
  3. \asegura{(\forall d \leftarrow ds)(\exists d' \leftarrow enjambreDrones(res))id(d)==id(d') \wedge bateria(d')==100 \wedge \neg enVuelo(d') \wedge \newline enRango(dimesiones(campo(res)), prs(posicionActual(d')),snd(posicionActual(d'))) \wedge \newline contenido(campo(res), prs(posicionActual(d')),snd(posicionActual(d')))==Granero}
  4. \asegura{(\forall (i,j) \leftarrow parcelasCampo(campo(res), contenido(campo(res),i,j)==Cultivo)\\ estadoDelCultivo(res,i,j)==NoSensado}
  5. \end{problema}
  6. \begin{problema}{campoS}{s: Sistema}{Campo}
  7. \asegura {res==campo(s)}
  8. \end{problema}
  9. \begin{problema}{estadoDelCultivoS}{s: Sistema, i, j: \ent}{EstadoCultivo}
  10. \requiere {enRango(dimensiones(campo(s)),i,j) \wedge contenido(campo(s),i,j)==cultivo}
  11. \asegura {res==estadoDelCultivo(s,i,j)}
  12. \end{problema}
  13. \begin{problema}{enjambreDronesS}{s: Sistema}{[Drone]}
  14. \asegura{mismos(res,enjambreDrones(s))}
  15. \end{problema}
  16. \begin{problema}{crecerS}{s: Sistema}{}
  17. \modifica s
  18. \asegura{igualdadCampo(campo(s),campo(pre(s)))}
  19. \asegura{ mismosDrones(enjambreDrones(s),enjambreDrones(pre(s)))}
  20. \asegura{(\forall i \leftarrow [0..prs(dimensiones(s)),j \leftarrow [0..snd(dimensiones(s)), enRango(dimensiones(campo(s)),i,j), \newline contenido(campo(s),i,j)==Cultivo, estadoDelCultivo(pre(s),i,j)==RecienSembrado )\newline estadoDelCultivo(s,i,j)==EnCrecimiento }
  21. \asegura{(\forall i \leftarrow [0..prs(dimensiones(s)),j \leftarrow [0..snd(dimensiones(s)), enRango(dimensiones(campo(s)),i,j), \newline contenido(campo(s),i,j)==Cultivo, estadoDelCultivo(pre(s),i,j)==EnCrecimiento ) \newline estadoDelCultivo(s,i,j)==ListoParaCosechar}
  22. \asegura {(\forall i \leftarrow [0..prs(dimensiones(s)),j \leftarrow [0..snd(dimensiones(s)), enRango(dimensiones(campo(s)),i,j), \newline contenido(campo(s),i,j)==Cultivo, (estadoDelCultivo(pre(s),i,j)\neq EnCrecimiento \wedge \newline estadoDelCultivo(pre(s),i,j)\neq RecienSembrado )) \newline estadoDelCultivo(s,i,j)==estadoDelCultivo(pre(s),i,j)}
  23. \end{problema}
  24. \begin{problema}{seVinoLaMalezaS}{s: Sistema, ps: [(\ent, \ent)]}{}
  25. % \requiere{(\forall p \leftarrow ps) enRango(dimensiones(campo(pre(s)),prs(p),snd(p))) \wedge \newline contenido(campo(pre(s)),prs(p),sgd(p))==Cultivo}
  26. \modifica s
  27. \asegura{igualdadCampo(campo(s),campo(pre(s)))}
  28. \asegura{ mismosDrones(enjambreDrones(s),enjambreDrones(pre(s)))}
  29. \asegura{(\forall i \leftarrow [0..prs(dimensiones(campo(s))), j \leftarrow [0..snd(dimensiones(campo(s))), \newline contenido(campo(s),i,j)!=Cultivo \wedge (i,j) \notin ps) contenido(campo(s),i,j)==contenido(campo(pre(s)),i,j)}
  30. %si no es cultivo, lo dejo igual
  31. \asegura{(\forall i \leftarrow [0..prs(dimensiones(campo(s))), j \leftarrow [0..snd(dimensiones(campo(s))), \newline contenido(campo(s),i,j)==Cultivo \wedge (i,j) \notin ps) estadoDelCultivo(s,i,j)==estadoDelCultivo(pre(s),i,j)}
  32. %si es cultivo y no esta en ps lo dejo igual
  33. \asegura{(\forall p \leftarrow ps,enRango(dimension(s),prs(p),snd(p)) \wedge contenido(campo(s),prs(p),snd(p)))\\ estadoDelCultivo(s,prs(p),snd(p))==ConMaleza}
  34. %le pongo maleza
  35. \end{problema}
  36. \begin{problema}{seExpandePlagaS}{s: Sistema}{}
  37. \modifica s
  38. \asegura{igualdadCampo(campo(s),campo(pre(s)))}
  39. \asegura{mismosDrones(enjambreDrones(s),enjambreDrones(pre(s)))}
  40. \asegura{(\forall i \leftarrow [0..prs(dimensiones(campo(pre(s)))), j \leftarrow [0..snd(dimensiones(campo(pre(s))))\newline contenido(campo(pre(s)),i,j) \wedge estadoDelCultivo(pre(s),i,j)==ConPlaga)\newline estadoDelCultivo(s,i,j)==ConPlaga \wedge parcelaAdyacenteConPlaga(s,i,j)}
  41. \asegura{(\forall i \leftarrow [0..prs(dimensiones(campo(pre(s)))), j \leftarrow [0..snd(dimensiones(campo(pre(s))))\newline contenido(campo(pre(s)),i,j)==Cultivo \wedge estadoDelCultivo(pre(s),i,j)\neq ConPlaga \wedge \newline \neg algunAdyacenteConPlaga(s,i,j)) estadoDelCultivo(s,i,j)==estadoDelCultivo(pre(s),i,j)}
  42. \end{problema}
  43. \begin{problema}{despegarS}{s: Sistema, d: Drone}{}
  44. \requiere{bateria(d)==100}
  45. \requiere{d \in enjambreDrones(pre(s))}
  46. \requiere{hayParcelaAdyacenteAlGraneroLibre(pre(s))}
  47. \modifica s
  48. \asegura{igualdadCampo(campo(pre(s)),campo(s))}
  49. \asegura{(\forall(i,j) \leftarrow parcelasDelSistema(s),contenido(campo(s),i,j)==Cultivo)\newline estadoDelCultivo(pre(s),i,j)==estadoDelCultivo(s,i,j)}
  50. \asegura{\mid enjambreDrones(pre(s)) \mid == \mid enjambreDrones(s) \mid}
  51. \asegura{(\forall d' \leftarrow enjambreDrones(pre(s)), id(d')==id(d))(\exists d'' \leftarrow enjambreDones(s))igualdadDrones(d',d'')}
  52. \asegura{(\exists d' \leftarrow enjambreDrones(s))id(d)==id(d') \wedge enVuelo(d') \wedge bateria(d')==99 \wedge \newline enRango(dimensiones(s),prs(posicionActual(d')),snd(posicionActual(d'))) \wedge \newline soloUnDrone(s,posicionActual(d')) \wedge estaAdyacenteAlGranero(s,(posicionActual(d')) \wedge \newline vueloRealizado(d')==[posicionActual(d')] \wedge mismos(productosDisponibles(d),productosDisponibles(d'))}
  53. \end{problema}
  54. \begin{problema}{listoParaCosecharS}{s: Sistema}{\bool}
  55. \asegura { res == ( contarCultivosListos/contarCultivos(s) \geq 0.9 ) }
  56. \begin{aux}{contarCultivos}{s: Sistema}{\ent}
  57. { |[ 1 | \newline i \leftarrow [0..prs(dimensiones(campo(s))) \newline j \leftarrow [0..snd(dimensiones(campo(s))), \newline contenido(campo(s),i,j)==Cultivo) ]| }
  58. \end{aux}
  59. \begin{aux}{contarCultivosListos}{s: Sistema}{\ent}
  60. { |[ 1 | \newline i \leftarrow [0..prs(dimensiones(campo(s))) \newline j \leftarrow [0..snd(dimensiones(campo(s))), \newline contenido(campo(s),i,j)==Cultivo \wedge
  61. estadoDelCultivo(s,i,j) == ListoParaCosechar ) ]| }
  62. \end{aux}
  63. \end{problema}
  64. \begin{problema}{aterrizarYCargarBateriaS}{s: Sistema, b: \ent}{}
  65. \modifica s
  66. \asegura{igualdadCampo(campo(pre(s)),campo(s))}
  67. \asegura{(\forall(i,j) \leftarrow parcelasDelSistema(s),contenido(campo(s),i,j)==Cultivo)\newline estadoDelCultivo(pre(s),i,j)==estadoDelCultivo(s,i,j)}
  68. \asegura{ (\forall d \leftarrow enjambreDrones(pre(s)), bateria(d) \geq b ) igualdadDrone(d,pre(d)) }
  69. \asegura{ (\forall d \leftarrow enjambreDrones(pre(s)), bateria(d) < b ) \newline
  70. id(d) == id(pre(d)) \wedge bateria(d)==100 \wedge enVuelo(d)==False \wedge vueloRealizado(d)==[] \wedge \newline posicionActual(d)==Granero(pre(s)) \wedge mismos(productosDisponibles(d),productosDisponibles(pre(d)))
  71. }
  72. \end{problema}
  73. \begin{problema}{fertilizarPorFilas}{s: Sistema}{}
  74. \modifica s
  75. \asegura{ (\forall(d) \leftarrow enjambreDrones(pre(s)), !puedeMoverOeste(d)) igualdadDrone(d,pre(d)) }
  76. \asegura{ (\forall(d) \leftarrow enjambreDrones(pre(s)), puedeMoverOeste(d))
  77. \newline dronesIgualesSinPosicionNiBat(d,pre(d)) \wedge \newline posicionActual(d)==(pri(posicionActual(pre(d)-1)),sgd(posicionActual(pre(d)))) \wedge
  78. \newline bateria(d)==bateria(pre(d))-1
  79. }
  80. \begin{aux}{puedeMoverOeste}{d: Drone, s:Sistema}{\bool}{
  81. \newline
  82. \IfThenElse{ bateria(d) == 0 \vee noTieneFertilizante(d) \vee \newline contenido(campo(pre(s)),pri(posicionActual(d)),sgd(posicionActual(d))) \neq Cultivo \vee \newline pri(posicionActual(d)) == 0 }{\newline False \newline }{\newline True}
  83. }
  84. \end{aux}
  85. \end{problema}
  86. \begin{problema}{volarYSensarS}{s: Sistema, d: Drone}{}
  87. \requiere{d \in enjambreDrones(pre(s))}
  88. \modifica s
  89. \asegura{igualdadCampo(campo(pre(s)),campo(s))}
  90. \asegura{ (\forall d' \leftarrow enjambreDrones(pre(s)), id(d') \neq id(d)) d' == pre(d') }
  91. \asegura{ posicionActual(miDrone(id(d),s) \in parcelasAdyacentes(posicionActual(d)) }
  92. \asegura{dimensiones(campo(s))==dimensiones(campo(pre(s)) \wedge \newline
  93. (\forall i \leftarrow [0..fst(dimensionesCampo(campo(s)))-1],j \leftarrow [0..snd(dimensionesCampo(campo(s)))-1], \newline
  94. contenido(campo(s),i,j)==Cultivo \wedge \newline
  95. ((i,j) \in parcelasAdyacentes(s,posicionActual(d)) \wedge \neg cumpleCondicionHorrible(s,d,i,j)) \vee \newline
  96. ((i,j) \notin parcelasAdyacentes(s,posicionActual(d)))
  97. ) estadoDelCultivo(s,i,j)==estadoDelCultivo(pre(s),i,j))
  98. }
  99. \asegura{ If(contenido(campo(pre(s)),miParcela(s,d))== Cultivo) Then \newline
  100. If (estadoDelCultivo(pre(s), miParcela(s,d)) == NoSensado ) Then \newline
  101. estadoDelCultivo(s, miParcela(s,d)) \neq NoSensado \wedge \newline
  102. bateria(miDrone(id(d),s)) == bateria(d,s) -1 \newline
  103. If (estadoDelCultivo(pre(s), miParcela(s,d)) == ConMaleza \wedge tieneHerbicida(miDrone(id(d),s)) Then \newline
  104. usarHerbicida(s,miDrone(id(d),s),miParcela(s,d))\newline
  105. If (estadoDelCultivo(pre(s), miParcela(s,d)) == ConPlaga \wedge tienePlaguicida(miDrone(id(d),s)) Then \newline
  106. usarPlaguicida(s,miDrone(id(d),s),miParcela(s,d)) \newline
  107. }
  108. \asegura{(\forall i \leftarrow [0..fst(dimensionesCampo(campo(s)))-1],j \leftarrow [0..snd(dimensionesCampo(campo(s)))-1], \newline
  109. ((i,j) \in parcelasAdyacentes(s,posicionActual(d)) \wedge \newline cumpleCondicionHorrible(s,d,i,j))) \newline
  110. estadoDelCultivo(s,i,j)==RecienSembrado
  111. }
  112. \begin{aux}{cumpleCondicionHorrible}{s:Sistema, d:Drone, i:\ent,j:\ent)}{\bool}{
  113. \newline
  114. estadoDelCultivo(pre(s), i,j)==ConMaleza \wedge \newline
  115. bateria(pre(d)) > 5 \wedge \newline
  116. dameHerbicida(pre(d)) == HerbicidaLargoAlcance
  117. }
  118. \end{aux}
  119. \begin{aux}{usarPlaguicida}{s:Sistema, d:Drone, p: (\ent,\ent)}{}{
  120. \newline
  121. ( \IfThenElse{damePlaguicida(d)==Plaguicida}{\newline bateria(d)==bateria(pre(d))-10}{\newline bateria(d)==bateria(pre(d))-5} ) \wedge \newline
  122. productosDisponibles(d)==sinUna(damePlaguicida(pre(d)),productosDisponibles(pre(d))) \wedge \newline
  123. estadoDelCultivo(s,pos(d))==RecienSembrado
  124. }
  125. \end{aux}
  126. \begin{aux}{damePlaguicida}{d:Drone}{Producto}{
  127. dameUna([prod| prod \leftarrow productosDisponibles(pre(d)), prod == Plaguicida \vee prod == PlaguicidaBajoConsumo])
  128. }
  129. \end{aux}
  130. \begin{aux}{dameHerbicida}{d:Drone}{Producto}{
  131. dameUna([prod| prod \leftarrow productosDisponibles(pre(d)), prod == Herbicida \vee prod == HerbicidaLargoAlcance])
  132. }
  133. \end{aux}
  134. \begin{aux}{usarHerbicida}{s:Sistema, d:Drone, p: (\ent,\ent)}{}{
  135. \newline
  136. bateria(d)==bateria(pre(d))-5 \wedge \newline
  137. productosDisponibles(d)==sinUna(dameHerbicida(pre(d)), productosDisponibles(pre(d))) \wedge \newline
  138. estadoDelCultivo(s,pos(d))==RecienSembrado
  139. }
  140. \end{aux}
  141. \begin{aux}{tieneHerbicida}{d:Drone}{\bool}{
  142. (( Herbicida \in productosDisponibles(d)) \vee \newline
  143. ( HerbicidaLargoAlcance \in productosDisponibles(d))) \wedge bateria(d) > 5
  144. }
  145. \end{aux}
  146. \begin{aux}{tienePlaguicida}{d:Drone}{\bool}{
  147. ( Plaguicida \in productosDisponibles(d) \wedge bateria(d) > 10) \vee \newline
  148. ( PlaguicidaBajoConsumo \in productosDisponibles(d) \wedge bateria(d) > 5 )
  149. }
  150. \end{aux}
  151. \begin{aux}{miDrone}{id: \ent, s:Sistema}{Drone}{
  152. [d | d \leftarrow enjambreDrones(s), id(d) ==id ][0]
  153. }
  154. \end{aux}
  155. \begin{aux}{miParcela}{s:Sistema, d:Drone}{(\ent,\ent)}{
  156. \newline
  157. (pri(posicionActual(miDrone(id(d),s))), sgd(posicionActual(miDrone(id(d),s))))
  158. }
  159. \end{aux}
  160. \end{problema}