Preservação semântica: solidez (ou correção) ou completude


7

Ao transformar termos de um idioma para outro, a propriedade intuitivamente desejada é a preservação da semântica (como usada, por exemplo, aqui para uma transformação do CPS):

svc(s)c(v)

Estou um pouco preocupado, no entanto, ao conciliar isso com os termos clássicos correção (ou solidez) e integridade dos sistemas lógicos. Normalmente, eu consideraria a declaração acima a propriedade de integridade dec (e o inverso a definição de correção).

Intuitivamente, no entanto, um compilador deve estar correto e não completo (como por exemplo, a verificação de tipo geralmente exclui os programas corretos). O inverso da afirmação acima é verdadeira apenas sec é injetivo: se o idioma de origem contiver, por exemplo, booleanos e operações neles e a compilação os substituir por codificação da Igreja, o idioma de destino poderá avaliar operações booleanas em termos compilados de literais booleanos e abstrações lambda, que o idioma de origem não pode avaliar.

  1. Estou certo de presumir que a afirmação acima é propriedade da integridade c (para que o requisito intuitivo realmente tenha um nome contra-intuitivo)?
  2. Também estou certo em minha conclusão de que um compilador não injetor geralmente não está correto?

Respostas:


3

Esta é realmente uma pergunta sobre a noção de correspondência operacional .

O artigo Rumo a uma abordagem unificada dos resultados de codificação e separação para cálculos de processos, de Daniele Gorla ( http://wwwusers.di.uniroma1.it/~gorla/papers/G-CONCUR08.pdf ), trata de critérios de correção para traduções entre processos cálculo.

Em seu trabalho, Gorla introduz uma noção de equivalência comportamental; Vou deixar aqui de fora para não complicar demais a explicação.

Deixei [[]] ser uma codificação, vamos 1 seja a relação de transição definida para o idioma de origem e permita 2seja a relação de transição definida para o idioma de destino. Se tivermos isso

  • E se S1S então [[S]]2[[S]], dizemos que a codificação está completa
  • E se [[S]]2T, então existe um S de tal modo que S1S e T2[[S]], dizemos que a codificação é sólida .

Então, sim, a noção mencionada nas perguntas é de fato a de completude. A noção de firmeza é moldada pelo fato de que o idioma alvo geralmente será mais rico que o idioma alvo ou conterá construções sintáticas cujo comportamento não corresponde a nada no idioma fonte. Isso explica por que falamos da configuração intermediáriaT na definição em vez de exigir injetividade.


Você tem certeza da derivação em uma etapa S1SAcabei de desenterrar o papel e, depois de uma breve olhada, eles parecem usar a derivação de várias etapas. Isso também torna a sonoridade confusa: por que precisa haver exatamente um passo de S para S 'nessa propriedade?
choeger

Não, de fato deveria haver uma sequência de redução na definição de solidez. A interpretação pretendida é que a codificação[[S]] pode simular fielmente a declaração original S; sempre que[[S]] executar uma sequência de redução, ela pode ser concluída de forma que os resultados correspondam a uma simulação de uma sequência de redução feita por S. Eu atualizei minha resposta.
Hans Hüttel 21/10

2

Intuitivamente falando, a propriedade de correção para uma transformação em uma linguagem na qual uma noção de avaliação é definida afirma que, se um termo tem uma certa semântica, a imagem do termo por essa transformação é avaliada para a imagem da referida semântica. Em outras palavras, um compilador correto é aquele que transforma um programa em outro programa com o mesmo comportamento (expresso no idioma de destino).

Aqui, deduzo de suas anotações que o idioma de origem é um idioma de termos s com uma noção de avaliação : sv significa que s reduz (em qualquer número de etapas) ao valor v. Um compilador corretoc é aquele que transforma qualquer programa s em um programa compilado c(s) que avalia o valor do compilador correspondente c(v).

Isso corresponde à definição na Wikipedia se os valores se compilarem: ses tem a propriedade v então o mesmo acontece c(s).

Um compilador de som não precisa ser injetado: é possível, e extremamente comum, que diferentes programas de origem com a mesma semântica sejam compilados no mesmo programa compilado.

Os compiladores geralmente não estão completos : como você observa, é comum ter termos na linguagem compilada que não possam ser a saída do compilador, ou seja, o compilador não é subjetivo.


Então você está dizendo exatamente o oposto da resposta de Hans? Isso é interessante. Sua interpretação da minha notação está correta, mas para tornar as coisas explícitas: você considera a afirmação como correta (e, portanto, o inverso seria completo)?
choeger

@choeger A rigor, eu definiria correção como “para todos s e v, E se c(s) existe e sv então c(v) existe e sc(v)”. Dado que o idioma de origem é o que define a semântica, não vejo uma maneira de quantificarsvc(s)c(v)para torná-lo uma propriedade completa.
Gilles 'SO- stop be evil'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.