Я пытаюсь получить общее представление о важности наименьшей фиксированной точки (lfp) в анализе программы. Например, абстрактная интерпретация, кажется, использует существование lfp. Многие исследовательские работы по анализу программ также сосредоточены на поиске наименее фиксированной точки.
Более конкретно, эта статья в Википедии: Теорема Кнастера-Тарски упоминает, что lfp используется для определения семантики программы.
Почему это важно? Любой простой пример помогает мне. (Я пытаюсь получить большую картину).
РЕДАКТИРОВАТЬ
Я думаю, что моя формулировка неверна. Я не оспариваю важность ЛФП. Мой точный вопрос (новичок): как вычисление lfp помогает в анализе программы? Например, почему / как абстрактная интерпретация использует lfp? что произойдет, если в абстрактном домене нет lfp?
Надеюсь, что мой вопрос более конкретно в настоящее время.
Ответы:
Любая форма рекурсии или итерации в программировании на самом деле является фиксированной точкой. Например,
while
цикл характеризуется уравнениемто
while b do c done
есть решениеW
уравнениягде
Φ(x) ≡ if b then (c ; x)
. Но что, еслиΦ
есть много фиксированных точек? Какой из них соответствуетwhile
петле? Одна из основных идей семантики программирования заключается в том, что это наименее фиксированная точка.Давайте возьмем простой пример, на этот раз рекурсия. Я буду использовать Haskell. Рекурсивная функция
f
определяетсяэто везде неопределенная функция, потому что она работает всегда. Мы можем переписать это определение более необычным способом (но он все еще работает в Haskell) как
Итак
f
, это фиксированная точка функции тождества:Но каждая функция является фиксированной точкой
id
. При обычном предметно-теоретическом порядке «неопределенный» является наименьшим элементом. И действительно, наша функцияf
- везде неопределенная функция.while
while true do skip done
Просто чтобы дать вам представление о том, как это работает, семантика программы
e
источник
But what if Φ has many fixed points?
Хотя я понимаю уравнение с фиксированной точкой, в этом контексте W \ in L? Как мы определяем решетку здесь? Я ценю вашу дальнейшую разработку по этому вопросу.Вот интуиция: наименьшие фиксированные точки помогают анализировать циклы.
Анализ программы включает в себя выполнение программы - но абстрагирование некоторых деталей данных. Это все хорошо. Абстракция помогает анализу идти быстрее, чем на самом деле запуск программы, потому что позволяет игнорировать аспекты, которые вас не интересуют. Например, именно так работает абстрактная интерпретация: она в основном имитирует выполнение программы, но отслеживает только частичную информацию о состоянии программы.
Хитрый момент, когда вы попадаете в петлю. Цикл может выполняться много, много раз. Как правило, вы не хотите, чтобы анализ вашей программы выполнял все эти итерации цикла, потому что тогда анализ программы займет много времени ... или может даже не завершиться. Так вот где вы используете наименьшую фиксированную точку. Наименьшая фиксированная точка в основном характеризует то, что вы можете сказать наверняка, будет истинным после завершения цикла, если вы не знаете, сколько раз цикл будет повторяться.
Вот для чего используется наименее фиксированная точка. Поскольку в программах присутствуют циклы, в процессе анализа программы используются наименьшие фиксированные точки. Наименее фиксированные точки важны, потому что петли есть везде, и важно уметь анализировать петли.
Между прочим, рекурсия и взаимная рекурсия - это просто еще одна форма цикла - поэтому они также имеют тенденцию обрабатываться с наименьшей фиксированной точкой.
источник