Podemos distinguir métodos estritamente sintáticos e semânticos na linguagem de programação?

14

Embora a discussão demonstre fortes evidências de normalização, esse comentário contrasta o "modelo de formas normais" com os "métodos puramente sintáticos".

Isso me leva de volta a uma pergunta mais básica: ainda podemos distinguir estritamente construções sintáticas e semânticas, diante de modelos baseados em sintaxe? E quanto aos modelos de termos para álgebras, modelos Henkin para lógicas de primeira ordem? E a semântica operacional estrutural? Como os modelos de termo podem ser isomórficos em relação à sintaxe, parece difícil fazer uma distinção firme.

Até estudar a diferença entre teoria da prova e teoria do modelo na lógica, fiquei até perplexo com a idéia de que "sistemas do tipo estático são um método sintático". Afinal, um sistema de tipos raciocina sobre tipos, que são uma abstração do comportamento do programa (e com tipos dependentes, um arbitrariamente preciso).

Blaisorblade
fonte

Respostas:

14

Não, você não pode distinguir estritamente os métodos sintáticos dos semânticos, mas a distinção ainda acaba fazendo sentido.

  • A semântica operacional estrutural não é denotacional, porque não é um método composicional de fornecer semântica a uma linguagem de programação.

  • No entanto, você pode criar modelos denotacionais a partir de uma semântica operacional estrutural, usando um método de realização ou relações lógicas. Como exemplo, consulte Construindo sistemas de tipos sobre semântica operacional de Robert Harper .

  • λ

  • Na outra direção, se você tiver uma semântica denotacional, poderá descobrir qual é a sintaxe para ela. Então você deseja ir e encontrar uma sintaxe e uma máquina abstrata cujo modelo de termo possa servir como um objeto inicial em uma categoria adequada de modelos.

    Por exemplo, a semântica de jogos começou sua vida como uma construção puramente semântica e, eventualmente, levou ao trabalho na semântica operacional de jogos - um exemplo recente do qual é o cálculo lambda-barra de Alexis Goyet : um cálculo duplo para estratégias irrestritas .

  • No geral, você pode pensar na semântica operacional estrutural como uma maneira de especificar máquinas abstratas, que esperamos que sejam fáceis de implementar. Uma semântica denotacional fornece um modelo de composição de uma linguagem, sobre a qual esperamos ser fácil de raciocinar. Se tivermos os dois, podemos implementar e argumentar sobre a linguagem.

  • Teoremas de normalização são um caso ambíguo interessante. Normalmente, para provar a normalização, você precisa de um modelo semântico (geralmente uma relação lógica). No entanto, uma vez que você sabe que a normalização se mantém, muitas propriedades agora podem ser comprovadas por indução em formas normais, que é um argumento puramente sintático.

    Para lógicas fracas (qualquer coisa até lógica de primeira ordem sem indução, aproximadamente), você pode provar a normalização sintaticamente, usando a técnica de substituição hereditária . Nestas lógicas, a propriedade subformula é válida e, portanto, você pode provar a normalização por indução nos tipos. Veja o artigo de Structural Cut Elimination, de Frank Pfenning, para obter uma explicação de como isso funciona.

Neel Krishnaswami
fonte
Uau, obrigado pela resposta rápida e completa!
Blaisorblade 14/03
Discordo do motivo que você deu para que a semântica operacional não seja denotacional. A semântica operacional não é denotacional porque nenhuma denotação é atribuída aos programas. Existe um trabalho que torna a semântica operacional composicional.
Dia