В дискуссии вокруг этого вопроса Жиль правильно упоминает, что любое доказательство правильности алгоритма, использующего массивы, должно доказывать, что нет доступа к массиву вне пределов; в зависимости от модели времени выполнения это может вызвать ошибку времени выполнения или доступ к элементам, не являющимся массивами.
Один общий метод для выполнения таких доказательств корректности (по крайней мере в старшекурснике исследований и , возможно , в автоматизированной верификации) заключается в использовании Хоаром логики . Я не знаю , что стандартный набор правил containes ничего , относящееся к массивам; кажется, что они ограничены монадическими переменными.
Я могу представить себе добавление аксиом вида
Тем не менее, мне не понятно , как бы вы иметь дело с доступом массива на правой стороне, то есть если она является частью сложного выражения в некотором заявлении х : = Е .
Как можно получить доступ к массивам в логике Хоара, чтобы можно было и нужно доказать правильность программы отсутствие недопустимых доступов?
Ответы можно считать , что мы запретить элементы массива , которые будут использоваться в других , чем заявлениях или как часть некоторых Е в й : = Е , так как это не ограничивает выразительность; всегда можно присвоить временной переменной нужное значение, т.е. запись т : = [ я ] ; я е ( т > 0 ) ... а я е ( [ я ] > 0 ) ...,
length
относитесь кA
?length
был переименованA_length
.) Во-вторых, нам нужны аксиомы «создания» массива, такие какint[] a = int[length] {a_length==length}
. Я думаю, этого должно быть достаточно.