/**
 * Numeric Proof Inference — Type inference and literal proving
 *
 * Extracts numeric kinds from IR types, infers numeric kinds of expressions,
 * and proves literal values fit in target numeric kinds.
 *
 * Used by numeric-proof-proving.ts and numeric-proof-walk.ts.
 */
import { SourceLocation } from "../../types/diagnostic.js";
import { IrExpression, IrType, NumericKind, NumericProof } from "../types.js";
import type { ProofContext } from "./numeric-proof-guard-facts.js";
/**
 * Extract NumericKind from an IrType if it represents a known numeric type
 *
 * INVARIANT: "int" is a distinct primitive type (primitiveType(name="int")),
 * NOT primitiveType(name="number") with numericIntent.
 */
export declare const getNumericKindFromType: (type: IrType | undefined) => NumericKind | undefined;
/**
 * Try to infer the numeric kind of an expression.
 * Returns undefined if the expression's numeric kind cannot be determined.
 *
 * For literals: follows C# semantics where integer-looking literals default to int.
 * A literal is Int32 if: no decimal point, no exponent, fits in Int32 range.
 * Otherwise it's Double.
 */
export declare const inferNumericKind: (expr: IrExpression, ctx: ProofContext) => NumericKind | undefined;
/**
 * Attempt to prove that a literal fits in a target numeric kind.
 * Uses the raw lexeme for integer validation (NOT the JS number).
 */
export declare const proveLiteral: (value: number, raw: string | undefined, targetKind: NumericKind, ctx: ProofContext, sourceSpan?: SourceLocation) => NumericProof | undefined;
//# sourceMappingURL=numeric-proof-inference.d.ts.map