O cálculo lambda afim pode resolver todos os problemas em P?

10

Em Tópicos avançados em tipos e linguagens de programação, é mencionado, no capítulo sobre sistemas de tipos subestruturais, que um cálculo lambda afinado "cuidadosamente criado" com um combinador de recursão para listas só pode digitar termos com tempo de execução polinomial (não apresentar a prova devido à complexidade). Isso seria super interessante se pudéssemos resolver todos os problemas em P. Eu poderia tentar encontrar uma solução para um problema de P-completo usando o cálculo apresentado por Não tenho certeza se isso realmente provaria alguma coisa. Não me parece que ele possa realizar todas as reduções necessárias para usar uma solução para um problema de P-completo (embora pareça provável).

Se não se sabe que um cálculo lambda afim é capaz de resolver exatamente os problemas em P, existe algum cálculo conhecido que possa resolver exatamente os problemas em P?

Jake
fonte
11
Desculpe minha ignorância, mas o que é um exemplo de um problema completo de e, mais importante, que noção de redução você está usando? P
Andrej Bauer
Encontrei alguns na wikipedia: en.wikipedia.org/wiki/P-complete#P-complete_problems . De interesse é o problema do valor do circuito e o horn-SAT. A programação linear também é aparentemente completa. Esses slides descrevem bem o problema do valor do circuito cs.cornell.edu/courses/CS6820/2012sp/Handouts/cvp.pdf . Parece que são usadas reduções de L ou N C , sendo as reduções de L mais fracas que as reduções de N C. Eu ficaria satisfeito com qualquer um deles; Não estou certo de quais são as consequências de usar o L vs N C são exatamente. PeuNCeuNCeuNC
Jake
6
Existem linguagens lineares completas para P. Curiosamente, elas geralmente estão completas para problemas, mas não para algoritmos. Ou seja, você pode escrever um programa de tempo poli para cada problema em P, mas nem todo algoritmo polytime é expressável.
Neel Krishnaswami
Essa afirmação seria aproximadamente equivalente a "eles geralmente estão completos para P, mas não para FP"? Além disso, se você pudesse fornecer alguns exemplos, isso seria uma resposta incrível.
Jake
3
Neel Krishnaswami, você pode fornecer uma referência? Isso parece interessante.
Mateus de Oliveira Oliveira

Respostas:

12

Edit: meu palpite no primeiro parágrafo abaixo está errado! Ugo Dal Lago apontou para mim um artigo posterior de Martin Hofmann (publicado no POPL 2002), do qual eu desconhecia, mostrando (como corolário de resultados mais gerais) que o sistema do livro ATTPL está de fato completo para ( apesar de não ser capaz de calcular cada função em F P ). Então, para minha surpresa, a resposta para a pergunta principal é sim.PFP


Em relação ao sistema que você está se referindo a (do livro ATTPL), eu tenho quase certeza que não pode decidir sobre as línguas em . Certamente não pode computar todas as funções na F P : como mencionado nas notas desse capítulo, esse sistema é retirado EICE de Martin Hofmann 1999 de papel ( "tipos lineares e computação tempo polinomial não-aumento-size"), em que é mostrado que as funções representáveis ​​são polytime e não aumentam o tamanhoPFP, que exclui muitas funções polytime. Também parece dar uma séria limitação no tamanho da fita das máquinas de Turing que você pode simular nesse idioma. No artigo, Hofmann mostra que você pode codificar a computação linear do espaço; meu palpite é que você não será capaz de fazer muito mais, ou seja , a classe correspondente a esse sistema é aproximadamente os problemas solucionáveis ​​simultaneamente no politimo e no espaço linear.

