cnf(symmetry_of_differ,axiom,
    ( differ(X,Y)
    | ~ differ(Y,X) ) ).

cnf(differ_a_b,axiom,
    differ(a,b) ).

cnf(differ_a_c,axiom,
    differ(a,c) ).

cnf(differ_a_d,axiom,
    differ(a,d) ).

cnf(differ_a_table,axiom,
    differ(a,table) ).

cnf(differ_b_c,axiom,
    differ(b,c) ).

cnf(differ_b_d,axiom,
    differ(b,d) ).

cnf(differ_b_table,axiom,
    differ(b,table) ).

cnf(differ_c_d,axiom,
    differ(c,d) ).

cnf(differ_c_table,axiom,
    differ(c,table) ).

cnf(differ_d_table,axiom,
    differ(d,table) ).

%----Initial configuration
cnf(initial_state1,axiom,
    holds(on(a,table),s0) ).

cnf(initial_state2,axiom,
    holds(on(b,table),s0) ).

cnf(initial_state3,axiom,
    holds(on(c,d),s0) ).

cnf(initial_state4,axiom,
    holds(on(d,table),s0) ).

cnf(initial_state5,axiom,
    holds(clear(a),s0) ).

cnf(initial_state6,axiom,
    holds(clear(b),s0) ).

cnf(initial_state7,axiom,
    holds(clear(c),s0) ).

cnf(initial_state8,axiom,
    holds(empty,s0) ).

%----Table is always clear
cnf(clear_table,axiom,
    holds(clear(table),State) ).