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

14

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

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

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

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

Предположим, мы также добавили следующее веселое правило:

t2t2ift1thent2elset3ift1thent2elset3[E-IfFunny]

Для этого простого языка с данными правилами оценки я хочу доказать следующее:

Теорема: если и то существует некоторый член такой, что и .r t u s u t ursrtusutu

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

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

  1. r - это константа, доказывать нечего, так как нормальная форма ничего не оценивает.
  2. r 2 r 3 s = t r s s = r 2 t = r 2 r 3 r 2r 2 u = r 2r= если истина, то иначе . (а) оба вывода были сделаны с помощью правила E-IfTrue. В этом случае , поэтому доказывать нечего. (б) один вывод был сделан с помощью правила E-IfTrue, другой - с помощью правила E-Funny. Предположим, что было сделано с E-IfTrue, другой случай эквивалентно доказан. Теперь мы знаем, что . Мы также знаем, что если true, то иначе и что существует некоторый дифференциал (предпосылка). Если мы теперь выберем , мы завершаем дело.r2r3s=trss=r2t=r2r3r2r2u=r2
  3. r 2 r 3r= если ложь, то иначе . Эквивалентно доказано как выше.r2r3
  4. r 1 r 2 r 3 r 1s = r 1 r 2 r 3 t = r 1 r 2 r 3 r 1r 1 r 1r 1 r 1 r 1r 1r= если то иначе с true или false. (а) оба вывода были сделаны с правилом E-If. Теперь мы знаем, что если то иначе и если то иначе . Мы также знаем, что существуют дифференциации и (предпосылки). Теперь мы можем использовать гипотезу индукции, чтобы сказать, что существует некоторый термин такой чтоr1r2r3r1s=r1r2r3t=r1r2r3r1r1r1r1r1r1r1и . Теперь мы завершим случай, сказав if тогда иначе и заметив, что и по правилу E-If. (б) один вывод был произведен по правилу E-If, а другой - по правилу E-Funny.r1r1u=r1r2r3sutu

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

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

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

Ответы:

7

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

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

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

Sometimes Иногда вы будете видеть типы и переписывать вместе, но по своей сути они являются ортогональными понятиями.

Жиль "ТАК - перестань быть злым"
источник