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

14

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

• $\mathtt{t}\mathtt{r}\mathtt{u}\mathtt{e}$$\mathtt{true}$
• $\mathtt{f}\mathtt{a}\mathtt{l}\mathtt{s}\mathtt{e}$$\mathtt{false}$
• если являются терминами, то${t}_{1},{t}_{2},{t}_{3}$$t_1,t_2,t_3$$\mathtt{i}\mathtt{f}\phantom{\rule{mediummathspace}{0ex}}{t}_{1}\phantom{\rule{mediummathspace}{0ex}}\mathtt{t}\mathtt{h}\mathtt{e}\mathtt{n}\phantom{\rule{mediummathspace}{0ex}}{t}_{2}\phantom{\rule{mediummathspace}{0ex}}\mathtt{e}\mathtt{l}\mathtt{s}\mathtt{e}\phantom{\rule{mediummathspace}{0ex}}{t}_{3}$$\mathtt{if}\: t_1 \:\mathtt{then}\: t_2 \:\mathtt{else}\: t_3$

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

$\begin{array}{c}\frac{}{\mathtt{i}\mathtt{f}\phantom{\rule{mediummathspace}{0ex}}\mathtt{t}\mathtt{r}\mathtt{u}\mathtt{e}\phantom{\rule{mediummathspace}{0ex}}\mathtt{t}\mathtt{h}\mathtt{e}\mathtt{n}\phantom{\rule{mediummathspace}{0ex}}{t}_{2}\phantom{\rule{mediummathspace}{0ex}}\mathtt{e}\mathtt{l}\mathtt{s}\mathtt{e}\phantom{\rule{mediummathspace}{0ex}}{t}_{3}\to {t}_{2}}\text{[E-IfTrue]}\phantom{\rule{1em}{0ex}}\frac{}{\mathtt{i}\mathtt{f}\phantom{\rule{mediummathspace}{0ex}}\mathtt{f}\mathtt{a}\mathtt{l}\mathtt{s}\mathtt{e}\phantom{\rule{mediummathspace}{0ex}}\mathtt{t}\mathtt{h}\mathtt{e}\mathtt{n}\phantom{\rule{mediummathspace}{0ex}}{t}_{2}\phantom{\rule{mediummathspace}{0ex}}\mathtt{e}\mathtt{l}\mathtt{s}\mathtt{e}\phantom{\rule{mediummathspace}{0ex}}{t}_{3}\to {t}_{3}}\text{[E-IfFalse]}\\ \frac{{t}_{1}\to {t}_{1}^{\prime }}{\mathtt{i}\mathtt{f}\phantom{\rule{mediummathspace}{0ex}}{t}_{1}\phantom{\rule{mediummathspace}{0ex}}\mathtt{t}\mathtt{h}\mathtt{e}\mathtt{n}\phantom{\rule{mediummathspace}{0ex}}{t}_{2}\phantom{\rule{mediummathspace}{0ex}}\mathtt{e}\mathtt{l}\mathtt{s}\mathtt{e}\phantom{\rule{mediummathspace}{0ex}}{t}_{3}\to \mathtt{i}\mathtt{f}\phantom{\rule{mediummathspace}{0ex}}{t}_{1}^{\prime }\phantom{\rule{mediummathspace}{0ex}}\mathtt{t}\mathtt{h}\mathtt{e}\mathtt{n}\phantom{\rule{mediummathspace}{0ex}}{t}_{2}\phantom{\rule{mediummathspace}{0ex}}\mathtt{e}\mathtt{l}\mathtt{s}\mathtt{e}\phantom{\rule{mediummathspace}{0ex}}{t}_{3}}\text{[E-If]}\end{array}$

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

