这是原生 CVC 语言的示例:
isblue: STRING -> BOOLEAN;
ASSERT isblue("sky");
ASSERT isblue("water");
QUERY isblue("sky"); //valid
QUERY isblue("pig"); //invalid
我将如何使用 CVC4 的 C++ API 编写它?找不到有关如何执行此操作的任何文档。
源代码分发中有一些 API 示例可能会对您有所帮助。特别是,examples/api/combination.cpp 创建了一些函数和谓词并进行了一些断言:
https://github.com/CVC4/CVC4/blob/master/examples/api/combination.cpp
在您的情况下,您将使用 ExprManager::mkFunctionType() 创建一个谓词类型,然后使用 ExprManager::mkVar() 构造一个“isblue”谓词,为其提供该类型。它看起来像这样(假设您已经完成了“使用命名空间 CVC4”和#included <cvc4/cvc4.h>):
ExprManager em;
SmtEngine smt(&em);
Type predType = em.mkFunctionType(em.stringType(), em.booleanType());
Expr isblue = em.mkVar(predType);
然后您可以断言和查询谓词的应用程序:
smt.assertFormula(em.mkExpr(kind::APPLY_UF, isblue, em.mkConst(String("sky"))));
smt.assertFormula(em.mkExpr(kind::APPLY_UF, isblue, em.mkConst(String("water"))));
smt.query(em.mkExpr(kind::APPLY_UF, isblue, em.mkConst(String("sky"))));
smt.query(em.mkExpr(kind::APPLY_UF, isblue, em.mkConst(String("pig"))));