Наскільки важко звести припинення до часткової коректності?


14

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

Фон

Часто зазначається, що перевірка часткової коректності не підлягає визначенню. Для обговорення виберемо один дуже конкретний спосіб зробити це твердження точним у стилі Флойда - Хоара. Flowgraph є Орграф з виділеним початковим вузлом , з якого все вузли досяжні. Програма є Flowgraph, вузли якого є командами. Існують три типи команд (1) припущення припускають q , (2) твердження стверджують q , і (3) призначення v: = e. Тут q - формула fol (першого порядку), e - термін fol, а v - змінна.

Ми говоримо, що програма є частково правильною, коли є спосіб анотувати кожен вузол x з попередньою умовою a (x) і постумовою b (x) , що (1) попередня умова початкового вузла є дійсною, (2) { a (x) } x { b (x) } виконується для всіх команд x , а (3) ( b (x) означає, що (y) ) справедливо для всіх ребер від x до y . Тут трійки Хоара визначаються так:

  • { p } стверджувати q { r } означає, що ( p означає ( q і r )) є дійсним
  • { p } припустимо, що q { r } означає, що (( p і q ) означає, що r ) є дійсним
  • { p } v: = e { r } означає, що (( p з e заміщений на v ) означає, що r ) є дійсним

Ось рукохвильовий аргумент того, чому перевірити цю часткову правильність неможливо: Після заповнення деяких (x) та деяких b (x) вам потрібно перевірити, чи деякі формули фолів є дійсними, і це не можна визначити.

Типовим способом кодування закінчення в частковій коректності є додавання деяких спеціальних тверджень, які по суті говорять: «з моменту, коли я був виконаний, був прогрес до припинення». Ці твердження про прогрес повинні бути розміщені таким чином, що всі нескінченні прогулянки на блок-схемі (що починаються з початкового вузла) містять нескінченно багато тверджень про прогрес. Якщо конкретніше сказати, скажімо, що твердження про прогрес завжди мають форму затвердження u < v , де u і v - натуральні цілі числа, передує присвоєнню u : = f і супроводжується призначенням v : = u . Тут f - aваріантна функція , u - її поточне значення, а v - колишнє значення. Тепер, оскільки ми говоримо про "натуральні числа" і порівнюємо їх, нам потрібно переконатися, що є трохи більше, ніж фол: Скажімо, наявна арифметика Пеано . (Я не відчуваю сильного з цього приводу вибору. Не соромтесь ігнорувати, якщо це зручно.) Звичайно, f може використовувати будь-які інші функції та константи, про які йдеться у програмі. (Зауважте, що додавання припущень на початку програми еквівалентно введенню нелогічних аксіом.)

Тепер, якщо програма з твердженнями про прогрес все ще частково правильна, ми знаємо, що початкова програма припиняється.

Питання

Враховуючи програму, що закінчується, вважається, що розробити варіанти варіантів для затвердження прогресу важко. Але як важко? (Я знаю, що навіть з величезним фоном вище, я все-таки залишив це питання наскрізним або невідомим, залежно від того, як ви хочете на це подивитися.)

Якщо говорити інакше: я шукаю посилання, яке формалізує проблему зведення терміналу до часткової коректності, а потім щось говорить про його складність. Відповідь, яка робить все це, звичайно, вітається.


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

Андрію, це звучить і для мене непомітно. Те, про що я прошу, - це доказ того, що це незаперечно.
Раду ГРИГо

Відповіді:


7

Один із способів відповісти на це - розглянути обчислювальну складність задач рішення для класів запитів часткової коректності та запитів припинення, які, як відомо, вирішуються. Абстрактна інтерпретація за допомогою багатогранної області може зробити висновок про часткову правильність анотацій, які ви згадуєте у випадках, коли необхідні анотації є сполучниками лінійних нерівностей. Обчислення абстрактних пост-умов є експоненціальним у кількості змінних. Тоді відбувається накладне знаходження фіксованої точки. Детальнішу інформацію про це та бібліотеку Фартух див. У ранніх документах Cousot, якщо ви хочете пограти з ним безпосередньо.

Пошук варіантних функцій вирішується, коли варіанти варіанту лінійні. Я не міг знайти повної характеристики складності цього, але "Припинення лінійних програм" Тіварі має розділ, який обговорює складність. Дивіться також "Повний метод синтезу функцій лінійного ранжирування" Подельського та Рибальченка. Також Байрон Кук зробив роботу над використанням абстрактної інтерпретації, щоб допомогти побудувати аргументи завершення. Див., Наприклад, "Ранжування абстракцій" та "Варіантні аналізи з інваріантних аналізів". Вони можуть дати подальше розуміння зв'язку між частковою правильністю та припиненням.

Посилання:


1
Сподіваюся, ви не заперечуєте проти мого редагування вашої відповіді та активізації посилань.
Андрій Бауер

4

Існує очевидне скорочення від необхідного неприпинення до часткової коректності, а саме:

P ніколи не закінчується, коли запускається у початковому стані, що задовольняє φ iff { φ } P {false} є дійсним.

Я знаю, що це ще одна невідповідь. Його перевага полягає в тому, що він коротший, ніж вище.


3

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

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

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


Я намагався запитати про складність функцій, що випливають із варіантів. Вибачте, що не зрозуміли! Як цікавість, минулого вечора (в пабі) Рустан Лейно придумав приклад, який настійно запропонував мені, що wlp працює не так добре, як wp & sp для тих програм, які я тут описую. Мені доведеться
повторно

@Radu: Там було зроблено роботу над підтвердженням автоматичного припинення, деякі роботи були зроблені для Prolog. Я можу розкопати деякі відгуки, коли знайду час.
Чарльз Стюарт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.