Skip to content

Instantly share code, notes, and snippets.

@adolfont
Created November 25, 2021 14:02
Show Gist options
  • Select an option

  • Save adolfont/8b39939b03ce03571f043aa9af9041c6 to your computer and use it in GitHub Desktop.

Select an option

Save adolfont/8b39939b03ce03571f043aa9af9041c6 to your computer and use it in GitHub Desktop.
Aula de 25/11/2021

Lógica para Computação

Lógica Clássica Proposicional

Átomos

atomos = [:p, :q, :r]
conectivos = [:"¬", :"∧", :"∨", :"→"]

[atomos: atomos, conectivos: conectivos]
formula_1 = {:p, :"∧", :q}
defmodule LogicaClassicaProposicional do
  @nao :"¬"
  @conjuncao :"∧"
  @disjuncao :"∨"
  @implicacao :"→"
  @conectivos [@nao, @conjuncao, @disjuncao, @implicacao]

  def new(atomos) do
    [atomos: atomos, conectivos: @conectivos]
  end

  def atomo([{:atomos, atomos} | _rest], atomo)
      when is_atom(atomo) do
    if atomo in atomos do
      atomo
    else
      raise "Erro: o átomo #{atomo} não faz parte da linguagem."
    end
  end

  # def nao([{:atomos, atomos} | _rest ], atomo) 
  #   when is_atom(atomo) do
  #   if  atomo in atomos do
  #     [@nao, atomo]
  #   else
  #     raise "Erro: o átomo #{atomo} não faz parte da linguagem."
  #   end
  # end

  def nao(formula) do
    [@nao, formula]
  end

  def mostra(atomo) when is_atom(atomo) do
    "#{atomo}"
  end

  def mostra([@nao, formula]) do
    "#{@nao}#{mostra(formula)}"
  end
end
alias LogicaClassicaProposicional, as: LCP

linguagem = LCP.new([:p, :q, :r])

nao_p = LCP.nao(LCP.atomo(linguagem, :p))

IO.puts(LCP.mostra(nao_p))

nao_nao_p = LCP.nao(nao_p)

IO.puts(LCP.mostra(nao_nao_p))

# LCP.nao(linguagem, :s)
LCP.new([:p, :q, :r, :s])
|> LCP.atomo(:p)
|> LCP.nao()
|> LCP.nao()
|> LCP.nao()
|> LCP.nao()
|> LCP.mostra()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment