Доказательство слияния для простой системы переписывания


14

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

  • true
  • false
  • если являются терминами, тоt1,t2,t3ift1thent2elset3

Теперь предположим следующие логические правила оценки:

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 → ur→sr→tus→ut→u

Я доказываю это индукцией по структуре . Вот мое доказательство до сих пор, все сработало хорошо, но я застрял в самом последнем случае. Кажется, что индукции на структуру не достаточно, кто-нибудь может мне помочь?рrr

Доказательство. Индукцией по мы отделим все формы, которые может принимать :рrr

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

В последнем случае, когда один вывод был сделан E-If, а другой - E-Funny, это случай, которого я пропускаю ... Кажется, я не могу использовать гипотезы.

Помощь будет высоко ценится.


@ Жиль очень хорошо с редактированием. Я не знал, что движок SE TeX способен на все это ... :-)
— codd

Я не прав или это упражнение взято у Пирса "Типы и языки программирования"?
— Фабио Ф.

@FabioF. Это действительно из книги Пирса «Типы и языки программирования». Он предоставляет доказательства, которые я нахожу неясными, из-за того, как он выполняет индукцию. Вот почему я попытался доказать это сам посредством наведения на структуру. Я думал упомянуть, что это из книги, но я подумал, что это будет довольно неактуально. Хорошо заметили, однако!
— codd

Ответы:


7

Хорошо, давайте рассмотрим случай, когда , s было получено путем применения правила E-If, а t было получено путем применения правила E-Funny: So 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]. Поэтому , когда у вас есть термин , к которому оба правила применения - которые должны иметь вид я еt1t2t2t1 , вы можете применить правила в любом порядке: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.