import { type AbstractProduct, PartialProductDomain } from './partial-product-domain';
/**
 * A product abstract domain as named Cartesian product of sub abstract domains.
 * The sub abstract domains are represented by a record mapping property names to abstract domains.
 * The Bottom element is defined as mapping every sub abstract domain to Bottom and the Top element is defined as mapping every sub abstract domain to Top.
 * @template Product - Type of the abstract product of the product domain mapping property names to abstract domains
 */
export declare abstract class ProductDomain<Product extends Required<AbstractProduct>> extends PartialProductDomain<Product> {
    constructor(value: Product);
    abstract create(value: Product): this;
    top(): this;
    isTop(): boolean;
    isTop(): this is this;
}
