使用公理来推导z3

时间:2012-05-17 12:30:30

标签: c# z3

我是Z3的新用户,并且希望它使用一些公理,并且只使用那些公理将公式简化为一阶逻辑中的另一个等效公式。 例如:   仅限使用

1.(p或q)和(p或r)< => p或(r和q)

2.not(p或q)< =>不是(p)而不是(q)

3.p和p< => p

证明

不是(p或(q和r))< => (不是(p)而不是(q))或(不是(p)而不是(r))

我使用的是C#API。  我想它必须使用未解释的功能,但我不知道该怎么做。

Plzz帮助。

1 个答案:

答案 0 :(得分:1)

你是对的,想法是使用未解释的函数和排序。 这是Z3中编码的问题: http://rise4fun.com/Z3/Vzns

Z3没有找到使用您提供的3个公理的证明。 实际上,结论并没有从他们那里得出结论。 但是,如果我们替换公理,它可以找到证明

  

p和p< => P

  

not(not(p))< => P

备注:上述脚本中的编码使用未解释的排序B而不是Bool。因此,Z3也不会尝试通过案例分析进行证明,也不会尝试使用Bool仅包含两个元素的事实。

备注:它使用=代替<=>

在下面的例子中,我们使用Z3Py来构造一个满足你提供的3个公理的模型,但这个猜想并不成立。

http://rise4fun.com/Z3Py/7H7