package x10.constraint;
import java.util.List;
/**
* Interface for the factory class for XConstraints and XTerms.
* @author lshadare
*
*/
public interface XConstraintSystem {
public XConstraint makeConstraint();
public XConstraint makeTrueConstraint();
public XLit xtrue();
public XLit xfalse();
public XLit xnull();
/**
* Make a fresh EQV with a system chosen name.
* @return
*/
public XEQV makeEQV();
/**
* Make a fresh UQV with a system chosen name.
* @return
*/
public XUQV makeUQV();
/**
* Make a fresh UQV whose name starts with prefix.
* @param prefix -- a prefix of the name for the returned UQV
* @return
*/
public XUQV makeUQV(String prefix);
/**
* Make and return <code>receiver.field</code>.
* @param receiver
* @param field
* @return
*/
public <T> XField<T> makeField(XVar receiver, T field);
public XField<Object> makeFakeField(XVar receiver, Object field);
/** Make and return a literal containing o. null, true and false are
* interned.
*/
public XLit makeLit(Object o);
public XFormula<Object> makeAtom(Object op, XTerm... terms);
public XFormula<Object> makeAtom(Object op, boolean isAtomicFormula, XTerm... terms);
public XTerm makeEquals(XTerm left, XTerm right);
public XTerm makeDisEquals(XTerm left, XTerm right);
public XTerm makeAnd(XTerm left, XTerm right);
public XTerm makeNot(XTerm arg);
/**
* Make a local variable with the given name
* @param name variable name
*/
public <T> XLocal<T> makeLocal(T name);
}