Абстрактна інтерпретація - це дуже загальне поняття, і залежно від того, кого ви запитуєте, ви отримаєте різні пояснення, оскільки різнопланові концепції допускають численні перспективи. Погляд у цій відповіді мій, і я б не вважав, що це загальне.
Обчислювальна твердість як мотивація
Почнемо з проблем рішення, рішення яких мають таку структуру:
Часто в цій процедурі є нижня межа жорсткої NP. Перевірка смислових властивостей програм навіть не можна визначити. Що ми можемо зробити?
Зробимо два спостереження. По-перше, ми можемо іноді вирішувати конкретні випадки проблеми, навіть якщо не можемо вирішити загальну проблему. По-друге, такі програми, як оптимізація компілятора, допускають наближення, оскільки корисний компілятор, який виключає деякі, але не всі джерела неефективності. Щоб зробити цю інтуїцію точною, ми повинні відповісти:
- Що означає формально вирішити деякі, але не всі екземпляри проблеми?
- Що є приблизним рішенням проблеми рішення?
Ідея абстрактної інтерпретації 1: Змінення постановки проблеми
Для мене головне розуміння абстрактної інтерпретації полягає в тому, щоб змінити формулювання проблеми, щоб замість того, щоб просити відповідь так / ні , ми попросили відповідь так / ні / можливо .
Як наслідок, кожна проблема має тривіальне постійне вирішення часу ( можливо, вихід ). Тепер ми можемо переключити свою увагу на отримання процедури, яка не завжди може бути результатом . Щоб повернутися до вищезазначених питань, рішення, яке працює для деяких проблемних екземплярів, є тим, що повертається Можливо на проблеми, які він не може вирішити. Більше того, можливо , це наближення " Так" і " ні", тому що ми не впевнені, що відповідь.
Ця ідея не обмежується проблемами прийняття рішень. Розглянемо ці проблеми, що стосуються програм.
- Які рядки коду в програмі мертві (ніколи не будуть виконані)?
- Які змінні в програмі мають постійні значення?
- Які твердження в програмі порушені?
У всіх цих ситуаціях ми можемо перейти від точного рішення до приблизного, розглядаючи рішення, які мають певну невизначеність.
- Що таке набір ліній коду, який є мертвим?
- Що таке набір змінних у програмі, які мають постійні значення?
- Що таке сукупність тверджень у програмі, які не порушуються?
Виготовлені набори не повинні бути найбільшими. Ця ідея є надзвичайно загальною і стосується проблем, що мають мало спільного з програмним аналізом.
- Замість додавання м і н, ми можемо попросити діапазон [ a , b ] в якій лежить сума.
- Замість примноження м від н ми можемо попросити к біти результату (конкретні, поширені приклади - знак чи біт парності).
- Замість того, щоб просити формули, що задовольняють, ми можемо попросити набір, який містить задовольняючі завдання.
Зауважте, що ми не лише змінили проблему, але й суворо її узагальнили, оскільки рішення вихідної проблеми все ще є рішенням модифікованої проблеми. Зараз велике без відповіді питання: як ми можемо знайти приблизне рішення?
Ідея абстрактної інтерпретації 2: Характеристика оригінальних рішень з фіксованою точкою
Друга велика ідея полягає в тому, щоб зауважити, що безліч рішень багатьох проблем характеризується як фіксований момент у решітці кандидатських рішень. Наприклад, припустимо, що у вас є графік, і ви хочете знати, чи є вершинат досягається з вершини с. Ми можемо розбити це на пошук наборуR e a c h (s) усіх вершин, з яких можна дістатися с а потім перевірити, чи немає тє в цьому наборі. Далі ми можемо це спостерігатиR e a c h (s) є найменшим рішенням рівняння:
Х= { s } ∪ { w | v знаходиться в X і ( v , w ) - край }
Значення характеристики фіксованої точки полягає в тому, що точне рішення можна розглядати як межу ряду наближень. У цьому прикладін-те елемент серії - це набір вершин графа, до яких можна дістатися н кроки від с а наближення є підмножиною цих вершин.
Характеристика фіксованої точки є проектним рішенням. Існує багато різних характеристик набору рішень. Кожен з них може мати різні переваги. Що стосується мов програмування, у нас є більше структури, ніж просто робота з графіком. Рівняння з фіксованою точкою, які нас цікавлять, можна визначити за допомогою індукції на структурі вхідної програми. Ця ідея не характерна для програм. Застосовуючи абстрактне тлумачення до елементів структурованої мови, таких як граматика, логічна формула, програма, арифметичне вираження тощо, ми можемо визначити фіксовані точки шляхом індукції на структурі якогось синтаксичного об’єкта.
Даючи цю характеристику з фіксованою точкою, ми беремо на себе конкретний спосіб обчислювальних рішень. Насправді ми не будемо обчислювати цю фіксовану точку, оскільки це як мінімум настільки важко, як вирішення початкової проблеми, що приводить нас до наступного кроку.
Ідея абстрактної інтерпретації 3: наближення до фіксованої точки
Замість обчислення фіксованої точки функції Ж в решітці L, ми можемо обчислити фіксовану точку іншої функції Г в решітці М. За умови дотримання певних умов стосовноМ до L, рішення, обчислене в М гарантовано є наближенням рішення в L. Це один із фундаментальних результатів абстрактної інтерпретації, який зазвичай називають теоремою перенесення фіксованої точки . Умова звучності задається або сполуками Галуа, або слабшими налаштуваннями, що передбачають функції абстрагування, конкретизації, або співвідношення звучності.
Теорема перенесення фіксованої точки гарантує, що вам не доведеться доводити, що ви обчислюєте звукове наближення кожного разу, коли розробляєте приблизний аналіз. Вам залишається лише довести, що ґратиL (що містять оригінальні розчини) та М (містить наближення) та функції Ж і Гзадовольняють певні обмеження. Це великий виграш, якщо ви дизайнер аналізу і піклуєтесь про надійність.
Ви можете зрозуміти, що інтуїція за передачею фіксованої точки прониклива. Ми можемо мислити фіксовану точку як границю (можливо, безмежної) ланцюга елементів. Обчислення приблизних рішень означає наближення цієї межі, що ми можемо зробити, наблизивши елементи ланцюга.
Поняття наближення залежить від додатку. Якщо ви використовуєте доступність графіка для планування поїздки, ви можете прийняти наближення, яке говорить про те, що між ними немає шляхус і т навіть якщо є шлях, але ви не будете щасливі, якщо алгоритм скаже, що існує шлях с до т де немає шляху.
Ідея абстрактної інтерпретації 4: Алгоритми наближення фіксованої точки
Все, що бачили до цього часу, є результатом математичного існування. Останнім кроком є обчислення наближення. Коли решітка наближення є кінцевою (або якщо виконується умова висхідного / низхідного ланцюга), ми можемо використовувати просту ітераційну процедуру. Якщо решітка нескінченна, ітеративна процедура може бути недостатньою, хоча обчислення фіксованої точки все-таки може бути вирішальним. У цій ситуації використовується багато методик для подальшого наближення рішення або для швидкого переходу до точного рішення, ніж алгоритм наївної ітерації. У контексті обчислення рішення ви чуєте такі терміни, як розширення , звуження , ітерація стратегії , прискорення тощо.
Підсумок
На мою думку, абстрактне тлумачення забезпечує математичну основу для поняття абстракції так само, як математична логіка забезпечує математичну основу для міркування. Рішення багатьох проблем, які нас хвилюють, характеризують як фіксовані точки. Це спостереження не обмежується проблемами мови програмування і навіть інформатикою. Орієнтовні рішення можна охарактеризувати як наближення нерухомих точок і обчислити за допомогою спеціалізованих алгоритмів. Ці характеристики та алгоритми будуть використовувати структуру екземпляра проблеми. Що стосується програм, то ця структура задається синтаксисом мови.
Обчислення наближень до проблем, які не мають природної метрики, - це мистецтво, яке постійно розвивається і удосконалюється практиками. Абстрактне тлумачення - одна математична теорія для науки, що стоїть за цим мистецтвом.
Список літератури
Є кілька хороших навчальних посібників з абстрактної інтерпретації, які ви можете прочитати.
- Повсякденне вступ до абстрактної інтерпретації , Патрік Кузот (спільна робота з Радхією Кузот), семінар з біології систем та формальних методів (SBFM'12)
- Лагідне вступ до формальної перевірки комп'ютерних систем шляхом абстрактної інтерпретації , Патрік і Радхія Кусо, Маркобердорфська літня школа 2010 року.
- Лекція 13: Абстракція, частина I , Патрік Кузот, абстрактна інтерпретація, курс MIT.
- Вступ до абстрактної інтерпретації , Самсон Абрамський та Кріс Ханкін, Абстрактне тлумачення декларативних мов, 1987 рік.
- Абстрактна інтерпретація та застосування до логічних програм , Патрік і Радгія Кусо, 1992. Перші два розділи мають загальний огляд на високому рівні з кількома прикладами.