Prova di confluenza per un semplice sistema di riscrittura


14

Supponiamo di avere un linguaggio semplice costituito dai termini:

  • true
  • false
  • se sono termini, allora lo è anchei ft1,t2,t3ift1thent2elset3

Ora supponi le seguenti regole di valutazione logica:

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

Supponiamo di aggiungere anche la seguente regola funky:

t2t2ift1thent2elset3ift1thent2elset3[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 t u s u t ursrtusutu

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?rrr

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

  1. r è una costante, nulla da dimostrare poiché una forma normale non valuta nulla.
  2. 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 3 s = t r s s = r 2 t = r 2 r 3 r 2r 2r2r3s=trss=r2t=r2r3r2r2u=r2
  3. r= se falso allora altrimenti . Equivalentemente dimostrato come sopra.r 3r2r3
  4. 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 cher1r2r3r1s=r1r2r3t=r1r2r3r1r1r1r1r1r1r1e . 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.r1r1u=r1r2r3sutu

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 , s è stato derivato applicando la regola E-If e t è stato derivato applicando la regola E-Funny: So s = i fr=ift1thent2elset3st dove t 1t 1 et t = i fs=ift1thent2elset3t1t1 dove t 2t 2 .t=ift1thent2elset3t2t2

La che stiamo cercando è u = i fu . s u segue dalla regola E-Funny e t u segue dalla regola E-If.u=ift1thent2elset3sutu


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? su
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 r * t poi c'è u tale che s * u e t * ursrtusutu - 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], t 2 in [E-IfFunny]) e non ci sono vincoli su t 2 in [E-If] o su t 1 in [E- IfFunny]. Quindi quando hai un termine a cui si applicano entrambe le regole - che deve essere nella forma i ft1t2t2t1 , puoi scegliere di applicare le regole in entrambi gli ordini:ifr1thenr2elser3

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

¹ 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.