Логарифм / Экспонента вещественных чисел в cvc4

Я ищу решателя, который может предоставить модели формул на действительные числа, включающие логарифмы или экспоненты.

Может ли cvc4 обрабатывать функции, которые содержат логарифмы или экспоненты действительных чисел? Точно так же может cvc4 выразить константу e?


Согласно этому вопросу, z3 может обрабатывать только постоянные показатели, что мне не помогает.

Этот вопрос касается только логарифмов целых чисел.

1 ответ

Решение

Я не знаком с cvc4, но, возможно, у меня есть некоторые полезные свойства логарифмов, которые вы можете использовать в зависимости от ваших ограничений.

Технически говоря, ни один компьютер (независимо от того, насколько мощный) не знает, что e потому что это трансцендентное (не может быть выражено как решение полиномиального уравнения с рациональными коэффициентами).

Если вы ограничены таким образом, что вы можете принимать логарифмы только для целых чисел, вы можете выразить e как приближение фракции и решить это таким образом. Формула оказывается немного длиннее, чем просто брать логарифм напрямую, но преимущество заключается в том, что вы можете эффективно вычислить логарифм, где основание - это любое рациональное число, при этом только по отдельности находя логарифмы целых чисел.

Позволять e быть округленным по доле a/b где оба a а также b целые числа.

(a/b)^n = x

log(base a/b)(x) = n

Это никуда не приведет, поэтому мы должны выбрать другой путь, который требует немного больше алгебры.

(a/b)^n = x

(a^n)/(b^n) = x

a^n = x * b^n

log(base a)(x * b^n) = n

log(base a)(x) + log(base a)(b^n) = n

log(base a)(x) + n*log(base a)(b) = n

log(base a)(x) = n - n*log(base a)(b)

log(base a)(x) = n * (1 - log(base a)(b))

n = log(base a)(x) / (1 - log(base a)(b))

Другими словами, log(base a)(x) / (1 - log(base a)(b)) является приближением для ln(x) где a/b является приближением e, Очевидно, это приближение для ln(x) становится ближе к реальной стоимости ln(x) как a/b более близко приближается e, Обратите внимание, я держал это в общем виде здесь, что a/b может представлять любое рациональное число, а не только e,

Если это не полностью отвечает на ваш вопрос, я надеюсь, что это поможет.


Только что попробовал произвольный пример.

Если вы считаете, a а также b как 27183 а также 10000 соответственно я попробовал этот быстрый расчет:

log(base 27183)(82834) / (1 - log(base 27138)(10000)) = 11.32452...

                                            ln(82834) = 11.32459...
Другие вопросы по тегам