import { IntervalDomain } from './interval-domain';
import { Bottom } from './lattice';
/** The Top element of the positive interval domain as interval [0, +∞] */
export declare const PosIntervalTop: PosIntervalValue;
/** The type of the actual values of the positive interval domain as tuple of the lower and upper bound */
export type PosIntervalValue = readonly [lower: number, upper: number];
/** The type of the Top element of the positive interval domain as interval [0, +∞] */
export type PosIntervalTop = typeof PosIntervalTop;
/** The type of the Bottom element of the positive interval domain as {@link Bottom} symbol */
export type PosIntervalBottom = typeof Bottom;
/** The type of the abstract values of the positive interval domain that are Top, Bottom, or actual values */
export type PosIntervalLift = PosIntervalValue | PosIntervalBottom;
/**
 * The positive interval abstract domain as positive intervals with possibly zero lower bounds and infinite upper bounds representing possible numeric values.
 * The Bottom element is defined as {@link Bottom} symbol and the Top element is defined as the interval [0, +∞].
 * @template Value - Type of the constraint in the abstract domain (Top, Bottom, or an actual value)
 */
export declare class PosIntervalDomain<Value extends PosIntervalLift = PosIntervalLift> extends IntervalDomain<Value> {
    constructor(value: Value);
    create(value: PosIntervalLift): this;
    static top(): PosIntervalDomain<PosIntervalTop>;
    static bottom(): PosIntervalDomain<PosIntervalBottom>;
    top(): this & PosIntervalDomain<PosIntervalTop>;
    protected widenValue(this: this & PosIntervalDomain<PosIntervalValue>, other: PosIntervalDomain<PosIntervalValue>): this;
    protected narrowValue(this: this & PosIntervalDomain<PosIntervalValue>, other: PosIntervalDomain<PosIntervalValue>): this;
    subtract(other: this | PosIntervalLift): this;
    /**
     * Extends the lower bound of the current abstract value down to 0.
     */
    widenDown(): this;
    isTop(): this is this & PosIntervalDomain<PosIntervalTop>;
}
