Может ли SPARK доказать, что Quicksort действительно сортирует?
Я не пользуюсь СПАРК. Я просто пытаюсь понять возможности языка.
Может ли SPARK доказать, например, что Quicksort действительно сортирует переданный ему массив?
1 ответ
Да, может, хотя я не особенно хорош в тестировании SPARK (пока). Вот как работает быстрая сортировка:
- Отметим, что идея быстрой сортировки заключается в разделении.
- Выбирается «точка поворота», которая используется для разделения коллекции на три группы: «равно», «меньше» и «больше». (Этот порядок влияет на процедуру, описанную ниже; я использую его, потому что он отличается от версии с порядком, чтобы проиллюстрировать, что в первую очередь речь идет о группировке, а не о порядке.)
- Если коллекция есть или по длине, то вы сортируете; если тогда проверьте и, возможно, исправьте порядок, и они будут отсортированы; в противном случае продолжайте.
- Переместите шарнир в первое положение.
- Сканирование от второй позиции до последней позиции, в зависимости от рассматриваемого значения:
- - Поменять местами с первым элементом в разделе.
- - Нулевой режим.
- - Обмен с первым элементом, обмен с первым элементом.
- Рекурсивно вызывать разделы &.
- Если функция возвращает
Less
&Equal
&Greater
, если процедура перестроитin out
вход в этот заказ.
Вот как бы вы поступили:
- Доказать / отстаивать
0
а также1
случаи как правда, - Докажите, что вы умеете обращаться с
2
Предметы, - Докажите, что для данной коллекции ввода и поворота существует набор из трех значений, которые представляют собой количество элементов меньше / равно / больше, чем точка поворота [это, вероятно, подпрограмма-призрак],
- Докажите, что ++ равен длине вашей коллекции,
- Докажите [в постусловии], что с учетом точки поворота и
(L,E,G)
кортеж, вывод соответствуетL
элементы меньше, чем точка поворота, за которой следуетE
элементы, которые равны, а затемG
предметы, которые больше.
И это должно сработать. [IIUC]