Dafny - это язык программирования со встроенными конструкциями спецификаций.
0 ответов

Реэкспорт модулей, импортированных в Дафни

В Coq файл может "Требовать экспорта", чтобы импортировать определения из другого файла, а также экспортировать их в любой файл, импортируемый из этого файла. Я знаю об "импорте" в Dafny, но у него, похоже, нет такого поведения или возможности его в…
10 фев '18 в 17:04
1 ответ

Что проверяет код вне класса Dafny, но не в инкапсулированном виде?

Некоторый код, который проверяет вне класса Dafny, не может быть проверен при инкапсуляции. Мне интересно (1) почему и (2) как получить лучшее из обоих миров: инкапсуляция / абстракция и проверка. Код моделирует "отношение" как пару: набор доменов и…
28 фев '18 в 15:58
1 ответ

Удивительно, дафни не удалось проверить ограниченность заданного понимания

У Дафни нет проблем с этим определением функции пересечения множеств. function method intersection(A: set<int>, B: set<int>): (r: set<int>) { set x | x in A && x in B } Но когда дело доходит до объединения, Дафни жалуется, …
14 мар '18 в 03:48
1 ответ

Буги странно утверждают (ложно) поведение

Я работаю с Буги, и я столкнулся с некоторыми видами поведения, которые я не понимаю. Я использую assert(false) как способ проверить, если предыдущий assume заявления абсурдны. Например, в следующем случае программа проверена без ошибок... type T; c…
23 мар '17 в 20:07
0 ответов

Дафны могут доказать композиционные свойства?

Может ли Дафни доказать композиционные свойства? Я написал две программы, которые объединяют два списка, используя перекрестный продукт, а затем проецируют один из атрибутов. Дафни не может доказать мою первую версию, где я написал кросс-продукт и п…
04 фев '19 в 05:46
1 ответ

Дафни: повернутая область проверки массива методом

Это доказательство дает бесконечный цикл в верификаторе Дафниса: // Status: verifier infinite loop // rotates a region of the array by one place forward method displace(arr: array<int>, start: nat, len: nat) returns (r: array<int>) requi…
1 ответ

Использование:| в функциональном коде - рекурсия по множествам

Как можно использовать рекурсивный набор S в Dafny при написании чистого функционального кода? Я могу использовать:| в императивном коде, проверив не пустоту, выбрать элемент s, затем выполнить рекурсию на S - {s}. Не совсем уверен, как сделать:| де…
07 май '18 в 01:34
0 ответов

Могу ли я использовать Dafny в качестве средства поиска моделей?

Дафни использует базовый SMT-решатель Z3. Z3 может, если потребуется, предоставить модель (интерпретацию), которая удовлетворяет заданной формуле. Таким образом, он может быть использован в качестве поиска модели. Может ли эта функциональность поиск…
05 фев '18 в 19:27
0 ответов

Дафни - "Проверка неокончательна" на rise4fun

Я получил сообщение об ошибке "Verification Inconclusive" для алгоритма графа, который я пытаюсь доказать в режиме dafny VS2015. Я пытался использовать версию 2.1.1, новейшую версию, доступную на странице релизов dafny. Здесь был только еще один воп…
28 мар '18 в 10:25
1 ответ

Индуктивная лемма Дафни: не может вывести постусловие индукционной гипотезы

Я пытаюсь определить семантику маленького шага очень простого языка с помощью арифметических выражений (исходный код доступен здесь). Для простоты мы предполагаем, что язык допускает только литералы и унарный минус (-exp). datatype expression = Lite…
08 июн '18 в 20:04
1 ответ

Почему Дафни не может проверить определенную мощность множества и реляционные предложения?

Вот простая программа Dafny: две строки кода и три утверждения. method Main() { var S := set s: int | 0 <= s < 50 :: 2 * s; var T := set t | t in S && t < 25; assert |S| == 50; // does not verify assert T <= S; // does verify ass…
24 фев '18 в 14:36
1 ответ

Dafny ошибка массива универсального типа

При попытке проверить общую очередь FIFO, подкрепленную массивом, я столкнулся с запутанной ошибкой. Очередь была найдена в этой статье, автором которой является создатель Дафни. Ошибка в вопросе: если для элементов массива не указан инициализатор, …
18 окт '17 в 14:10
1 ответ

Каковы отношения между импортом, включением и проверкой в ​​Дафни?

Я знаю, что один исходный файл Dafny может быть включен в другой, что приводит к текстовой конкатенации файлов до проверки. Но у меня нет четкой ментальной модели взаимосвязей между включениями, импортом и тем, какие файлы проверяются когда. Возможн…
28 янв '18 в 21:08
1 ответ

Дафни, пост-условие не держится после цикла

В следующем методе Дафни сообщает, что постусловие может не сохраняться, хотя я вполне уверен, что оно выполнено. method toArrayConvert(s:seq<int>) returns (a:array<int>) requires |s| > 0 ensures |s| == a.Length ensures forall i :: 0 …
22 май '18 в 13:56
1 ответ

Дафни: Помогите правильному инварианту, уменьшите утверждение

Может кто-нибудь помочь мне с тем, что здесь не так. Я получаю приведенную ниже ошибку при проверке этой программы. Я пробовал разные способы, но это никогда не проходило проверку. Пожалуйста помоги. method Main() { var a:int := 0; var b:int := -1; …
23 янв '16 в 09:50
3 ответа

Чтение (запись в) файлов в Дафни

Я смотрел на некоторые уроки dafny и не мог найти, как читать (или записывать) простые текстовые файлы. Конечно, это должно быть возможно, верно?
16 сен '18 в 04:19
0 ответов

Написание индуктивных лемм в dafny

Я хотел бы доказать следующее в dafny: function append(xs: seq<int>) : seq<int> { if |xs| == 0 then [] else [xs[0]] + append(xs[1..]) } method test(o:seq<int>, xs: seq<int>, i:int) requires 0 <= i < |xs| { if o == appen…
05 фев '19 в 03:18
0 ответов

Реализация вставки кучи через Dafny (со спецификациями)

Я пишу HeapInsert на Dafny, но не могу доказать правильность кода. Я попытался написать это с помощью этого алгоритма: я использую этот алгоритм: heap_size++; int i = heap_size - 1; harr[i] = k; while (i != 0 && harr[parent(i)] <= harr[i]…
12 фев '19 в 16:05
1 ответ

Какой инвариант я пропускаю в доказательстве BubbleSort?

Я думаю, что мне могут понадобиться дополнительные инварианты, чтобы убедить Дафни, что код работает. Я попробовал несколько, но не смог пройти. method BubbleSort(arr: array<int>) ensures forall k, k' :: 0 <= k < k' < arr.Length ==&gt…
16 фев '19 в 21:16
1 ответ

Тривиальное нарушение утверждения в Дафни

Почему Дафни утверждает, что это простое утверждение возможно нарушено? var b := new int[2]; b[0],b[1] := 1, -2; assert exists k | 0 <= k < b.Length :: (b[k] == 1 || b[k] == -1);
15 май '18 в 20:44