$\frac{{t}_{2}\to {t}_{2}^{\prime }}{\mathtt{i}\mathtt{f}\phantom{\rule{mediummathspace}{0ex}}{t}_{1}\phantom{\rule{mediummathspace}{0ex}}\mathtt{t}\mathtt{h}\mathtt{e}\mathtt{n}\phantom{\rule{mediummathspace}{0ex}}{t}_{2}\phantom{\rule{mediummathspace}{0ex}}\mathtt{e}\mathtt{l}\mathtt{s}\mathtt{e}\phantom{\rule{mediummathspace}{0ex}}{t}_{3}\to \mathtt{i}\mathtt{f}\phantom{\rule{mediummathspace}{0ex}}{t}_{1}\phantom{\rule{mediummathspace}{0ex}}\mathtt{t}\mathtt{h}\mathtt{e}\mathtt{n}\phantom{\rule{mediummathspace}{0ex}}{t}_{2}^{\prime }\phantom{\rule{mediummathspace}{0ex}}\mathtt{e}\mathtt{l}\mathtt{s}\mathtt{e}\phantom{\rule{mediummathspace}{0ex}}{t}_{3}}\text{[E-IfFunny]}$

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

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

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

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

1. $r$$r$ - это константа, доказывать нечего, так как нормальная форма ничего не оценивает.
2. $r=$$r=$ если истина, то иначе . (а) оба вывода были сделаны с помощью правила E-IfTrue. В этом случае , поэтому доказывать нечего. (б) один вывод был сделан с помощью правила E-IfTrue, другой - с помощью правила E-Funny. Предположим, что было сделано с E-IfTrue, другой случай эквивалентно доказан. Теперь мы знаем, что . Мы также знаем, что если true, то иначе и что существует некоторый дифференциал (предпосылка). Если мы теперь выберем , мы завершаем дело.${r}_{2}$$r_2$${r}_{3}$$r_3$$s=t$$s=t$$r\to s$$r \rightarrow s$$s={r}_{2}$$s = r_2$$t=$$t =$${r}_{2}^{\prime }$$r'_2$${r}_{3}$$r_3$${r}_{2}\to {r}_{2}^{\prime }$$r_2 \rightarrow r'_2$$u={r}_{2}^{\prime }$$u = r'_2$
3. $r=$$r=$ если ложь, то иначе . Эквивалентно доказано как выше.${r}_{2}$$r_2$${r}_{3}$$r_3$
4. $r=$$r=$ если то иначе с true или false. (а) оба вывода были сделаны с правилом E-If. Теперь мы знаем, что если то иначе и если то иначе . Мы также знаем, что существуют дифференциации и (предпосылки). Теперь мы можем использовать гипотезу индукции, чтобы сказать, что существует некоторый термин такой что${r}_{1}$$r_1$${r}_{2}$$r_2$${r}_{3}$$r_3$${r}_{1}\ne$$r_1 \neq$$s=$$s =$${r}_{1}^{\prime }$$r'_1$${r}_{2}$$r_2$${r}_{3}$$r_3$$t=$$t =$${r}_{1}^{″}$$r''_1$${r}_{2}$$r_2$${r}_{3}$$r_3$${r}_{1}\to {r}_{1}^{\prime }$$r_1 \rightarrow r'_1$${r}_{1}\to {r}_{1}^{″}$$r_1 \rightarrow r''_1$${r}_{1}^{‴}$$r'''_1$${r}_{1}^{\prime }\to {r}_{1}^{‴}$$r'_1 \rightarrow r'''_1$и . Теперь мы завершим случай, сказав if тогда иначе и заметив, что и по правилу E-If. (б) один вывод был произведен по правилу E-If, а другой - по правилу E-Funny.${r}_{1}^{″}\to {r}_{1}^{‴}$$r''_1 \rightarrow r'''_1$$u=$$u =$${r}_{1}^{‴}$$r'''_1$${r}_{2}$$r_2$${r}_{3}$$r_3$$s\to u$$s \rightarrow u$$t\to u$$t \rightarrow u$

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

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

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

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

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

Ответы:

7

