Доказ конфлуенції для простої системи переписування


14

Припустимо, у нас є проста мова, яка складається з термінів:

  • true
  • false
  • якщо t1,t2,t3 - терміни, то так само ift1thent2elset3

Тепер припустимо наступні правила логічного оцінювання:

iftruethent2elset3→t2[E-IfTrue]iffalsethent2elset3→t3[E-IfFalse]t1→t1′ift1thent2elset3→ift1′thent2elset3[E-If]

Припустимо, ми також додамо наступне функціональне правило:

t2→t2′ift1thent2elset3→ift1thent2′elset3[E-IfFunny]

Для цієї простої мови із заданими правилами оцінювання я хочу довести наступне:

Теорема: Якщо і r → t, то існує деякий термін u такий, що s → u і t → u .r→sr→tus→ut→u

Я доводжу це індукцією на структуру . Ось мій доказ поки що, все склалося добре, але я застряг у самій останній справі. Здається, що індукція на структуру r не є достатньою, може хтось мені допоможе?rr

Доказ. Індукцією на ми відокремимо всі форми, які може приймати r :rr

  1. - константа, нічого доказувати, оскільки нормальна форма нічого не оцінює.r
  2. якщо істинне, то r 2 else r 3 . (а) обидва виведення були виконані за правилом E-IfTrue. У цьому випадку s = t , тому доводити нічого немає. (b) одне виведення було зроблено за правилом E-IfTrue, а інше - правилом E-Funny. Припустимо, що r → s було зроблено за допомогою E-IfTrue, інший випадок настільки ж доведений. Тепер ми знаємо, що s = r 2 . Ми також знаємо, що t = якщо істинне, то r ′ 2 else r 3 і що існує деяке виведення r 2 →r=r2r3s=tr→ss=r2t=r2′r3 (приміщення). Якщо тепер виберемо u = r ′ 2 , то закінчимо випадок.r2→r2′u=r2′
  3. якщо false, то r 2 else r 3 . Еквівалентно доведено, як зазначено вище.r=r2r3
  4. якщо r 1, то r 2 else r 3 з r 1 ≠ вірно або помилково. (а) обидві деривації були зроблені за правилом E-If. Тепер ми знаємо, що s = якщо r ′ 1, то r 2 іще r 3, а t = якщо r ″ 1, то r 2 іначе r 3 . Ми також знаємо, що існує деривація r 1 → r ′ 1r=r1r2r3r1≠s=r1′r2r3t=r1″r2r3r1→r1′і (приміщення). Тепер ми можемо використовувати гіпотезу про індукцію, щоб сказати, що існує деякий термін r ‴ 1, такий, що r ′ 1 → r ‴ 1 і r ″ 1 → r ‴ 1 . Тепер ми закінчуємо випадок, сказавши u = якщо r ‴ 1, то r 2 else r 3 і помічаючи, що s → u і t → ur1→r1″r1‴r1′→r1‴r1″→r1‴u=r1‴r2r3s→ut→uза правилом E-If (b) одне виведення було здійснено за допомогою правила E-If і одне за правилом E-Funny.

Останній випадок, коли одне виведення було зроблено E-If, а інше E-Funny - це той випадок, якого я пропускаю ... Я, здається, не можу використовувати гіпотези.

Допомога буде дуже вдячна.


@Gilles надзвичайно добре зробив з редагуванням. Я не знав, що двигун TeX SE на все це здатний ... :-)
— codd

Я помиляюся, або ця вправа взята з Пірса "Типи та мови програмування"?
— Фабіо Ф.

@FabioF. Це дійсно з книги "Пірси про типи та мови програмування". Він надає доказ того, що я вважаю незрозумілим через те, як він виконує індукцію. Тому я спробував це довести сам за допомогою індукції на будові. Я думав згадати, що це було з книги, але я вважав, що це буде неактуально. Однак добре помічено!
— codd

Відповіді:


7

Гаразд, тож давайте розглянемо випадок, що , s отримано за допомогою правила E-If, а t отримано за допомогою правила E-Funny: Отже, s = i fr=ift1thent2elset3st де t 1 → t ′ 1 і t = i fs=ift1′thent2elset3t1→t1′ де t 2 → t ′ 2 .t=ift1thent2′elset3t2→t2′

якого ми шукаємо є у = я пu . s → u випливає з правила E-Funny, а t → u випливає з правила E-If.u=ift1′thent2′elset3s→ut→u


Бий мене до цього. Хороша робота.
— Patrick87

Боже, я дуже заглядав ... Спасибі!
— codd

Ти змішав їх, хоча випливає з E-Funny. Або я бачу щось не так? s→u
— codd

@Jeroen Ти маєш рацію - я їх переплутав. Виправлено зараз.
— sepp2k

8

Трохи термінологія може допомогти, якщо ви хочете переглянути це: ці правила є правилами переписування , вони не мають нічого спільного з типами систем¹. Властивість, яку ви намагаєтесь довести, називається злиттям ; Більш конкретно, це сильне злиття : якщо термін можна скоротити по-різному на одному кроці, вони можуть сходитися назад на наступному кроці. Взагалі, злиття дозволяє робити будь-яку кількість кроків, а не лише один: якщо і r → ∗ t, то є u таке, що s → ∗ u і t → ∗ ur→∗sr→∗tus→∗ut→∗u - якщо термін можна скоротити різними способами, незалежно від того, наскільки вони розійшлися, вони можуть врешті повернутися назад.

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

У випадку, коли виникають проблеми, одна сторона зменшує частину "якщо", а інша - "тоді". Між двома частинами, які змінюються ( в [E-If], t 2 в [E-IfFunny]), немає ніяких перекриттів, і немає обмежень на t 2 в [E-If] або на t 1 в [E- IfFunny]. Тож, коли у вас є термін, на який поширюються обидва правила - він повинен мати форму i ft1t2t2t1 , ви можете застосувати правила в будь-якому порядку:ifr1thenr2elser3

ifr1thenr2elser3[E-If]↙↘[E-IfFunny]ifr1′thenr2elser3ifr1thenr2′elser3[E-IfFunny]↘↙[E-If]ifr1′thenr2′elser3

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

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