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


14

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

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

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

iftruethent2elset3t2[E-IfTrue]iffalsethent2elset3t3[E-IfFalse]t1t1ift1thent2elset3ift1thent2elset3[E-If]

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

t2t2ift1thent2elset3ift1thent2elset3[E-IfFunny]

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

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

Я доводжу це індукцією на структуру . Ось мій доказ поки що, все склалося добре, але я застряг у самій останній справі. Здається, що індукція на структуру 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 2r=r2r3s=trss=r2t=r2r3 (приміщення). Якщо тепер виберемо u = r 2 , то закінчимо випадок.r2r2u=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 1r 1r=r1r2r3r1s=r1r2r3t=r1r2r3r1r1і (приміщення). Тепер ми можемо використовувати гіпотезу про індукцію, щоб сказати, що існує деякий термін r 1, такий, що r 1r 1 і r 1r 1 . Тепер ми закінчуємо випадок, сказавши u = якщо r 1, то r 2 else r 3 і помічаючи, що s u і t ur1r1r1r1r1r1r1u=r1r2r3sutuза правилом 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 1t 1 і t = i fs=ift1thent2elset3t1t1 де t 2t 2 .t=ift1thent2elset3t2t2

якого ми шукаємо є у = я пu . s u випливає з правила E-Funny, а t u випливає з правила E-If.u=ift1thent2elset3sutu


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

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

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

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

8

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

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

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

ifr1thenr2elser3[E-If][E-IfFunny]ifr1thenr2elser3ifr1thenr2elser3[E-IfFunny][E-If]ifr1thenr2elser3

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

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