Native MoonBit bindings for the cvc5 SMT solver
moon test
moon run cmd/mainmoon add Yu-zh/cvc5.mbt///|
import {
"Yu-zh/cvc5.mbt" @cvc5,
}moon -C tests/consumer run .
moon -C tests/consumer run . --release///|
test "README: solve an integer equation" {
let tm = @cvc5.TermManager::new()
let solver = @cvc5.Solver::new(tm)
solver.set_logic("QF_LIA")
solver.set_option("produce-models", "true")
let x = tm.mk_const(tm.integer_sort(), "x")
let equation = tm.mk_term(Equal, [
tm.mk_term(Add, [x, tm.mk_integer(1)]),
tm.mk_integer(43),
])
solver.assert_formula(equation)
assert_true(solver.check_sat() is Sat)
assert_eq(solver.get_value(x).get_int64_value(), 42)
}CVC5_BUILD=source moon testCVC5_SOURCE_DIR=/absolute/path/to/cvc5 moon testCVC5_PREFIX=/absolute/path/to/cvc5/install moon test| Variable | Purpose |
|---|---|
| CVC5_BUILD | prebuilt (default) or source |
| CVC5_PREFIX | Existing installation; takes priority over building/downloading |
| CVC5_SOURCE_DIR | Local 1.3.4 source checkout; implies source mode |
| CVC5_CACHE_DIR | Dependency cache; defaults to this module's .cvc5/ |
| CVC5_JOBS | Source-build parallelism; defaults to at most 8 workers |
| CVC5_CMAKE | CMake executable for a source build |
| CVC5_PYTHON | Python interpreter passed to CMake |
| CC | C compiler for the binding shim and source builds; defaults to cc |
| CXX | C++ compiler for building cvc5 itself; not used to compile the shim |
///|
test "README: retrieve a CPC proof" {
let tm = @cvc5.TermManager::new()
let solver = @cvc5.Solver::new(tm)
solver.set_logic("QF_UF")
solver.set_option("produce-proofs", "true")
solver.set_option("proof-format-mode", "cpc")
solver.set_option("proof-granularity", "dsl-rewrite")
let p = tm.mk_const(tm.boolean_sort(), "p")
solver.assert_formula(p)
solver.assert_formula(tm.mk_term(Not, [p]))
assert_true(solver.check_sat() is Unsat)
let proof = solver.get_proof_cpc()
assert_true(proof.contains("false :rule contra"))
}moon check --deny-warn
moon test
moon test --release
node scripts/test-c-api-errors.js
moon -C tests/consumer run . --release
moon info && moon fmtnode scripts/generate-kinds.js /path/to/cvc5/include/cvc5/cvc5_kind.h
moon info && moon fmtpub(all) enum Kind {
InternalKind
UndefinedKind
NullTerm
UninterpretedSortValue
Equal
Distinct
Constant
Variable
Skolem
Sexpr
Lambda
Witness
ConstBoolean
Not
And
Implies
Or
Xor
Ite
ApplyUf
CardinalityConstraint
HoApply
Add
Mult
Iand
Piand
Pow2
Log2
Sub
Neg
Division
DivisionTotal
IntsDivision
IntsDivisionTotal
IntsModulus
IntsModulusTotal
Abs
Pow
Exponential
Sine
Cosine
Tangent
Cosecant
Secant
Cotangent
Arcsine
Arccosine
Arctangent
Arccosecant
Arcsecant
Arccotangent
Sqrt
Divisible
ConstRational
ConstInteger
Lt
Leq
Gt
Geq
IsInteger
ToInteger
ToReal
Pi
ConstBitVector
BitVectorConcat
BitVectorAnd
BitVectorOr
BitVectorXor
BitVectorNot
BitVectorNand
BitVectorNor
BitVectorXnor
BitVectorComp
BitVectorMult
BitVectorAdd
BitVectorSub
BitVectorNeg
BitVectorUdiv
BitVectorUrem
BitVectorSdiv
BitVectorSrem
BitVectorSmod
BitVectorShl
BitVectorLshr
BitVectorAshr
BitVectorUlt
BitVectorUle
BitVectorUgt
BitVectorUge
BitVectorSlt
BitVectorSle
BitVectorSgt
BitVectorSge
BitVectorUltbv
BitVectorSltbv
BitVectorIte
BitVectorRedor
BitVectorRedand
BitVectorNego
BitVectorUaddo
BitVectorSaddo
BitVectorUmulo
BitVectorSmulo
BitVectorUsubo
BitVectorSsubo
BitVectorSdivo
BitVectorExtract
BitVectorRepeat
BitVectorZeroExtend
BitVectorSignExtend
BitVectorRotateLeft
BitVectorRotateRight
IntToBitVector
BitVectorToNat
BitVectorUbvToInt
BitVectorSbvToInt
BitVectorFromBools
BitVectorBit
ConstFiniteField
FiniteFieldNeg
FiniteFieldAdd
FiniteFieldBitsum
FiniteFieldMult
ConstFloatingPoint
ConstRoundingmode
FloatingPointFp
FloatingPointEq
FloatingPointAbs
FloatingPointNeg
FloatingPointAdd
FloatingPointSub
FloatingPointMult
FloatingPointDiv
FloatingPointFma
FloatingPointSqrt
FloatingPointRem
FloatingPointRti
FloatingPointMin
FloatingPointMax
FloatingPointLeq
FloatingPointLt
FloatingPointGeq
FloatingPointGt
FloatingPointIsNormal
FloatingPointIsSubnormal
FloatingPointIsZero
FloatingPointIsInf
FloatingPointIsNan
FloatingPointIsNeg
FloatingPointIsPos
FloatingPointToFpFromIeeeBv
FloatingPointToFpFromFp
FloatingPointToFpFromReal
FloatingPointToFpFromSbv
FloatingPointToFpFromUbv
FloatingPointToUbv
FloatingPointToSbv
FloatingPointToReal
Select
Store
ConstArray
EqRange
ApplyConstructor
ApplySelector
ApplyTester
ApplyUpdater
Match
MatchCase
MatchBindCase
TupleProject
NullableLift
SepNil
SepEmp
SepPto
SepStar
SepWand
SetEmpty
SetUnion
SetInter
SetMinus
SetSubset
SetMember
SetSingleton
SetInsert
SetCard
SetComplement
SetUniverse
SetComprehension
SetChoose
SetIsEmpty
SetIsSingleton
SetMap
SetFilter
SetAll
SetSome
SetFold
RelationJoin
RelationTableJoin
RelationProduct
RelationTranspose
RelationTclosure
RelationJoinImage
RelationIden
RelationGroup
RelationAggregate
RelationProject
BagEmpty
BagUnionMax
BagUnionDisjoint
BagInterMin
BagDifferenceSubtract
BagDifferenceRemove
BagSubbag
BagCount
BagMember
BagSetof
BagMake
BagCard
BagChoose
BagMap
BagFilter
BagAll
BagSome
BagFold
BagPartition
TableProduct
TableProject
TableAggregate
TableJoin
TableGroup
StringConcat
StringInRegexp
StringLength
StringSubstr
StringUpdate
StringCharat
StringContains
StringIndexof
StringIndexofRe
StringReplace
StringReplaceAll
StringReplaceRe
StringReplaceReAll
StringToLower
StringToUpper
StringRev
StringToCode
StringFromCode
StringLt
StringLeq
StringPrefix
StringSuffix
StringIsDigit
StringFromInt
StringToInt
ConstString
StringToRegexp
RegexpConcat
RegexpUnion
RegexpInter
RegexpDiff
RegexpStar
RegexpPlus
RegexpOpt
RegexpRange
RegexpRepeat
RegexpLoop
RegexpNone
RegexpAll
RegexpAllchar
RegexpComplement
SeqConcat
SeqLength
SeqExtract
SeqUpdate
SeqAt
SeqContains
SeqIndexof
SeqReplace
SeqReplaceAll
SeqRev
SeqPrefix
SeqSuffix
ConstSequence
SeqUnit
SeqNth
Forall
Exists
VariableList
InstPattern
InstNoPattern
InstPool
InstAddToPool
SkolemAddToPool
InstAttribute
InstPatternList
} derive(Eq, Debug)type Nativepub struct Op {
// private fields
}pub struct Solver {
// private fields
}pub struct Sort {
// private fields
}pub(all) enum SortKind {
InternalSortKind
UndefinedSortKind
NullSort
AbstractSort
ArraySort
BagSort
BooleanSort
BitVectorSort
DatatypeSort
FiniteFieldSort
FloatingPointSort
FunctionSort
IntegerSort
RealSort
ReglanSort
RoundingmodeSort
SequenceSort
SetSort
StringSort
TupleSort
NullableSort
UninterpretedSort
} derive(Eq, Debug)pub struct Term {
// private fields
}pub struct TermManager {
// private fields
}fn TermManager::array_sort(self : TermManager, index : Sort, element : Sort) -> Sort raise Cvc5Errorfn TermManager::function_sort(self : TermManager, domain : ArrayView[Sort], codomain : Sort) -> Sort raise Cvc5Errorfn TermManager::mk_bit_vector(self : TermManager, width : UInt, value : UInt64) -> Term raise Cvc5Errorfn TermManager::mk_bit_vector_str(self : TermManager, width : UInt, value : String, base? : UInt) -> Term raise Cvc5Errorfn TermManager::mk_const_array(self : TermManager, sort : Sort, value : Term) -> Term raise Cvc5Errorfn TermManager::mk_op(self : TermManager, kind : Kind, indices : ArrayView[UInt]) -> Op raise Cvc5Errorfn TermManager::mk_term(self : TermManager, kind : Kind, children : ArrayView[Term]) -> Term raise Cvc5Errorfn TermManager::mk_term_from_op(self : TermManager, op : Op, children : ArrayView[Term]) -> Term raise Cvc5ErrorInstall
Download zipNative MoonBit bindings for the cvc5 SMT solver