# Prova di confluenza per un semplice sistema di riscrittura

14

Supponiamo di avere un linguaggio semplice costituito dai termini:

• $\mathtt{t}\mathtt{r}\mathtt{u}\mathtt{e}$$\mathtt{true}$
• $\mathtt{f}\mathtt{a}\mathtt{l}\mathtt{s}\mathtt{e}$$\mathtt{false}$
• se sono termini, allora lo è anche${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$

Ora supponi le seguenti regole di valutazione logica:

$\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}$

Supponiamo di aggiungere anche la seguente regola funky:

$\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]}$

Per questo linguaggio semplice con le regole di valutazione fornite desidero dimostrare quanto segue:

Teorema: Se e allora c'è un termine tale che e .$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$

Lo sto dimostrando per induzione sulla struttura di . Ecco la mia prova finora, tutto ha funzionato bene, ma sono bloccato all'ultimo caso. Sembra che l'induzione sulla struttura di non sia sufficiente, qualcuno può aiutarmi?$r$$r$$r$$r$

Prova. Per induzione su , separeremo tutte le forme che può assumere:$r$$r$$r$$r$

1. $r$$r$ è una costante, nulla da dimostrare poiché una forma normale non valuta nulla.
2. $r=$$r=$ se vero allora altrimenti . (a) entrambe le derivazioni sono state fatte con la regola E-IfTrue. In questo caso , quindi non c'è nulla da dimostrare. (b) una derivazione è stata fatta con la regola E-IfTrue, l'altra con la regola E-Funny. Supponiamo che stato eseguito con E-IfTrue, l'altro caso è dimostrato in modo equivalente. Ora sappiamo che . Sappiamo anche che se vero allora altrimenti e che esiste una derivazione (la premessa). Se ora scegliamo , concludiamo il caso.${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=$ se falso allora altrimenti . Equivalentemente dimostrato come sopra.${r}_{2}$$r_2$${r}_{3}$$r_3$
4. $r=$$r=$ if allora altrimenti con vero o falso. (a) entrambe le derivazioni sono state effettuate con la regola E-If. Ora sappiamo che if then else et if then else . Sappiamo anche che esistono derivazioni e (i locali). Ora possiamo usare l'ipotesi di induzione per dire che esiste un termine tale che${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$e . Concludiamo ora il caso dicendo if quindi altrimenti e notando che et secondo la regola E-If. (b) una derivazione è stata fatta dalla regola E-If e una dalla regola 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$

Quest'ultimo caso, in cui una derivazione è stata fatta da E-If e uno da E-Funny è il caso che mi manca ... Non riesco a riuscire a usare le ipotesi.

L'aiuto sarà molto apprezzato.

@Gilles estremamente ben fatto con l'editing. Non sapevo che il motore TeX di SE fosse in grado di tutto questo ... :-)
codd

Sbaglio o questo esercizio è tratto da Pierce "Tipi e linguaggi di programmazione"?
Fabio F.,

@FabioF. È davvero dal libro Tipi e linguaggi di programmazione di Pierce. Fornisce una prova che trovo poco chiara, a causa del modo in cui esegue l'induzione. Ecco perché ho provato a dimostrarlo da solo tramite l'induzione sulla struttura. Stavo pensando di menzionare che proveniva dal libro, ma ho pensato che sarebbe stato piuttosto irrilevante. Ben notato, tuttavia!
codd

Risposte:

7

Ok, quindi consideriamo il caso che , è stato derivato applicando la regola E-If e è stato derivato applicando la regola 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$ dove et$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$ dove .$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$

La che stiamo cercando è $u$$u$ . segue dalla regola E-Funny e segue dalla regola 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$

Battimi. Bel lavoro.
Patrick87,

Accidenti, stavo davvero guardando troppo lontano ... Grazie!
codd

Li hai mescolati però, segue da E-Funny. O sto vedendo qualcosa di sbagliato? $s\to u$$s \rightarrow u$
codd

@Jeroen Hai ragione - li ho confusi. Riparato ora.
sepp2k,

8

Un po 'di terminologia può essere utile se si desidera cercare questo: queste regole sono regole di riscrittura , non hanno nulla a che fare con i sistemi di tipo¹. La proprietà che stai cercando di dimostrare si chiama confluenza ; più specificamente, è una forte confluenza : se un termine può essere ridotto in diversi modi in un solo passaggio, può convergere di nuovo nel passaggio successivo. In generale, confluenza permette lì per essere qualsiasi numero di passaggi e non solo uno: se e poi c'è tale che e $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$ - se un termine può essere ridotto in diversi modi, indipendentemente da quanto siano divergenti, alla fine possono convergere.

Il modo migliore per dimostrare una proprietà di tali regole di riscrittura definite induttivamente è l'induzione sulla struttura della derivazione della riduzione, piuttosto che sulla struttura del termine ridotto. Qui, entrambi funzionano, perché le regole seguono la struttura del termine di sinistra, ma il ragionamento sulle regole è più semplice. Invece di immergerti nel termine, prendi tutte le coppie di regole e vedi quale termine potrebbe essere un lato sinistro per entrambi. In questo esempio, otterrai gli stessi casi alla fine, ma un po 'più velocemente.

Nel caso in cui ciò causi problemi, un lato riduce la parte "if" e l'altro lato riduce la parte "allora". Non ci sono sovrapposizioni tra le due parti che cambiano ( in [E-If], in [E-IfFunny]) e non ci sono vincoli su in [E-If] o su in [E- IfFunny]. Quindi quando hai un termine a cui si applicano entrambe le regole - che deve essere nella forma $t1$$t1$${t}_{2}$$t_2$${t}_{2}$$t_2$${t}_{1}$$t_1$ , puoi scegliere di applicare le regole in entrambi gli ordini:$\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}$

¹ A volte vedrai tipi e riscrivere insieme, ma alla base sono concetti ortogonali.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.