import { Variable } from "./language";
export declare abstract class ExpressionNode {
    abstract toPddlString(): string;
}
export declare class VariableDeclarationNode extends ExpressionNode {
    readonly variable: Variable;
    constructor(variable: Variable);
    toPddlString(): string;
}
export declare class VariableNode extends ExpressionNode {
    readonly variable: Variable;
    constructor(variable: Variable);
    toPddlString(): string;
}
export declare class UnaryExpressionNode extends ExpressionNode {
    readonly nested: ExpressionNode;
    private readonly keyword;
    constructor(nested: ExpressionNode, keyword: string);
    toPddlString(): string;
}
export declare class BinaryExpressionNode extends ExpressionNode {
    readonly left: ExpressionNode;
    readonly right: ExpressionNode;
    private readonly keyword;
    constructor(left: ExpressionNode, right: ExpressionNode, keyword: string);
    toPddlString(): string;
}
export declare class NAryLogicalExpression extends ExpressionNode {
    readonly operands: ExpressionNode[];
    private readonly keyword;
    constructor(operands: ExpressionNode[], keyword: string);
    toPddlString(): string;
}
export declare class Not extends UnaryExpressionNode {
    readonly nested: ExpressionNode;
    constructor(nested: ExpressionNode);
}
export declare class AtStart extends UnaryExpressionNode {
    readonly nested: ExpressionNode;
    constructor(nested: ExpressionNode);
}
export declare class AtEnd extends UnaryExpressionNode {
    readonly nested: ExpressionNode;
    constructor(nested: ExpressionNode);
}
export declare class OverAll extends UnaryExpressionNode {
    readonly nested: ExpressionNode;
    constructor(nested: ExpressionNode);
}
export declare class DurationExpressionNode extends ExpressionNode {
    constructor();
    toPddlString(): string;
}
export declare class EqualityNode extends BinaryExpressionNode {
    readonly left: ExpressionNode;
    readonly right: ExpressionNode;
    constructor(left: ExpressionNode, right: ExpressionNode);
}
export declare function expression(variable: Variable): ExpressionNode;
export declare function overAll(expression: ExpressionNode): ExpressionNode;
export declare function atEnd(expression: ExpressionNode): ExpressionNode;
export declare function atStart(expression: ExpressionNode): ExpressionNode;
export declare function not(variable: Variable): ExpressionNode;
export declare function and(conjuncts: ExpressionNode[]): ExpressionNode;
