如何使用C ++ API为CVC4定义谓词

时间:2014-11-29 17:28:37

标签: c++ smt cvc4

这是本机CVC语言中的一个示例:

isblue: STRING -> BOOLEAN;
ASSERT isblue("sky");
ASSERT isblue("water");
QUERY isblue("sky"); //valid
QUERY isblue("pig"); //invalid

我如何使用CVC4的C ++ API编写它?找不到有关如何执行此操作的任何文档。

1 个答案:

答案 0 :(得分:3)

源代码发布中有一些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"))));