%======================================================================== %----This outputs TPTP Problem Set clauses and formulae in a format %----acceptable to the ftprolog system. %----FOF only %----Written by Thomas Raths & Jens Otten, April 2005, adapted Nov 2005 %======================================================================== % Syntax von ft: % % constant, variable, function ::= % sequence of alphabetic, numeric characters and '_' beginning with % a lowercase letter % % term ::= constant | variable | function(terms) % % terms ::= term | term , terms % % let f, f1, f2 be formulae % % formula ::= Literal | Var[var list] % neg f | f1 and f2 | f1 or f2 | f1 imp f2 | f1 iff f2 | % a(var,f) | e(var,f) | % (f) %----Print out the connectives, quantifiers, and literals of a formula %----in ftprolog format. output_ftprolog_fof(~ A):- !, write('( neg '), output_ftprolog_fof(A), write(' )'). output_ftprolog_fof('|'(A,B) ):- !, write('( '), output_ftprolog_fof(A), write(' or '), output_ftprolog_fof(B), write(' )'). output_ftprolog_fof((A ; B)):- !, write('( '), output_ftprolog_fof(A), write(' or '), output_ftprolog_fof(B), write(' )'). output_ftprolog_fof(A & B):- !, write('( '), output_ftprolog_fof(A), write(' and '), output_ftprolog_fof(B), write(' )'). output_ftprolog_fof(A => B):- !, write('( '), output_ftprolog_fof(A), write(' imp '), output_ftprolog_fof(B), write(' )'). output_ftprolog_fof(A <=> B):- !, write('( '), output_ftprolog_fof(A), write(' iff '), output_ftprolog_fof(B), write(' )'). output_ftprolog_fof(! [] : A):- !, output_ftprolog_fof(A). output_ftprolog_fof(! [V|L] : A):- !, write('( a(x'), write(V), write(','), output_ftprolog_fof(! L : A), write(' ))'). output_ftprolog_fof(? [] : A):- !, output_ftprolog_fof(A). output_ftprolog_fof(? [V|L] : A):- !, write('( e(x'), write(V), write(','), output_ftprolog_fof(? L : A), write(' ))'). output_ftprolog_fof('$true') :- !, write('(atom___ imp atom___)'). output_ftprolog_fof('$false') :- !, write('(false___)'). output_ftprolog_fof(Atom) :- transpred_ftprolog(Atom). %%% transform a tptp-variable or constant 'XYZ' into xXYZ transpred_ftprolog(A) :- atom(A), !, write(A). transpred_ftprolog(A) :- A=..[B|C], write(B), write('('), transterms_ftprolog(C), write(')'). transterms_ftprolog([A|T]):- looks_like_a_variable(A), !, write('x'), write(A), (T\=[] -> (write(','), transterms_ftprolog(T)); true). % A cannot be a variable transterms_ftprolog([A|T]):- A=..[B|C], write(B), write('('), transterms_ftprolog(C), write(')'), (T\=[] -> (write(','), transterms_ftprolog(T)); true). %---------------------------------------------------------------------- %----Print out the formulae in ftprolog format. output_ftprolog_fo_formulae([]). % for TPTP-v3.1.0 or later output_ftprolog_fo_formulae([fof(Name,Status,Formula)| RestOfFormulae]):- write('% '), write(Name), write(', '), write(Status), write('.'), nl, write('('), (Status==conjecture -> output_ftprolog_fof(Formula); output_ftprolog_fof(Formula)), write(')'), ( (RestOfFormulae=[fof(_,axiom,_)|_]; RestOfFormulae=[fof(_,lemma,_)|_]; RestOfFormulae=[fof(_,definition,_)|_]; RestOfFormulae=[fof(_,hypothesis,_)|_]) -> (nl, nl, write(' and '), nl, nl); (RestOfFormulae=[fof(_,conjecture,_)|_] -> (nl, nl, write(' imp '), nl, nl); true)), output_ftprolog_fo_formulae(RestOfFormulae). % for TPTP-v2.7.0 or earlier output_ftprolog_fo_formulae([input_formula(Name,Status,Formula)| RestOfFormulae]):- write('% '), write(Name), write(', '), write(Status), write('.'), nl, write('('), (Status==conjecture -> output_ftprolog_fof(Formula); output_ftprolog_fof(Formula)), write(')'), ( (RestOfFormulae=[input_formula(_,axiom,_)|_]; RestOfFormulae=[input_formula(_,hypothesis,_)|_]) -> (nl, nl, write(' and '), nl, nl); (RestOfFormulae=[input_formula(_,conjecture,_)|_] -> (nl, nl, write(' imp '), nl, nl); true)), output_ftprolog_fo_formulae(RestOfFormulae). %---------------------------------------------------------------------- %----Print out the list of input formulae as a first-order formula in %----ftprolog format. output_ftprolog_fo_formula([]):- !. output_ftprolog_fo_formula(Formulae):- nl, write('f(('), nl, nl, output_ftprolog_fo_formulae(Formulae), nl, nl, write(')).'), nl, nl. %---------------------------------------------------------------------- %---------------------------------------------------------------------- %----Print out all the clauses in ftprolog format. ftprolog(ftprolog,Clauses,_):- tptp_clauses(Clauses), output_ftprolog_formula(Clauses). %----Print out first-order formula in ftprolog format. ftprolog(ftprolog,Formulae,_):- tptp_formulae(Formulae), output_ftprolog_fo_formula(Formulae). %---------------------------------------------------------------------- %----Provide information about the ftprolog format. ftprolog_format_information('%','.ftprolog'). %---------------------------------------------------------------------- %----Provide information about the TPTP file. ftprolog_file_information(format,ftprolog). %----------------------------------------------------------------------