export declare type UnaryConnective<T, R> = (p: T) => R;
export declare type BinaryConnective<T, R> = (p: T, q: T) => R;
export declare type VariadicBinaryConnective<T, R> = (p: T, q: T, ...args: T[]) => R;
declare type UnaryConnectiveNames = 'not';
declare type BinaryConnectiveNames = 'and' | 'or' | 'imply' | 'xor' | 'nand' | 'nor' | 'nimply' | 'xnor';
declare type UnaryConnectives<T, R> = {
    [k in UnaryConnectiveNames]: UnaryConnective<T, R>;
};
declare type BinaryConnectives<T, R> = {
    [k in BinaryConnectiveNames]: BinaryConnective<T, R>;
};
declare type VariadicBinaryConnectives<T, R> = {
    [k in BinaryConnectiveNames]: VariadicBinaryConnective<T, R>;
};
export interface Connectives<T, R> extends UnaryConnectives<T, R>, VariadicBinaryConnectives<T, R> {
}
export interface MakeConnectivesArgs<T, R> extends UnaryConnectives<T, R>, Pick<BinaryConnectives<T, R>, 'and' | 'or'>, Partial<Omit<BinaryConnectives<T, R>, 'and' | 'or'>> {
}
export declare function makeConnectives<T, R extends T>(args: MakeConnectivesArgs<T, R>): Connectives<T, R>;
export {};
