interface Context<Name extends string = "main"> { Array: SMTArrayCreation<Name>; AstMap: new < Key extends Ast<Name, unknown> = AnyAst<Name>, Value extends Ast<Name, unknown> = AnyAst<Name>, >() => AstMap<Name, Key, Value>; AstVector: new <Item extends Ast<Name, unknown> = AnyAst<Name>>() => AstVector< Name, Item, >; BitVec: BitVecCreation<Name>; Bool: BoolCreation<Name>; Datatype: DatatypeCreation<Name>; Function: FuncDeclCreation<Name>; Int: IntCreation<Name>; Model: new () => Model<Name>; name: Name; Optimize: new () => Optimize<Name>; Real: RealCreation<Name>; RecFunc: RecFuncCreation<Name>; Set: SMTSetCreation<Name>; Solver: new (logic?: string) => Solver<Name>; Sort: SortCreation<Name>; Tactic: new (name: string) => Tactic<Name>; And(): Bool<Name>; And(vector: AstVector<Name, Bool<Name>>): Bool<Name>; And(...args: (
boolean | Bool<Name>)
[]): Bool<Name>; And(...args: Probe<Name>[]): Probe<Name>; ast_from_string(s: string): Ast<Name, unknown>; AtLeast(args: [Bool<Name>, ...Bool<Name>[]], k: number): Bool<Name>; AtMost(args: [Bool<Name>, ...Bool<Name>[]], k: number): Bool<Name>; BUDiv<Bits extends number>( arg0: BitVec<Bits, Name>, arg1: CoercibleToBitVec<Bits, Name>, ): BitVec<Bits, Name>; BV2Int(a: BitVec<number, Name>, isSigned: boolean): Arith<Name>; Cbrt(a: CoercibleToArith<Name>): Arith<Name>; Concat(...bitvecs: BitVec<number, Name>[]): BitVec<number, Name>; Cond( probe: Probe<Name>, onTrue: Tactic<Name>, onFalse: Tactic<Name>, ): Tactic<Name>; Const<S extends Sort<Name>>(name: string, sort: S): SortToExprMap<S, Name>; Consts<S extends Sort<Name>>( name: string | string[], sort: S, ): SortToExprMap<S, Name>[]; Distinct(...args: CoercibleToExpr<Name>[]): Bool<Name>; Div(arg0: Arith<Name>, arg1: CoercibleToArith<Name>): Arith<Name>; Div<Bits extends number>( arg0: BitVec<Bits, Name>, arg1: CoercibleToBitVec<Bits, Name>, ): BitVec<Bits, Name>; EmptySet<ElemSort extends AnySort<Name>>( sort: ElemSort, ): SMTSet<Name, ElemSort>; Eq(a: CoercibleToExpr<Name>, b: CoercibleToExpr<Name>): Bool<Name>; eqIdentity(a: Ast<Name, unknown>, b: Ast<Name, unknown>): boolean; Exists<QVarSorts extends [Sort<Name>, ...Sort<Name>[]]>( quantifiers: [ ...{ [Key in string | number | symbol]: QVarSorts[Key<Key>] extends AnySort<Name> ? SortToExprMap<any[any], Name> : QVarSorts[Key<Key>] }[], ], body: Bool<Name>, weight?: number, ): Quantifier<Name, QVarSorts, BoolSort<Name>> & Bool<Name>; Extract<Bits extends number>( hi: number, lo: number, val: BitVec<Bits, Name>, ): BitVec<number, Name>; ForAll<QVarSorts extends [Sort<Name>, ...Sort<Name>[]]>( quantifiers: [ ...{ [Key in string | number | symbol]: QVarSorts[Key<Key>] extends AnySort<Name> ? SortToExprMap<any[any], Name> : QVarSorts[Key<Key>] }[], ], body: Bool<Name>, weight?: number, ): Quantifier<Name, QVarSorts, BoolSort<Name>> & Bool<Name>; FreshConst<S extends Sort<Name>>( sort: S, prefix?: string, ): SortToExprMap<S, Name>; from(primitive: boolean): Bool<Name>; from(primitive: number): IntNum<Name> | RatNum<Name>; from(primitive: CoercibleRational): RatNum<Name>; from(primitive: bigint): IntNum<Name>; from<E extends Expr<Name, AnySort<Name>, unknown>>(expr: E): E; FullSet<ElemSort extends AnySort<Name>>( sort: ElemSort, ): SMTSet<Name, ElemSort>; GE(a: Arith<Name>, b: CoercibleToArith<Name>): Bool<Name>; getVarIndex(obj: Expr<Name, AnySort<Name>, unknown>): number; GT(a: Arith<Name>, b: CoercibleToArith<Name>): Bool<Name>; If( condition: Probe<Name>, onTrue: Tactic<Name>, onFalse: Tactic<Name>, ): Tactic<Name>; If< OnTrueRef extends CoercibleToExpr<Name>, OnFalseRef extends CoercibleToExpr<Name>, >( condition: boolean | Bool<Name>, onTrue: OnTrueRef, onFalse: OnFalseRef, ): CoercibleFromMap<OnTrueRef, Name> | CoercibleFromMap<OnFalseRef, Name>; Iff(a: boolean | Bool<Name>, b: boolean | Bool<Name>): Bool<Name>; Implies(a: boolean | Bool<Name>, b: boolean | Bool<Name>): Bool<Name>; Int2BV<Bits extends number>( a: number | bigint | Arith<Name>, bits: Bits, ): BitVec<Bits, Name>; interrupt(): void; isAnd(obj: unknown): boolean; isApp(obj: unknown): boolean; isAppOf(obj: unknown, kind: Z3_decl_kind): boolean; isArith(obj: unknown): obj is Arith<Name>; isArithSort(obj: unknown): obj is ArithSort<Name>; isArray( obj: unknown, ): obj is SMTArray<Name, [Sort<Name>, ...Sort<Name>[]], Sort<Name>>; isArraySort( obj: unknown, ): obj is SMTArraySort<Name, [Sort<Name>, ...Sort<Name>[]], AnySort<Name>>; isAst(obj: unknown): obj is Ast<Name, unknown>; isAstVector(obj: unknown): obj is AstVector<Name, AnyAst<Name>>; isBitVec(obj: unknown): obj is BitVec<number, Name>; isBitVecSort(obj: unknown): obj is BitVecSort<number, Name>; isBitVecVal(obj: unknown): obj is BitVecNum<number, Name>; isBool(obj: unknown): obj is Bool<Name>; isConst(obj: unknown): boolean; isConstArray(obj: unknown): boolean; isDistinct(obj: unknown): boolean; isEq(obj: unknown): boolean; isExpr(obj: unknown): obj is Expr<Name, AnySort<Name>, unknown>; isFalse(obj: unknown): boolean; isFuncDecl(obj: unknown): obj is FuncDecl<Name, Sort<Name>[], Sort<Name>>; isFuncInterp(obj: unknown): obj is FuncInterp<Name>; isImplies(obj: unknown): boolean; isInt(obj: unknown): boolean; IsInt(expr: string | number | CoercibleRational | Arith<Name>): Bool<Name>; isIntSort(obj: unknown): boolean; isIntVal(obj: unknown): obj is IntNum<Name>; isMember<ElemSort extends AnySort<Name>>( elem: CoercibleToMap<SortToExprMap<ElemSort, Name>, Name>, set: SMTSet<Name, ElemSort>, ): Bool<Name>; isModel(obj: unknown): obj is Model<Name>; isNot(obj: unknown): boolean; isOr(obj: unknown): boolean; isProbe(obj: unknown): obj is Probe<Name>; isQuantifier( obj: unknown, ): obj is Quantifier< Name, [Sort<Name>, ...Sort<Name>[]], | BoolSort<Name> | SMTArraySort<Name, [Sort<Name>, ...Sort<Name>[]], AnySort<Name>>, >; isReal(obj: unknown): boolean; isRealSort(obj: unknown): boolean; isRealVal(obj: unknown): obj is RatNum<Name>; isSort(obj: unknown): obj is Sort<Name>; isSubset<ElemSort extends AnySort<Name>>( a: SMTSet<Name, ElemSort>, b: SMTSet<Name, ElemSort>, ): Bool<Name>; isTactic(obj: unknown): obj is Tactic<Name>; isTrue(obj: unknown): boolean; isVar(obj: unknown): boolean; Lambda< DomainSort extends [Sort<Name>, ...Sort<Name>[]], RangeSort extends Sort<Name>, >( quantifiers: [ ...{ [Key in string | number | symbol]: DomainSort[Key<Key>] extends AnySort<Name> ? SortToExprMap<any[any], Name> : DomainSort[Key<Key>] }[], ], expr: SortToExprMap<RangeSort, Name>, ): Quantifier<Name, DomainSort, SMTArraySort<Name, DomainSort, RangeSort>> & SMTArray< Name, DomainSort, RangeSort, >; LE(a: Arith<Name>, b: CoercibleToArith<Name>): Bool<Name>; LT(a: Arith<Name>, b: CoercibleToArith<Name>): Bool<Name>; Mod(a: Arith<Name>, b: CoercibleToArith<Name>): Arith<Name>; Mod<Bits extends number>( a: BitVec<Bits, Name>, b: CoercibleToBitVec<Bits, Name>, ): BitVec<Bits, Name>; Neg(a: Arith<Name>): Arith<Name>; Neg<Bits extends number>(a: BitVec<Bits, Name>): BitVec<Bits, Name>; Not(a: Probe<Name>): Probe<Name>; Not(a: boolean | Bool<Name>): Bool<Name>; Or(): Bool<Name>; Or(vector: AstVector<Name, Bool<Name>>): Bool<Name>; Or(...args: (
boolean | Bool<Name>)
[]): Bool<Name>; Or(...args: Probe<Name>[]): Probe<Name>; PbEq( args: [Bool<Name>, ...Bool<Name>[]], coeffs: [number, ...number[]], k: number, ): Bool<Name>; PbGe( args: [Bool<Name>, ...Bool<Name>[]], coeffs: [number, ...number[]], k: number, ): Bool<Name>; PbLe( args: [Bool<Name>, ...Bool<Name>[]], coeffs: [number, ...number[]], k: number, ): Bool<Name>; Product(arg0: Arith<Name>, ...args: CoercibleToArith<Name>[]): Arith<Name>; Product<Bits extends number>( arg0: BitVec<Bits, Name>, ...args: CoercibleToBitVec<Bits, Name>[], ): BitVec<Bits, Name>; Select< DomainSort extends [Sort<Name>, ...Sort<Name>[]], RangeSort extends Sort<Name> = Sort<Name>, >( array: SMTArray<Name, DomainSort, RangeSort>, ...indices: [ ...{ [Key in string | number | symbol]: DomainSort[Key<Key>] extends AnySort<Name> ? CoercibleToMap<SortToExprMap<any[any], Name>, Name> : DomainSort[Key<Key>] }[], ], ): SortToExprMap<RangeSort, Name>; SetAdd<ElemSort extends AnySort<Name>>( set: SMTSet<Name, ElemSort>, elem: CoercibleToMap<SortToExprMap<ElemSort, Name>, Name>, ): SMTSet<Name, ElemSort>; SetComplement<ElemSort extends AnySort<Name>>( set: SMTSet<Name, ElemSort>, ): SMTSet<Name, ElemSort>; SetDel<ElemSort extends AnySort<Name>>( set: SMTSet<Name, ElemSort>, elem: CoercibleToMap<SortToExprMap<ElemSort, Name>, Name>, ): SMTSet<Name, ElemSort>; SetDifference<ElemSort extends AnySort<Name>>( a: SMTSet<Name, ElemSort>, b: SMTSet<Name, ElemSort>, ): SMTSet<Name, ElemSort>; SetIntersect<ElemSort extends AnySort<Name>>( ...args: SMTSet<Name, ElemSort>[], ): SMTSet<Name, ElemSort>; SetUnion<ElemSort extends AnySort<Name>>( ...args: SMTSet<Name, ElemSort>[], ): SMTSet<Name, ElemSort>; SGE<Bits extends number>( a: BitVec<Bits, Name>, b: CoercibleToBitVec<Bits, Name>, ): Bool<Name>; SGT<Bits extends number>( a: BitVec<Bits, Name>, b: CoercibleToBitVec<Bits, Name>, ): Bool<Name>; simplify( expr: Expr<Name, AnySort<Name>, unknown>, ): Promise<Expr<Name, AnySort<Name>, unknown>>; SLE<Bits extends number>( a: BitVec<Bits, Name>, b: CoercibleToBitVec<Bits, Name>, ): Bool<Name>; SLT<Bits extends number>( a: BitVec<Bits, Name>, b: CoercibleToBitVec<Bits, Name>, ): Bool<Name>; solve( ...assertions: Bool<Name>[], ): Promise<"unsat" | "unknown" | Model<Name>>; Sqrt(a: CoercibleToArith<Name>): Arith<Name>; Store< DomainSort extends [Sort<Name>, ...Sort<Name>[]], RangeSort extends Sort<Name> = Sort<Name>, >( array: SMTArray<Name, DomainSort, RangeSort>, ...indicesAndValue: [ ...{ [Key in string | number | symbol]: DomainSort[Key<Key>] extends AnySort<Name> ? CoercibleToMap<SortToExprMap<any[any], Name>, Name> : DomainSort[Key<Key>] }[], CoercibleToMap<SortToExprMap<RangeSort, Name>, Name>, ], ): SMTArray<Name, DomainSort, RangeSort>; Sub(arg0: Arith<Name>, ...args: CoercibleToArith<Name>[]): Arith<Name>; Sub<Bits extends number>( arg0: BitVec<Bits, Name>, ...args: CoercibleToBitVec<Bits, Name>[], ): BitVec<Bits, Name>; substitute( t: Expr<Name, AnySort<Name>, unknown>, ...substitutions: [ Expr<Name, AnySort<Name>, unknown>, Expr<Name, AnySort<Name>, unknown>, ][], ): Expr<Name, AnySort<Name>, unknown>; Sum(arg0: Arith<Name>, ...args: CoercibleToArith<Name>[]): Arith<Name>; Sum<Bits extends number>( arg0: BitVec<Bits, Name>, ...args: CoercibleToBitVec<Bits, Name>[], ): BitVec<Bits, Name>; ToInt(expr: string | number | CoercibleRational | Arith<Name>): Arith<Name>; ToReal(expr: bigint | Arith<Name>): Arith<Name>; UGE<Bits extends number>( a: BitVec<Bits, Name>, b: CoercibleToBitVec<Bits, Name>, ): Bool<Name>; UGT<Bits extends number>( a: BitVec<Bits, Name>, b: CoercibleToBitVec<Bits, Name>, ): Bool<Name>; ULE<Bits extends number>( a: BitVec<Bits, Name>, b: CoercibleToBitVec<Bits, Name>, ): Bool<Name>; ULT<Bits extends number>( a: BitVec<Bits, Name>, b: CoercibleToBitVec<Bits, Name>, ): Bool<Name>; Var<S extends Sort<Name>>(idx: number, sort: S): SortToExprMap<S, Name>; Xor(a: boolean | Bool<Name>, b: boolean | Bool<Name>): Bool<Name>;} Type Parameters
- Name extends string = "main"
Classes
Expressions
Functions
eqIdentity
- eqIdentity(a: Ast<Name, unknown>, b: Ast<Name, unknown>): boolean
Returns boolean
getVarIndex
- getVarIndex(obj: Expr<Name, AnySort<Name>, unknown>): number
Returns number
interrupt
- interrupt(): void
Returns void
isAnd
- isAnd(obj: unknown): boolean
Returns boolean
isApp
- isApp(obj: unknown): boolean
Returns boolean
isAppOf
- isAppOf(obj: unknown, kind: Z3_decl_kind): boolean
Parameters
- obj: unknown
- kind: Z3_decl_kind
Returns boolean
isAst
- isAst(obj: unknown): obj is Ast<Name, unknown>
Returns obj is Ast<Name, unknown>
isConst
- isConst(obj: unknown): boolean
Returns boolean
isConstArray
- isConstArray(obj: unknown): boolean
Returns boolean
isDistinct
- isDistinct(obj: unknown): boolean
Returns boolean
isEq
- isEq(obj: unknown): boolean
Returns boolean
isFalse
- isFalse(obj: unknown): boolean
Returns boolean
isImplies
- isImplies(obj: unknown): boolean
Returns boolean
isInt
- isInt(obj: unknown): boolean
Returns boolean
isIntSort
- isIntSort(obj: unknown): boolean
Returns boolean
isNot
- isNot(obj: unknown): boolean
Returns boolean
isOr
- isOr(obj: unknown): boolean
Returns boolean
isReal
- isReal(obj: unknown): boolean
Returns boolean
isRealSort
- isRealSort(obj: unknown): boolean
Returns boolean
isTrue
- isTrue(obj: unknown): boolean
Returns boolean
isVar
- isVar(obj: unknown): boolean
Returns boolean
Operations
ast_from_string
- ast_from_string(s: string): Ast<Name, unknown>
Returns Ast<Name, unknown>
Const
- Const<S extends Sort<Name>>(name: string, sort: S): SortToExprMap<S, Name>
Returns SortToExprMap<S, Name>
Consts
- Consts<S extends Sort<Name>>(
name: string | string[],
sort: S,
): SortToExprMap<S, Name>[] Parameters
- name: string | string[]
- sort: S
Returns SortToExprMap<S, Name>[]
Distinct
- Distinct(...args: CoercibleToExpr<Name>[]): Bool<Name>
Parameters
- ...args: CoercibleToExpr<Name>[]
Eq
- Eq(a: CoercibleToExpr<Name>, b: CoercibleToExpr<Name>): Bool<Name>
Parameters
- a: CoercibleToExpr<Name>
- b: CoercibleToExpr<Name>
Exists
- Exists<QVarSorts extends [Sort<Name>, ...Sort<Name>[]]>(
quantifiers: [
...{
[Key in string
| number
| symbol]: QVarSorts[Key<Key>] extends AnySort<Name>
? SortToExprMap<any[any], Name>
: QVarSorts[Key<Key>]
}[],
],
body: Bool<Name>,
weight?: number,
): Quantifier<Name, QVarSorts, BoolSort<Name>> & Bool<Name> Parameters
- quantifiers: [
...{
[Key in string
| number
| symbol]: QVarSorts[Key<Key>] extends AnySort<Name>
? SortToExprMap<any[any], Name>
: QVarSorts[Key<Key>]
}[],
] - body: Bool<Name>
Optionalweight: number
ForAll
- ForAll<QVarSorts extends [Sort<Name>, ...Sort<Name>[]]>(
quantifiers: [
...{
[Key in string
| number
| symbol]: QVarSorts[Key<Key>] extends AnySort<Name>
? SortToExprMap<any[any], Name>
: QVarSorts[Key<Key>]
}[],
],
body: Bool<Name>,
weight?: number,
): Quantifier<Name, QVarSorts, BoolSort<Name>> & Bool<Name> Parameters
- quantifiers: [
...{
[Key in string
| number
| symbol]: QVarSorts[Key<Key>] extends AnySort<Name>
? SortToExprMap<any[any], Name>
: QVarSorts[Key<Key>]
}[],
] - body: Bool<Name>
Optionalweight: number
FreshConst
- FreshConst<S extends Sort<Name>>(
sort: S,
prefix?: string,
): SortToExprMap<S, Name> Parameters
- sort: S
Optionalprefix: string
Returns SortToExprMap<S, Name>
If
- If(
condition: Probe<Name>,
onTrue: Tactic<Name>,
onFalse: Tactic<Name>,
): Tactic<Name> - If<
OnTrueRef extends CoercibleToExpr<Name>,
OnFalseRef extends CoercibleToExpr<Name>,
>(
condition: boolean | Bool<Name>,
onTrue: OnTrueRef,
onFalse: OnFalseRef,
): CoercibleFromMap<OnTrueRef, Name> | CoercibleFromMap<OnFalseRef, Name> Type Parameters
- OnTrueRef extends CoercibleToExpr<Name>
- OnFalseRef extends CoercibleToExpr<Name>
Lambda
- Lambda<
DomainSort extends [Sort<Name>, ...Sort<Name>[]],
RangeSort extends Sort<Name>,
>(
quantifiers: [
...{
[Key in string
| number
| symbol]: DomainSort[Key<Key>] extends AnySort<Name>
? SortToExprMap<any[any], Name>
: DomainSort[Key<Key>]
}[],
],
expr: SortToExprMap<RangeSort, Name>,
): Quantifier<Name, DomainSort, SMTArraySort<Name, DomainSort, RangeSort>> & SMTArray<
Name,
DomainSort,
RangeSort,
>
Select
- Select<
DomainSort extends [Sort<Name>, ...Sort<Name>[]],
RangeSort extends Sort<Name> = Sort<Name>,
>(
array: SMTArray<Name, DomainSort, RangeSort>,
...indices: [
...{
[Key in string
| number
| symbol]: DomainSort[Key<Key>] extends AnySort<Name>
? CoercibleToMap<SortToExprMap<any[any], Name>, Name>
: DomainSort[Key<Key>]
}[],
],
): SortToExprMap<RangeSort, Name>
Store
- Store<
DomainSort extends [Sort<Name>, ...Sort<Name>[]],
RangeSort extends Sort<Name> = Sort<Name>,
>(
array: SMTArray<Name, DomainSort, RangeSort>,
...indicesAndValue: [
...{
[Key in string
| number
| symbol]: DomainSort[Key<Key>] extends AnySort<Name>
? CoercibleToMap<SortToExprMap<any[any], Name>, Name>
: DomainSort[Key<Key>]
}[],
CoercibleToMap<SortToExprMap<RangeSort, Name>, Name>,
],
): SMTArray<Name, DomainSort, RangeSort>
substitute
- substitute(
t: Expr<Name, AnySort<Name>, unknown>,
...substitutions: [
Expr<Name, AnySort<Name>, unknown>,
Expr<Name, AnySort<Name>, unknown>,
][],
): Expr<Name, AnySort<Name>, unknown> Returns Expr<Name, AnySort<Name>, unknown>
Var
- Var<S extends Sort<Name>>(idx: number, sort: S): SortToExprMap<S, Name>
Returns SortToExprMap<S, Name>
Other
Creates an empty Model