package aspectjhw.lambda;
import java.util.Set;
/** Terms in the lambda calculus. */
public interface Term {
    
    /** Reduce one step. */
    //@ ensures \result != null;
    Term reduce1Step();
    
    /** Return the set of all Strings that name 
     * free variables referenced in this term. */
    //@ ensures \result != null;
    Set freeVars();
    
    /** Substitute arg for all free occurrences of var. */
    //@ requires var != null && arg != null;
    //@ ensures \result != null;
    Term substituteFor(String var, Term arg);
}
