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?
gargalo
fonte

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.

Hans Hüttel
fonte
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.

Gilles 'SO- parar de ser mau'
fonte
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'