Perché riscrivere i termini?


12

Ho fatto un po 'di googleing e ne sono uscito un po' corto.

Mi chiedo quali sono le ragioni principali per cui gli scienziati informatici, i programmatori, studiano la riscrittura dei termini e / o la riscrittura dei termini.

Per quanto posso dire, aiuta solo per il ragionamento di base sui programmi funzionali e il controllo (imperativo) del programma. Apparentemente, è un argomento di grande interesse per i logici e coloro che studiano algebre astratte costruttive.

Qualsiasi aiuto sarebbe molto apprezzato!

Risposte:


11

Non sono sicuro che questo ti porterà più di quello che già sai. Ma poi, potrei non capire i motivi che ti fanno meravigliare della riscrittura dei termini. Aiuta.

Come forse saprai, le grammatiche sono sistemi di riscrittura delle stringhe. Nella parte superiore della gerarchia di Chomsky, hai grammatiche di tipo 0, che definiscono angolazioni ricorsivamente enumerabili (RE) e hanno il potere computazionale delle macchine di Turing.

Questo ti dice che i sistemi di riscrittura in generale hanno molto a che fare con l'espressione degli algoritmi.

Il problema con le stringhe in generale è che non esiste un modo ovvio per collegare loro la semantica. È una specie di riscrittura amorfa.

Ciò a cui le persone sono solitamente interessate è esprimere algoritmi in domini specifici che hanno struttura e proprietà. Tali domini sono spesso definiti da entità elementari (atomiche) e chiusi da varie operazioni, eventualmente quotate da relazioni di equivalenza e così via. Questi sono spesso chiamati algebre.

Questi domini sono spesso astratti. Ma i calcoli sui loro elementi possono essere espressi solo su rappresentazioni concrete. I termini sono una rappresentazione naturale di questi elementi poiché esprimono il modo in cui gli elementi possono essere ottenuti per altri elementi mediante l'applicazione di operazioni, ricorsivamente fino a elementi atomici (sebbene le proprietà generali non debbano sempre andare fino in fondo). I termini sono una sorta di sintassi della struttura ad albero che può essere manipolata per esprimere algoritmi (come per la stringa). Ma la struttura dei termini dell'operando dell'operatore consente anche di associare ad essi la semantica in qualche dominio astratto per mezzo di omomorfismi.

Invece di prendere la visione molto formale di Wikipedia e di molti testi su questo argomento, basta considerare i programmi. Di solito si riconosce che una comoda rappresentazione sintattica dei programmi è quella che viene chiamata Abstract Syntax Tree (AST). Ma un AST è solo un termine per rappresentare un oggetto programma. La semantica denotazionale è un modo per definire domini astratti e associare valori da questi domini a AST (o sottotitoli AST) mediante omomorfismi. I programmi in formato AST possono essere trasformati o ottimizzati applicando le regole di riscrittura (non sto affermando che tutte le ottimizzazioni possano o debbano essere fatte in questo modo).

La trasformazione di espressioni algebriche per vari scopi può essere espressa con la riscrittura dei termini. Ad esempio, la semplificazione di alcune espressioni. Vari tipi di calcoli possono anche essere espressi naturalmente come riscrittura dei termini, come il calcolo dei derivati. La riscrittura dei termini viene anche talvolta usata per definire le forme canoniche nelle algebre, quando la stessa entità semantica può avere diverse rappresentazioni sintattiche.

Ti suggerisco di guardare l' articolo di Wikipedia su questo argomento .


6

Il mio pensiero è, perché Term Rewriting è qualcosa di estremamente fondamentale e che ti consente di descrivere le cose in un modo estremamente basso, indipendentemente da qualsiasi hardware.

La riscrittura dei termini può descrivere le grammatiche, ma ti dà anche la meccanica per i sistemi logici descritti, come la logica del primo ordine, ecc. Proving e detrazioni possono essere scritti come termini scritti. Quindi, la sostituzione della riscrittura dei termini è davvero l'unica operazione che hai. La semplicità qui è preziosa perché stai descrivendo la logica, quindi non puoi usare tutta la complessità della logica per descrivere il tuo sistema (dal momento che è il sistema che stai cercando di descrivere).

Questo ti dà quindi la meccanica di cui hai bisogno per parlare del calcolo lambda come un sistema logico / assiomatico, che ti dà una versione estremamente formale e fondamentale del calcolo.

Le macchine di Turing sono utili, ma le loro definizioni sottostanti richiedono che tu abbia un concetto di insiemi, funzioni, ecc. C'è molta più matematica che si presume sia stata costruita.

Il calcolo lambda, d'altra parte, è definito in termini di logica, quindi puoi usarlo senza molto in termini di definizioni per teoria degli insiemi, funzioni, ecc.

La riscrittura dei termini, modellata dalla logica, non è applicabile solo alla programmazione funzionale. Quando esegui una verifica formale di hardware o software, eseguirai sempre ragionamenti di qualche tipo e questo ragionamento può essere modellato mediante la riscrittura dei termini.


2

Una ragione molto pratica è che porta alla costruzione di sistemi di trasformazione del programma , strumenti che consentono di manipolare il codice per programmi come termini (alberi di sintassi astratti) usando riscritture di sintassi di superficie.

Un esempio di questo mio sistema, il DMS Software Reengineering Toolkit , che è stato utilizzato per un'ampia varietà di analisi del programma e attività di trasformazione di massa. Puoi vedere come DMS esprime le riscritture . Queste riscritture sono applicate da un sistema associativo-commutativo di riscrittura che opera dietro le quinte.

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.