首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用C++ API为CVC4定义谓词

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

Stack Overflow用户
提问于 2014-11-29 17:28:36
回答 1查看 261关注 0票数 1

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

代码语言:javascript
复制
isblue: STRING -> BOOLEAN;
ASSERT isblue("sky");
ASSERT isblue("water");
QUERY isblue("sky"); //valid
QUERY isblue("pig"); //invalid

我如何使用C++ API为CVC4编写它?找不到任何关于如何做到这一点的文档。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-30 00:29:59

源发行版中有一些API示例可能对您有所帮助。特别是,示例/api/组合。api创建了一些函数和谓词,并做出了一些断言:

https://github.com/CVC4/CVC4/blob/master/examples/api/combination.cpp

在您的示例中,您将使用ExprManager::mkFunctionType()创建一个谓词类型,然后使用ExprManager::mkVar()构造一个"isblue“谓词,使其具有该类型。它将如下所示(假设您已经完成了“使用命名空间CVC4”并包含了):

代码语言:javascript
复制
  ExprManager em;
  SmtEngine smt(&em);

  Type predType = em.mkFunctionType(em.stringType(), em.booleanType());
  Expr isblue = em.mkVar(predType);

然后可以断言和查询谓词的应用程序:

代码语言:javascript
复制
  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"))));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27204949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档