Por que Reescrever Termos?

12

Eu fiz um pouco de pesquisa no google e fiquei um pouco curto.

Gostaria de saber quais são as principais razões para os cientistas da computação, programadores, estudarem a reescrita de termos e / ou a reescrita de gráficos de termos.

Até onde eu sei, isso apenas ajuda no raciocínio básico sobre programas funcionais e controle (imperativo) do programa. Aparentemente, é um tópico de grande interesse para lógicos e aqueles que estudam álgebras abstratas construtivas.

Qualquer ajuda seria muito apreciada!

Musa Al-hassy
fonte

Respostas:

11

Não tenho certeza de que isso trará mais do que você já sabe. Mas então, posso deixar de entender os motivos que fazem você se perguntar sobre a reescrita de termos. Isso ajuda.

Como você deve saber, gramáticas são sistemas de reescrita de strings. No topo da hierarquia de Chomsky, você tem gramáticas do tipo 0, que definem angústias recursivamente enumeráveis ​​(RE) e têm o poder computacional das máquinas de Turing.

Isso indica que os sistemas de reescrita em geral têm muito a ver com a expressão de algoritmos.

O problema com as strings em geral é que não há uma maneira óbvia de anexar semântica a elas. É uma espécie de reescrita amorfa.

O que as pessoas geralmente estão interessadas é expressar algoritmos em domínios específicos que possuem estrutura e propriedades. Esses domínios são frequentemente definidos a partir de entidades elementares (atômicas) e fechados por várias operações, possivelmente quocientes por relações de equivalência, e assim por diante. Estes são frequentemente chamados álgebras.

Esses domínios geralmente são abstratos. Mas os cálculos em seus elementos podem ser expressos apenas em representações concretas. Os termos são representação natural desses elementos, pois expressam como os elementos podem ser obtidos para outros elementos pela aplicação de operações, recursivamente até elementos atômicos (embora as propriedades gerais nem sempre precisem ir até o fim). Termos são um tipo de sintaxe da estrutura da árvore que pode ser manipulada para expressar algoritmos (como na string). Mas a estrutura de termos do operando operador também permite associá-los a semântica em algum domínio abstrato por meio de homomorfismos.

Em vez de ter uma visão muito formal da wikipedia e de muitos textos sobre esse tópico, considere apenas os programas. É geralmente reconhecido que uma representação sintática conveniente de programas é o que é chamado de árvore de sintaxe abstrata (AST). Mas um AST é apenas um termo para representar um objeto de programa. A semântica denotacional é uma maneira de definir domínios abstratos e associar valores desses domínios a AST (ou subárvores AST) por meio de homomorfismos. Os programas no formato AST podem ser transformados ou otimizados aplicando regras de reescrita (não estou afirmando que todas as otimizações podem ou devem ser feitas dessa maneira).

A transformação de expressões algébricas para vários propósitos pode ser expressa por reescrita de termos. Por exemplo, a simplificação de algumas expressões. Vários tipos de cálculos também podem ser naturalmente expressos como reescritos de termos, como o cálculo de derivadas. Às vezes, a reescrita de termos também é usada para definir formas canônicas em álgebras, quando a mesma entidade semântica pode ter várias representações sintáticas.

Eu sugiro que você olhe o artigo da Wikipedia sobre este tópico .

babou
fonte
6

Meu pensamento é que é porque a reescrita de termos é algo extremamente fundamental e que permite descrever as coisas de maneira extremamente baixa, independentemente de qualquer hardware.

A reescrita de termos pode descrever gramáticas, mas também fornece a mecânica para sistemas lógicos descritos, como lógica de primeira ordem, etc. Provas e deduções podem ser escritas como escritas de termos. Então, a substituição da reescrita de termos é realmente a única operação que você tem. A simplicidade aqui é valiosa porque você está descrevendo a lógica; portanto, não pode usar toda a complexidade da lógica para descrever seu sistema (já que esse é o sistema que você está tentando descrever).

Isso fornece a mecânica necessária para você falar sobre o cálculo lambda como um sistema lógico / axiomático, o que fornece uma versão extremamente formal e fundamental da computação.

Máquinas de Turing são úteis, mas suas definições subjacentes exigem que você tenha um conceito de conjuntos, funções etc. Há muito mais matemática que se supõe que foi construída.

O cálculo lambda, por outro lado, é definido em termos de lógica, para que você possa usá-lo sem muito em termos de definições de teoria de conjuntos, funções, etc.

A reescrita de termos, modelada pela lógica, não se aplica apenas à programação funcional. Quando você está fazendo a verificação formal de hardware ou software, sempre faz algum tipo de raciocínio, e esse raciocínio pode ser modelado pela reescrita de termos.

jmite
fonte
2

Uma razão muito prática é que ela leva à construção de sistemas de transformação de programas , ferramentas que permitem manipular o código dos programas como termos (árvores de sintaxe abstrata) usando reescritas de sintaxe de superfície.

Um exemplo desse meu sistema, o DMS Software Reengineering Toolkit , que foi usado para uma ampla variedade de análises de programas e tarefas de transformação em massa. Você pode ver como o DMS expressa reescritas . Essas reescritas são aplicadas por um sistema de reescrita de termos associativo-comutativo que opera nos bastidores.

Ira Baxter
fonte