Completude completo versus abstração completa de uma tradução de programa

15

Os esforços de verificação do compilador geralmente se resumem em provar que o compilador é totalmente abstrato: preserva e reflete equivalências (contextuais).

Em vez de fornecer provas completas de abstração, alguns trabalhos recentes de verificação do compilador (baseados em categorias) por Hasegawa [ 1 , 2 ] e Egger et. al. [ 3 ] comprovam a integralidade de várias traduções de CPS.

Questão: Qual é a diferença entre completude total e abstração completa?

Para mim, completude parece apenas reflexão de equivalência para uma tradução e plenitude parece ser uma conseqüência da preservação de equivalência.

Nota : Curien [ 7 ] e Abramsky [ 8 ] exploram a relação entre definibilidade, abstração completa e, em certa medida, completa completude. Suspeito que esses recursos possam ter a resposta para minha pergunta, mas após uma leitura superficial, ainda tenho que confirmar isso.

Alguns antecedentes : O termo "plenitude total" foi cunhado por Abramsky e Jagadeesan [ 4 ] para caracterizar a correção de um modelo semântico-jogo da Lógica Linear Multiplicativa.

Blute [ 5 ] fornece a seguinte definição:

Seja F uma categoria livre. Dizemos que um modelo categórico M é totalmente completo para F ou que temos integralidade de F em relação a M se, com relação a alguma interpretação dos geradores, o único functor livre [[]]:FM está cheio.

Até onde eu sei, Hasegawa em [ 6 ] é o primeiro a adaptar a totalidade para descrever uma tradução de programa em vez de um modelo semântico categórico. Nesse caso, a tradução de Girard do cálculo lambda simplesmente digitado para o cálculo lambda linear. Mais tarde, em [ 1 ], ele define a totalidade da tradução da CPS como:()

Se é derivável no linear lambda cálculo, então existe y H : σ no cálculo lambda computacional tal que y ; M = N : ( σ O ) o prende no linear lambda cálculo.Γ;N:(σo)oΓM:σΓ;M=N:(σo)o

(onde o é um tipo de base no cálculo lambda linear (idioma de destino), mas não no cálculo lambda computacional (idioma de origem).)

Para mim, a definição de Hasegawa parece uma plenitude e deve realmente ser combinada com perfeição para obter plenitude total.

Egger et. al. [ 3 ] definem a integridade completa de uma tradução CPS como uma combinação de (1) integridade e (2) plenitude:()v

(1): Se e Θ v | - H v = p r | N v : ! τ v então Θ M = λ c N : τΘM,N:τΘv|Mv=βηNv:!τvΘM=λcN:τ

(2): Se então existe um termo Θ M : τ tal que Θ v | - M v = beta r | t : ! τ vΘv|t:!τvΘM:τΘv|Mv=βηt:!τv

(onde é a teoria equacional computacional de Moggi)=λc


[1] " Efeitos usados ​​linearmente: transformações monádicas e CPS em cálculo lambda linear ", Hasegawa 2002

[2] " Semântica da passagem linear de continuação em chamada por nome ", Hasegawa 2004

[3] " Traduções CPS de uso linear no cálculo de efeitos enriquecidos ", Egger et. al. 2012

[4] " Jogos e total plenitude para lógica linear multiplicativa plenitude ", Abramsky e Jagadeesan 1992

[5] " Teoria da categoria para lógicos lineares ", Blute 2003

[6] " Tradução Girard e Predicados Lógicos ", Hasegawa 2000

[7] " Definibilidade e abstração completa ", Curien 2007.

[8] " Axiomas para definibilidade e plenitude total ", Abramsky, 1999.

Phillip Mates
fonte

Respostas:

12

Infelizmente, há muitas coisas acontecendo aqui. Então, é fácil misturar as coisas. O uso de "completo" em "total plenitude" e "abstração total" refere-se a idéias completamente diferentes de plenitude. Mas há também alguma conexão vaga entre eles. Então, essa será uma resposta complicada.