No que diz respeito à sua segunda pergunta, existem vários -calculi que pode resolver exatamente os problemas em P . Alguns deles são mencionados nas notas do capítulo ATTPL a que você está se referindo (Seção 1.6): λ- calcculus em camadas de Leivant (veja seu artigo POPL 1993, ou o artigo com Jean-Yves Marion "Caracterizações de Cálculo do Tempo da Poli-Tempo de Jean-Yves Marion" ", Fundamenta Informaticae 19 (1/2): 167-184, 1993), que está relacionada com a caracterização de de Bellantoni e Cook F P ; e o λ -calculi derivado da lógica linear de luz de Girard ( Information and Computation , 143: 175-204, 1998) ou da lógica linear suave de Lafont ( Theoretical Computer ScienceλPλFPλ318 (1-2): 163-180, 2004). Os sistemas de tipos que surgem desses dois últimos sistemas lógicos e garantem o término do politempo (enquanto ainda desfrutam de integridade) podem ser encontrados em:

Patrick Baillot, Kazushige Terui. Tipos de luz para cálculo do tempo polinomial no cálculo lambda. Informação e computação 207 (1): 41-62, 2009.

Marco Gaboardi, Simona Ronchi Della Rocca. Da lógica leve às tarefas de digitação: um estudo de caso. Logic Journal of the IGPL 17 (5): 499-530, 2009.

Você encontrará muitas outras referências nesses dois artigos.

Para concluir, permita-me expandir a observação de Neel Krishnaswami. A situação é um pouco sutil. Todos os cálculos acima podem ser vistos como restrições de cálculos mais gerais, nos quais você pode calcular muito mais do que apenas as funções polytime, por exemplo, sistema F. Por outras palavras, você define uma propriedade Φ dos programas do sistema F P : stringbool de forma que:λΦP:cordabool

solidez: implica que a linguagem decidida por P esteja em P ;Φ(P)PP

completude: para todo , existe um programa F do sistema P que decide L tal que Φ ( P ) .euPPeuΦ(P)

O interesse é que a propriedade expressa por seja puramente sintática e, em particular, decidível. Portanto, a integridade só pode ser mantida em um sentido extensional: se L é seu idioma favorito em P e se P é seu algoritmo favorito para decidir L expresso no sistema F, pode ser que Φ ( P ) não seja válido. Tudo que você sabe é que existe algum outro programa do sistema F P 'que decide L e tal que Φ ( P ' ) se mantém. Infelizmente, pode acontecer que P ΦeuPPeuΦ(P)PeuΦ(P)Pé muito mais artificial do que o seu . De fato, a integridade é comprovada pela codificação de máquinas de Turing com sincronismo polinomial como termos do sistema F que satisfazem Φ . Portanto, a única maneira garantida de resolver L usando seu algoritmo favorito é implementá-lo em uma máquina de Turing e depois traduzi-lo no sistema F usando a codificação fornecida na prova de completude (sua própria codificação pode não funcionar!). Não é exatamente a solução mais elegante em termos de programação ... Certamente, em muitos casos, o programa "natural" P satisfaz Φ . No entanto, em muitos outros casos, isso não ocorre: no artigo do LICS 1999 mencionado acima, Hofmann fornece o tipo de inserção como um exemplo.PΦeuPΦ

Existem sistemas de tipos intencionalmente completos , capazes de digitar exatamente os programas polytime da linguagem mais ampla (sistema F no meu exemplo acima). Claro, eles são indecidíveis em geral. Vejo

Ugo Dal Lago, Marco Gaboardi. Tipos dependentes lineares e integridade relativa. Métodos Lógicos em Ciência da Computação 8 (4), 2011.

Damiano Mazza
fonte
11
Não entendo o que você está tentando dizer no segundo semestre. Com base na sua descrição, há uma transformação de sintaxe de máquinas de Turing com relógio de ponto múltiplo para programas F, resolvendo o mesmo problema. Tanto quanto posso ver, é o melhor que se pode esperar ao traduzir de um modelo de computação para outro.
Emil Jeřábek
3
@ EmilJeřábek: Estou tentando dizer que é bastante restritivo e que rejeita muitos programas F polytime "naturais". Se houvesse tal coisa como um sistema F programador e você era um, e se eu lhe pedisse para escrever um programa para multiplicar inteiros unários (do tipo N uma t : = X . ( X X ) X X ), você provavelmente escreveria λ m N a t . λ n N a t . Λ X . λ s X ΦNumat: =X.(XX)XX. Então, você pode ficar desapontado ao descobrir que seu termo foi rejeitado e, em vez disso, você deve programar a multiplicação repetindo a adição. (Continuação)λmNumat.λnNumat.ΛX.λsXX.mX(nXs)
Damiano Mazza
3
(O exemplo acima é real: em todos os sistemas do tipo derivado de lógica linear para polytime, o termo usual para multiplicação não é tipável). Você pode ser ainda mais desapontado se eu lhe disser que você não pode programa, digamos, ordenação por inserção, como tal, (o que certamente é polytime), mas você deve anotar a máquina de Turing implementá-la e, em seguida, codificar que no sistema de F. E eu diria você estaria certo para ficar desapontado: o programador em qual linguagem de programação de alto nível seria feliz com um verificador de tipos dizendo: "Eu não pode digitar a verificar a sua aninhada loops, código por favor, isso em conjunto"? :-)for
Damiano Mazza
Eu acho que está tudo bem. Estou interessado principalmente na pesquisa de funções (encontrar funções que maximizem uma determinada propriedade), para que eu não precise ser o programador, o computador faz. Esta noite terei algum tempo para examinar essas referências. Obrigado!
Jake