1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/aminoacid-z3

Клонировать/Скачать
RELEASE_NOTES.md 71 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 27.11.2024 20:12 7d58f41

Версия 4.next

Планируемые функции:

— sat.euf — новый CDCL-ядро для SMT-запросов. Расширяет механизм SAT с помощью плагинов решателя теории. Текущее состояние нестабильно, не хватает эффективного сопоставления.

— polysat — решение на уровне битовых векторов на уровне слов.

— Введение простых индукционных лемм для обработки ограниченного набора индуктивных доказательств.

Версия 4.11.0

Изменения:

— Удалены Z3_bool, Z3_TRUE, Z3_FALSE из API. Вместо них используются bool, true, false.

— z3++.h больше не включает , так как он не использовался.

— Добавлен solver.axioms2files: выводит аксиомы теории в файлы. Каждый файл должен быть неудовлетворительным.

— Добавлен solver.lemmas2console: выводит леммы на консоль.

— Удалён параметр smt.arith.dump_lemmas. Заменён на solver.axioms2files.

Версия 4.10.2

Исправления:

— Исправлена регрессия #6194, нарушающая рассуждения о модуле/остатке/делении.

— Исправлено управление областью действия пользовательского пропагатора для обратных вызовов равенства.

Версия 4.10.1

Исправление:

— Исправлена реализация mk_fresh в пользовательском пропагаторе для Python API.

Версия 4.10.0

Добавлены:

— API Z3_enable_concurrent_dec_ref, который устанавливается интерфейсами, использующими параллельный сборщик мусора для управления счётчиками ссылок. Эта функция интегрирована с привязками OCaml и исправляет регрессию, возникшую при переходе OCaml на параллельный GC. Использование этой функции для .Net и Java не интегрировано для этого выпуска. Они используют внешние очереди, которые излишне сложны.

— Предварительно объявленные объявления абстрактных типов данных в контексте, чтобы Z3_eval_smtlib2_string работал с примерами списков.

— Отладка Java-связывания для MacOS Arm64.

— Недостающие обработчики обратного вызова в тактиках для пользовательского пропагатора (спасибо Клеменсу Айзенхоферу).

— Настройка арифметического рассуждения Grobner для smt.arith.solver=6 (в настоящее время используется по умолчанию в большинстве случаев). Проверка согласованности по модулю умножения была обновлена следующим образом: — Полиномиальные равенства извлекаются из строк таблицы Simplex с использованием алгоритма конуса влияния. Ранее включались строки, где основные переменные были неограниченными. Согласно устаревшей реализации такие строки не включаются при построении полиномиальных уравнений. — Уравнения предварительно решаются, если они линейны и могут быть разделены на две группы: одна содержит одну переменную с нижней (верхней) границей, другая — более двух переменных с верхней (нижней) границами. Это позволяет избежать потери информации о границах во время завершения. — После (частичного) завершения выполните постоянное распространение для равенств вида x = 0. — После (частичного) завершения выполняйте факторизацию для факторов вида xyp = 0, где x — переменные, p — линейный.

Поддержка:

— Поддержка объявления алгебраических типов данных из интерфейса C++.

Версия 4.9.1

Исправлена ошибка:

— Выпуск исправления ошибок для обеспечения работы пакета npm.

Версия 4.9.0

Особенности:

— Собственные двоичные файлы M1 (Mac ARM64) и дистрибутив pypi. — Спасибо Изабель Гарсия Контрерас и Арье Гурфинкель за тестирование и исправления.

— API для инкрементального анализа утверждений. Описание функции приводится здесь в качестве примера: https://github.com/Z3Prover/z3/commit/815518dc026e900392bf0d08ed859e5ec42d1e43. Также обеспечивает инкрементность на уровне добавления утверждений к объекту решателя.

— Свёртка/отображение последовательностей: https://microsoft.github.io/z3guide/docs/guide/Sequences#map-and-fold. На данный момент эти функции доступны только через интерфейс SMTLIB2 (а не программный API). maxdiff/mindiff в массивах, скорее всего, будут устаревшими.

— Пользовательский пропагатор: — Добавление функций и обратных вызовов для внешнего контроля над ветвлением (спасибо Клеменсу Эйзенхоферу). — Функционирующий API dotnet для пользовательского пропагатора: https://github.com/Z3Prover/z3/blob/master/src/api/dotnet/UserPropagator.cs.

— Java Script API: — Доступны высокоуровневые объектные оболочки (спасибо Кевину Гиббонсу и Олафу Томалке).

— Тотализаторы и RC2: — Механизм MaxSAT теперь позволяет запускать RC2 с кодированием тотализатора. Тотализаторы включены по умолчанию, как показывают предварительные тесты. Данный фрагмент текста представляет собой описание различных версий программного обеспечения Z3.

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

Текст содержит примеры кода на языке SMTLib, который используется для взаимодействия с программой Z3.

Основной язык текста — английский.

  • this solves already 10% more problems on standard benchmarks. The option opt.rc2.totalizer (which by default is true) is used to control whether to use totalizer encoding or built-in cardinality constraints. The default engine is still maxres, so you have to set opt.maxsat_engine=rc2 to enable the rc2 option at this point. The engines maxres-bin and rc2bin are experimental should not be used (they are inferior to default options).

— Incremental constraints during optimization set option opt.incremental = true: — The interface Z3_optimize_register_model_eh allows to monitor incremental results during optimization. It is now possible to also add constraints to the optimization context during search. You have to set the option opt.incremental=true to be able to add constraints. The option disables some pre-processing functionality that removes variables from the constraints.

Version 4.8.17

— fix breaking bug in python interface for user propagator pop; — integrate fixes to z3str3; — initial support for nested algebraic datatypes with sequences; — initiate map/fold operators on sequences — full integration for next releases; — initiate maxdiff/mindiff on arrays — full integration for next releases.

