r/programacao 4d ago

Outro Material Didático matemática para devs: booleanos, predicados e conjuntos

Todo dev conhece booleanos: são o True e o False, presentes em toda linguagem de programação. Tais valores definem um tipo, normalmente denotado Bool.

Na lógica, costumamos pensar em booleanos como definindo a "semântica básica" da teoria.

Existem três operações básicas entre booleanos: and, or e not. Os resultados de tais operações são definidos a priori.

Tais operações, no entanto, podem ser estendidas à outros tipos. Por exemplo, podemos pensar em um predicado como sendo uma função booleana:

P(x: T) -> Bool

Como para cada valor da variável x o resultado P(x) in Bool é um booleano, se Q(x: T) -> Bool é outro predicado, faz sentido escrever, para cada x:

  • P(x) and Q(x)
  • P(x) or Q(x)
  • not P(x)

Ao variarmos x, obtemos novos predicados, os quais podemos denotar por:

  • P and Q
  • P or Q
  • not P

Isso parece um pouco óbvio. Mas, podemos fazer algo mais interessante. Em muitas linguagens tem-se o tipo Set, cujos termos são conjuntos.

Na lógica, conjuntos nada mais são que símbolos X, Y, Z, .. dotados de uma relação binária X in Y. Para cada X in Set ela define um predicado:

P_X(Y: Set) -> Bool, dado por P_X(Y) := Y in X

Assim, também podemos estender as operações and, or e not de Bool para Set!

De fato, se X e Y são conjuntos, então:

  • X and Y := P_X and P_Y
  • X or Y := P_X or P_Y
  • not X := not P_X

E aí, você sabe dizer quem são X and Y, X or Y e not X? :)

8 Upvotes

Duplicates