"Qui famosi logici hanno commesso errori imbarazzanti", una linea della SICP. A cosa si riferisce questo?


14

Ecco il contesto ( Struttura e interpretazione dei programmi per computer , sezione 1.1.8, sotto il titolo "Nomi locali"):

Un parametro formale di una procedura ha un ruolo molto speciale nella definizione della procedura, in quanto non ha importanza il nome del parametro formale. Tale nome è chiamato variabile legata e diciamo che la definizione della procedura lega i suoi parametri formali. Il significato di una definizione di procedura rimane invariato se una variabile associata viene rinominata in modo coerente in tutta la definizione.

Alla fine di quest'ultima riga, c'è una nota (26) che dice:

Il concetto di ridenominazione coerente è in realtà sottile e difficile da definire formalmente. Logici famosi hanno commesso errori imbarazzanti qui.

A cosa o a chi si riferisce il testo? Perché definire "ridenominazione coerente" sarebbe difficile, quali logici hanno commesso errori nel tentativo di definirlo e quali erano questi errori?


3
Dico ai miei studenti che l'unico modo per capire "rinominare costantemente le variabili associate" è implementare correttamente questa dannata cosa. Molti libri di logica evitano il problema, forniscono procedure di ridenominazione incomplete o almeno omettono prove che le procedure di ridenominazione fornite siano corrette. Ma non so a quale particolare pettegolezzo fa riferimento il libro.
Andrej Bauer,

5
Affrontare con precisione la ridenominazione variabile, i nuovi nomi, la sostituzione che evita l'acquisizione e simili, è una delle cose più banali che diventa rapidamente ingombrante in definizioni e prove. Per una questione così banale, non si vuole spendere più di una quantità banale di cicli mentali, ma molto più di quanto sarebbe necessario per evitare molte catture / collisioni / ecc. Spesso, le persone PL si prendono cura del loro definizioni, ma poi invoca la "Convenzione di Barendregt" e ignora il problema, abusando un po '"fresco" qua e là, quando necessario.
chi

1
Gradirei risposte più concrete, di seguito nella casella di risposta, se possibile. Questi commenti rendono ancora misterioso il problema dato che li hai scritti per essere letti da qualcuno che è già a conoscenza del problema in questione, mentre io non lo sono
ubadub

@chi in particolare apprezzerei leggere i consigli che trattano questo argomento, se ne hai. Grazie in anticipo
ubadub,

Risposte:


11

Questa è una risposta parziale: non ho idea di quali errori o persone faccia riferimento a SICP. Posso solo fornire alcuni suggerimenti sul "perché" la ridenominazione variabile può essere dolorosa da gestire con precisione.

Prima di tutto, sembra banale da definire. Ad esempio, possiamo rinominare le variabili associate in somme indicizzate

xe=y(e{y/x})

dove e è una qualsiasi espressione, e e{y/x} indica la sostituzione sintattica di ogni x con y . Trivial, vero?

Bene, se applichiamo ciecamente la regola sopra, otteniamo

x(x+y)=y(y+y)

Questo non è buono. Dobbiamo aggiungere il requisito " y non si verifica in e ", oppure otteniamo uno scontro di nomi.

Ora, considera questa ridenominazione corretta

xy(x+y)=xz(x+z)

xy

e{y/x}yeye

Definiamo quindi occorrenze gratuite:

free(x)={x}free(e+t)=free(e)free(t)free(xe)=free(e){x}

Infine, cattura evitando la sostituzione:

  • x{t/y}tx=yx
  • (e+e){t/y}=e{t/y}+e{t/y}
  • (xe){t/y}=??

x=yXΣXe

yX(ΣXe){t/y}=ΣX(e{t/y})Xt

zytxe(xe){t/y}=z(e{z/x}{t/y})

Spero di aver capito bene. (A proposito, il mio primo tentativo è stato sbagliato)

zz

αλX

Ora, immagina di dover affrontare questa complessa definizione ogni volta che vogliamo dimostrare qualcosa nella teoria PL. Potremmo, ma non vogliamo. È noioso, noioso, soggetto a errori, ingombra la prova e non fornisce informazioni al lettore. Per questo motivo, molti autori di PL semplicemente saltano i dettagli dicendo (o addirittura dando come scontato!) Che i termini debbano essere presi "fino alla ridenominazione delle variabili", che tutte le variabili associate siano assunte distinte da qualunque cosa debbano essere distinte, che assumiamo la "convenzione di Barendregt", o qualcosa dello stesso effetto.

Ad essere brutalmente onesto, questo è tradire le prove. Potremmo anche aggiungere "strizzatina d'occhio, sfioramento, non dire altro!" nello stesso spirito. Sostanzialmente chiediamo pietà e diciamo al lettore: "guarda, questo è noioso, non voglio farlo, non vuoi leggerlo - entrambi sappiamo che, con un grande sforzo, potremmo riscrivere questa prova a includi tutti i dettagli ".

Tecnicamente, è possibile sfruttare questa scorciatoia per dimostrare una dichiarazione falsa. L'esperto revisore delle prove, tuttavia, sa cosa è "moralmente buono" e potrebbe renderlo perfetto (con grande sforzo) e cosa è sospetto. Questi ultimi potrebbero includere qualcosa che dipende dalla scelta effettiva di Bound nomi (quindi stiamo non lavorando davvero "fino a" come promesso!). In questi casi, la recensione richiederà ulteriori dettagli, in modo che possa essere convinto.

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.