Como as 'táticas' funcionam nos assistentes de prova?

44

Pergunta: Como as 'táticas' funcionam nos assistentes de prova? Eles parecem ser formas de especificar como reescrever um termo em um termo equivalente (para alguma definição de 'equivalente'). Presumivelmente, existem regras formais para isso, como posso aprender o que são e como funcionam? Eles envolvem mais do que a opção de pedido para redução beta?

Antecedentes sobre meu interesse: vários meses atrás, decidi que queria aprender matemática formal. Decidi seguir a teoria dos tipos porque, a partir de pesquisas preliminares, parece o Caminho Certo (TM) e porque parece unificar programação e matemática, o que é fascinante . Acho que meu objetivo final é poder usar e entender um assistente de prova como o Coq (acho especialmente capaz de usar tipos dependentes, pois tenho curiosidade sobre coisas como representar os tipos de matrizes). Comecei conhecendo muito pouco, nem mesmo programação funcional rudimentar, mas estou progredindo lentamente. Eu li e entendi grandes pedaços de Tipos e Linguagens de Programação (Pierce) e aprendi alguns Haskell e ML.

John Salvatier
fonte
1
Esta é uma propaganda descarada para os meus tutoriais em vídeo Coq, math.andrej.com/2011/02/22/...
Andrej Bauer

Respostas:

36

UMABUMABUMABUMABcom as mesmas hipóteses), aplique um lema (aplicativo de função ~), divida um lema sobre algum tipo indutivo em um caso para cada construtor e assim por diante. As táticas básicas podem ter sucesso ou falhar, dependendo do contexto em que são aplicadas. As táticas mais avançadas são como pequenos programas funcionais que executam as táticas básicas, executam a correspondência de padrões sobre os termos do objetivo e / ou suposições, fazem escolhas com base no sucesso ou fracasso das táticas e assim por diante. Táticas mais avançadas lidam com aritmética e outros tipos específicos de teorias. O documento principal sobre a linguagem tática da Coq é o seguinte:

  • D. Delahaye. Uma linguagem tática para o sistema Coq . Em Proceedings of Logic for Programming and Automated Reasoning (LPAR), Ilha da Reunião, volume 1955 de Lecture Notes in Computer Science, páginas 85–95. Springer-Verlag, novembro de 2000.

As regras formais que formam a essência das táticas básicas são definidas no guia do usuário da Coq aqui ou no capítulo 4 do pdf .

Um artigo bastante instrutivo sobre a implementação de táticas e táticas (essencialmente táticas que tomam outras táticas como argumentos) é:

A linguagem tática de Coq tem a limitação de que as provas escritas com ela dificilmente se assemelham às provas feitas à mão. Várias tentativas foram feitas para permitir provas mais claras. Estes incluem Isar (para Isabelle / HOL) e a linguagem de prova de Mizar .

Além: Você sabia que a linguagem de programação ML foi originalmente projetada para implementar táticas para o provador do teorema da LCF ? Muitas idéias desenvolvidas para ML, como a inferência de tipos, influenciaram as linguagens de programação modernas.

Dave Clarke
fonte
3
Ótima resposta. A programação certificada de Adam Chlipala com tipos dependentes ( adam.chlipala.net/cpdt ) é outro bom recurso sobre o uso de táticas no Coq.
jbapple
16

