Z3 の未解釈関数がそれを示すためにどのように機能するかを学ぼうとしていn=2k+1 => log(m) + k*log(m*m) == n*log(m)
ます。そのために、次のようなものを使用します
mylog = Function('mylog', IntSort(), IntSort())
mylog_rule1 = mylog(x*y) == mylog(x) + mylog(y)
mylog_rule2 = mylog(x**y) == y*mylog(x)
#mylog_rule3 = y*mylog(x) == mylog(x**y) #is this rule needed ?
rules = And(mylog_rule1, mylog_rule2, mylog_rule3)
prop = Implies(n==2*k+1, log(m) + k*log(m*m) == n*log(m))
prove(rules, prop)
これはうまくいかないので、私のアプローチには何か問題があるに違いありません。prove(Implies(mylog(x*y) == mylog(x) + mylog(y), mylog(m*n) == mylog(m) + mylog(n))
実際、変数名を変更するだけではできません。