Я оцениваю использование Dafny по сравнению с прямым использованием z3 для кодирования проблемы, с которой мы сталкиваемся в моей компании.
При тестировании API z3 я заметил, что существует тип Array, которыйпохоже, очень похоже на то, как Z3 реализует общие функции. Кажется, что нет простого способа рассуждать о длине таких массивов в Z3.
Если мы посмотрим на Дафни, это может легко доказать следующее правильное
method Find(a: array<int>) returns (index: int)
ensures index == a.Length
{
index := a.Length;
}
Теперь,для меня вопрос:
Как массив, используемый Дафни, закодирован в Z3?
Скажем, на самом деле Дафни не использует массивы Z3, где я могунайти документацию о том, как Dafny абстрактные вещи, которые не идентифицируют ограниченное количество переменных в Z3 (например, массив)? Тот же вопрос относится к любому объекту, который выделен в куче, использует ли он абстракции сайта размещения или что-то еще?