31#include "PredicateIndex.hpp"
32#include "FunctionIndex.hpp"
43enum class FOFType {Empty, Atom, Neg, And, Or, Imp, Iff, A, E};
71 vector<FOF> sub_formulas;
130 Term* make_skolem_function(
const vector<Term*>&);
155 void skolemize_main(vector<Term*>);
171 void miniscope_split(
Variable*, vector<FOF>&, vector<FOF>&);
175 void miniscope_all();
188 : type(t), pred(), sub_formulas(), var(nullptr) {}
213 var_index = std::get<0>(is);
214 fun_index = std::get<1>(is);
215 pred_index = std::get<2>(is);
216 term_index = std::get<3>(is);
222 cout << var_index <<
" " << fun_index
239 type = FOFType::Empty;
241 sub_formulas.clear();
262 FOF result(FOFType::Neg, fs,
nullptr);
269 FOF result(FOFType::And, fs,
nullptr);
276 FOF result(FOFType::Or, fs,
nullptr);
286 FOF result(FOFType::Imp, fs,
nullptr);
296 FOF result(FOFType::Iff, fs,
nullptr);
305 FOF result(FOFType::A, fs, v);
314 FOF result(FOFType::E, fs, v);
445 static SimplificationResult
simplify_cnf(vector<Clause>&);
447 friend ostream& operator<<(ostream&,
const FOF&);
Representation of first order formulas.
Definition FOF.hpp:57
void skolemize()
Skolemize the given formula.
Definition FOF.cpp:640
void remove_iff()
Replace <-> throughout using ->.
Definition FOF.cpp:272
static FOF make_or(const vector< FOF > &fs)
Directly make a disjunction.
Definition FOF.hpp:275
void convert_to_nnf()
Convert to Negation Normal Form.
Definition FOF.cpp:407
void clear()
Make an FOFType::Empty.
Definition FOF.hpp:238
void add_formula(const FOF &f)
Add a subformula.
Definition FOF.hpp:234
void convert_to_cnf_clauses(vector< Clause > &)
Convert to Conjunctive Normal Form.
Definition FOF.cpp:584
FOFType fof_type()
Basic get method.
Definition FOF.hpp:230
void show_indexes() const
Show the indices.
Definition FOF.hpp:221
void make_unique_bound_variables()
Replace all bound variables with unique new ones.
Definition FOF.cpp:317
static SimplificationResult simplify_cnf(vector< Clause > &)
Simplify the clauses in a CNF using the method in Clause.
Definition FOF.cpp:861
void remove_universal_quantifiers()
Self-explanatory.
Definition FOF.cpp:645
bool distribute_or_once()
Find an OR that can be distributed and deal with it. Indicate if there isn't one.
Definition FOF.cpp:726
static FOF make_and(const vector< FOF > &fs)
Directly make a conjunction.
Definition FOF.hpp:268
void miniscope()
Apply the rules for miniscoping.
Definition FOF.cpp:417
static FOF make_iff(const FOF &lhs, const FOF &rhs)
Directly make an iff.
Definition FOF.hpp:292
void push_negs()
Push all negations in.
Definition FOF.cpp:342
static FOF make_literal(const Literal &lit)
Directly make a Literal.
Definition FOF.hpp:250
static void set_indexes(std::tuple< VariableIndex *, FunctionIndex *, PredicateIndex *, TermIndex * > is)
Set up pointer to the variable index etc.
Definition FOF.hpp:209
static FOF make_neg(const FOF &f)
Directly negate a FOF.
Definition FOF.hpp:259
void to_Literal(Literal &) const
Assuming the FOF is a literal, convert it to something of type Literal.
Definition FOF.cpp:673
static FOF make_exists(const FOF &f, Variable *v)
Directly make an existentially quantified FOF.
Definition FOF.hpp:311
void remove_negation()
Remove the leading negation from an arbitrary FOF, if it has one.
Definition FOF.cpp:243
static FOF make_forall(const FOF &f, Variable *v)
Directly make a universally quantified FOF.
Definition FOF.hpp:302
void convert_to_clauses(vector< Clause > &) const
Assuming you have a CNF, convert it to a collection of Clauses.
Definition FOF.cpp:683
void remove_imp()
Replace A->B throughout with neg A v B.
Definition FOF.cpp:299
size_t find_and() const
Does the collection of subformulas contain an AND? If so, find it.
Definition FOF.cpp:716
FOF(FOFType t)
You probably don't want this constructor.
Definition FOF.hpp:187
FOF()=delete
You don't want this constructor.
static FOF make_imp(const FOF &lhs, const FOF &rhs)
Directly make an implication.
Definition FOF.hpp:282
void distribute_or()
Definition FOF.cpp:779
bool is_literal() const
Check if an FOF is a literal.
Definition FOF.cpp:221
string to_string() const
Convert a FOF into a nice-looking string.
Definition FOF.cpp:783
void negate()
Negate an FOF, applying obvious simplifications if it's already negated or an implication.
Definition FOF.cpp:250
bool is_clause() const
Check if something is a clause.
Definition FOF.cpp:226
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
void clear()
Basic manipulation - entirely self-explanatory.
Definition Literal.hpp:115
Management of Predicate objects.
Definition PredicateIndex.hpp:58
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
Basic representation of variables.
Definition Variable.hpp:58
Storage of named variables, and management of new, anonymous variables.
Definition VariableIndex.hpp:61