Usando a logica para somar números naturais
por Frank de Alcantara em 23/03/2025
Definição Axiomática dos Números Naturais
Na teoria dos conjuntos ZFC (Zermelo-Fraenkel com o Axioma da Escolha), os números naturais podem ser construídos de diversas formas. A teoria ZFC fornece uma base axiomática para a matemática moderna, com axiomas específicos para existência de conjuntos, operações entre conjuntos e propriedades fundamentais como extensionalidade e fundação.
Uma construção comum na teoria ZFC define os números naturais como:
é representado pelo conjunto vazio: ;- Cada número sucessor é definido como:
.
Assim:
; ; ; .
Uma abordagem formal alternativa é através dos axiomas de Peano, que caracterizam os números naturais através de cinco axiomas fundamentais:
é um número natural; - para cada número natural
, existe um único sucessor ; - não existe nenhum número natural cujo sucessor seja
; - se
, então (a função sucessor é injetiva); - se um conjunto contém
e o sucessor de cada elemento do conjunto, então o conjunto contém todos os números naturais (princípio da indução).
Estes axiomas podem ser diretamente implementados em Prolog usando lógica de primeira ordem:
1
2
3
% Definição de números naturais (seguindo axiomas de Peano)
natural(zero). % Base: 0 é um número natural
natural(s(X)) :- natural(X). % Indução: Se X é natural, s(X) também é
Neste caso, a amável leitora deve observar que
Propriedades e Operações nos Números Naturais
Adição
A adição é definida recursivamente seguindo os axiomas:
1
2
3
% Definição da operação de adição
add(zero, Y, Y) :- natural(Y). % Base: 0 + Y = Y
add(s(X), Y, s(Z)) :- add(X, Y, Z). % Indução: s(X) + Y = s(X + Y)
Esta definição captura as propriedades essenciais da adição:
- o elemento neutro:
; - a recursão sobre o primeiro argumento:
.
Definição de Números Específicos
Para facilitar o uso, podemos definir constantes para números específicos:
1
2
3
% Definição de números específicos
dois(s(s(zero))).
quatro(s(s(s(s(zero))))).
3. Verificação de
Podemos verificar que add/3:
1
2
3
4
5
6
7
8
9
10
% Predicado para calcular 2+2
dois_mais_dois(Resultado) :-
dois(Dois),
add(Dois, Dois, Resultado).
% Verificação formal de 2+2=4
verifica_dois_mais_dois :-
dois_mais_dois(Resultado),
quatro(Quatro),
Resultado = Quatro.
A execução deste predicado segue estes passos:
dois_mais_dois(Resultado)instanciaDois = s(s(zero))e invocaadd(s(s(zero)), s(s(zero)), Resultado)- Pela regra de
add/3, ocorrem as seguintes deduções:add(s(s(zero)), s(s(zero)), Resultado)implicaResultado = s(Z1)e chamaadd(s(zero), s(s(zero)), Z1)add(s(zero), s(s(zero)), Z1)implicaZ1 = s(Z2)e chamaadd(zero, s(s(zero)), Z2)add(zero, s(s(zero)), Z2)pela regra base retornaZ2 = s(s(zero))- Substituindo, temos
Z1 = s(s(s(zero)))eResultado = s(s(s(s(zero))))
quatro(Quatro)instanciaQuatro = s(s(s(s(zero))))- A unificação
Resultado = Quatroverifica com sucesso, provando que
Implementação Prática para Consultas Numéricas
Para facilitar o uso de consultas com números inteiros comuns, implementamos:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
% Mapeamento entre números e sua representação em termos de sucessores
num(0, zero).
num(1, s(zero)).
num(2, s(s(zero))).
num(3, s(s(s(zero)))).
num(4, s(s(s(s(zero))))).
% Esta definição pode ser estendida para mais números ou gerada recursivamente
% Predicado genérico para soma
soma(A, B, Resultado) :-
num(A, TermA), % Converte número A para representação de Peano
num(B, TermB), % Converte número B para representação de Peano
add(TermA, TermB, TermR), % Realiza a adição usando a definição axiomática
num(Resultado, TermR). % Converte o resultado de volta para número
% Consulta para verificação
verifica_soma :-
soma(2, 2, Resultado),
Resultado = 4.
Extensões Possíveis
Esta abordagem pode ser estendida para definir outras operações aritméticas:
1
2
3
4
5
6
7
8
9
10
11
% Multiplicação
mult(zero, _, zero). % Base: 0 * Y = 0
mult(s(X), Y, Z) :- % Indução: s(X) * Y = Y + (X * Y)
mult(X, Y, XY),
add(Y, XY, Z).
% Potenciação
pot(_, zero, s(zero)). % Base: X^0 = 1
pot(X, s(Y), Z) :- % Indução: X^s(Y) = X * X^Y
pot(X, Y, XY),
mult(X, XY, Z).
As outras ficam por conta da esforçada leitora.
(Updated: )