Preparando-me para o início do meu mestrado, me vi com uma vontade forte de rever meus materiais da faculdade. Logo veio a lembrança de como eu me divertia nas cadeiras de lógica. Pouca coisa eu ainda lembro de cabeça, e dessas, resolvi reproduzí-las à maneira Ruby:

Silogismo Aristotélico

O silogismo consiste no fato de duas premissas inferirem, através de um termo em comum, na conclusão de uma terceira premissa também verdadeira.

“Todos os humanos são mortais”
“Aristóteles é humano”
-
“Logo, Aristóteles é mortal”

#Todos os humanos são mortais
class Human
	self.module_eval do
  	define_method :mortal? do
    	true
	  end
 	end
end

#Aristóteles é humano
class Aristotle < Human
end

#logo...
a = Aristotle.new
a.mortal?     #=> true

Lógica Proposicional

Segundo o wikipedia:

Em lógica e matemática, uma lógica proposicional (ou cálculo sentencial) é um sistema formal no qual as fórmulas representam proposições que podem ser formadas pela combinação de proposições atômicas usando conectivos lógicos, e um sistema de regras de derivação que permite que certas fórmulas sejam estabelecidas como “teoremas” do sistema formal.

Dessa, os teoremas clássicos que me veem à cabeça são os seguintes:

Dupla eliminação da negação

#De ¬¬p, infere-se p
p = true
(not (not p))   #=> true

Modus ponens (eliminação do condicional)

#De p, (p → q), infere-se q.
p = true
if (p) and ( q = p);end
q            #=> true

Exercícios de lógica

Uma das coisas que me divertia antes da faculdade eram as tabelas-verdades, aonde era possível analisarmos uma fórmula para descobrir se ela era válida ou não. Um bom exercício para o cérebro é tentar descobrir se o resultado de uma fórmula é verdadeiro ou falso. Qual o resultado da expressão abaixo?

p = false
q = true
r = false

(!(q & p) &(r | q) | !((p & r) |(r & q)))