![]() |
Connect++ 0.4.0
A fast, readable connection prover for first-order logic.
|
Basic representation of variables. More...
#include <Variable.hpp>
Public Member Functions | |
Variable (const Variable &)=delete | |
Explicitly disallow copying as this is a very bad idea. | |
Variable (const Variable &&)=delete | |
Variable & | operator= (const Variable &)=delete |
Variable & | operator= (const Variable &&)=delete |
ID | get_id () const |
Self-explanatory access function. | |
string | get_name () const |
Self-explanatory access function. | |
string | to_string (bool=false) const |
Convert to a (coloured) string. | |
bool | is_subbed () const |
Self-explanatory. | |
Term * | get_subbed_term () const |
Self-explanatory. | |
void | remove_substitution () |
Self-explanatory, but be careful! | |
void | substitute (Term *t) |
Self-explanatory, but be careful! | |
bool | subbed_is_function () const |
Is the variable now a function, taking substitution into account? | |
bool | subbed_is_variable () const |
Is the variable still in fact a variable, taking substitution into account? | |
Variable * | subbed_variable () const |
If the variable is unsubbed then return "this"; otherwise a pointer to the variable at the end of a chain of substitutions of variables for variables. | |
bool | contains_variable (Variable *) const |
Does the substitution turn the variable into something that includes the variable passed? | |
Function * | get_subbed_f () const |
If there is a chain of substitutions ending in a function, find that function. | |
Arity | get_subbed_arity () const |
If there is a chain of substitutions ending in a function, find that function's arity. | |
Term * | skip_leading_variables () const |
It may be that there is a chain of substitutions attached to this variable: skip the leading ones. | |
string | make_LaTeX (bool=false) const |
Convert the Variable to a useable LaTeX representation. | |
Private Member Functions | |
Variable () | |
Constructors: you can only construct un-substituted variables. | |
Variable (ID new_id) | |
Variable (ID new_id, const string &new_name) | |
Private Attributes | |
ID | id |
string | name |
Term * | substitution |
Friends | |
class | VariableIndex |
ostream & | operator<< (ostream &, const Variable &) |
Some methods are in Term.cpp to make the dependencies work. | |
Basic representation of variables.
This way of treating variables makes substitution and the removal thereof extremely easy. BUT, you have to be somewhat careful, because once substituted you may no longer have a variable.
A Variable has an id and a namem Substitution is by way of setting the substitution pointer from nullptr to the address of a Term.
Some of the implementation is in Term.cpp in order to allow the compiler to do things in the right order.
You should never try to construct one of these yourself. Only do it by way of the VariableIndex.
Definition at line 58 of file Variable.hpp.
|
inlineprivate |
Constructors: you can only construct un-substituted variables.
These are private because in order to inforce sharing the only place you should ever construct one is in the VariableIndex, which is a friend.
Definition at line 71 of file Variable.hpp.
|
inlineprivate |
Definition at line 72 of file Variable.hpp.
|
inlineprivate |
Definition at line 73 of file Variable.hpp.
|
delete |
Explicitly disallow copying as this is a very bad idea.
You should never have to do this, and by explicitly disallowing it we help the compiler to find our errors for us.
bool Variable::contains_variable | ( | Variable * | v2 | ) | const |
Does the substitution turn the variable into something that includes the variable passed?
Note that this acts on the eventual term, so if you look for something that has itself been subbed then the answer is "no".
v2 | Pointer to Variable to search for. |
Definition at line 318 of file Term.cpp.
|
inline |
|
inline |
Self-explanatory access function.
Only return the variable name – do not follow substitutions.
Definition at line 99 of file Variable.hpp.
Arity Variable::get_subbed_arity | ( | ) | const |
If there is a chain of substitutions ending in a function, find that function's arity.
Definition at line 334 of file Term.cpp.
Function * Variable::get_subbed_f | ( | ) | const |
If there is a chain of substitutions ending in a function, find that function.
Definition at line 325 of file Term.cpp.
|
inline |
|
inline |
Self-explanatory.
Definition at line 111 of file Variable.hpp.
string Variable::make_LaTeX | ( | bool | subbed = false | ) | const |
Convert the Variable to a useable LaTeX representation.
Note that this makes a limited attempt to deal with all situations. Anonymous variables will work fine, but if your named variables have symbols that need an escape or similar it may not work as expected.
Assumes that the output will be typeset in math mode. Parameter implements substitutions if true.
subbed | Include effect of substitution if true. |
Definition at line 284 of file Term.cpp.
|
inline |
Self-explanatory, but be careful!
As long as your Term* pointers are only generated buy the TermIndex, then you don't have to worry about memory allocation or de-allocation.
If you did a "new Term" anywhere yourself then you must live with the consequences.
Definition at line 128 of file Variable.hpp.
Term * Variable::skip_leading_variables | ( | ) | const |
It may be that there is a chain of substitutions attached to this variable: skip the leading ones.
When doing unification we actually want a pointer either to the final variable in a chain or to the first term that's a function. This returns it.
Definition at line 343 of file Term.cpp.
bool Variable::subbed_is_function | ( | ) | const |
Is the variable now a function, taking substitution into account?
Note that this it false if the variable is unsubstituted.
Definition at line 295 of file Term.cpp.
bool Variable::subbed_is_variable | ( | ) | const |
Is the variable still in fact a variable, taking substitution into account?
Note that this it true if the variable is unsubstituted.
Definition at line 302 of file Term.cpp.
Variable * Variable::subbed_variable | ( | ) | const |
If the variable is unsubbed then return "this"; otherwise a pointer to the variable at the end of a chain of substitutions of variables for variables.
You should probably only call this if you know the substitution is a chain of variables. (Otherwise you're getting a nullptr and an error message.)
Definition at line 309 of file Term.cpp.
|
inline |
Self-explanatory, but be careful!
As long as your Term* pointers are only generated buy the TermIndex, then you don't have to worry about memory allocation or de-allocation.
If you did a "new Term" anywhere yourself then you must live with the consequences.
t | Pointer to Term to substitute. |
Definition at line 142 of file Variable.hpp.
string Variable::to_string | ( | bool | subbed = false | ) | const |
Convert to a (coloured) string.
subbed | Include effect of substitution if true. |
Definition at line 276 of file Term.cpp.
|
friend |
Some methods are in Term.cpp to make the dependencies work.
What?!! Where is everything?!! The file you need is Term.cpp. This is mainly for debugging. If you want actual representations then use Variable::to_string or similar.
Definition at line 36 of file Variable.cpp.
|
friend |
Definition at line 76 of file Variable.hpp.
|
private |
Definition at line 60 of file Variable.hpp.
|
private |
Definition at line 61 of file Variable.hpp.
|
private |
Definition at line 62 of file Variable.hpp.