使用Z3Py online和Nikolaj Bjorner提出的策略的一些有效性证明

使用Z3Py online和Nikolaj Bjorner提出的策略的一些有效性证明,z3,Z3,引理:对于所有x:R,x0->(x/x)=1 证明: x = Real('x') s = Solver() s.add(Or(x >0, x < 0), Not(x/x ==1)) print s.check() x, y = Reals('x y') s = Solver() s.add(Or(x >0, x < 0), Or(y >0, y < 0), Not(x/x + y/y ==2)) print s.check() x,

引理:对于所有x:R,x0->(x/x)=1

证明:

  x = Real('x')

  s = Solver()

  s.add(Or(x >0, x < 0), Not(x/x ==1))

  print s.check()
x, y = Reals('x y')
s = Solver()
s.add(Or(x >0, x < 0), Or(y >0, y < 0), Not(x/x + y/y ==2))
print s.check()
x, y = Reals('x y')
s = Solver()
s.add(Or(x >0, x < 0), Or(y >0, y < 0), Not(x/x + x/y == (x+y)/y))
print s.check()
Qed

引理:对于所有xy:R,x0,y0->(x/x+y/y)=2

证明:

  x = Real('x')

  s = Solver()

  s.add(Or(x >0, x < 0), Not(x/x ==1))

  print s.check()
x, y = Reals('x y')
s = Solver()
s.add(Or(x >0, x < 0), Or(y >0, y < 0), Not(x/x + y/y ==2))
print s.check()
x, y = Reals('x y')
s = Solver()
s.add(Or(x >0, x < 0), Or(y >0, y < 0), Not(x/x + x/y == (x+y)/y))
print s.check()
Qed

引理:对于所有的xy:R,x0,y0->(x/x+x/y)=((x+y)/y)

证明:

  x = Real('x')

  s = Solver()

  s.add(Or(x >0, x < 0), Not(x/x ==1))

  print s.check()
x, y = Reals('x y')
s = Solver()
s.add(Or(x >0, x < 0), Or(y >0, y < 0), Not(x/x + y/y ==2))
print s.check()
x, y = Reals('x y')
s = Solver()
s.add(Or(x >0, x < 0), Or(y >0, y < 0), Not(x/x + x/y == (x+y)/y))
print s.check()
Qed

这些引理是用Coq+Maple在


请让我知道我用Z3Py的证明是否正确,以及你是否知道用Z3Py证明它们的更直接的形式。非常感谢。

使用“证明”命令而不是解算器对象有一种更简洁的方法。 例如:

x, y = Reals('x y')
prove(Implies(And(Or(x >0, x < 0), Or(y >0, y < 0)), (x/x + x/y == (x+y)/y)))
x,y=Reals('xy')
证明(暗示(和(或(x>0,x<0),或(y>0,y<0)),(x/x+x/y==(x+y)/y)))

BTW,我们可以写
x!=0
而不是
或(x>0,x<0)