Хорошо, давайте рассмотрим случай, когда , было получено путем применения правила E-If, а было получено путем применения правила E-Funny: So$r=\mathtt{i}\mathtt{f}\phantom{\rule{mediummathspace}{0ex}}{t}_{1}\phantom{\rule{mediummathspace}{0ex}}\mathtt{t}\mathtt{h}\mathtt{e}\mathtt{n}\phantom{\rule{mediummathspace}{0ex}}{t}_{2}\phantom{\rule{mediummathspace}{0ex}}\mathtt{e}\mathtt{l}\mathtt{s}\mathtt{e}\phantom{\rule{mediummathspace}{0ex}}{t}_{3}$$r = \mathtt{if}\: t_1 \:\mathtt{then}\: t_2 \:\mathtt{else}\: t_3$$s$$s$$t$$t$ где и$s=\mathtt{i}\mathtt{f}\phantom{\rule{mediummathspace}{0ex}}{t}_{1}^{\prime }\phantom{\rule{mediummathspace}{0ex}}\mathtt{t}\mathtt{h}\mathtt{e}\mathtt{n}\phantom{\rule{mediummathspace}{0ex}}{t}_{2}\phantom{\rule{mediummathspace}{0ex}}\mathtt{e}\mathtt{l}\mathtt{s}\mathtt{e}\phantom{\rule{mediummathspace}{0ex}}{t}_{3}$$s = \mathtt{if}\: t'_1 \:\mathtt{then}\: t_2 \:\mathtt{else}\: t_3$${t}_{1}\to {t}_{1}^{\prime }$$t_1 \rightarrow t'_1$ где .$t=\mathtt{i}\mathtt{f}\phantom{\rule{mediummathspace}{0ex}}{t}_{1}\phantom{\rule{mediummathspace}{0ex}}\mathtt{t}\mathtt{h}\mathtt{e}\mathtt{n}\phantom{\rule{mediummathspace}{0ex}}{t}_{2}^{\prime }\phantom{\rule{mediummathspace}{0ex}}\mathtt{e}\mathtt{l}\mathtt{s}\mathtt{e}\phantom{\rule{mediummathspace}{0ex}}{t}_{3}$$t = \mathtt{if}\: t_1 \:\mathtt{then}\: t'_2 \:\mathtt{else}\: t_3$${t}_{2}\to {t}_{2}^{\prime }$$t_2 \rightarrow t'_2$

которого мы ищем является $u$$u$ . следует из правила E-Funny, а следует из правила E-If.$u=\mathtt{i}\mathtt{f}\phantom{\rule{mediummathspace}{0ex}}{t}_{1}^{\prime }\phantom{\rule{mediummathspace}{0ex}}\mathtt{t}\mathtt{h}\mathtt{e}\mathtt{n}\phantom{\rule{mediummathspace}{0ex}}{t}_{2}^{\prime }\phantom{\rule{mediummathspace}{0ex}}\mathtt{e}\mathtt{l}\mathtt{s}\mathtt{e}\phantom{\rule{mediummathspace}{0ex}}{t}_{3}$$u = \mathtt{if}\: t'_1 \:\mathtt{then}\: t'_2 \:\mathtt{else}\: t_3$$s\to u$$s \rightarrow u$$t\to u$$t \rightarrow u$

Ударь меня к этому. Хорошая работа.
Patrick87

Черт возьми, я действительно смотрел слишком далеко ... Спасибо!
codd

Вы их перепутали, хотя следует из E-Funny. Или я вижу что-то не так? $s\to u$$s \rightarrow u$
codd

@Jeroen Ты прав - я их перепутал. Исправлено сейчас.
sepp2k

8

Небольшая терминология может помочь, если вы хотите посмотреть это: эти правила переписывают правила , они не имеют ничего общего с системами типов¹. Свойство, которое вы пытаетесь доказать, называется слиянием ; более конкретно, это сильное слияние : если термин может быть сокращен различными способами за один шаг, они могут сходиться обратно на следующем шаге. В общем случае слияние допускает любое количество шагов, а не один: если и то существует такой, что и $r{\to }^{\ast }s$$r\to^*s$$r{\to }^{\ast }t$$r\to^*t$$u$$u$$s{\to }^{\ast }u$$s\to^*u$$t{\to }^{\ast }u$$t\to^*u$ - если термин может быть сокращен по-разному, независимо от того, насколько далеко они разошлись, они могут в конечном итоге вернуться назад.

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