Completude total : "Som e completação" é uma propriedade que você deseja que uma lógica tradicional tenha com relação à sua semântica. Solidez significa que tudo o que você pode provar na lógica é verdadeiro no modelo semântico. Completude significa que tudo o que é verdadeiro no modelo semântico é comprovável na lógica. Dizemos que uma lógica é sólida e completa para um modelo semântico específico. Quando chegamos à lógica construtiva, como a teoria do tipo Martin-Lof ou a lógica linear, nos preocupamos não apenas com a comprovação das fórmulas, mas também com as provas. Uma fórmula comprovável pode ter muitas provas e uma lógica construtiva deseja mantê-las separadas. Portanto, uma semântica para uma lógica construtiva envolve especificar não apenas se uma fórmula é verdadeira, mas também alguma noção semântica abstrata de "prova" ("evidência") para sua verdade. Abramsky e colegas cunharam o termo "plenitude total" para significar que as provas na lógica podem expressar todas as provas semânticas no modelo. Portanto, "completo" se refere a provas aqui. Uma lógica "completa" pode provar tudo o que precisa. Uma lógica "totalmente completa" possui todas as provas de que precisa. Portanto, "completude total" significa "completude construtiva" ou "completude de prova". Isso não tem nada a ver com abstração completa.

Abstração completa : "Adequado e totalmente abstrato" é uma propriedade que você deseja para o modelo semântico de uma linguagem de programação. (Observe a primeira diferença: agora estamos lidando com as propriedades do modelo semântico, não as propriedades da linguagem!) Adequação significa que, sempre que dois termos têm o mesmo significado no modelo semântico, eles são observacionalmente equivalentes na linguagem de programação (com relação a alguma noção de execução). Abstração completa significa que, se dois termos são observacionalmente equivalentes, eles têm o mesmo significado no modelo semântico. Essas idéias podem estar relacionadas à solidez e integridade, mas de uma maneira um tanto artificial. Se pensarmos no modelo semântico de uma linguagem de programação como uma "lógica" ou um "método de prova" para falar sobre equivalência observacional, adequação significa que esse método de prova é sólido; abstração completa significa que esse método de prova está completo. Não há noção de "plenitude total" aqui, porque ninguém ainda produziu um modelo semântico que represente ummétodo de prova. (Mas, tal coisa é teoricamente possível, e um dia desses alguém poderá fazê-lo.)

No seu caso, você está interessado em traduções e não em modelos semânticos. As propriedades de adequação e abstração total podem ser estendidas para lidar com traduções da seguinte maneira. Você pensa na língua-alvo como seu "modelo semântico", isto é, um formalismo que você entende completamente. Nesse caso, você tem alguma noção de equivalência para isso. Então, dizemos que a tradução é adequada se, sempre que as traduções de dois programas de origem forem equivalentes no idioma de destino, elas forem observacionalmente equivalentes no idioma de origem. Dizemos que é totalmente abstrato se, sempre que dois programas de origem são observacionalmente equivalentes no idioma de origem, suas traduções são equivalentes no idioma de destino.

