1:-include(library('ec_planner/ec_test_incl')). 2:-expects_dialect(pfc). 3 % loading(always,'ecnet/PolySpace.e'). 4%; 5%; Copyright (c) 2005 IBM Corporation and others. 6%; All rights reserved. This program and the accompanying materials 7%; are made available under the terms of the Common Public License v1.0 8%; which accompanies this distribution, and is available at 9%; http://www.eclipse.org/legal/cpl-v10.html 10%; 11%; Contributors: 12%; IBM - Initial implementation 13%; 14%; @phdthesis{Cassimatis:2002, 15%; author = "Nicholas L. Cassimatis", 16%; year = "2002", 17%; title = "Polyscheme: A Cognitive Architecture for Integrating Multiple Representation and Inference Schemes", 18%; address = "Cambridge, MA", 19%; school = "Program in Media Arts and Sciences, School of Architecture and Planning, Massachusetts Institute of Technology", 20%; } 21%; 22%; sorts 23 24% sort object 25==> sort(object). 26 27% sort xcoord: integer 28==> subsort(xcoord,integer). 29 30% sort ycoord: integer 31==> subsort(ycoord,integer). 32 33% sort grid 34==> sort(grid). 35 36% sort shape 37==> sort(shape). 38 39% sort color 40==> sort(color). 41%; constants 42 43% shape Round,Square 44==> t(shape,round). 45==> t(shape,square). 46 47% color Red,Green 48==> t(color,red). 49==> t(color,green). 50%; predicates, fluents, and events 51 52% predicate Equal(object,object) 53 % predicate(equal(object,object)). 54==> mpred_prop(equal(object,object),predicate). 55==> meta_argtypes(equal(object,object)). 56 57% predicate Shape(object,shape) 58 % predicate(shape(object,shape)). 59==> mpred_prop(shape(object,shape),predicate). 60==> meta_argtypes(shape(object,shape)). 61 62% predicate Color(object,color) 63 % predicate(color(object,color)). 64==> mpred_prop(color(object,color),predicate). 65==> meta_argtypes(color(object,color)). 66 67% fluent Location(grid,object,xcoord,ycoord) 68 % fluent(location(grid,object,xcoord,ycoord)). 69==> mpred_prop(location(grid,object,xcoord,ycoord),fluent). 70==> meta_argtypes(location(grid,object,xcoord,ycoord)). 71 72% event Move(grid,object,xcoord,ycoord,xcoord,ycoord) 73 % event(move(grid,object,xcoord,ycoord,xcoord,ycoord)). 74==> mpred_prop(move(grid,object,xcoord,ycoord,xcoord,ycoord),event). 75==> meta_argtypes(move(grid,object,xcoord,ycoord,xcoord,ycoord)). 76 77 78% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:38 79%; axioms 80% [object1,object2] 81 % Equal(object1,object2) -> Equal(object2,object1). 82% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:40 83axiom(equal(Object2, Object1), 84 [equal(Object1, Object2)]). 85 86 87% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:42 88%; objects have unique shape 89% [object,shape1,shape2] 90% Shape(object,shape1) & Shape(object,shape2) -> 91% shape1=shape2. 92% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:45 93axiom(Shape1=Shape2, 94 [shape(Object, Shape1), shape(Object, Shape2)]). 95 96 97% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:47 98%; objects have unique color 99% [object,color1,color2] 100% Color(object,color1) & Color(object,color2) -> 101% color1=color2. 102% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:50 103axiom(Color1=Color2, 104 [color(Object, Color1), color(Object, Color2)]). 105 106 107% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:52 108%; if objects are the same, they have the same shape 109% [object1,object2] 110% Equal(object1,object2) -> 111% ({shape} Shape(object1,shape) & Shape(object2,shape)). 112 113 /* if(equal(Object1, Object2), 114 exists([Shape], 115 (shape(Object1, Shape), shape(Object2, Shape)))). 116 */ 117 118 /* not(equal(Equal_Param, Shape_Param)) :- 119 ( not(shape(Equal_Param, Shape_Ret)) 120 ; not(shape(Shape_Param, Shape_Ret)) 121 ). 122 */ 123% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:55 124axiom(not(equal(Equal_Param, Shape_Param)), 125 [not(shape(Equal_Param, Shape_Ret))]). 126axiom(not(equal(Equal_Param, Shape_Param)), 127 [not(shape(Shape_Param, Shape_Ret))]). 128 129 /* shape(Shape_Param6, Shape_Ret7) :- 130 equal(Shape_Param6, Equal_Ret). 131 */ 132axiom(shape(Shape_Param6, Shape_Ret7), 133 [equal(Shape_Param6, Equal_Ret)]). 134 135 /* shape(Shape_Param9, Shape_Ret11) :- 136 equal(Equal_Param10, Shape_Param9). 137 */ 138axiom(shape(Shape_Param9, Shape_Ret11), 139 [equal(Equal_Param10, Shape_Param9)]). 140 141 142% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:57 143%; if objects are the same, they have the same color 144% [object1,object2] 145% Equal(object1,object2) -> 146% ({color} Color(object1,color) & Color(object2,color)). 147 148 /* if(equal(Object1, Object2), 149 exists([Color], 150 (color(Object1, Color), color(Object2, Color)))). 151 */ 152 153 /* not(equal(Equal_Param, Color_Param)) :- 154 ( not(color(Equal_Param, Color_Ret)) 155 ; not(color(Color_Param, Color_Ret)) 156 ). 157 */ 158% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:60 159axiom(not(equal(Equal_Param, Color_Param)), 160 [not(color(Equal_Param, Color_Ret))]). 161axiom(not(equal(Equal_Param, Color_Param)), 162 [not(color(Color_Param, Color_Ret))]). 163 164 /* color(Color_Param6, Color_Ret7) :- 165 equal(Color_Param6, Equal_Ret). 166 */ 167axiom(color(Color_Param6, Color_Ret7), 168 [equal(Color_Param6, Equal_Ret)]). 169 170 /* color(Color_Param9, Color_Ret11) :- 171 equal(Equal_Param10, Color_Param9). 172 */ 173axiom(color(Color_Param9, Color_Ret11), 174 [equal(Equal_Param10, Color_Param9)]). 175 176 177% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:62 178%; if objects are the same, they have the same location 179% [grid,object1,object2,xcoord1,ycoord1,xcoord2,ycoord2,time] 180% Equal(object1,object2) -> 181% (HoldsAt(Location(grid,object1,xcoord1,ycoord1),time) & 182% HoldsAt(Location(grid,object2,xcoord2,ycoord2),time) -> 183% xcoord1=xcoord2 & ycoord1=ycoord2). 184 185 /* if(equal(Object1, Object2), 186 if((holds_at(location(Grid, Object1, Xcoord1, Ycoord1), Time), holds_at(location(Grid, Object2, Xcoord2, Ycoord2), Time)), 187 (Xcoord1=Xcoord2, Ycoord1=Ycoord2))). 188 */ 189 190 /* not(equal(Equal_Param, Equal_Ret)) :- 191 ( holds_at(location(Location_Param, 192 Equal_Param, 193 Equals_Param, 194 Equals_Param12), 195 Time8), 196 holds_at(location(Location_Param, 197 Equal_Ret, 198 Equals_Ret, 199 Location_Ret), 200 Time8) 201 ), 202 ( not(equals(Equals_Param, Equals_Ret)) 203 ; not(equals(Equals_Param12, Location_Ret)) 204 ). 205 */ 206% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:67 207axiom(not(equal(Equal_Param, Equal_Ret)), 208 209 [ not(equals(Equals_Param, Equals_Ret)), 210 holds_at(location(Location_Param, 211 Equal_Param, 212 Equals_Param, 213 Equals_Param12), 214 Time8), 215 holds_at(location(Location_Param, 216 Equal_Ret, 217 Equals_Ret, 218 Location_Ret), 219 Time8) 220 ]). 221axiom(not(equal(Equal_Param, Equal_Ret)), 222 223 [ not(equals(Equals_Param12, Location_Ret)), 224 holds_at(location(Location_Param, 225 Equal_Param, 226 Equals_Param, 227 Equals_Param12), 228 Time8), 229 holds_at(location(Location_Param, 230 Equal_Ret, 231 Equals_Ret, 232 Location_Ret), 233 Time8) 234 ]). 235 236 /* not(holds_at(location(Location_Param17, Equal_Param20, Equals_Param18, Equals_Param19), Time16)) :- 237 holds_at(location(Location_Param17, 238 Equal_Ret23, 239 Equals_Ret22, 240 Location_Ret21), 241 Time16), 242 ( not(equals(Equals_Param18, Equals_Ret22)) 243 ; not(equals(Equals_Param19, Location_Ret21)) 244 ), 245 equal(Equal_Param20, Equal_Ret23). 246 */ 247axiom(not(holds_at(location(Location_Param17, Equal_Param20, Equals_Param18, Equals_Param19), Time16)), 248 249 [ not(equals(Equals_Param18, Equals_Ret22)), 250 holds_at(location(Location_Param17, 251 Equal_Ret23, 252 Equals_Ret22, 253 Location_Ret21), 254 Time16), 255 equal(Equal_Param20, Equal_Ret23) 256 ]). 257axiom(not(holds_at(location(Location_Param17, Equal_Param20, Equals_Param18, Equals_Param19), Time16)), 258 259 [ not(equals(Equals_Param19, Location_Ret21)), 260 holds_at(location(Location_Param17, 261 Equal_Ret23, 262 Equals_Ret22, 263 Location_Ret21), 264 Time16), 265 equal(Equal_Param20, Equal_Ret23) 266 ]). 267 268 /* not(holds_at(location(Location_Param25, Equal_Ret31, Equals_Ret30, Location_Ret29), Time24)) :- 269 holds_at(location(Location_Param25, 270 Equal_Param28, 271 Equals_Param26, 272 Equals_Param27), 273 Time24), 274 ( not(equals(Equals_Param26, Equals_Ret30)) 275 ; not(equals(Equals_Param27, Location_Ret29)) 276 ), 277 equal(Equal_Param28, Equal_Ret31). 278 */ 279axiom(not(holds_at(location(Location_Param25, Equal_Ret31, Equals_Ret30, Location_Ret29), Time24)), 280 281 [ not(equals(Equals_Param26, Equals_Ret30)), 282 holds_at(location(Location_Param25, 283 Equal_Param28, 284 Equals_Param26, 285 Equals_Param27), 286 Time24), 287 equal(Equal_Param28, Equal_Ret31) 288 ]). 289axiom(not(holds_at(location(Location_Param25, Equal_Ret31, Equals_Ret30, Location_Ret29), Time24)), 290 291 [ not(equals(Equals_Param27, Location_Ret29)), 292 holds_at(location(Location_Param25, 293 Equal_Param28, 294 Equals_Param26, 295 Equals_Param27), 296 Time24), 297 equal(Equal_Param28, Equal_Ret31) 298 ]). 299 300 /* equals(Equals_Param33, Equals_Ret36) :- 301 ( holds_at(location(Location_Param34, 302 Equal_Param35, 303 Equals_Param33, 304 Location_Ret37), 305 Time32), 306 holds_at(location(Location_Param34, 307 Equal_Ret39, 308 Equals_Ret36, 309 Location_Ret38), 310 Time32) 311 ), 312 equal(Equal_Param35, Equal_Ret39). 313 */ 314axiom(equals(Equals_Param33, Equals_Ret36), 315 316 [ holds_at(location(Location_Param34, 317 Equal_Param35, 318 Equals_Param33, 319 Location_Ret37), 320 Time32), 321 holds_at(location(Location_Param34, 322 Equal_Ret39, 323 Equals_Ret36, 324 Location_Ret38), 325 Time32), 326 equal(Equal_Param35, Equal_Ret39) 327 ]). 328 329 /* equals(Equals_Param41, Equals_Ret44) :- 330 ( holds_at(location(Location_Param42, 331 Equal_Param43, 332 _, 333 Equals_Param41), 334 Time40), 335 holds_at(location(Location_Param42, 336 Equal_Ret45, 337 _, 338 Equals_Ret44), 339 Time40) 340 ), 341 equal(Equal_Param43, Equal_Ret45). 342 */ 343axiom(equals(Equals_Param41, Equals_Ret44), 344 345 [ holds_at(location(Location_Param42, 346 Equal_Param43, 347 _, 348 Equals_Param41), 349 Time40), 350 holds_at(location(Location_Param42, 351 Equal_Ret45, 352 _, 353 Equals_Ret44), 354 Time40), 355 equal(Equal_Param43, Equal_Ret45) 356 ]). 357 358 359% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:69 360%; object in one location at a time 361% [grid,object,xcoord1,ycoord1,xcoord2,ycoord2,time] 362% HoldsAt(Location(grid,object,xcoord1,ycoord1),time) & 363% HoldsAt(Location(grid,object,xcoord2,ycoord2),time) -> 364% xcoord1=xcoord2 & ycoord1=ycoord2. 365 366 /* if((holds_at(location(Grid, Object, Xcoord1, Ycoord1), Time), holds_at(location(Grid, Object, Xcoord2, Ycoord2), Time)), 367 (Xcoord1=Xcoord2, Ycoord1=Ycoord2)). 368 */ 369 370 /* not(holds_at(location(Location_Param, A, Equals_Param, Equals_Param10), Time7)) :- 371 holds_at(location(Location_Param, 372 A, 373 Equals_Ret, 374 Location_Ret), 375 Time7), 376 ( not(equals(Equals_Param, Equals_Ret)) 377 ; not(equals(Equals_Param10, Location_Ret)) 378 ). 379 */ 380% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:73 381axiom(not(holds_at(location(Location_Param, A, Equals_Param, Equals_Param10), Time7)), 382 383 [ not(equals(Equals_Param, Equals_Ret)), 384 holds_at(location(Location_Param, 385 A, 386 Equals_Ret, 387 Location_Ret), 388 Time7) 389 ]). 390axiom(not(holds_at(location(Location_Param, A, Equals_Param, Equals_Param10), Time7)), 391 392 [ not(equals(Equals_Param10, Location_Ret)), 393 holds_at(location(Location_Param, 394 A, 395 Equals_Ret, 396 Location_Ret), 397 Time7) 398 ]). 399 400 /* not(holds_at(location(Location_Param14, A, Equals_Ret18, Location_Ret17), Time13)) :- 401 holds_at(location(Location_Param14, 402 A, 403 Equals_Param15, 404 Equals_Param16), 405 Time13), 406 ( not(equals(Equals_Param15, Equals_Ret18)) 407 ; not(equals(Equals_Param16, Location_Ret17)) 408 ). 409 */ 410axiom(not(holds_at(location(Location_Param14, A, Equals_Ret18, Location_Ret17), Time13)), 411 412 [ not(equals(Equals_Param15, Equals_Ret18)), 413 holds_at(location(Location_Param14, 414 A, 415 Equals_Param15, 416 Equals_Param16), 417 Time13) 418 ]). 419axiom(not(holds_at(location(Location_Param14, A, Equals_Ret18, Location_Ret17), Time13)), 420 421 [ not(equals(Equals_Param16, Location_Ret17)), 422 holds_at(location(Location_Param14, 423 A, 424 Equals_Param15, 425 Equals_Param16), 426 Time13) 427 ]). 428 429 /* equals(Equals_Param20, Equals_Ret22) :- 430 holds_at(location(Location_Param21, 431 A, 432 Equals_Param20, 433 Location_Ret23), 434 Time19), 435 holds_at(location(Location_Param21, 436 A, 437 Equals_Ret22, 438 Location_Ret24), 439 Time19). 440 */ 441axiom(equals(Equals_Param20, Equals_Ret22), 442 443 [ holds_at(location(Location_Param21, 444 A, 445 Equals_Param20, 446 Location_Ret23), 447 Time19), 448 holds_at(location(Location_Param21, 449 A, 450 Equals_Ret22, 451 Location_Ret24), 452 Time19) 453 ]). 454 455 /* equals(Equals_Param26, Equals_Ret28) :- 456 holds_at(location(Location_Param27, 457 A, 458 _, 459 Equals_Param26), 460 Time25), 461 holds_at(location(Location_Param27, 462 A, 463 _, 464 Equals_Ret28), 465 Time25). 466 */ 467axiom(equals(Equals_Param26, Equals_Ret28), 468 469 [ holds_at(location(Location_Param27, 470 A, 471 _, 472 Equals_Param26), 473 Time25), 474 holds_at(location(Location_Param27, 475 A, 476 _, 477 Equals_Ret28), 478 Time25) 479 ]). 480 481 482% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:75 483%; objects have locations 484% [grid,object,time] 485% ( 486% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:77 487% {xcoord,ycoord} HoldsAt(Location(grid,object,xcoord,ycoord),time)). 488 489 /* exists([Xcoord,Ycoord], 490 holds_at(location(Grid, 491 Object, 492 Xcoord, 493 Ycoord), 494 Time)). 495 */ 496axiom(holds_at(location(Location_Param, _, _, Location_Ret), Time5), 497 []). 498 499 500% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:79 501%; different objects are not at same location 502% [grid,object1,object2,xcoord1,ycoord1,time] 503% HoldsAt(Location(grid,object1,xcoord1,ycoord1),time) & 504% HoldsAt(Location(grid,object2,xcoord1,ycoord1),time) -> 505% Equal(object1,object2). 506% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:83 507axiom(equal(Object1, Object2), 508 509 [ holds_at(location(Grid, Object1, Xcoord1, Ycoord1), 510 Time), 511 holds_at(location(Grid, Object2, Xcoord1, Ycoord1), 512 Time) 513 ]). 514 515 516% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:85 517%; moving to a location causes an object to be at that location 518% [grid,object,xcoord1,ycoord1,xcoord2,ycoord2,time] 519% Initiates(Move(grid,object,xcoord1,ycoord1,xcoord2,ycoord2), 520% Location(grid,object,xcoord2,ycoord2), 521% time). 522% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:89 523axiom(initiates(move(Grid, Object, Xcoord1, Ycoord1, Xcoord2, Ycoord2), location(Grid, Object, Xcoord2, Ycoord2), Time), 524 []). 525 526 527% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:91 528%; moving to a location causes the object no longer to be at its previous 529%; location 530% [grid,object,xcoord1,ycoord1,xcoord2,ycoord2,time] 531% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:94 532% Terminates(Move(grid,object,xcoord1,ycoord1,xcoord2,ycoord2), 533% Location(grid,object,xcoord1,ycoord1), 534% time). 535% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:96 536axiom(terminates(move(Grid, Object, Xcoord1, Ycoord1, Xcoord2, Ycoord2), location(Grid, Object, Xcoord1, Ycoord1), Time), 537 []). 538 539 540% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:98 541%;; allow diagonal movements 542%;[grid,object,xcoord1,ycoord1,xcoord2,ycoord2,time] 543%;Happens(Move(grid,object,xcoord1,ycoord1,xcoord2,ycoord2),time) -> 544%;HoldsAt(Location(grid,object,xcoord1,ycoord1),time) & 545%;(xcoord1=xcoord2 | 546%; xcoord1=xcoord2+1 | 547%; xcoord1=xcoord2-1) & 548%;(ycoord1=ycoord2 | 549%; ycoord1=ycoord2+1 | 550%; ycoord1=ycoord2-1). 551%; only allow right angle movements 552% [grid,object,xcoord1,ycoord1,xcoord2,ycoord2,time] 553% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:111 554% Happens(Move(grid,object,xcoord1,ycoord1,xcoord2,ycoord2),time) -> 555% HoldsAt(Location(grid,object,xcoord1,ycoord1),time) & 556% ((xcoord1=xcoord2 & (ycoord1=ycoord2+1 | ycoord1=ycoord2-1)) | 557% (ycoord1=ycoord2 & (xcoord1=xcoord2+1 | xcoord1=xcoord2-1))). 558% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:114 559axiom(requires(move(Grid, Object, Xcoord1, Ycoord1, Xcoord2, Ycoord2), Time), 560 561 [ equals(Ycoord1, Ycoord2+1), 562 equals(Xcoord1, Xcoord2), 563 holds_at(location(Grid, Object, Xcoord1, Ycoord1), 564 Time) 565 ]). 566axiom(requires(move(Grid, Object, Xcoord1, Ycoord1, Xcoord2, Ycoord2), Time), 567 568 [ equals(Ycoord1, Ycoord2-1), 569 equals(Xcoord1, Xcoord2), 570 holds_at(location(Grid, Object, Xcoord1, Ycoord1), 571 Time) 572 ]). 573axiom(requires(move(Grid, Object, Xcoord1, Ycoord1, Xcoord2, Ycoord2), Time), 574 575 [ equals(Xcoord1, Xcoord2+1), 576 equals(Ycoord1, Ycoord2), 577 holds_at(location(Grid, Object, Xcoord1, Ycoord1), 578 Time) 579 ]). 580axiom(requires(move(Grid, Object, Xcoord1, Ycoord1, Xcoord2, Ycoord2), Time), 581 582 [ equals(Xcoord1, Xcoord2-1), 583 equals(Ycoord1, Ycoord2), 584 holds_at(location(Grid, Object, Xcoord1, Ycoord1), 585 Time) 586 ]). 587 588 589% From /opt/logicmoo_workspace/packs_sys/small_adventure_games/prolog/ec_planner/ecnet/PolySpace.e:116 590%; End of file.