我有一个问题,我想用Z3制定。但是,我不确定最好的方法是什么。以下是我想要编码的内容和预期输出的说明。
如果我有一个语言语法,其中x,y和z是非终端的"和","或"和" a"是语言终端:
x :: = y"或" y
| y
y :: = z"和" z
| z
我想首先对先前的规则进行编码,然后我想生成语法接受的所有可能的终端派生。
最终的输出是:
a和a或a和a
a或
a和a
a和a或a
a或a和a
...
我不知道从哪里开始。编码问题的最佳方法是什么?
非常感谢任何建议/指导。
谢谢
答案 0 :(得分:1)
使用Z3生成约束系统的所有可能解决方案的规范方法是通过将其添加为新的(负)约束来迭代地“禁止”先前找到的解决方案。请参阅Leo's answer至this question。