Чому в аналізі програми важлива найменша фіксована точка (lfp)


11

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

Більш конкретно, ця стаття у вікіпедії: Теорема Кнастера -Тарського зазначає, що lfp використовується для визначення семантики програми.

Чому це важливо? Будь-який простий приклад мені допомагає. (Я намагаюся скласти велику картину).

EDIT

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

Сподіваюся, зараз моє запитання конкретніше.


@DW Це питання для початківців в аналізі програми. Я обговорював себе кілька разів, перш ніж ставити питання, чи виглядає це занадто розпливчасто. Що я шукаю, це: яку роль відіграє lfp в аналізі програми (це, безумовно, важливо, але як?). Я шукаю відповідь, яка не заглиблюється в безліч математичних деталей. Я думаю, формулювання в моєму питанні також не зрозуміле. Я відредагую питання.
Рам

@DW Я згоден, це може бути недостатньо вивченим питанням. Однак щоразу, коли я продовжую читати документи, багато математичних деталей, і я швидко втрачаю широку картину. Наприклад, конкретніше, цей документ [Розширення для потоку управління] ( 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- це всюди невизначена функція.

Додано на запит: у коментарях ОП запитували про частковий порядок whileциклів семантики (ви припускали, що це решітка, але вона не повинна бути). Більш загальним питанням є те, що доменно-теоретична інтерпретація процедурної мови, яка може маніпулювати змінними та має основні структури управління (умовні умови та петлі). Існує кілька способів зробити це, залежно від того, що саме ви хочете зробити, але щоб зробити простішими речі, припустимо, що у нас є фіксоване число глобальних зміннихx 1 , , x n V V nV n{ } ( v 1 , , v n ) V nV n V nV n{ }нх1,,хнщо програма може читати та оновлювати, і більше нічого (ніяких вводу-виводу або винятків, або виділення нових змінних). У цьому випадку програма може розглядатися як перетворення початкового стану змінних у кінцевий стан, або невизначене значення, якщо програма цикли. Отже, якщо кожна змінна містить елемент множини , програма відповідатиме відображенню : для кожної початкової конфігурації змінних програма буде або розходитись і виходити , або вона припиняється і створює кінцевий стан, який є елементом . Набір усіх карт - це домен:VVнVн{}(v1,,vн)VнVнVнVн{}

  • ми використовуємо плоский упорядкування на який має внизу, і всі елементи "плоскі" над ним, а потім впорядковано точково,V n V nV n{ }Vн{}VнVнVн{}
  • найменший елемент - це функція, яка завжди відображає , відповідну програмі (та багатьом іншим),while true do skip done
  • кожна послідовність, що збільшується, має надпремію

Просто для того, щоб дати вам уявлення про те, як це працює, семантика програми

x_1 := e

буде функцією, яка приймає як вхід , обчислює значення виразу у стані і повертає .(v1,,vн)Vнvеe(v1,,vн)(vе,v2,,vн)


1
+1 на приклад. Однак я трохи розгублений. But what if Φ has many fixed points?Хоча я розумію рівняння з фіксованою точкою, в цьому контексті чи W \ в L? Як ми тут визначаємо ґрати? Я вдячний вашій подальшій розробці щодо цього.
Рам

У наведеному вище коментарі я використовую "L", щоб поставити решітку (або кучу)
Рам

Я змінив відповідь.
Андрій Бауер

Дякуємо за оновлення. Я особливо ціную це, оскільки він дав мені інший погляд на перегляд програм. Зараз я читаю "Теорію фіксованої точки" з "Семантики з додатками: Офіційне введення" Нільсона, яка завершила погляд на побудову решітки з часткових функцій для мови IMP.
Рам

6

Ось інтуїція: найменш фіксовані точки допомагають аналізувати петлі.

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

Хитрий біт - це коли ти потрапляєш у цикл. Цикл може виконуватися багато, багато разів. Як правило, ви не хочете, щоб ваш програмний аналіз мав виконувати всі ці ітерації циклу, тому що тоді програмний аналіз займе багато часу ... або може навіть не припинитися. Отже, саме тут ви використовуєте найменш фіксовану точку. Найменш фіксована точка в основному характеризує те, що ви можете точно сказати, буде істинним після закінчення циклу, якщо ви не знаєте, скільки разів цикл буде повторюватися.

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.