public class ClashFreeSubst
extends java.lang.Object
| Modifier and Type | Class and Description | 
|---|---|
static class  | 
ClashFreeSubst.VariableCollectVisitor
A Visitor class to collect all (not just the free) variables
 occurring in a term. 
 | 
| Modifier and Type | Field and Description | 
|---|---|
protected Term | 
s  | 
protected ImmutableSet<QuantifiableVariable> | 
svars  | 
protected TermBuilder | 
tb  | 
protected QuantifiableVariable | 
v  | 
| Constructor and Description | 
|---|
ClashFreeSubst(QuantifiableVariable v,
              Term s,
              TermBuilder tb)  | 
| Modifier and Type | Method and Description | 
|---|---|
Term | 
apply(Term t)
substitute  
s for v in t,
 avoiding collisions by replacing bound variables in
 t if necessary. | 
protected Term | 
apply1(Term t)
substitute  
s for v in
 t, avoiding collisions by replacing bound
 variables in t if necessary. | 
private void | 
applyOnSubterm(int varInd,
              ImmutableArray<QuantifiableVariable> boundVars,
              QuantifiableVariable[] newBoundVars,
              int subInd,
              Term subTerm,
              Term[] newSubterms)
Perform the substitution on  
subTerm bound by the
 variables in boundVars, starting with the variable
 at index varInd. | 
protected void | 
applyOnSubterm(Term completeTerm,
              int subtermIndex,
              Term[] newSubterms,
              ImmutableArray<QuantifiableVariable>[] newBoundVars)
Apply the substitution of the subterm  
subtermIndex of
 term/formula completeTerm. | 
private void | 
applyOnSubterm1(int varInd,
               ImmutableArray<QuantifiableVariable> boundVars,
               QuantifiableVariable[] newBoundVars,
               int subInd,
               Term subTerm,
               Term[] newSubterms)
Same as applyOnSubterm, but v doesn't have to occurr free in the
 considered quantified subterm. 
 | 
private Term | 
applyOnSubterms(Term t)
substitute  
s for v in
 every subterm of t, and build a new term. | 
protected static ImmutableArray<QuantifiableVariable> | 
getSingleArray(ImmutableArray<QuantifiableVariable>[] bv)  | 
protected Term | 
getSubstitutedTerm()  | 
protected QuantifiableVariable | 
getVariable()  | 
private boolean | 
nameNewInSet(java.lang.String n,
            ImmutableSet<QuantifiableVariable> qvars)
returns true if there is no object named  
n in the
 set s | 
protected QuantifiableVariable | 
newVarFor(QuantifiableVariable var,
         ImmutableSet<QuantifiableVariable> usedVars)
returns a new variable that has a name derived from that of
  
var, that is different from any of the names of
 variables in usedVars. | 
protected boolean | 
subTermChanges(ImmutableArray<QuantifiableVariable> boundVars,
              Term subTerm)
returns true if  
subTerm bound by
 boundVars would change under application of this
 substitution. | 
protected QuantifiableVariable v
protected Term s
protected ImmutableSet<QuantifiableVariable> svars
protected final TermBuilder tb
public ClashFreeSubst(QuantifiableVariable v, Term s, TermBuilder tb)
protected QuantifiableVariable getVariable()
protected Term getSubstitutedTerm()
public Term apply(Term t)
s for v in t,
 avoiding collisions by replacing bound variables in
 t if necessary.protected Term apply1(Term t)
s for v in
 t, avoiding collisions by replacing bound
 variables in t if necessary.  It is
 assumed, that t contains a free occurrence of
 v.protected static ImmutableArray<QuantifiableVariable> getSingleArray(ImmutableArray<QuantifiableVariable>[] bv)
private Term applyOnSubterms(Term t)
s for v in
 every subterm of t, and build a new term.
 It is assumed, that one of the subterms contains a free occurrence
 of v, and that the case v==t is already
 handled.protected void applyOnSubterm(Term completeTerm, int subtermIndex, Term[] newSubterms, ImmutableArray<QuantifiableVariable>[] newBoundVars)
subtermIndex of
 term/formula completeTerm. The result is stored in
 newSubterms and newBoundVars (at index
 subtermIndex)private void applyOnSubterm(int varInd,
                            ImmutableArray<QuantifiableVariable> boundVars,
                            QuantifiableVariable[] newBoundVars,
                            int subInd,
                            Term subTerm,
                            Term[] newSubterms)
subTerm bound by the
 variables in boundVars, starting with the variable
 at index varInd.  Put the resulting bound
 variables (which might be new) into newBoundVars,
 starting from position varInd, and the resulting
 subTerm into newSubterms[subInd].
  It is assumed that v occurrs free in
 in this quantified subterm, i.e. it occurrs free in
 subTerm, but does not occurr in
 boundVars from varInd upwards..
private void applyOnSubterm1(int varInd,
                             ImmutableArray<QuantifiableVariable> boundVars,
                             QuantifiableVariable[] newBoundVars,
                             int subInd,
                             Term subTerm,
                             Term[] newSubterms)
protected boolean subTermChanges(ImmutableArray<QuantifiableVariable> boundVars, Term subTerm)
subTerm bound by
 boundVars would change under application of this
 substitution.  This is the case, if v occurrs free
 in subTerm, but does not occurr in boundVars.protected QuantifiableVariable newVarFor(QuantifiableVariable var, ImmutableSet<QuantifiableVariable> usedVars)
var, that is different from any of the names of
 variables in usedVars.
  Assumes that var is a @link{LogicVariable}.
private boolean nameNewInSet(java.lang.String n,
                             ImmutableSet<QuantifiableVariable> qvars)
n in the
 set s