%------------------------------------------------------------------------------
%----About the constants
fof(a_not_b,   axiom, a != b ).

%----About the functions
fof(s_not_X,   axiom, ! [X] : s(X) != X ).
fof(f_b_a,     axiom, f(b) = a ).
fof(f_ss_X,    axiom, ! [X] : f(s(s(X))) = X ).

%----About the predicates
fof(p_a,       axiom, p(a) ).
%------------------------------------------------------------------------------

%------------------------------------------------------------------------------
%----Model domain
fof(domain,fi_domain, ! [X] : ( X = "d1" | X = "d2" | X = "d3" ) ).

%----Constants
fof(a,   fi_functors, a = "d1" ).
fof(b,   fi_functors, b = "d2" ).

%----Total functions
fof(f,   fi_functors, f("d1") = "d3" & f("d2") = "d1" & f("d3") = "d2" ).
fof(s,   fi_functors, s("d1") = "d3" & s("d2") = "d1" & s("d3") = "d2" ).

%----Total predicates - Universal quantification
%---- fof(p, fi_predicates, ! [X1] : p(X1) <=> $true ).

%----Total predicates - Listed
fof(p, fi_predicates, p("d1") & p("d2") & p("d3") ).
%------------------------------------------------------------------------------

%------------------------------------------------------------------------------
%----Formulae to evaluate
fof(prove,conjecture, p(f(s(s(a)))) ).    %----TRUE
 
fof(prove,conjecture, ? [X] : ~ p(X) ).   %----FALSE
%------------------------------------------------------------------------------