我正在尝试在 c# 中使用 z3 实现一些 GDL http://en.wikipedia.org/wiki/Game_Description_Language,但我几乎陷入了起步阶段。
本质上,我想从以下 gdl 开始非常简单
(role you)
(init (state 0))
(<= (legal you proceed)
(true (state 0)))
(<= (next (state 1))
(does you proceed))
(<= terminal
(true (state 1)))
(<= (goal you 100))
然后查询哪些“合法”是可满足的(在这个人为的例子中,只有一个合法的并且在初始状态下是可满足的)
查看 z3 示例,我似乎需要创建一个定点
Fixedpoint fp = ctx.MkFixedpoint();
然后当我想添加事实时
(role you)
我会做
Sort domain=?;
Sort range=?;
FuncDecl pred = ctx.MkFuncDecl("role", domain, range);
uint you = 1;
fp.AddFact(pred, you);
但我不知道域应该是未解释的排序还是其他(枚举排序?)。我不确定如何获得“范围”或符号“你”是否只能用整数表示。