Il problema di rappresentare le variabili associate nella sintassi, e in particolare quello della sostituzione che evita la cattura, è ben noto e presenta una serie di soluzioni: variabili nominate con equivalenza alfa, indici di de Bruijn, insensatezza locale, insiemi nominali, ecc.
Ma sembra esserci un altro approccio abbastanza ovvio, che tuttavia non ho visto usato da nessuna parte. Vale a dire, nella sintassi di base abbiamo solo un termine "variabile", scritto dire , e quindi separatamente diamo una funzione che mappa ogni variabile a un legante nel cui ambito si trova. Quindi un -term come
sarebbe scritto e la funzione associerebbe il primo al primo e il secondo al secondo . Quindi è un po 'come gli indici de Bruijn, solo invece di dover "contare s" quando si esce dal termine per trovare il raccoglitore corrispondente, si valuta solo una funzione. (Se rappresento questo come una struttura di dati in un'implementazione, penserei di dotare ogni oggetto a termine variabile con un semplice puntatore / riferimento al corrispondente oggetto a termine legante.)
Ovviamente questo non è sensato per la scrittura della sintassi su una pagina da leggere per gli umani, ma nemmeno gli indici de Bruijn. Mi sembra che abbia perfettamente senso matematicamente, e in particolare rende molto semplice la sostituzione che evita la cattura: basta inserire il termine che si sta sostituendo e prendere l'unione delle funzioni di legame. È vero che non ha una nozione di "variabile libera", ma poi (di nuovo) nemmeno gli indici de Bruijn; in entrambi i casi, un termine contenente variabili libere è rappresentato da un termine con un elenco di raccoglitori "contestuali" in primo piano.
Mi sto perdendo qualcosa e c'è qualche motivo per cui questa rappresentazione non funziona? Ci sono problemi che lo rendono molto peggio degli altri che non vale la pena considerare? (L'unico problema a cui riesco a pensare in questo momento è che l'insieme di termini (insieme alle loro funzioni di legame) non è definito induttivamente, ma ciò non sembra insormontabile.) O ci sono effettivamente luoghi in cui è stato usato?