Size: a a a

Compiler Development

2020 February 26

PS

Peter Sovietov in Compiler Development
FORTRAN ONE LOVE
как экспоненты, разумеется
Вы формулу для решателя покажите.
источник

M

MaxGraey in Compiler Development
Peter Sovietov
Это означает, что сама по себе задача, с которой имеет дело решатель — NP-полная. А алгоритмы для таких задач не масштабируются в общем случае. И еще отдельный вопрос — как представить в SMT-решателе тригонометрию :)
https://github.com/Z3Prover/z3/tree/master/src/math

Там далеко не только тригонометрия)
источник

FO

FORTRAN ONE LOVE in Compiler Development
Peter Sovietov
Вы формулу для решателя покажите.
не обладаю такими знаниями.
источник

PS

Peter Sovietov in Compiler Development
Ну там в реальности эффективно поддерживается LIA. Для reals есть LRA, но кто-нибудь пробовал вообще ее использовать для супероптимизаторов? :)
источник

PS

Peter Sovietov in Compiler Development
Вот здесь подробнее можно прочесть: https://theory.stanford.edu/~nikolaj/programmingz3.html#sec-solving-arithmetical-fragments
источник

M

MaxGraey in Compiler Development
Ну и насчет конкретно тригонометрии
https://github.com/Z3Prover/z3/blob/master/src/tactic/arith/purify_arith_tactic.cpp#L548
источник

M

MaxGraey in Compiler Development
Да, там не просто это, но не невозможно
источник

PS

Peter Sovietov in Compiler Development
Ну вот трансцендентные функции не поддерживаются. И даже не видно, как вызвать из того же Питона для Z3 sin/cos :)
источник

PS

Peter Sovietov in Compiler Development
Конечно, работу с floats всегда можно организовать через битовые вектора. А функции — задать табличкой через If :)
источник

M

MaxGraey in Compiler Development
источник

PS

Peter Sovietov in Compiler Development
Да, это то, что не работает.
источник

M

MaxGraey in Compiler Development
Насколько я знаю работают но ограниченно
источник

M

MaxGraey in Compiler Development
При чем еще с 2012го года
https://github.com/Z3Prover/z3/blob/master/RELEASE_NOTES#L382
источник

PS

Peter Sovietov in Compiler Development
Ну что, пойду кодировать теорему Ферма для Z3. Я полон оптимизма! :)
источник

M

MaxGraey in Compiler Development
Peter Sovietov
Ну что, пойду кодировать теорему Ферма для Z3. Я полон оптимизма! :)
Или проблему дискретного логарифмирования в кольце вычетов для сверх больших модулей =)
источник

PS

Peter Sovietov in Compiler Development
Если вернуться к исходному вопросу, то супероптимизаторы, повторюсь, не помогают, в общем случае, писать предметно-ориентированные правила (хотя в библиотеке правил в духе Mathematica нашлось бы многое  и было бы хорошо это многое переиспользовать). Вообще, радоваться надо, что синтезом программ вообще что-то удается сделать! Но совсем залениться, увы, не получится :)
источник

is

ilya sheprut @optozorax in Compiler Development
EgorBo
прочитал это полотно и не понял сути вопроса
Это про преобразование выражений чтобы написать что-то типо Mathematica, Matlab, WolframAlpha. Или автоматизировать то что мы делали на математике на бумажке в школе и универе. Меня интересовало какие теоретические выкладки по этому существуют. Всё-же тема близкая к синтаксическому анализу, поэтому спросил здесь.
источник

is

ilya sheprut @optozorax in Compiler Development
Sailor Moon
в общем виде, это просто система переписывания? но они канонически недетерминистичны, что вряд ли на практике встречается. Пригодилась бы информация о том по какому правилу такие преобразования происходят
Спасибо за термин. "Система переписывания"
источник

E

EgorBo in Compiler Development
задаешь правила преобразований и запускаешь брудфорс
источник

is

ilya sheprut @optozorax in Compiler Development
Peter Sovietov
Тут действительно напрашиваются системы переписывания. И еще вопрос — какую из них считать за канон ;)
Короче говоря, гуглить полезно по "term rewriting" и "equational language".
Ого, спасибо!
источник