Когда команда перекрестия успешна, мой контракт оказался верным? - PullRequest
1 голос
/ 01 марта 2020

Когда перекрестие не находит контрпримеров, использовало ли оно решатель Z3 , чтобы доказать, что мой контракт выполняется?

документы указывают, что Отсутствие контрпримеров не гарантирует, что свойство сохраняется, но только потому, что перевод или моделирование могут быть неправильными?

Отказ от ответственности: я основной участник CrossHair (я просто использую стек переполнение как публичный c способ записи ответов на вопросы, которые мне задавались ранее)

1 Ответ

1 голос
/ 01 марта 2020

Помимо вероятного множества проблем с ненадлежащим моделированием, CrossHair не предоставляет этой гарантии.

CrossHair - это неполная система. Внутренне для каждого постусловия он генерирует три возможных результата: «подтверждено», «отклонено» и «неизвестно». Он производит вывод только для «отклоненного» случая; следовательно, отсутствие выходных данных не указывает на проверку заявления.

Почему CrossHair работает таким образом? Две причины:

  1. CrossHair генерирует «неизвестные» для всех, кроме самых тривиальных случаев. Различие между «неизвестным» и «подтвержденным» не слишком эффективно для большинства разработчиков. (по крайней мере, в настоящее время рефакторинг вашего кода, чтобы сделать его полностью доступным для CrossHair, будет невозможным или уродливым) Обратите внимание, однако, что CrossHair попытается выполнить множество путей выполнения, прежде чем выдать «неизвестный» результат - результат все еще предоставляет некоторые доказательства того, что условие выполняется.
  2. Подтвержденное различие между неизвестным будет очень нестабильным со временем. CrossHair разработан с нуля, чтобы развиваться. В среднем, SMT решатели станут лучше. CrossHair станет лучше. Но оба поправятся в среднем ; для отдельных случаев, либо может ухудшиться. Чтобы избежать опасений по поводу подтвержденных или неизвестных регрессий, это различие по умолчанию скрыто.

Лучше всего думать о CrossHair как о тестере фазз с помощью решателя.

При этом, если вы все еще хотите посмотреть, какие свойства являются подтверждаемыми, вы можете запросить этот вывод с помощью специальной опции «сообщить все»: crosshair check --report_all [TARGET].

...