LCF é realmente o avô de todos esses sistemas: Coq, Isabelle, HOLs, incluindo a linguagem de programação ML (que hoje vemos como OCaml, SML, também F #). Sim, estou incluindo a Coq como membro da família maior da LCF. Comparado com os assistentes de provas norte-americanos (principalmente o ACL2), ou o Mizar totalmente não relacionado, o Coq é culturalmente bastante próximo de Isabelle e dos HOLs, principalmente devido à idéia compartilhada de tática .

Então, o que são táticas, de qualquer maneira, tiradas de observações acidentais sobre reescrever, conversões, introduzir ou eliminar conectivos?

O principal princípio de camadas aqui é herdado da LCF de Milner:

  • Inferências principais (raciocínio futuro), como tipo de dados abstrato thmna abordagem LCF original, ou com verificação separada de termos de prova no ramo da teoria dos tipos da família (Coq, Matita). Isso fornece uma certa base lógica para os resultados que o provador considera como teoremas. Portanto, você pode ter uma inferência primitiva que recebe ⊢ A e ⊢ B e fornece ⊢ A ∧ B. Outra inferência primitiva pode fornecer ⊢ t = u, onde u é a forma beta-normal de t. Nenhum desses mecanismos são táticas, no entanto, são regras de inferência, como na lógica padrão.

  • Prova direcionada à meta (raciocínio reverso). A idéia é que você opere em alguma noção de "estado objetivo" refinando-o, dividindo-o em mais e mais sub-objetivos, sub-objetivos próximos, até que tudo esteja resolvido. Terminar o estado do objetivo fará com que um certo teorema saia do processo. A LCF introduziu certa infraestrutura extra-lógica para objetivos, que ainda existe nas HOLs: uma tática é uma função de ML que refina um objetivo e produz alguma justificativa para o refinamento. No final da prova, as justificativas são repetidas na ordem inversa para produzir uma prova de maneira direta, de acordo com as inferências primitivas esboçadas acima.

Coq e Matita ainda estão bem próximos desse princípio da LCF. Isabelle é diferente aqui: já em 1989, Larry Paulson reformou as noções de objetivo e tática para aproximá-las da lógica, que é a estrutura lógica "pura" de Isabelle aqui. Isabelle / Pure fornece lógica de ordem superior mínima com implicação ==> e quantificador !! que indicam a estrutura das regras de dedução natural e os estados de meta.

Por exemplo, ⊢ A ==> B ==> A ∧ B é a regra de introdução em conjunto (da lógica do objeto) como teorema da estrutura lógica.

Os estados da meta também são apenas teoremas, começando com ⊢ C ==> C para sua reivindicação inicial C, que é refinada para ⊢ X ==> Y ==> Z ==> C em estados intermediários, onde X, Y, Z são as subobjetivos atuais e o processo termina com ⊢ C (sem subobjetivos).

Agora, voltando às táticas, que são mais uniformes para todos esses provadores: dada uma noção de estado de objetivo (por exemplo, a de Isabelle acima), uma tática é uma função que mapeia um estado de objetivo para (0, 1 ou mais) acompanhamento estados de objetivo. Além disso, um tático é um combinador dessas funções táticas, por exemplo, para expressar composição sequencial, escolha, repetição etc. De fato, a linguagem das táticas e dos táticos está relacionada à abordagem da "lista de sucessos" dos combinadores de analisadores.

As táticas permitem descrever determinadas estratégias de aprimoramentos de metas sistematicamente. Eles tiveram bastante sucesso desde sua invenção na LCF nos anos 70/80, mas produzem scripts de prova notoriamente ilegíveis.

Uma visão geral recente de alguns aspectos das linguagens táticas é apresentada no artigo de A. Asperti et al., PLMMS 2009, consulte os procedimentos da oficina na página 22.

Mizar e Isabelle / Isar foram mencionados como abordagens alternativas ao raciocínio estruturado legível por humanos , e não se baseiam em táticas nesse sentido. Mizar não tem relação com a família LCF, portanto, não conhece essa terminologia tática. Isabelle / Isar incorpora a tradição tática até certo ponto, mas seu método de noção de prova é um pouco mais estruturado (com contexto explícito de prova Isar, indicação explícita de fatos encadeados e evitação de golpes internos no decorrer do raciocínio).

Muitas outras reformas e reconsiderações de linguagens táticas ocorreram nas últimas décadas. Por exemplo, um ramo recente da comunidade Coq favorece o SSReflect (de G. Gonthier) em vez do Ltac tradicional.

Makarius
fonte
12

Como as 'táticas' funcionam nos assistentes de prova?

Suspeito que esta resposta seja um pouco desmedida.

Primeiro, não basta perguntar "como as táticas funcionam em assistentes de prova" porque elas funcionam de maneira diferente em diferentes assistentes de prova. Atualmente, existem duas classes principais de assistentes usadas: as derivadas da LCF original, como Isabelle, HOL e HOL light, e assistentes de prova baseados em teoria de tipos, como Coq e Matita. Nessas duas classes diferentes de assistente de prova, as táticas funcionam de maneiras diferentes, uma reflexão de que o que está acontecendo sob o capô em Isabelle é bastante diferente do que está acontecendo sob o capô em Matita.

Pergunte a si mesmo: o que está acontecendo quando tentamos provar uma proposição P em Matita? Introduzimos um X metavariável com o tipo P. Em seguida, jogamos um jogo, por assim dizer, onde refinamos o X, adicionando cada vez mais estrutura ao termo incompleto, até obtermos um termo lambda completo (ou seja, não contém mais metavariáveis). Uma vez que estamos na posse de um termo lambda completo, digitamos check em relação a P, certificando-se de que ele habita o tipo necessário. Vimos então que, em Coq e Matita, uma tática é meramente uma função de termos de prova incompletos a termos de prova incompletos, o que, esperançosamente, adiciona um pouco de estrutura ao termo após a aplicação (essa observação motivou bastante trabalho recente de, por exemplo, Jojgov , Pientka e outros).

Por exemplo, a tática Matita "introdução" introduz uma abstração lambda sobre o termo existente, "cases" introduz uma expressão de correspondência no termo e "apply" introduz uma aplicação de um termo no outro. Essas táticas básicas podem ser combinadas, usando funções de ordem superior, para criar outras mais complexas. A idéia básica é sempre a mesma: uma tática sempre visa adicionar um pouco de estrutura a um termo de prova incompleto.

Observe que os implementadores visam devolver um termo que verifica novamente após cada aplicação tática. Estritamente falando, não há exigência de que o façam, pois tudo o que importa para os assistentes de prova baseados na teoria de tipos é que, quando o usuário acessa Qed a prova, temos um termo de prova que habita a proposição P. Como chegou a este termo de prova é em grande parte irrelevante. No entanto, Coq e Matita pretendem devolver ao usuário um termo de prova (possivelmente incompleto) que verifica após cada aplicação tática. No entanto, esse invariável pode (e geralmente falha), especialmente em relação às duas verificações sintáticas que os assistentes de prova baseados em CIC devem implementar.

Em particular, podemos realizar o que parece ser uma prova válida, aplicando uma série de táticas até que não haja mais objetivos em aberto. Chegamos então a Qed a suposta prova, apenas para descobrir que o verificador de terminação de Matita, ou seu verificador estrito de positividade, reclama, pois o termo de prova que foi gerado pelas táticas invalidou uma dessas verificações sintáticas (ou seja, uma metavariável na posição de argumento). uma chamada recursiva foi instanciada com um termo que não é sintaticamente menor que o argumento original). Esta é uma reflexão de que a teoria do tipo CIC não é, de certo modo, "suficientemente forte" e não reflete os requisitos sintáticos de positividade ou tamanho em seus tipos (uma observação que motiva os tipos de tamanho de Abel e algum trabalho recente sobre tipos de positividade )

Por outro lado, os assistentes à prova de LCF são bastante diferentes. Aqui, o kernel consiste em um módulo (geralmente implementado em uma variante do ML), contendo um tipo abstrato "thm" e funções que implementam as regras de inferência da lógica do assistente de prova, mapeando "thm" para "thm", e assim adiante. Contamos com a disciplina de digitação do ML para garantir que a única maneira de construir um valor do tipo "thm" seja por meio dessas regras de inferência (táticas básicas). O núcleo de Isabelle está aqui .

As provas consistem, então, em uma série de aplicações dessas táticas básicas (ou táticas maiores e mais complexas, que são feitas novamente juntando táticas mais simples usando funções de ordem superior --- em Isabelle, as funções de ordem superior, chamadas táticas, podem ser visto aqui ). Ao contrário dos assistentes de prova baseados na teoria de tipos, não há necessidade de um assistente no estilo LCF manter uma testemunha explícita de termo de prova por aí. A correção da prova é garantida pela construção e nossa confiança na disciplina de digitação da ML (muitos assistentes, por exemplo, Isabelle, no entanto, geram termos de prova para suas provas).

Dominic Mulligan
fonte