TPTP Problem File: PLA028+1.p

View Solutions - Solve Problem

%--------------------------------------------------------------------------
% File     : PLA028+1 : TPTP v7.3.0. Bugfixed v2.5.0.
% Domain   : Planning
% Problem  : Blocks A, B => A/B
% Version  : [Bau99] axioms.
% English  :

% Refs     : [Bau99] Baumgartner (1999), FTP'2000 - Problem Sets
%            [KS96]  Kautz & Selman (1996), Pushing the Envelope: Planning,
%            [KS92]  Kautz & Selman (1992), Planning as Satisfiability
% Source   : [Bau99]
% Names    : tiny [Bau99]

% Status   : CounterSatisfiable
% Rating   : 0.00 v6.2.0, 0.11 v6.1.0, 0.10 v6.0.0, 0.00 v5.4.0, 0.13 v5.3.0, 0.15 v5.2.0, 0.25 v5.0.0, 0.00 v4.1.0, 0.17 v4.0.1, 0.00 v3.1.0, 0.50 v2.7.0, 0.00 v2.6.0, 0.33 v2.5.0
% Syntax   : Number of formulae    :   45 (  16 unit)
%            Number of atoms       :  153 (   0 equality)
%            Maximal formula depth :   10 (   5 average)
%            Number of connectives :  133 (  25   ~;   6   |;  45   &)
%                                         (   0 <=>;  57  =>;   0  <=;   0 <~>)
%                                         (   0  ~|;   0  ~&)
%            Number of predicates  :   12 (   0 propositional; 1-3 arity)
%            Number of functors    :    5 (   4 constant; 0-1 arity)
%            Number of variables   :   70 (   0 sgn;  70   !;   0   ?)
%            Maximal term depth    :    2 (   1 average)
% SPC      : FOF_CSA_RFO_NEQ

% Comments :
% Bugfixes : v2.5.0 - Combined multiple conjecture formulae.
%--------------------------------------------------------------------------
%----Include blocks world axioms
include('Axioms/PLA002+0.ax').
%--------------------------------------------------------------------------
fof(different_not_equal,hypothesis,
    ( ! [Y,X] :
        ( ( different(X,Y)
          | different(Y,X) )
       => neq(X,Y) ) )).

fof(block_1_not_block_2,hypothesis,
    ( different(block_1,block_2) )).

fof(block_1_not_table,hypothesis,
    ( different(block_1,table) )).

fof(block_2_not_table,hypothesis,
    ( different(block_2,table) )).

%----Blocks in the world:
fof(block_1,hypothesis,
    ( a_block(block_1) )).

fof(block_2,hypothesis,
    ( a_block(block_2) )).

fof(table,hypothesis,
    ( a_block(table) )).

%----Blocks are further distinguished in 'fixed' (which cannot be moved)
%----'nonfixed'.
fof(fixed_table,hypothesis,
    ( fixed(table) )).

fof(nonfixed_block_1,hypothesis,
    ( nonfixed(block_1) )).

fof(nonfixed_block_2,hypothesis,
    ( nonfixed(block_2) )).

%----Give here a list 0..N of timepoints in order to generate the states
%----of time N. Have to enumerate at least up to N in order to find a plan
%----of length N
fof(time_0,hypothesis,
    ( time(time_0) )).

fof(time_1,hypothesis,
    ( time(s(time_0)) )).

%----At any time, have some source, destination and object:
fof(some_source,hypothesis,
    ( ! [I] :
        ( time(I)
       => ( source(block_1,I)
          | source(block_2,I)
          | source(table,I) ) ) )).

fof(some_destination,hypothesis,
    ( ! [I] :
        ( time(I)
       => ( destination(block_1,I)
          | destination(block_2,I)
          | destination(table,I) ) ) )).

fof(some_object,hypothesis,
    ( ! [I] :
        ( time(I)
       => ( object(block_1,I)
          | object(block_2,I) ) ) )).

%----Initial state: both blocks on table
fof(initial_1_on_table,hypothesis,
    ( on(block_1,table,time_0) )).

fof(initial_clear_1,hypothesis,
    ( clear(block_1,time_0) )).

fof(initial_2_on_table,hypothesis,
    ( on(block_2,table,time_0) )).

fof(initial_clear_2,hypothesis,
    ( clear(block_2,time_0) )).

%----Final state
fof(goal_time_1,hypothesis,
    ( goal_time(s(time_0)) )).

fof(goal_state,conjecture,
    ( ! [S] :
        ( goal_time(S)
       => ( clear(block_1,S)
          & on(block_1,block_2,S)
          & on(block_2,table,S) ) ) )).

%--------------------------------------------------------------------------