tff(level_type,type,level: $tType). tff(ground_level_decl,type,ground: level). tff(middle_level_decl,type,middle: level). tff(top_level_decl,type,top: level). tff(space_level_decl,type,space: level). tff(possible_position_decl,type, possible_position: ($int * $int * level) > $o ). tff(only_four_distinct_levels,axiom, ( ! [Z: level] : ( Z = ground | Z = middle | Z = top | Z = space ) & ( ground != middle & ground != top & ground != space & middle != top & middle != space & top != space ) ) ). % & $distinct(ground,middle,top,space) ) ). tff(start_at_origin,axiom, possible_position(0,0,ground) ). tff(move_X,axiom, ! [X: $int,Y: $int,Z: level] : ( possible_position(X,Y,Z) => ( possible_position($difference(X,1),Y,Z) & possible_position($sum(X,1),Y,Z) ) ) ). tff(move_Y,axiom, ! [X: $int,Y: $int,Z: level] : ( possible_position(X,Y,Z) => ( possible_position(X,$difference(Y,1),Z) & possible_position(X,$sum(Y,1),Z) ) ) ). tff(move_Z,axiom, ! [X: $int,Y: $int] : ( ( possible_position(X,Y,ground) => possible_position(X,Y,middle) ) & ( possible_position(X,Y,middle) => ( possible_position(X,Y,ground) & possible_position(X,Y,top) ) ) & ( possible_position(X,Y,top) => possible_position(X,Y,middle) ) ) ). tff(can_fly,conjecture, possible_position(3,-5,top) ).