54#include <boost/spirit/include/qi.hpp>
56#include "Exceptions.hpp"
57#include "PredicateIndex.hpp"
58#include "FunctionIndex.hpp"
61#include "vic_strings.hpp"
68namespace fs = std::filesystem;
70using namespace boost::spirit;
79 using Iter = string::const_iterator;
92 boost::recursive_wrapper<fof_plain_term_struct>
105 std::vector<fof_arguments_struct> args;
128 std::vector<fof_atomic_formula_type> f;
141BOOST_FUSION_ADAPT_STRUCT(
144 (std::vector<tptp_parser::fof_arguments_struct>, args)
153BOOST_FUSION_ADAPT_STRUCT(
176 struct fof_unitary_formula_struct;
177 struct fof_negation_struct;
178 struct fof_quantifier_struct;
179 struct fof_binary_struct;
180 struct fof_andor_struct;
184 using fof_formula_type = boost::variant<
185 fof_plain_term_struct,
187 boost::recursive_wrapper<fof_unitary_formula_struct>,
188 boost::recursive_wrapper<fof_negation_struct>,
189 boost::recursive_wrapper<fof_quantifier_struct>,
190 boost::recursive_wrapper<fof_binary_struct>,
191 boost::recursive_wrapper<fof_andor_struct>
196 struct fof_unitary_formula_struct {
197 fof_formula_type arg;
202 struct fof_negation_struct {
204 fof_formula_type arg;
209 struct fof_quantifier_struct {
211 std::vector<string> vars;
212 fof_formula_type arg;
217 struct fof_binary_struct {
218 fof_formula_type lhs;
220 fof_formula_type rhs;
225 struct fof_andor_struct {
226 fof_formula_type lhs;
228 vector<fof_formula_type> rhs;
241BOOST_FUSION_ADAPT_STRUCT(
242 tptp_parser::fof_unitary_formula_struct,
243 (tptp_parser::fof_formula_type, arg)
252BOOST_FUSION_ADAPT_STRUCT(
253 tptp_parser::fof_negation_struct,
255 (tptp_parser::fof_formula_type, arg)
264BOOST_FUSION_ADAPT_STRUCT(
265 tptp_parser::fof_quantifier_struct,
267 (std::vector<string>, vars)
268 (tptp_parser::fof_formula_type, arg)
277BOOST_FUSION_ADAPT_STRUCT(
278 tptp_parser::fof_binary_struct,
279 (tptp_parser::fof_formula_type, lhs)
281 (tptp_parser::fof_formula_type, rhs)
290BOOST_FUSION_ADAPT_STRUCT(
291 tptp_parser::fof_andor_struct,
292 (tptp_parser::fof_formula_type, lhs)
294 (std::vector<tptp_parser::fof_formula_type>, rhs)
309 struct show_fof_plain_term {
310 void operator()(
const fof_plain_term_struct&);
318 struct show_fof_arguments : boost::static_visitor<> {
319 void operator()(
const string& s) {
322 void operator()(
const fof_plain_term_struct& t) {
323 show_fof_plain_term spt;
333 struct show_fof_atomic_formula : boost::static_visitor<> {
334 void operator()(
const fof_plain_term_struct& s) {
335 show_fof_plain_term st;
338 void operator()(
const infix_struct& s) {
339 show_fof_arguments sa;
340 boost::apply_visitor(sa, s.left);
341 cout <<
" " << s.connective <<
" ";
342 boost::apply_visitor(sa, s.right);
352 void operator()(
const vector<fof_atomic_formula_type>& v)
const {
353 show_fof_atomic_formula st;
354 cout <<
"Clause = {" << endl;
355 for (fof_atomic_formula_type f : v) {
357 boost::apply_visitor(st, f);
370 void operator()(
const fof_plain_term_struct& t) {
371 show_fof_atomic_formula saf;
374 void operator()(
const infix_struct& s) {
375 show_fof_atomic_formula saf;
378 void operator()(
const fof_unitary_formula_struct& f) {
380 boost::apply_visitor(sf, f.arg);
382 void operator()(
const fof_negation_struct& f) {
383 cout << f.type <<
"(";
385 boost::apply_visitor(sf, f.arg);
388 void operator()(
const fof_quantifier_struct& f) {
389 cout << f.type <<
" [";
390 for (
const string& s : f.vars)
394 boost::apply_visitor(sf, f.arg);
397 void operator()(
const fof_binary_struct& f) {
399 boost::apply_visitor(sf, f.lhs);
400 cout <<
" " << f.type <<
" ";
401 boost::apply_visitor(sf, f.rhs);
403 void operator()(
const fof_andor_struct& f) {
405 boost::apply_visitor(sf, f.lhs);
406 for (
const fof_formula_type& g : f.rhs) {
407 cout <<
" " << f.type <<
" ";
408 boost::apply_visitor(sf, g);
419 void operator()(
const fof_formula_type& f)
const {
421 boost::apply_visitor(sf, f);
434 void operator()(
const vector<string>&, qi::unused_type, qi::unused_type)
const;
442 void operator()(
const string&, qi::unused_type, qi::unused_type)
const;
450 void operator()(
const string&, qi::unused_type, qi::unused_type)
const;
458 void operator()(
const string&, qi::unused_type, qi::unused_type)
const;
469 void operator()(
const fof_atomic_formula_type&, qi::unused_type,qi::unused_type)
const;
477 void operator()(
const fof_atomic_formula_type&, qi::unused_type, qi::unused_type)
const;
485 void operator()(qi::unused_type, qi::unused_type, qi::unused_type)
const;
493 void operator()(qi::unused_type, qi::unused_type, qi::unused_type)
const;
501 void operator()(qi::unused_type, qi::unused_type, qi::unused_type)
const;
509 void operator()(qi::unused_type, qi::unused_type, qi::unused_type)
const;
524 Literal operator()(
const fof_plain_term_struct&)
const;
525 Literal operator()(
const infix_struct&)
const;
537 Term* operator()(
const string&)
const;
538 Term* operator()(
const fof_plain_term_struct&)
const;
547 void operator()(
const string&,
549 qi::unused_type)
const;
555 void operator()(
const string&,
557 qi::unused_type)
const;
566 void operator()(
const string&,
568 qi::unused_type)
const;
574 void operator()(
const string&,
576 qi::unused_type)
const;
587 FOF operator()(
const fof_plain_term_struct&)
const;
588 FOF operator()(
const infix_struct&)
const;
589 FOF operator()(
const fof_unitary_formula_struct&)
const;
590 FOF operator()(
const fof_negation_struct&)
const;
591 FOF operator()(
const fof_quantifier_struct&)
const;
592 FOF operator()(
const fof_binary_struct&)
const;
593 FOF operator()(
const fof_andor_struct&)
const;
601 void operator()(
const fof_formula_type&, qi::unused_type, qi::unused_type)
const;
609 void operator()(qi::unused_type, qi::unused_type, qi::unused_type)
const;
621void read_tptp_from_file_simple(
const string&,
string&);
633using FileIncludeItem = pair<string, vector<string>>;
635void recursive_tptp_include(
const FileIncludeItem&);
657 string file_contents;
661 vector<string> comment_blocks;
704 void read_tptp_from_file(
const string&);
733 bool parse_tptp_from_file(
const string&);
739 void show_file_includes();
753 vector<string> get_defined_items();
759 vector<string> get_system_items();
763 bool equality_used();
767 bool conjecture_present()
const;
771 size_t number_of_fof_formulas()
const;
775 string get_problem_status();
Representation of first order formulas.
Definition FOF.hpp:57
Mechanism for looking after functions.
Definition FunctionIndex.hpp:64
Basic representation of literals, bundling together (pointers to) a Predicate, a collection of argume...
Definition Literal.hpp:50
Representation of the Matrix within a proof.
Definition Matrix.hpp:70
Basic representation of predicates: here just names, ids and arities.
Definition Predicate.hpp:51
Management of Predicate objects.
Definition PredicateIndex.hpp:58
Wrap up everything the TPTP parser needs to do inside a single class.
Definition TPTPParser.hpp:650
TPTPParser()=delete
You definitely don't want this constructor.
General representation of terms.
Definition Term.hpp:62
Look after terms, (ideally) using hash consing to avoid storing copies of terms.
Definition TermIndex.hpp:75
Storage of named variables, and management of new, anonymous variables.
Definition VariableIndex.hpp:61
The tptp_parser namespace contains a lot of stuff that's essentially just global.
Definition TPTPParser.cpp:71
boost::variant< string, boost::recursive_wrapper< fof_plain_term_struct > > fof_arguments_struct
Variant - Term arguments can be Variables or other Terms.
Definition TPTPParser.hpp:93
string::const_iterator Iter
Iterator type for parser rules and grammars.
Definition TPTPParser.hpp:79
boost::variant< fof_plain_term_struct, infix_struct > fof_atomic_formula_type
An atomic formula can be infix as well.
Definition TPTPParser.hpp:121
One of several basic semantic actions.
Definition TPTPParser.hpp:449
One of several basic semantic actions.
Definition TPTPParser.hpp:433
One of several basic semantic actions.
Definition TPTPParser.hpp:457
Collection of more complex semantic actions.
Definition TPTPParser.hpp:508
Collection of more complex semantic actions.
Definition TPTPParser.hpp:500
More complex semantic actions, now functions etc to make a literal.
Definition TPTPParser.hpp:536
Collection of more complex semantic actions.
Definition TPTPParser.hpp:484
Collection of more complex semantic actions.
Definition TPTPParser.hpp:476
Collection of more complex semantic actions.
Definition TPTPParser.hpp:468
Parser's representation of a Clause.
Definition TPTPParser.hpp:125
Recursive data structure for Terms.
Definition TPTPParser.hpp:103
Structure for fof_defined_infix_formula and fof_infix_unary.
Definition TPTPParser.hpp:110
Collection of more complex semantic actions.
Definition TPTPParser.hpp:492