Почему наименьшая фиксированная точка (lfp) важна для анализа программы

11

Я пытаюсь получить общее представление о важности наименьшей фиксированной точки (lfp) в анализе программы. Например, абстрактная интерпретация, кажется, использует существование lfp. Многие исследовательские работы по анализу программ также сосредоточены на поиске наименее фиксированной точки.

Более конкретно, эта статья в Википедии: Теорема Кнастера-Тарски упоминает, что lfp используется для определения семантики программы.

Почему это важно? Любой простой пример помогает мне. (Я пытаюсь получить большую картину).

РЕДАКТИРОВАТЬ

Я думаю, что моя формулировка неверна. Я не оспариваю важность ЛФП. Мой точный вопрос (новичок): как вычисление lfp помогает в анализе программы? Например, почему / как абстрактная интерпретация использует lfp? что произойдет, если в абстрактном домене нет lfp?

Надеюсь, что мой вопрос более конкретно в настоящее время.

ОЗУ
источник
@DW Это вопрос новичка в анализе программ. Я обсуждал себя несколько раз, прежде чем опубликовать вопрос, если он выглядит слишком расплывчатым. Что я ищу, так это: какую роль играет lfp в программном анализе (конечно, это важно, но как?). Я ищу ответ, который не вникает во многие математические детали. Я думаю, что формулировка в моем вопросе также не ясна. Я отредактирую вопрос.
Рам
@ DW Я согласен, что это не очень хорошо изученный вопрос. Однако всякий раз, когда я продолжаю читать статьи, много математических деталей, и я быстро теряю общую картину. Например, более конкретно, эта статья [Расширение для Control-Flow] ( berkeleychurchill.com/research/papers/vmcai14.pdf ) представляется мне очень абстрактной. Это непосредственно обращается к вычислению наименьшей точки фиксации Похоже, что большинство статей в программном анализе посвящены этому вопросу в сходных строках. Я потерял большую картину. Я буду рад узнать, почему вычисление lfp важно.
Рам

Ответы:

13

Любая форма рекурсии или итерации в программировании на самом деле является фиксированной точкой. Например, whileцикл характеризуется уравнением

while b do c done  ≡  if b then (c ; while b do c done)

то while b do c doneесть решение Wуравнения

W  ≡  Φ(W)

где Φ(x) ≡ if b then (c ; x). Но что, если Φесть много фиксированных точек? Какой из них соответствует whileпетле? Одна из основных идей семантики программирования заключается в том, что это наименее фиксированная точка.

Давайте возьмем простой пример, на этот раз рекурсия. Я буду использовать Haskell. Рекурсивная функция fопределяется

f :: a -> a
f x = f x

это везде неопределенная функция, потому что она работает всегда. Мы можем переписать это определение более необычным способом (но он все еще работает в Haskell) как

f :: a -> a
f = f

Итак f, это фиксированная точка функции тождества:

f ≡ id f

Но каждая функция является фиксированной точкой id. При обычном предметно-теоретическом порядке «неопределенный» является наименьшим элементом. И действительно, наша функция f- везде неопределенная функция.

whileNИкс1,...,ИксNВВNВN{}(v1,...,vN)ВNВNВNВN{}

  • ВN{}ВNВNВN{}
  • while true do skip done
  • каждая возрастающая последовательность имеет супремум

Просто чтобы дать вам представление о том, как это работает, семантика программы

x_1 := e

(v1,...,vN)ВNvеe(v1,...,vN)(vе,v2,...,vN)

Андрей Бауэр
источник
1
+1 за пример пока. Тем не менее, я немного смущен. But what if Φ has many fixed points?Хотя я понимаю уравнение с фиксированной точкой, в этом контексте W \ in L? Как мы определяем решетку здесь? Я ценю вашу дальнейшую разработку по этому вопросу.
Рам
В приведенном выше комментарии я использую «L» для обозначения решетки (или poset)
Ram
Я исправил ответ.
Андрей Бауэр
Спасибо за обновление. Я особенно ценю это, потому что это дало мне другой взгляд на программы. Сейчас я читаю «Теорию с фиксированной точкой» из «Семантики с приложениями: формальное введение» Нильсона, которая завершила представление о построении решетки из частичных функций для языка IMP.
Рам
6

Вот интуиция: наименьшие фиксированные точки помогают анализировать циклы.

Анализ программы включает в себя выполнение программы - но абстрагирование некоторых деталей данных. Это все хорошо. Абстракция помогает анализу идти быстрее, чем на самом деле запуск программы, потому что позволяет игнорировать аспекты, которые вас не интересуют. Например, именно так работает абстрактная интерпретация: она в основном имитирует выполнение программы, но отслеживает только частичную информацию о состоянии программы.

Хитрый момент, когда вы попадаете в петлю. Цикл может выполняться много, много раз. Как правило, вы не хотите, чтобы анализ вашей программы выполнял все эти итерации цикла, потому что тогда анализ программы займет много времени ... или может даже не завершиться. Так вот где вы используете наименьшую фиксированную точку. Наименьшая фиксированная точка в основном характеризует то, что вы можете сказать наверняка, будет истинным после завершения цикла, если вы не знаете, сколько раз цикл будет повторяться.

Вот для чего используется наименее фиксированная точка. Поскольку в программах присутствуют циклы, в процессе анализа программы используются наименьшие фиксированные точки. Наименее фиксированные точки важны, потому что петли есть везде, и важно уметь анализировать петли.

Между прочим, рекурсия и взаимная рекурсия - это просто еще одна форма цикла - поэтому они также имеют тенденцию обрабатываться с наименьшей фиксированной точкой.

DW
источник