O QUE A LÓGICA FORMAL TEM A VER COM A PROGRAMAÇÃO?

Mayara Rysia
5 min readNov 16, 2020

O MOTIVO PELO QUAL VOCÊ NÃO DEVE IGNORAR ESSE ESTUDO

“A arte de programar consiste na arte de organizar e dominar a complexidade.” — Edsger W. Dijkstra

A Ciência da Computação depende da Matemática para obter um vocabulário exato. Em lógica, uma linguagem de computador é dita como linguagem formal porque o formalismo é dado pela representação matemática. A Lógica Formal esboça o método organizado e cuidadoso de pensar e tem aplicações diretas na Ciência da Computação. Diante disso, o domínio da lógica na vida da pessoa programadora, também conhecida como engenheira(o) de software ou desenvolvedor(a) de software, consiste em uma skill (habilidade) diferenciada na carreira, pois por meio dela podemos otimizar algoritmos e melhorar o desempenho de determinado programa ou sistema computacional. Não acredita?

Pois vejamos:

Os conectivos lógicos E, OU, NÃO (AND, OR, NOT) fazem parte da sintaxe da maioria das linguagens de programação, em algumas delas, eles são representados por &&, ||, !, respectivamente. A exemplo temos a linguagem C e C++. Esses conectivos agem de acordo com expressões de verdadeiro e falso e no final se produz um único valor-verdade.

Exemplo em Python:

Mesmo exemplo em C:

Consideremos flow1 > flow2 como A, e flow3 < 1000 como B. A forma da expressão condicional é: A ^ ¬(A ^ B).

Simplificando a expressão:

  • propriedade de identidade: A ^ ¬(A ^ B) A ^ ¬B
  • propriedade distributiva: A ^ ¬(A ^ B) (A ^ ¬A) v (A ^ ¬B)
  • lei de Morgan: A ^ ¬(A ^ B) A ^ (¬A v ¬B)

Reescrevendo o código:

Exemplo em Python:

Mesmo exemplo em C:

Tomamos o exemplo de determinar se A →B é ou não uma tautologia. Será efetuada uma série de atribuições condicionais de valores-verdade até que se prove se pode ser ou não uma tautologia. Toda a atividade de comprovação será um conjunto de instruções, que é um procedimento executado por meio da execução mecânica dessas instruções em um período finito de tempo. Em computação esse procedimento é chamado de algoritmo e os algoritmos são o coração dessa ciência exata.

A forma intermediária de descrição de algoritmos é chamada de pseudocódigo e eles não devem ser difíceis de entender mesmo que você não saiba nada de programação de computadores, além disso, ele é feito antes da implementação do algoritmo em determinada linguagem. Vejamos:

OBS.: As fórmulas bem-formuladas do inglês wffs (well-formed formulas) são representações simbólicas de sentenças.

ALGORÍTMO TestaTautologia

Determina se a wff P Q é ou não uma tautologia:

Esse algoritmo determina se wffs de determinadas formas são ou não tautologias.

Supondo que

P: (A→ B)

Q: (~B → ~A)

(A→ B) → (~B → ~A) é uma tautologia e pode ser provado usando a tabela verdade

tabela verdade
tabela verdade feita pela autora

A maior parte dos programas escritos em linguagem procedural são destinados a resolverem problemas manuais. Então a pessoa programadora diz ao computador como resolvê-los.

Os programas que reúnem uma base de dados de fatos e regras e as usam para gerar conclusões são conhecidos como sistemas especialistas, sistemas baseados no conhecimento ou sistemas baseados em regras. A base de dados de um sistemas especialista tenta retratar o conhecimento de um especialista humano em alguma área particular do conhecimento.

A lógica de predicados é útil na verificação formal da correção de programas escritos em linguagens de programação procedural. A verificação do programa tenta garantir que esse programa está correto e a validação dele tenta garantir que o programa está satisfazendo as necessidades do cliente. A verificação é feita por testes do programa, que consiste em certos valores de entrada produzem valores de saída aceitáveis, ou prova de correção, que usa as técnicas de lógica formal, ou seja, determinadas variáveis de entrada que satisfazem algum predicado ou propriedades, e as variáveis de saída satisfazem outras propriedades estabelecidas.

Exemplo para prova de correção:

Façamos um programa para calcular o tamanho c da hipotenusa de um triângulo retângulo dados os valores a e b positivos. Temos os predicados a > 0 e b > 0, logo, o predicado a² + b² = c² é cumprido.

Programa P:

  • X é um conjunto arbitrário de valores
  • Y é um conjunto de valores-saída produzidos a partir de X ⇔Y = P(X)
  • Predicado Q: informa as condições que os valores de entrada devem satisfazer
  • Predicado R: informa as condições que os valores de saída devem satisfazer

O programa P será correto se

  • (∀x)(Q(X)→ R[X, P(X)]) ⇔ {Q}P{R}
  • P: pré-condição para P
  • R: pós-condição para P.

A nível de conhecimento, as lógicas não clássicas ainda são um importante tópico de pesquisa na área de Ciência da Computação e são vistas em conhecimentos mais avançados como a área de Inteligência Artificial. São elas: lógica fuzzy, lógica modal e lógica paraconsistente.

Nota: A lógica fuzzy (lógica difusa ou lógica multivalorada) é muito utilizada na área de Inteligência Artificial (IA) porque ela é muito útil no desenvolvimento de sistemas inteligentes, em especial os especialistas e os multiagentes. Alguns domínios de aplicação da lógica fuzzy no contexto de IA:

  • Data mining
  • Algoritmos Genéticos
  • Sistemas de apoio à tomada de decisão
  • Sistemas de controle inteligentes
  • Robótica
  • Reconhecimento de padrões
  • Sistemas multiagentes
  • Sistemas especialistas

Note que a lógica nos permite provar matematicamente a correção de programas que usam comandos de atribuição e comandos condicionais porque a lógica formal possibilitou e continua possibilitando o avanço da computação. Por exemplo, a programação de computadores é definida por uma série de comandos lógicos e esses comandos definem uma sequência do que deve ou não ser feito e, há conceitos de lógica que são fundamentais para o estudo da Inteligência Artificial.

Portanto, os programas “aprendedores” são simplesmente conjuntos de comandos lógicos onde as decisões foram definidas pelos programadores com base na lógica matemática.

A lógica e a programação andam juntas. Espero que o conteúdo possa ter aberto um leque de importância nesse assunto que não devemos ignorar, e sim vencer as dificuldades em matemática e se manter atualizado(a). Nunca mais ignore esse estudo rsrs Bons estudos!

Nota: Exemplos e base de informações retiradas do livro Mathematical Structures for Computer ScienceThird Edition de Judith L. GERSTING.

Se gostou, deixa seus aplausos e comenta aí abaixo! 👏​​👏​🙌​

--

--