Assistente de prova para escrever matemática

12

Eu gostaria de escrever provas matemáticas usando algum assistente de prova. Tudo será escrito usando lógica de primeira ordem (com igualdade) e dedução natural. O pano de fundo é a teoria dos conjuntos (ZF). Por exemplo, como eu poderia escrever a seguinte prova?

Axiom:xy(x=yz(zxzy))

Teorema:xy(z(zx)z(zy)x=y)

Ou seja, o conjunto vazio é único.

É trivial para mim fazer isso usando papel e caneta, mas o que realmente preciso é de um software para me ajudar a verificar as provas de correção.

Obrigado.

Kaveh
fonte
11
Primeiro, você precisa selecionar um assistente de prova. Coq é o que eu uso, mas existem muitos outros . Alguns deles são baseados na lógica de primeira ordem, portanto serão mais adequados às suas necessidades. Então você precisa se comprometer em aprender o assistente de prova. Dentro de alguns dias, você poderá codificar teoremas simples, como o acima, e prová-los. Não espere que faremos isso por você. Você não aprenderá nada dessa maneira.
Dave Clarke
5
Se você está interessado em teoria dos conjuntos, não em teoria dos tipos, Isabelle é provavelmente o sistema mais direto. Coq parecerá estranho e confuso.
Mark Reitblatt
2
Eu acho que o axioma que você escreveu não é a lógica de primeira ordem, mas a lógica de segunda ordem. Isso ocorre porque, no primeiro, as variáveis ​​variam apenas sobre os indivíduos, enquanto no segundo, as variáveis ​​podem variar entre os indivíduos e os conjuntos. Aparentemente, no axioma dado, e são conjuntos, enquanto é um indivíduo. y zxyz
MS Dousti
9
@Sadeq: Na ZF não são definidos os elementos básicos do universo, afinal? Portanto, você deve poder dizer coisas como "para todos os conjuntos" na lógica de primeira ordem, que é o que está sendo feito nesse axioma.
Robin Kothari
9
@Sadeq, o que Robin disse é correto, é uma primeira teoria ordem e o axioma escrito na questão é também de primeira ordem. Em Z F, tudo é apenas um conjunto, não há nada como indivíduos versus conjuntos. (Como uma observação lateral, não é necessário mover para objetos de segunda ou maior ordem para falar sobre diferentes tipos de variáveis, é necessário apenas tipos diferentes, a lógica de segunda e superior ordem é bem diferente das lógicas classificadas). ZFZF
Kaveh

Respostas:

13

Coq e Isabelle podem fazer isso.

[Coq] Aqui está um artigo discutindo como codificar o ZFC no CIC, no qual o Coq se baseia.

Benjamin Werner: Conjuntos em Tipos, Tipos em Conjuntos (1997). http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.55.1709

[Isabelle] Existe uma biblioteca para a ZF.

http://www.cl.cam.ac.uk/research/hvg/Isabelle/dist/library/ZF/index.html

yhirai
fonte
3
Embora este artigo seja bastante interessante, acho que seria mais pragmático adicionar apenas espécies (variáveis ​​de tipo) e axiomas para codificar diretamente a teoria axiomática da ZF, e então fazer as provas por apelo direto a esses axiomas. A codificação é mais para mostrar que as teorias estão relacionadas em força expressiva.
Cody
2
Devo acrescentar que, embora haja uma implementação dessas idéias, por Bruno Barras: lix.polytechnique.fr/~barras/proofs/sets/index.html
cody
9

Movido de comentário por sugestão de Kaveh

Primeiro, você precisa selecionar um assistente de prova. Coq é o que eu uso, mas existem muitos outros . Coq é baseado em lógica de ordem superior (o chamado Cálculo de Construções Indutivas). Outros assistentes de prova são baseados na lógica de primeira ordem, portanto podem ser mais adequados às suas necessidades (modulo os comentários acima).

Então você precisa se comprometer em aprender o assistente de prova. O documento vinculado é um tutorial para conhecer o Coq. Tornar-se um especialista em Coq requer anos de dedicação e prática, mas teoremas simples podem ser comprovados em uma tarde. A chave para aprender Coq ou qualquer outro assistente de prova é fazer provas, como as do artigo vinculado. Apenas ler o artigo ajudará muito pouco, porque toda a experiência de interagir com o assistente de prova não pode ser bem transmitida no papel.

Dentro de alguns dias, você poderá codificar teoremas simples, como o descrito acima, e prová-los. Não espere que faremos isso por você. Você não aprenderá nada dessa maneira.

Quando você conseguir provar esses teoremas, sinta-se à vontade para postar suas respostas aqui e talvez deixe alguns comentários sobre suas experiências.

Você está pronto para o desafio?

Dave Clarke
fonte
4
Coq é uma escolha razoável; no entanto, se o xddz5 realmente deseja trabalhar na teoria dos conjuntos ZF em vez da teoria dos tipos, talvez Mizar seja mais adequado.
Timothy Chow
8

Existem muitos artigos de matemática escritos usando o assistente de provas Mizar: http://mizar.org/fm/

Radu GRIGore
fonte
3
Como é o suporte de ferramenta para o Mizar?
Dave Clarke
Eu não usei.
Radu GRIGORE
5

Dave Clarke sugere Coq, mas Isabelle realmente parece uma idéia muito melhor, já que possui uma biblioteca A para a ZF . Isabelle também é muito madura e inclui uma grande variedade de táticas e extensões.

Eu não usei pessoalmente o Mizar, mas também pode ser bom.

Liam O'Connor
fonte
2

como eu poderia escrever a seguinte prova?

Em Isabelle / ZF você pode escrever algo como isto

theory csthquestion imports Main

begin

theorem empty_unique:
shows "\<forall> x.\<forall>y.(\<forall>z. (z\<notin>x)) \<and> (\<forall>z.(z\<notin>y)) \<longrightarrow> x=y"
    by auto

end

Como você pode ver, Isabelle prova isso automaticamente. Claro que você pode escrever uma prova mais detalhada, se realmente quiser.


fonte
2

Esse mesmo teorema é um exemplo trabalhado (consulte o Exemplo 11) no tutorial incluído no meu software DC Proof 2.0. Faça o download gratuitamente no meu site http://www.dcproof.com

Dan Christensen
fonte
1
Este é um pouco vendido para este site. Você poderia apresentar algumas informações de maneira imparcial para dizer de que maneira seu software é adequado ao problema? Talvez um link para um vídeo ou uma captura de tela desta derivação esteja sendo realizado?
Charles Stewart
1
Aqui está a prova: dcproof.com/EmptySetUnique.htm Há um vídeo no meu site mostrando como o sistema funciona.
Dan Christensen