В случае, если это доставляет вам неприятности, одна сторона уменьшает часть «если», а другая сторона уменьшает часть «тогда». Там нет перекрытия между двумя частями, которые изменяются ( в [E-If], в [E-IfFunny]), и нет никаких ограничений на в [E-If] или на в [E- IfFunny]. Поэтому , когда у вас есть термин , к которому оба правила применения - которые должны иметь вид $t1$$t1$${t}_{2}$$t_2$${t}_{2}$$t_2$${t}_{1}$$t_1$ , вы можете применить правила в любом порядке:$\mathtt{i}\mathtt{f}\phantom{\rule{mediummathspace}{0ex}}{r}_{1}\phantom{\rule{mediummathspace}{0ex}}\mathtt{t}\mathtt{h}\mathtt{e}\mathtt{n}\phantom{\rule{mediummathspace}{0ex}}{r}_{2}\phantom{\rule{mediummathspace}{0ex}}\mathtt{e}\mathtt{l}\mathtt{s}\mathtt{e}\phantom{\rule{mediummathspace}{0ex}}{r}_{3}$$\mathtt{if}\: r_1 \:\mathtt{then}\: r_2 \:\mathtt{else}\: r_3$

$\begin{array}{rcl}& \mathtt{i}\mathtt{f}\phantom{\rule{mediummathspace}{0ex}}{r}_{1}\phantom{\rule{mediummathspace}{0ex}}\mathtt{t}\mathtt{h}\mathtt{e}\mathtt{n}\phantom{\rule{mediummathspace}{0ex}}{r}_{2}\phantom{\rule{mediummathspace}{0ex}}\mathtt{e}\mathtt{l}\mathtt{s}\mathtt{e}\phantom{\rule{mediummathspace}{0ex}}{r}_{3}& \\ \text{[E-If]}↙& & ↘\text{[E-IfFunny]}\\ \mathtt{i}\mathtt{f}\phantom{\rule{mediummathspace}{0ex}}{r}_{1}^{\prime }\phantom{\rule{mediummathspace}{0ex}}\mathtt{t}\mathtt{h}\mathtt{e}\mathtt{n}\phantom{\rule{mediummathspace}{0ex}}{r}_{2}\phantom{\rule{mediummathspace}{0ex}}\mathtt{e}\mathtt{l}\mathtt{s}\mathtt{e}\phantom{\rule{mediummathspace}{0ex}}{r}_{3}& & \mathtt{i}\mathtt{f}\phantom{\rule{mediummathspace}{0ex}}{r}_{1}\phantom{\rule{mediummathspace}{0ex}}\mathtt{t}\mathtt{h}\mathtt{e}\mathtt{n}\phantom{\rule{mediummathspace}{0ex}}{r}_{2}^{\prime }\phantom{\rule{mediummathspace}{0ex}}\mathtt{e}\mathtt{l}\mathtt{s}\mathtt{e}\phantom{\rule{mediummathspace}{0ex}}{r}_{3}\\ \text{[E-IfFunny]}↘& & ↙\text{[E-If]}\\ & \mathtt{i}\mathtt{f}\phantom{\rule{mediummathspace}{0ex}}{r}_{1}^{\prime }\phantom{\rule{mediummathspace}{0ex}}\mathtt{t}\mathtt{h}\mathtt{e}\mathtt{n}\phantom{\rule{mediummathspace}{0ex}}{r}_{2}^{\prime }\phantom{\rule{mediummathspace}{0ex}}\mathtt{e}\mathtt{l}\mathtt{s}\mathtt{e}\phantom{\rule{mediummathspace}{0ex}}{r}_{3}& \end{array}$

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.