Examples:

(declare-sort Expr)
(declare-sort Var)
(declare-datatypes ((Stmt 0)) 
(((Assignment (lval Var) (rval Expr)) 
    (If (cond Expr) (th Stmt) (el Stmt)) 
    (Seq (stmts (Seq Stmt))))))

(declare-const s Stmt)
(declare-const t Stmt)

(assert ((_ is Seq) t))
(assert ((_ is Seq) s))
(assert (= s (seq.nth (stmts t) 2)))
(assert (>= (seq.len (stmts s)) 5))
(check-sat)
(get-model)
(assert (= s (Seq (seq.unit s))))
(check-sat)

Version 4.8.16

— initial support for Darwin Arm64 (for M1, M2, .. users) thanks to zwimer and Anja Petkovi'c Komel for updates. Java is not yet supported, pypi native arm64 distributions are not yet supported. cmake dependency added to enable users to build for not-yet-supported platforms directly; specifically M1 seems to come up. — added functionality to user propagator decisions. Thanks to Clemens Eisenhofer. — added options for rc2 and maxres-bin to maxsat (note that there was no real difference measured from maxres on MaxSAT unweighted so default option is unchanged) — improved search for mutex constraints (at-most-1 constraints) among soft constraints for maxsat derived from approach used in rc2 sample. — multiple merges.

Version 4.8.15

— elaborate user propagator API. Change id based scheme to expressions; — includes a Web Assembly ffi API thanks to Kevin Gibbons.

Version 4.8.14

— fixes Antimirov derivatives for intersections and unions required required for solving non-emptiness constraints; — includes x86 dll in nuget package for Windows; — exposes additional user propagator functionality.

Version 4.8.13

The release integrates various bug fixes and tuning.

Version 4.8.12

Release provided to fix git tag discrepancy issues with 4.8.11.

Version 4.8.11

— self-contained character theory, direct support for UTF8, Unicode character sets. Characters are by default unicode with an 18 bit range; — support for incremental any-time MaxSAT using the option opt.enable_lns. The API allows registering a callback function that is invoked on each incremental improvement to objectives.

Version 4.8.10

— rewritten arithmetic solver replacing legacy arithmetic solver and on by default.

Version 4.8.9

— New features: significant improvements to regular expression solving, expose user theory plugin. It is a leaner user theory plugin that was once available. It allows for registering callbacks that react to when bit-vector and Boolean variables receive fixed values. — Bug fixes: many. — Notes: the new arithmetic theory is turned on by default. It does introduce regressions on several scenarios, but has its own advantages. Users can turn on the old solver by. Настройка smt.arith.solver=2. В зависимости от обратной связи мы можем снова включить эту настройку по умолчанию обратно в smt.arith.solver=2.

Версия 4.8.8

  • Новые функции:
    • переписанное ядро решателя нелинейной целочисленной арифметики (NIA). Оно включено в выбранных теориях по умолчанию. В этом выпуске устаревший арифметический решатель остаётся общим значением по умолчанию, поскольку переписанный решатель показывает регрессии (в основном в проблемах NRA).
    • представление рекурсивной функции без подъёма выражений ite. Проблема № 2601.
    • интерполяция на основе модели для количественно-свободной UF, арифметической.
    • привязки Julia через C++ API, благодаря ahumenberger.
  • Исправления ошибок:
    • многочисленные, многие основаны на обширном фаззинге. Благодаря 5hadowblad3, muchang, numairmansur, rainoftime, wintered.
  • Примечания:
    • рекурсивные функции разворачиваются с отдельными приращениями на основе анализа основных литералов unsat, которые являются отдельными для разных рекурсивных функций.
    • решатель seq (строка) был пересмотрен несколькими способами и, вероятно, показывает некоторые регрессии в этом выпуске.

Версия 4.8.7

  • Новые функции:
    • настройка параметра в решателе через API с помощью solver.smtlib2_log=<имя файла> позволяет отслеживать вызовы в решатель в виде команд SMTLIB2. Он отслеживает assert, push, pop, check_sat, get_consequences.
  • Примечания:
    • различные исправления ошибок.
    • удаление model_compress. Используйте model.compact.
    • печать весов с квантификаторами, когда вес != 1.

Версия 4.8.6

  • Примечания:
    • различные исправления ошибок.
    • встроенная поддержка PIP, благодаря Audrey Dutcher.
    • режим компиляции VS, включая флаги misc для управляемых пакетов.

Версия 4.8.5

  • Примечания:
    • различные исправления ошибок.

Версия 4.8.4

  • Примечания:
    • исправляет ошибки.
    • существенное обновление того, как решатель теории seq обрабатывает регулярные выражения. Другие улучшения производительности для решателя seq.
    • Управляемые библиотеки DLL .NET включают стандарт dotnet 1.4 на поддерживаемых платформах.
    • Windows Managed DLLs имеют строгую подпись в выпущенных двоичных файлах.

Версия 4.8.3

  • Новые функции:

    • собственная обработка определений рекурсивных функций, благодаря Simon Cruanes.
    • опция округления PB для разрешения конфликтов при рассуждении о ограничениях PB.
    • доступ к числовым константам как двойному из собственного API.
  • Примечания:

    • устраняет несколько ошибок, обнаруженных после выпуска 4.8.1.

Версия 4.8.2

  • Пост-релиз.

Версия 4.8.1

  • Релиз. Исправление ошибок для версии 4.8.0.