Na realidade, não conheço nenhum idioma de destino que realmente "entendamos". Tudo o que sabemos é outra noção de equivalência observacional para a língua-alvo. Nesse caso, a tradução é adequada se a equivalência observacional das traduções no idioma de destino implica equivalência observacional no idioma de origem. A tradução é totalmente abstrata se a equivalência observacional dos termos no idioma de origem implicar a equivalência observacional das traduções no idioma de destino. M N τ ( M

τ(M)τ(N)MN
Alguns autores consideram "tradução totalmente abstrata" para significar a combinação dessas duas propriedades: M N
MNτ(M)τ(N)
MNτ(M)τ(N)

Egger e cols. Parecem estender da mesma forma a idéia de completude total às traduções. Em sua configuração, fórmulas são tipos e provas são termos. A tradução deles traduz tanto tipos quanto termos. Eles chamam sua tradução totalmente concluída se a tradução de um tipo tem apenas os termos que são obtidos por traduzir os termos originais do tipo A . N : τ ( A ) .AA

N:τ(A).M:A.τ(M)=N

Agora, a vaga conexão entre a plenitude total e a abstração total. Provar que um modelo semântico ou uma tradução é totalmente abstrato geralmente envolve alguma definibilidade. Isso ocorre porque nossos idiomas são geralmente de ordem superior. Portanto, se o modelo semântico ou a linguagem de destino tiver muitos "contextos", ele será capaz de cutucar nossos termos ou significados semânticos de maneiras indesejáveis ​​e estragar sua equivalência. "Maneiras indesejáveis" significa que a própria linguagem de programação não pode cutucá-las. Portanto, para obter abstração completa, precisamos garantir que os "contextos" disponíveis no modelo semântico ou no idioma de destino sejam provenientes dos que estão no idioma de origem de alguma forma. Observe que isso se refere à propriedade completa.

Por que queremos essas propriedades? Tem nadaa ver com compiladores! Queremos essas propriedades para afirmar que o idioma de origem é incorporado ao idioma de destino. Se estivermos satisfeitos com um idioma de destino específico (como sendo limpo, compreensível, de alguma forma fundamental ou dado por Deus), então, se o idioma de origem se incorporar a ele, podemos afirmar que não há nada novo no idioma de origem. É apenas um fragmento da língua-alvo que conhecemos e amamos. É apenas açúcar sintático. Portanto, as traduções totalmente abstratas são dadas pelas pessoas para estabelecer que os idiomas-alvo específicos são ótimos. Às vezes, eles também são dados por pessoas que têm uma linguagem grande ou complicada para lidar. Portanto, em vez de definir uma semântica diretamente, eles a traduzem para uma linguagem principal e, em seguida, fornecem a semântica para a linguagem principal. Por exemplo, o relatório Haskell faz isso. Mas a abstração completa dessas traduções raramente é comprovada porque os idiomas de origem são grandes e complicados. As pessoas acreditam que a tradução é boa.

Mais uma vez, isso não tem nada a ver com compiladores. Compiladores raramente são adequados ou totalmente abstratos. E eles não precisam ser! Tudo o que um compilador precisa fazer é preservar o comportamento de execução de programas completos. O idioma de destino de um compilador geralmente é enorme, o que significa que ele tem muitos contextos que podem atrapalhar a equivalência. Portanto, programas equivalentes no idioma de origem quase nunca são equivalentes ao contexto quando compilados.

Uday Reddy
fonte
O que você quer dizer com dizer que não há idiomas que realmente "compreendamos"?
Martin Berger
O que você quer dizer com dizer que ninguém ainda produziu um modelo semântico que representa um método construtivo de prova?
Martin Berger
1
Desculpe, mas as implicações para "traduções" parecem estar na direção errada para mim, em comparação com o texto anterior. Abstração completa para, digamos, o PCF solicita M≅N⟹τ (M) ≅τ (N) (com τ sendo a semântica denotacional e ignorando a necessidade de alterar símbolos): como você diz, "Abstração completa significa que, se dois termos são observacionalmente equivalentes, eles têm o mesmo significado no modelo semântico ". Mas sua implicação é o contrário (você escreve τ (M) ≅τ (N) ⟹M≅N)! Ou as traduções funcionam de maneira diferente da semântica denotacional?
Blaisorblade 26/03
1
@Blaisorblade: Você está absolutamente certo! Fiz uma correção no texto da minha resposta.
Uday Reddy
1
A abstração completa também é interessante para a segurança no nível do idioma e potencialmente para a integração entre idiomas. Ou seja, é útil saber que nada no idioma de destino pode violar abstrações do idioma de origem.
Dmbarbour 28/05
5

Resumo: integralidade completa significa que a função de interpretação não é apenas completa, mas também adjetiva nos programas. A abstração completa não requer requisitos de sujidade.

[[.]]

  • UMA[[UMA]] no idioma de destino.

  • Contextos Γ no idioma de origem para contextos [[Γ]] no idioma de destino.

  • Programas em contexto ΓP:α para programas em contexto [[Γ]][[P]]:[[α]].

Em uma interpretação categórica, os dois primeiros mapas colapsam em um. A função de interpretação pode ter várias propriedades, por exemplo, pode ser de composição, preservar terminação ou ... Abstração completa é uma dessas propriedades. Lembre-se de que a abstração completa de[[.]] significa que

PSQ     iff     [[P]]T[[Q]]

para todos P,Q. AquiS is the chosen notion of typed program equivalence for the source language while T plays that role for the target language. More precisely, because we are in a typed setting,

PΓ,αSQ     iff     [[P]][[Γ]],[[α]]T[[Q]]
for all appropriate Γ,α,P,Q. Full abstraction implies that [[.]] is sound and complete.The reason we speak of full abstraction and not just soundness & completeness is that we also want that the target language is 'somehow' non-trivial, e.g. not a term model. But formalising this non-triviality is hard, and we just allude to non-triviality by terminology.

Now full abstraction does not imply that [[.]] is surjective on types, contexts or programs in context.

Full completeness means that the map [[.]] is (complete and) surjective on programs in context for all definable contexts and definable types, i.e. any program [[Γ]]Q:[[α]] in the target language is the denotation of some ΓP:α in the source language, i.e. Q=[[P]]. Note that this does not require [[.]] to be surjective on types and contexts, because that property rarely holds in the interpretations we are typically interested in.

Martin Berger
fonte