import { IImmutableSet } from 'thaw-common-utilities.ts';
import { ILCBetaReductionOptions, ILCExpression, ILCFunctionCall, ILCSubstitution, ILCUnifiable } from './interfaces/expression';
import { LCValueBase } from './value-base';
export declare class LCFunctionCall extends LCValueBase implements ILCFunctionCall {
    readonly callee: ILCExpression;
    readonly arg: ILCExpression;
    constructor(callee: ILCExpression, arg: ILCExpression);
    toString(): string;
    containsVariableNamed(name: string): boolean;
    containsBoundVariableNamed(name: string): boolean;
    containsUnboundVariableNamed(name: string, boundVariableNames: IImmutableSet<string>): boolean;
    substituteForUnboundVariable(name: string, value: ILCExpression): ILCExpression;
    renameBoundVariable(newName: string, oldName: string): ILCExpression;
    isBetaReducible(): boolean;
    private betaReduceCore;
    private betaReduceCallByName;
    private betaReduceNormalOrder;
    private betaReduceCallByValue;
    private betaReduceApplicativeOrder;
    private betaReduceHybridApplicativeOrder;
    private betaReduceHeadSpine;
    private betaReduceHybridNormalOrder;
    private betaReduceThAWHackForYCombinator;
    betaReduce(options?: ILCBetaReductionOptions): ILCExpression;
    deltaReduce(): ILCExpression;
    etaReduce(): ILCExpression;
    getSetOfAllVariableNames(): IImmutableSet<string>;
    applySubstitution(substitution: ILCSubstitution): ILCExpression;
    unify(other: ILCUnifiable, variablesInOriginalExpr1Param?: IImmutableSet<string>, variablesInOriginalExpr2Param?: IImmutableSet<string>): ILCSubstitution | undefined;
}
//# sourceMappingURL=call.d.ts.map