使用Z3Py online证明n^5<;=5^n代表n>;=5.

使用Z3Py online证明n^5<;=5^n代表n>;=5.,z3,Z3,使用以下代码: n = Int('n') s = Solver() s.add(n >= 5) s.add(Not( n**5 <= 5**n)) print s print s.check() 也就是说,Z3Py无法提供直接的证明 现在使用代码 n = Int('n') prove(Implies(n >= 5, n**5 <= 5**n)) 输出为: proved [e ≥ 0, f ≥ 0, ¬(7849 + 9145·f + 4090·f·f + 890·f

使用以下代码:

n = Int('n')
s = Solver()
s.add(n >= 5)
s.add(Not( n**5 <= 5**n))
print s
print s.check()
也就是说,Z3Py无法提供直接的证明

现在使用代码

n = Int('n')
prove(Implies(n >= 5, n**5 <= 5**n))
输出为:

proved
[e ≥ 0,
f ≥ 0,
¬(7849 +
9145·f +
4090·f·f +
890·f·f·f +
95·f·f·f·f +
4·f·f·f·f·f +
5·e ≥
0)]
unsat
在:定理和算法:Isabelle和Maple之间的接口中给出了使用Isabelle+Maple的证明。克莱门斯·巴拉林。卡斯滕·霍曼。雅克·卡尔梅

使用Z3Py的其他可能的间接证明如下:

n = Int('n')
e, f = Ints('e f')
t = simplify(-(5 + f + 1)**5 + ((5 + f)**5 + e)*5, som=True)
prove(Implies(And(e >=0, f >= 0), t >= 0))
n = Int('n')
e, f = Ints('e f')
t = simplify(-(5 + f + 1)**5 + ((5 + f)**5 + e)*5, som=True)
s = Solver()
s.add(e >= 0, f >= 0)
s.add(Not(t >= 0))
print s
print s.check()
输出为:

proved
[e ≥ 0,
f ≥ 0,
¬(7849 +
9145·f +
4090·f·f +
890·f·f·f +
95·f·f·f·f +
4·f·f·f·f·f +
5·e ≥
0)]
unsat

请让我知道是否有可能有一个更直接的证明使用Z3Py。非常感谢。

Z3对非线性整数算法的支持非常有限。有关更多信息,请参阅以下相关帖子:

Z3有一个完整的非线性实数(多项式)算法求解器()。您可以通过编写脚本来简化脚本

n=Real('n')
e、 f=Reals('ef')
证明(暗示(和(e>=0,f>=0),-(5+f+1)**5+((5+f)**5+e)**5>=0))
Z3在上面的问题中使用nlsat,因为它只包含实变量。 即使问题包含整数变量,我们也可以强制Z3使用nlsat

n=Int('n')
e、 f=整数('ef')
s=策略('qfnra-nlsat')。解算器()
s、 添加(e>=0,f>=0)
s、 加上(不是(-(5+f+1)**5+((5+f)**5+e)**5>=0))
印刷品
打印s.检查()

Z3对非线性整数算法的支持非常有限。有关更多信息,请参阅以下相关帖子:

Z3有一个完整的非线性实数(多项式)算法求解器()。您可以通过编写脚本来简化脚本

n=Real('n')
e、 f=Reals('ef')
证明(暗示(和(e>=0,f>=0),-(5+f+1)**5+((5+f)**5+e)**5>=0))
Z3在上面的问题中使用nlsat,因为它只包含实变量。 即使问题包含整数变量,我们也可以强制Z3使用nlsat

n=Int('n')
e、 f=整数('ef')
s=策略('qfnra-nlsat')。解算器()
s、 添加(e>=0,f>=0)
s、 加上(不是(-(5+f+1)**5+((5+f)**5+e)**5>=0))
印刷品
打印s.检查()

Z3没有整数运算的决策过程,也没有整数运算的幂。在我看来,你对简化的使用非常巧妙地结合了可用的功能。Z3没有整数运算的决策过程,也没有这方面的幂。在我看来,您对简化的使用非常简洁,可以组合可用的功能。