Версия 4.8.0

  • Новые требования:

    • критическое изменение в API заключается в том, что парсеры для формул SMT-LIB2 возвращают вектор формул вместо конъюнкции формул. Вектор формул соответствует набору инструкций «assert» во входных данных SMT-LIB.
  • Новые функции:

    • доступен параллельный режим для выбора теорий, включая QF_BV. Установив parallel.enable=true, Z3 будет создавать несколько рабочих потоков, пропорциональных количеству доступных ядер ЦП, для применения решения куба и завоевания цели.
    • решатель SAT по умолчанию обрабатывает ограничения кардинальности и PB с помощью специального плагина, который работает непосредственно с ограничениями кардинальности и PB.
    • интерфейс «куб» предоставляется через API решателя.
    • преобразование моделей является первоклассным через текстовый API, так что подзадачи, созданные при запуске решателя, можно передать в текстовых файлах, а модель исходной формулы можно воссоздать из результата.
    • это также привело к изменениям в том, как модели отслеживаются по тактическим подзадачам. API для извлечения моделей из apply_result были заменены.
    • дополнительный режим обрабатывает xor-ограничения с помощью настраиваемого распространителя xor. По умолчанию он выключен, и его значение не продемонстрировано.
    • в решателе SAT используются новые методы обработки, доступные во время упрощения. По умолчанию выполняется асимметричное устранение тавтологий, и можно включить более мощные методы обработки (известные как ACCE, ABCE, CCE). Асимметричное ветвление также использует функции, представленные в Lingeling. Использование бинарных импликационных графов

Используйте sat.acce=true, чтобы активировать полный набор методов обработки. По умолчанию пункты, которые «исключаются» с помощью acce, помечаются как леммы (избыточные) и удаляются сборщиком мусора, если их уровень сцепления высок.

Существенная переработка механизма рожка-разделителя.

Добавлены базовые функции для поддержки привязок Lambda.

Реализована модель сжатия для исключения локальных определений функций в моделях. Если встраивание не влечёт существенных накладных расходов, можно воспроизвести старое поведение, установив параметр верхнего уровня model_compress=false.

Интеграция нового решателя линейной целочисленной арифметики и смешанной линейной целочисленной арифметики от Льва Начмансона. Он включает несколько улучшений решения QF_LIA на основе:

— использования более качественного LP-движка, который уже является основой для QF_LRA; — включения разрезов на основе эрмитовой нормальной формы (благодаря подходам, описанным в «разрезах из доказательств» и «сокращении смеси»); — извлечения целочисленных решений из LP-решений путём выборочного ужесточения границ. Мы используем обобщение Бромбергера и Вайденбаха, которое позволяет избежать выборочных ужесточений границ (https://easychair.org/publications/paper/qGfG).

Решатель значительно эффективнее справляется с задачами категории QF_LIA и на данный момент может быть лучшим решением вашей проблемы. Новый решатель доступен только для избранных логик SMT-LIB. Они включают QF_LIA, QF_IDL и QF_UFLIA. В других теориях (пока) используется устаревший арифметический решатель. Вы можете включить новый решатель, установив параметр smt.arith.solver=6.

Удалённые функции:

— Интерполяционный API. — Механизм двойственности для ограниченных рожков-разделителей. — PDR-механизм для ограниченных рожков-разделителей. Функциональность механизма была включена в spacer в качестве одной из дополнительных стратегий. — Устаревающие API-функции были удалены из z3_api.h.

Версия 4.7.1

Новые требования:

— Использует stdbool и stdint как часть z3.

Новых функций нет.

Удалённых функций нет.

Это незначительное обновление перед серией запланированных крупных обновлений. Оно использует младшую версию 7, чтобы указать, что использование stdbool и stdint является критическим изменением для потребителей C-API.

Версия 4.6.0

Новые требования:

— Компилятор, поддерживающий C++11, для сборки Z3. — C++ API теперь требует C++11 или новее.

Новые функции (включая):

— Новый строковый решатель от Университета Ватерлоо. — Новый линейный вещественный арифметический решатель. — Изменённое поведение оптимизационных команд в интерфейсе командной строки SMT2. Значения целей больше не выводятся по умолчанию. Их можно получить, выполнив команду (get-objectives). Доступ к целям фронта Парето осуществляется путём выполнения нескольких вызовов (check-sat), пока он не вернёт unsat.

Удалённые функции:

— Поддержка SMT-LIB 1.x удалена.

Версия 4.5.0

Новые функции:

— Новые теории строк и последовательностей. — API поиска последствий «get-consequences» для вычисления набора последствий по модулю жёстких ограничений и набора предположений. Оптимизированные реализации предоставляются для конечных областей (QF_FD) и для большинства логик SMT. — Система сборки CMake (спасибо @delcypher). — Новые API-функции, включая доступ к утверждениям и анализ тестов SMT-LIB. — Обновлённый и улучшенный OCaml API (спасибо @martin-neuhaeusser). — Обновлённый и улучшенный Java API (спасибо @cheshire). — Новые средства ограничения ресурсов, позволяющие избежать недетерминированного поведения тайм-аута. Его можно включить из командной строки с помощью переключателя rlimit=. — Новая тактика упрощения и аккерманизации векторов битов (спасибо @MikolasJanota, @nunoplopes). — QSAT: новый решатель для выполнимости квантифицированных арифметических формул. См.: Bjorner, Janota: Playing with Quantified Satisfaction, LPAR 2016. Это новый решатель по умолчанию для логик LIA, LRA, NRA. Кроме того, его можно применять в качестве тактики для квантифицированных формул. Использование алгебраических типов данных

Использование алгебраических типов данных (но исключая подтермы селектора, поскольку Z3 не определяет семантику применения селектора к несоответствующему термину конструктора).

Специализированная логика QF_FD и связанный инкрементальный решатель

Специализированная логика QF_FD и связанный инкрементальный решатель (поддерживает push/pop). Область QF_FD включает битовые векторы, типы данных перечислений, используемые только в равенствах, и ограниченные целые числа: целые числа, используемые в задачах QF_FD, должны быть ограничены конечной границей.

Запросы в механизме фиксированной точки

Запросы в механизме фиксированной точки теперь являются функциональными символами, а не формулами со свободными переменными. Это делает ассоциацию свободных переменных в ответах однозначной. Чтобы эмулировать запросы над составными формулами, введите новый предикат, аргументы которого являются соответствующими свободными переменными в формуле, и добавьте правило, которое использует новый предикат в голове и формулу в теле.

Минимизация ядер unsat доступна как опция для ядер SAT и SMT.

Минимизация ядер unsat доступна в качестве опции для модулей SAT и SMT. Установив smt.core.minimize=true или sat.core.minimize=true, ядра, созданные этими модулями, минимизируются.

Исправлен ряд ошибок.

Версия 4.4.1

Этот выпуск знаменует переход на новую модель разветвления и извлечения GitHub; ветки unstable и contrib будут удалены, все новые вклады будут направляться непосредственно в основную ветку.

Исправлен ряд ошибок.

Добавлена новая функция: поддержка оптимизационных запросов. Язык команд SMT-LIB2 дополнен тремя командами (maximize ), (minimize <expr) и (assert-soft [:weight ] [:id ]). Программный API также содержит выделенный контекст для решения оптимизационных запросов. В статье Bjorner, Dung и Fleckenstein на TACAS 2015 описаны дополнительные детали, а онлайн-учебник на http://rise4fun.com/z3opt иллюстрирует некоторые варианты использования.

Версия 4.4.0

Новая функция: Поддержка теории чисел с плавающей точкой. Она представлена в виде логик (QF_FP и QF_FPBV), тактик (qffp и qffpbv), а также подключаемого модуля теории, который позволяет комбинировать теории. Z3 поддерживает официальное определение теории FP SMT (см. http://smtlib.cs.uiowa.edu/theories/FloatingPoint.smt2) в файлах SMT2, а также во всех API.

Новая функция: Стохастический локальный поисковый механизм для формул битовых векторов (см. тактику qfbv-sls). См. также: Froehlich, Biere, Wintersteiger, Hamadi: Stochastic Local Search for Satisfiability Modulo Theories, AAAI 2015.

Обновление: Этот выпуск включает совершенно новый API OCaml/ML, который гораздо лучше интегрирован с системой сборки и, надеюсь, проще в использовании, чем предыдущий.

Исправлено множество ошибок, о которых сообщили Марк Брокшмидт, Венкатеш-Прасад Ранганат, Энрик Карбонелл, Морган Детерс, Том Болл, Мальте Шверхофф, Амир Эбрахими, пользователи Codeplex rsas, clockish, Heizmann, susmitj, steimann и пользователи Stackoverflow user297886.

Версия 4.3.2

Предварительная поддержка теории чисел с плавающей запятой (тактики qffpa, qffpabv и логики QF_FPA, QF_FPABV).

Интерполяционные функции iZ3 теперь интегрированы в Z3.

Множество ошибок и несоответствий было исправлено и сообщено нам лично, по электронной почте или на Codeplex. Из тех, о которых у нас есть записи, мы хотели бы выразить нашу благодарность Владимиру Клебанову, Конраду Ямрозику, Нуно Лопесу, Карстену Рютцу, Эстебану Павесу, Томеру Вайсу, Илье Миронову, Габриэле Паганелли, Левенту Эркоку, Фабиану Эммесу, Дэвиду Коку, Этьену Кнауссу, Арлену Коксу, Мэтту Льюису, Карстену Отто, Полу Джексону, Дэвиду Моннио, Мартину Плюкеру, Жасмин Бланшетт, Жюлю Вийяру, Эндрю Гачеку, Джорджу Карпенкову, Йоргу Пфехлеру и Пабло Аледо, а также следующим пользователям Codeplex, которые либо сообщали об ошибках, либо участвовали в обсуждениях: xor88, parno, gario, Bauna, GManNickG, hanwentao, dinu09, fhowar, Cici, chinissai, barak_cohen, tvalentyn, krikunts, sukyoung, daramos, snedunuri, rajtendulkar, sonertari, nick8325, dvitek, amdragon, Beatgodes, dmonniaux, nickolai, DameNingen, mangpo, ttsiodras. Новые возможности инфраструктуры настройки параметров. Теперь можно задавать параметры для внутренних модулей Z3. Изменились названия некоторых параметров. Список новых параметров можно получить, выполнив команду z3 -p.

Добавлены функции get_version() и get_version_string() в Z3Py.

Поддержка FreeBSD. Z3 можно скомпилировать на FreeBSD с помощью g++.

Поддержка Python 3.x.

Возврат к (set-option :global-decls false) как к значению по умолчанию. В Z3 4.3.0 и Z3 4.3.1 этот параметр был установлен в true. Благодарим Жюльена Генри за сообщение об этой проблеме.

Добавлен каталог doc и скрипты для автоматического создания документации API.

Убрана зависимость от autoconf. Больше не нужно выполнять команды autoconf и ./configure для сборки Z3.

Исправлена ошибка в результате, возвращаемом Z3_solver_get_num_scopes. (Спасибо Герману Вентеру). Эта ошибка появилась в Z3 4.3.0.

Java-привязки. Чтобы включить их, необходимо использовать опцию --java при выполнении скрипта mk_make.py. Пример: python scripts/mk_make.py --java.

Исправлен сбой при анализе некорректных формул. Сбой появился при добавлении поддержки «арифметических приведений» в Z3 4.3.0.

В mk_make добавлена новая опция, позволяющая пользователям указывать, где будут установлены привязки Python (Z3Py). (Благодарим Деяна Йовановича за сообщение о проблеме).

Исправлен сбой, о котором сообщалось на сайте http://z3.codeplex.com/workitem/10.

Удалены вспомогательные константы, созданные тактикой nnf из моделей Z3.

Исправлена проблема в красивом принтере. Он не вводил кавычки для имён атрибутов, таких как |foo:10|.

Исправлена ошибка при использовании предположений (спасибо Филиппу Сутеру и Этьену Кнеуссу). Рассмотрим следующий пример: (assert F) (check-sat a) (check-sat) Если 'F' неудовлетворительно независимо от предположения 'a', и противоречие может быть обнаружено только путём выполнения распространения, то версия <= 4.3.1 может возвращать unsat sat вместо unsat unsat. Мы говорим «может», потому что у 'F' могут быть другие неудовлетворительные ядра.

Исправлена ошибка, о которой сообщалось на сайте https://stackoverflow.com/questions/13923316/unprintable-solver-model.

Исправлены таймеры в Linux и FreeBSD.

Исправлен сбой, о котором сообщалось на сайте http://z3.codeplex.com/workitem/11.

Исправлена ошибка, о которой сообщалось на сайте https://stackoverflow.com/questions/14307692/unknown-when-using-defs.

Ослаблена процедура check_logic. Теперь она автоматически принимает приведения (to_real), вводимые Z3. (Спасибо Полу Джексону). Это исправление для http://z3.codeplex.com/workitem/19.

Исправлено https://stackoverflow.com/questions/14524316/z3-4-3-get-complete-model.

Исправлены ошибки в C++ API (спасибо Андрею Куприянову).

Исправлена ошибка, о которой сообщалось на сайте http://z3.codeplex.com/workitem/23 (спасибо Полу Джексону).

Исправлена ошибка, о которой сообщалось на сайте https://stackoverflow.com/questions/15226944/segmentation-fault-in-z3 (спасибо Тяньхаю Лю).

Версия 4.3.1

  • Добавлена поддержка компиляции Z3 с использованием clang++ в Linux и OSX.

  • Добавлен отсутствующий параметр компиляции (-D _EXTERNAL_RELEASE) в режиме выпуска.

Версия 4.3.0

  • Исправлена ошибка во время построения модели, о которой сообщил Хайцман (http://z3.codeplex.com/workitem/5).

  • Примечание: мы пропустили версию 4.2 из-за ошибки при выпуске версии 4.1.2. Версия 4.1.2 была ошибочно помечена как 4.2. Спасибо Клоду Маршу за сообщение об этом. С этого момента мы также официально переходим на трёхзначную систему нумерации версий. Идея состоит в том, чтобы... Иметь более частые релизы, содержащие исправления ошибок.

  • Проведена реорганизация кодовой базы Z3, также появилась новая система сборки.

На всех платформах требуется установить Python 2.7.x.

В Windows можно выполнить сборку с помощью командной строки Visual Studio.

В Linux, OSX, Cygwin можно выполнить сборку, используя g++. См. README для инструкций по компиляции.

  • Убрана тактика mip. Она была основана на коде, который был удалён во время реорганизации кода.

  • Исправлены проблемы компиляции с clang/llvm. Большое спасибо Си Вану за то, что он нашёл проблему и предложил решение.

  • Теперь Z3 автоматически добавляет арифметические приведения типов: to_real и to_int. Опция (set-option :int-real-coercions false) отключает эту функцию. Если SMTLIB2_COMPLIANT=true в командной строке, то :int-real-coercions также устанавливается в значение false.

По умолчанию SMTLIB2_COMPLIANT имеет значение false. Используйте параметр командной строки SMTLIB2_COMPLIANT = true, чтобы включить его обратно.

  • Добавлены команды «make install» и «make uninstall» в Makefile.in.

Добавлены команды «make install-z3py» и «make uninstall-z3py» в Makefile.in.

Исправлен сбой/ошибка в упрощателе. Сбой происходил, когда использовалась опция «:sort-sums true».

  • Добавлена опция --with-python= в скрипт настройки.

Очищены примеры c++, maxsat, test_mapi.

Файлы RELEASE_NOTES перемещены в дистрибутив исходного кода.

Удалены ненужные файлы из дистрибутива исходного кода.

Из z3-prover.sln удалены ненужные режимы компиляции.

  • В Z3Py добавлена процедура Xor.

Z3 по умолчанию переключается на инкрементный решатель, когда объект Solver используется для решения многих запросов. В этой версии мы возвращаемся к тактической структуре, если инкрементный решатель возвращает «неизвестно».

Разрешены отрицательные числа во внешнем интерфейсе SMT 2.0. То есть парсер Z3 SMT 2.0 теперь принимает такие числа, как «-2». Больше не нужно кодировать их как «(- 2)». Парсер по-прежнему принимает -foo как символ. То есть это не сокращение для (- foo). Эта функция отключается, когда в командной строке установлено значение SMTLIB2_COMPLIANT = true.

Теперь Z3 можно скомпилировать внутри cygwin с помощью gcc.

Исправлена ошибка в генерации ядра неудовлетворительности.

Первый выпуск исходного кода (2 октября 2012 г.)

  • Исправлена ошибка в Z3Py. Метод, который создаёт приложения Z3, мог дать сбой, если один из аргументов необходимо было «привести» к правильному виду (спасибо Денису Юричеву).

  • Исправлена ошибка в теории типов данных (спасибо Айрату).

  • Исправлена ошибка в определении MkEmptySet и MkFullSet в .Net API.

При включённой автоматической конфигурации (AUTO_CONFIG = true) отображается предупреждающее сообщение и игнорируется параметр CASE_SPLIT = 3,4 или 5 (спасибо Тобиасу с StackOverflow).

Предикаты <, <=, > и >= стали цепочечными, как определено в стандарте SMT 2.0 (спасибо Маттиасу Вейлеру).

Добавлена поддержка чисел в научной нотации в Z3_ast Z3_mk_numeral(__in Z3_context c, __in Z3_string numeral, __in Z3_sort ty).

Новые встроенные символы в арифметической теории: pi, euler, sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, asinh, acosh, atanh. Первые два являются константами, а остальные — унарными функциями. Эти символы недоступны, если указана логика SMT 2.0 (например, QF_LRA, QF_NRA, QF_LIA и т. д.), поскольку эти символы не определены в этих логиках. То есть новые символы доступны только в том случае, если логика не указана.

Версия 4.1

  • Новый OCAML API (большое спасибо Джошу Бердайну).

CodeContracts в .NET API (большое спасибо Франческо Логодзо). Пользователи теперь могут проверить, правильно ли они используют .NET API, с помощью Clousot.

Добавлена опция :error-behavior. По умолчанию используется continued-execution. Теперь пользователи могут заставить внешний интерфейс Z3 SMT 2.0 завершать работу всякий раз, когда сообщается об ошибке. Им просто нужно использовать команду (set-option: error-behavior immediate-exit).

Исправлена ошибка в устранении термина if-then-else (спасибо Артуру Неядомскому).

Исправлена ошибка в коде обнаружения логики различий (спасибо Деяну). - Исправлена ошибка в препроцессоре псевдобулевых выражений (спасибо Адриену Чемпиону).

  • Исправлена ошибка в правилах препроцессинга bvsmod (спасибо Деяну Йовановичу).

  • Исправлена ошибка в Tactic tseitin-cnf (спасибо Георгу Хофереку).

  • Добавлен недостающий шаг упрощения в nlsat.

  • Исправлена ошибка при построении модели для линейной вещественной арифметики (спасибо Марчелло Берсани).

  • Исправлена ошибка в препроцессоре, который устранял рациональные степени (например, (^ x (/ 1.0 2.0))), ошибка затрагивала только задачи, где знаменатель был чётным (спасибо Йоханнесу Эрикссону).

  • Исправлена ошибка в операции k-го корня в пакете алгебраических чисел. Результат был правильным, но результирующий полином мог быть неправильно помечен как минимальный и вызывать бесконечный цикл при операциях сравнения. (Спасибо Йоханнесу Эрикссону.)

  • Исправлена ошибка, влияющая на задачи, содержащие шаблоны с n-арными арифметическими выражениями, такими как (p (+ x y 2)). Эта ошибка была введена в Z3 4.0. (Спасибо Полу Джексону.)

  • Исправлен сбой при нехватке памяти.

  • Исправлен сбой, о котором сообщил Алекс Саммерс. Сбой происходил в сценариях, содержащих кванторы, и использующих булевы формулы внутри терминов.

  • Исправлен сбой в модуле MBQI (спасибо Стефану Фальке).

  • Исправлена ошибка в механизме E-matching. Он пропускал экземпляры мультипаттернов (спасибо Алексу Саммерсу).

  • Исправлена ошибка в симпатичном принтере Z3Py.

  • Модуль вывода шаблонов больше не генерирует предупреждающие сообщения по умолчанию. Этот модуль отвечал за создание сообщений типа: «ПРЕДУПРЕЖДЕНИЕ: не удалось найти шаблон для квантификатора (идентификатор квантификатора: k!199)». Опцию PI_WARNINGS=true можно использовать для включения этих предупреждающих сообщений.

  • В z3++.h добавлены отсутствующие операторы возврата (спасибо Дэниелу Нейдеру).

  • Убрана поддержка форматов ввода TPTP5 и Simplify.

  • Убрана поддержка формата ввода Z3 (низкоуровневого). Он всё ещё доступен в API.

  • Убрана поддержка входного формата «SMT 1.5» (также известного как файлы .smtc). Это был гибридный входной формат, реализованный во время разработки стандарта SMT 2.0. Пользователи должны перейти на формат SMT 2.0. Обратите внимание, что формат SMT 1.0 всё ещё доступен.

  • Тактика tseitin-cnf стала более «дружелюбной». Она автоматически применяет необходимые преобразования, чтобы устранить такие операторы, как and, distinct и т. д.

  • Реализован новый алгоритм PSC (главных субрезультантных коэффициентов). Это было одним из узких мест в новом решателе/тактике nlsat.

Версия 4.0

Z3 4.0 — это крупный релиз. Основные новые функции: — Новый C API, обратно совместимый, но некоторые методы помечены как устаревшие. В новом API многие решатели могут быть созданы в одном контексте. Также он включает поддержку пользовательских стратегий с использованием тактик. Кроме того, он предоставляет новый интерфейс для просмотра моделей.

— Тонкий слой C++ вокруг C API, иллюстрирующий, как использовать подсчёт ссылок объектов ast. Несколько примеров можно найти в каталоге examples/c++.

— Новый .NET API вместе с обновлённой версией устаревшего .NET API. Новый .NET API поддерживает новые функции, тактики, решатели, цели и интеграцию с подсчётом ссылок. Время жизни терминов и видов больше не требует дисциплины области видимости.

— Z3Py: Python-интерфейс для Z3. Охватывает все основные функции Z3 API.

— Решатель NLSAT для нелинейной арифметики.

— Алгоритм PDR в muZ.

— iZ3: интерполирующий пролог, построенный на основе Z3 (см. документацию iz3). iZ3 доступен только для Windows и Linux.

— Новая инфраструктура логирования. Логи Z3 используются для записи каждого вызова API Z3, выполненного вашим приложением. Если вы обнаружите ошибку, достаточно отправить журнал команде Z3. Следующие API были удалены: Z3_trace_to_file, Z3_trace_to_stderr, Z3_trace_to_stdout, Z3_trace_off. API: Z3_open_log, Z3_append_log и Z3_close_log больше не получают Z3_context. При создании журнала необходимо вызвать Z3_open_log перед любым... Другие вызовы функций Z3.

Новые логи содержат больше деталей. Однако у них есть два ограничения:

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

Z3 (для Linux и OSX) больше не зависит от GMP. Макросы обратной совместимости Z3 1.x определены в z3_v1.h. Если вы всё ещё используете их, вам необходимо явно включить этот файл. Исправлены все ошибки, о которых сообщалось на Stackoverflow.

Временно отключены следующие функции:

  • Новые API решателя пока не поддерживают пользовательские теории. Пользователи по-прежнему могут использовать их с устаревшим API решателя.
  • Параллельный Z3 также отключен в этом выпуске. Тем не менее, существуют параллельные комбинаторы для создания стратегий (см. учебник).

Эти две функции вернутся в будущих выпусках.

Вот список всех устаревших функций.

Версия 3.2

Это обновление исправляет проблемы, о которых сообщалось в версии 3.1. Добавлена поддержка цепных и правоассоциативных атрибутов. Исправлена генерация моделей для логики QBVF (также известной как UFBV). Теперь Z3 официально поддерживает логики BV и UFBV. По сути, это QF_BV и QF_UFBV с квантификаторами. Исправлена ошибка в командах eval и get-value. Спасибо Левенту Эркоку. Исправлена проблема с производительностью, которая влияла на VCC и Slayer. Спасибо Михалу Москалю. Исправлено измерение времени на Linux. Спасибо Айрату Халимову. Исправлена ошибка деструктивного разрешения равенства (DER=true). Исправлена ошибка оператора map в теории массивов. Спасибо Шазу Куадеру. Улучшены сценарии сборки OCaml для Windows. Спасибо Джошу Бердайну. Исправлен сбой в MBQI (когда использовались переменные Real). Исправлены ошибки в устранении кванторов. Спасибо Джошу Бердайну. Исправлен сбой при использовании недопустимого объявления типа данных. Исправлена ошибка в парсере SMT2. Исправлен сбой быстрой проверки для количественных формул. Спасибо Свену Джейкобсу. Исправлена ошибка упростителя bvsmod. Спасибо Тревору Хансену. Новые API: Z3_substitute и Z3_substitute_vars. Исправлен сбой в MBQI. Спасибо Деяну Йовановичу.

Версия 3.1

Это обновление исправляет проблемы, о которых сообщалось в версии 3.0. Исправлена ошибка генерации модели. Спасибо Арлену Коксу и Гордону Фрейзеру. Исправлена ошибка Z3_check_assumptions, из-за которой её нельзя было использовать между выполнимыми экземплярами. Спасибо Кристофу Ходеру. Исправлены две ошибки устранения кванторов. Спасибо Джошу Бердайну. Исправлены ошибки препроцессора. Исправлена проблема с производительностью в MBQI. Спасибо Кэтрин Столи. Улучшена стратегия для логики QBVF (также известная как UFBV). Добавлена поддержка отрицательных предположений в команде check-sat.

Версия 3.0

Полностью совместимый интерфейс SMT-LIB 2.0 (SMT2). Старый интерфейс по-прежнему доступен (параметр командной строки -smtc). Руководство Z3 описывает новый интерфейс. Параметрические индуктивные типы данных и параметрические пользовательские типы. Новый SAT-решатель. Z3 также может читать формулы ввода dimacs. Новый решатель Bitvector (QF_BV). Новый решатель доступен только при использовании нового интерфейса SMT2. Значительные улучшения производительности. Новый стек предварительной обработки. Улучшения производительности для линейной и нелинейной арифметики. Улучшения доступны только при использовании интерфейса SMT2. Добавлен API для анализа файлов SMT2. Исправлена ошибка AUTO_CONFIG=true. Спасибо Альберто Гриджио. Исправлена ошибка кэша упростителя Z3. Он не сбрасывался во время возврата. Спасибо Альберто Гриджио. Исправлено множество других ошибок, о которых сообщали пользователи. Улучшено создание экземпляров модели на основе квантификатора (MBQI). Новый решатель для квантифицированной логики битовых векторов (QBVF). Z3 проверяет указанную пользователем логику. TPTP. managed API.

Версия 2.8

Были добавлены следующие функции:

  • Теории пользователя: пользователь может добавлять решатели теорий, которые вызываются ядром Z3 во время поиска. См. также theory_plugin_ex.
  • Функции SMT2: анализ привязок let в SMT2.

В этом выпуске исправлены следующие ошибки:

  • Некорректная семантика постоянного свёртывания для (bvsmod 0 x), где x положителен, некорректное постоянное свёртывание для bvsdiv, некорректное упрощение bvnor, bvnand, некорректная компиляция bvshl при использовании величины сдвига, которая оценивается как длина битового вектора. Благодаря Тревору Хансену и Роберту Бруммайеру.
  • Некорректное преобразование NNF в процедурах исключения линейных квантификаторов. Благодаря Джошу Бердайну.
  • Отсутствующее постоянное свёртывание извлечения для больших битовых векторов. Благодаря Алвину.
  • Недостающие API для bvredand и bvredor.

Версия 2.7

Были добавлены следующие функции:

  • Частичная поддержка формата SMT-LIB 2.0: добавлены declare-fun, define-fun, declare-sort, define-sort, get-value.
  • Добавлена функция принуждения to_int и тестирующая функция is_int. Для принуждения от вещественных чисел к целым и для проверки, является ли вещественное число целым. Функция to_real уже поддерживалась.
  • Добавлен Z3_repeat для создания повторения битовых векторов.

В этом выпуске были исправлены следующие ошибки:

  • Некорректная семантика постоянного свёртывания для bvsmod.
  • Некорректная семантика постоянного свёртывания для div/mod. Благодаря Саше Бёме.
  • Проблема не завершения, связанная с опцией LOOKAHEAD=true. Она устанавливается для QF_UF в режиме автоконфигурации. Благодаря Пьеру-Кристофу Бюэ.
  • Неправильные аксиомы, созданные для инъективных функций. Благодаря Саше Бёме.
  • Переполнение стека во время упрощения больших вложенных терминов битовых векторов. Благодаря Дэвиду Мольнару.
  • Сбой при генерации ядра неудовлетворительности при включении SOLVER=true. Благодаря Лукасу Кордейро.
  • Неограниченный рост кэша при упрощении битовых векторов. Благодаря Эрику Ландерсу.
  • Сбой при решении формул свойств массивов с использованием нестандартных операторов массива. Благодаря Саше Бёме.

Версия 2.6

Этот выпуск исправляет несколько ошибок. Спасибо Марко Кяэрэмесу за сообщение об ошибке в сильном упростителе контекста и Джошу Бердайну.

Также этот выпуск представляет некоторые новые функции предварительной обработки:

  • Более эффективное деструктивное разрешение равенства DER=true.
  • DISTRIBUTE_FORALL=true (распределяет универсальные кванторы по конъюнкциям, это преобразование может повлиять на вывод паттернов).
  • Рерайтер, который использует уравнения с универсальной квантификацией PRE_DEMODULATOR=true (да, название опции не очень хорошее, мы изменим его в будущем выпуске).
  • REDUCE_ARGS=true (это преобразование по сути является частичной аккерманизацией для функций, где конкретный аргумент всегда является интерпретируемым значением).
  • Улучшенная поддержка обнаружения макросов (макрос — это формула с универсальной квантификацией вида Forall X. F(X) = T[X]). Мы также меняем название опции, теперь она называется MACRO_FINDER=true.
  • ELIM_QUANTIFIERS=true включает методы исключения кванторов. Предыдущие варианты под названием QUANT_ARITH устарели.

Версия 2.5

Эта версия представляет следующие функции:

  • STRONG_CONTEXT_SIMPLIFIER=true позволяет упростить подформулы до true/false в зависимости от контекстно-зависимой информации. Подход, который мы используем, описан на форуме Microsoft Z3.
  • Некоторые значения параметров можно обновить через API. Эта функциональность называется Z3_update_param_value в C API. Это особенно полезно для включения и выключения сильного упростителя контекста.

Он также исправляет ошибки, о которых сообщили Энрик Родригес Карбонелл, Нуно Лопес, Джош Бердайн, Итан Джексон, Роб Куигли и Лукас Кордейру.

Версия 2.4

Эта версия вводит следующие функции:

  • Маркированные литералы для формата SMT-LIB. Формат Simplify поддерживал маркированные формулы для упрощения отображения контрпримеров. Поддержка меток в формате SMT-LIB

Предварительная поддержка SMT-LIB2.

Исправлены следующие ошибки:

  • ошибка в нелинейных арифметических подпрограммах;
  • сбой при наблюдении класса модульных целочисленных арифметических формул;
  • неполное насыщение, приводящее к неправильной маркировке sat;
  • сбой в процедуре битового вектора при использовании int2bv и bv2int.

Спасибо Михалу Москалю, Саше Бёме и Итану Джексону.

Версия 2.3

Этот выпуск представляет следующие функции:

  • утилиты цитирования F#. В выпуске есть новый каталог «utils». Он содержит утилиты, созданные на основе Z3. Основная из них — поддержка перевода цитируемых выражений F# в формулы Z3.

  • конфигурация QUANT_ARITH. Полное устранение квантификатора для линейной вещественной и линейной целочисленной арифметики. QUANT_ARITH=1 использует метод Ферранте/Раккоффа для вещественных чисел и метод Купера для целых чисел. QUANT_ARITH=2 использует метод Фурье-Моцкина для вещественных и тест Омега для целых чисел.

Исправлены следующие ошибки:

  • неправильное упрощение карты над хранилищем в расширенной теории массивов. Сообщил Кателин Хритку;
  • неполная обработка распространения равенства с постоянными массивами. Сообщил Кателин Хритку;
  • сбой в теории битовых векторов;
  • некорректность в реконструкции доказательства для манипуляции кванторами.

Благодарим Кателина Хритку, Николая Тиллмана и Сашу Бёме.

Версия 2.2

В этом выпуске исправлены незначительные ошибки. Введены некоторые дополнительные функции во внешнем интерфейсе SMT-LIB, чтобы упростить анализ новых операторов в теории массивов. Они описаны в \ref smtlibext.

Версия 2.1

Это релиз с исправлением ошибок. Большое спасибо Роберту Бруммайеру, Карине Паскаль, Франсуа Реми, Раджешу К. Кармани, Роберто Люблинерману и многим другим за их отзывы и отчёты об ошибках.

Версия 2.0

  • Параллельный Z3 (Parallel Z3). Благодаря Кристофу Винтерштайгеру существует двоичный файл, поддерживающий запуск нескольких экземпляров Z3 из разных потоков, но что более интересно, также использующий несколько ядер для одной формулы.
  • Проверка предположений. Двоичный API предоставляет новый вызов #Z3_check_assumptions, который позволяет передавать дополнительные предположения при проверке согласованности уже утверждённых формул. Функция API возвращает подмножество предположений, которые использовались в неудовлетворительном ядре. Она также возвращает необязательный объект доказательства.
  • Объекты доказательств. #Z3_check_assumptions возвращает объект доказательства, если установлен флаг конфигурации PROOF_MODE, равный 1 или 2.
  • Частичная поддержка нелинейной арифметики. Поддержка использует поддержку для вычисления базисов Грёбнера. Это позволяет решать некоторые, но далеко не все формулы с использованием полиномов над вещественными числами. Пользователи должны знать, что поддержка нелинейной арифметики (над вещественными) в Z3 не является полной.
  • Рекурсивные типы данных. Теория обоснованных рекурсивных типов данных поддерживается через двоичные API. Она поддерживает проверку выполнимости кортежей, типов перечислений (скаляров), списков и взаимно рекурсивных типов данных.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/aminoacid-z3.git
git@api.gitlife.ru:oschina-mirror/aminoacid-z3.git
oschina-mirror
aminoacid-z3
aminoacid-z3
master