/** * All rights reserved. Use of this software is permitted for non-commercial * research purposes, and it may be copied only for that use. All copies must * include this copyright message. This software is made available AS IS, and * neither the GIPO team nor the University of Huddersfield make any warranty * about the software or its performance. * * Automatically generated OCl Domain from GIPO Version 1.0 * * Author: Doris Liu * Institution: University of Huddersfield * Date created: 5th May 2000 * Date last modified: 2001/10/24 at 10:58:10 AM BST * Description: * This is a standard blocks world. Having one gripper, seven blocks and * the table. In this domain the table is not modelled as a distinct object * rather the predicate on_table is used to determine if a block is directly * placed on the (implied) table. The gripper is modelled as a distinct * object and is given the name tom. Usual stacking rules apply. A * block can only be placed on a free block. A block may only be picked * up by the gripper if the gripper is free and the block is free (i.e. is * at the top of a stack.) */ domain_name(blocks). % Sorts sorts(primitive_sorts,[block,gripper]). % Objects objects(block,[block1,block2,block3,block4,block5,block6,block7]). objects(gripper,[tom]). % Predicates predicates([ on_block(block,block), on_table(block), clear(block), gripped(block,gripper), busy(gripper), free(gripper)]). % Object Class Definitions substate_classes(block,B,[ [gripped(B,G)], [on_block(B,B1),clear(B),ne(B,B1)], [on_block(B,B1),ne(B,B1)], [on_table(B),clear(B)], [on_table(B)]]). substate_classes(gripper,G,[ [busy(G)], [free(G)]]). % Atomic Invariants % Implied Invariants % Inconsistent Constraints inconsistent_constraint([on_block(B,B)]). inconsistent_constraint([on_block(B,B1),on_block(B1,B),ne(B,B1)]). inconsistent_constraint([on_block(B,B1),on_block(B,B2),ne(B,B1),ne(B1,B2)]). inconsistent_constraint([on_block(B1,B),on_block(B2,B),ne(B,B1),ne(B1,B2)]). inconsistent_constraint([on_block(B,B1),clear(B1)]). inconsistent_constraint([on_block(B,B1),on_table(B)]). inconsistent_constraint([gripped(B,G),on_block(B1,B)]). inconsistent_constraint([gripped(B,G),on_block(B,B1)]). inconsistent_constraint([gripped(B,G),on_table(B)]). inconsistent_constraint([gripped(B,G),clear(B)]). inconsistent_constraint([gripped(B,G),gripped(B1,G),ne(B,B1)]). inconsistent_constraint([busy(G),free(G)]). inconsistent_constraint([gripped(B,G),free(G)]). % Operators operator(grip_from_blocks(B,B1,G,B2), % prevail [], % necessary [ sc(block,B,[on_block(B,B1),clear(B),ne(B,B1)]=>[gripped(B,G)]), sc(block,B1,[on_block(B1,B2),ne(B1,B2)]=>[on_block(B1,B2),clear(B1)]), sc(gripper,G,[free(G)]=>[busy(G)])], % conditional []). operator(grip_from_one_block(B,B1,G), % prevail [], % necessary [ sc(block,B,[on_block(B,B1),clear(B),ne(B,B1)]=>[gripped(B,G)]), sc(block,B1,[on_table(B1)]=>[on_table(B1),clear(B1)]), sc(gripper,G,[free(G)]=>[busy(G)])], % conditional []). operator(grip_from_table(B,G), % prevail [], % necessary [ sc(block,B,[on_table(B),clear(B)]=>[gripped(B,G)]), sc(gripper,G,[free(G)]=>[busy(G)])], % conditional []). operator(put_on_blocks(B,G,B1,B2), % prevail [], % necessary [ sc(block,B,[gripped(B,G)]=>[on_block(B,B1),clear(B),ne(B,B1)]), sc(block,B1,[on_block(B1,B2),clear(B1),ne(B1,B2)]=>[on_block(B1,B2)]), sc(gripper,G,[busy(G)]=>[free(G)])], % conditional []). operator(put_on_one_block(B,G,B1), % prevail [], % necessary [ sc(block,B,[gripped(B,G)]=>[on_block(B,B1),clear(B),ne(B,B1)]), sc(block,B1,[on_table(B1),clear(B1)]=>[on_table(B1)]), sc(gripper,G,[busy(G)]=>[free(G)])], % conditional []). operator(put_on_table(B,G), % prevail [], % necessary [ sc(block,B,[gripped(B,G)]=>[on_table(B),clear(B)]), sc(gripper,G,[busy(G)]=>[free(G)])], % conditional []). % Methods % Domain Tasks planner_task(1, % Goals [ se(block,block6,[clear(block6),on_block(block6,block4)])], % INIT States [ ss(gripper,tom,[free(tom)]), ss(block,block1,[on_table(block1),clear(block1)]), ss(block,block2,[on_table(block2),clear(block2)]), ss(block,block3,[on_table(block3)]), ss(block,block4,[on_table(block4)]), ss(block,block5,[on_block(block5,block4),clear(block5)]), ss(block,block6,[on_table(block6),clear(block6)]), ss(block,block7,[on_block(block7,block3),clear(block7)])]). planner_task(2, % Goals [ se(block,block2,[on_block(block2,block5)]), se(block,block1,[clear(block1),on_block(block1,block2)]), se(gripper,tom,[busy(tom)])], % INIT States [ ss(gripper,tom,[free(tom)]), ss(block,block1,[on_block(block1,block3),clear(block1)]), ss(block,block2,[on_table(block2)]), ss(block,block3,[on_table(block3)]), ss(block,block4,[on_table(block4)]), ss(block,block5,[on_table(block5),clear(block5)]), ss(block,block6,[on_block(block6,block4),clear(block6)]), ss(block,block7,[on_block(block7,block2),clear(block7)])]). planner_task(3, % Goals [ se(gripper,tom,[free(tom)]), se(block,block1,[on_block(block1,block2)])], % INIT States [ ss(gripper,tom,[free(tom)]), ss(block,block1,[on_table(block1)]), ss(block,block2,[on_table(block2),clear(block2)]), ss(block,block3,[on_block(block3,block1),clear(block3)]), ss(block,block4,[on_table(block4),clear(block4)]), ss(block,block5,[on_table(block5),clear(block5)]), ss(block,block6,[on_table(block6),clear(block6)]), ss(block,block7,[on_table(block7),clear(block7)])]). planner_task(4, % Goals [ se(block,block6,[on_block(block6,block4)]), se(block,block2,[clear(block2)]), se(gripper,tom,[free(tom)])], % INIT States [ ss(gripper,tom,[busy(tom)]), ss(block,block1,[on_block(block1,block4),clear(block1)]), ss(block,block2,[on_table(block2)]), ss(block,block3,[gripped(block3,tom)]), ss(block,block4,[on_table(block4)]), ss(block,block5,[on_block(block5,block7),clear(block5)]), ss(block,block6,[on_block(block6,block2),clear(block6)]), ss(block,block7,[on_table(block7)])]). planner_task(5, % Goals [ se(block,block7,[gripped(block7,tom)]), se(block,block6,[on_table(block6)]), se(gripper,tom,[busy(tom)])], % INIT States [ ss(gripper,tom,[busy(tom)]), ss(block,block1,[on_table(block1),clear(block1)]), ss(block,block2,[on_block(block2,block5),clear(block2)]), ss(block,block3,[on_table(block3)]), ss(block,block4,[gripped(block4,tom)]), ss(block,block5,[on_block(block5,block6)]), ss(block,block6,[on_table(block6)]), ss(block,block7,[on_block(block7,block3),clear(block7)])]).