introducao_logica.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. <!--
  2. Introdução elementar à Lógica
  3. Prof. Leônidas de Oliveira Brandão
  4. Material didático para apoio aos cursos de Introdução à Programação
  5. Direitos reservados
  6. Pode ser usado mediante citação de autoria (Prof. Leônidas de Oliveira Brandão) e origem (https://www.ime.usp.br/~leo/mac2166/introducao/)
  7. -->
  8. <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
  9. <meta name='keywords' content='mac0122, material, professores, leonidas de oliveira brandao'>
  10. <link rel='stylesheet' type='text/css' href='css_img_js_conf/all.css'>
  11. <link rel='stylesheet' type='text/css' href='css_img_js_conf/line_introducao_programacao.css'>
  12. <script src="css_img_js_conf/defineLInE.js"></script> <!-- para referencias 'a documentos internos -->
  13. <div class="pagina">
  14. <p class="secao">Introdução elementar à Lógica</p>
  15. <p>
  16. O <a href="#" onclick="trocaPagina('introducao_if.html')" title="examinar o desvio de fluxo de execução: comando 'se'">desvio de fluxo de execução</a>
  17. é essencial para a construção de algoritmos, esse tipo de comando permite algoritmos cujo "comportamento" é alterado de
  18. acordo com os
  19. <a href="#" onclick="trocaPagina('introducao_entrada_saida_dados.html')" title="examinar o que é entrada/saida de dados">dados de entrada</a>.
  20. Na seção apresento os princípios da lógica <i>booleana</i>, lembrando o que é <i>tabela verdade</i>
  21. e as leis de De Morgan.
  22. <!--
  23. Augustus De Morgan - 27 June 1806 – 18 March 1871 - https://en.wikipedia.org/wiki/Augustus_De_Morgan
  24. https://www.ime.usp.br/~bianconi/recursos/lo.pdf
  25. -->
  26. </p>
  27. <span style="color: #0055AA"><b>Sentenças lógicas e conjuntos</b></span>
  28. <p>
  29. A lógica é essencial para a matemática como ciência, ela ajuda a estruturar a linguagem matemática.
  30. Pode-se considerar cada afirmação matemática como uma sentança lógica, um teorema pode ser visto como uma
  31. sentença do tipo <i>A implica B</i>.
  32. </p>
  33. <p>
  34. Existem três operadores básicos para lógica, a
  35. <b style="color:#0000aa;" title="!A verdade <=> A falso">negação</b>, a
  36. <b style="color:#0000aa;" title="(A e B) verdade <=> A verdade e B verdade">conjunção</b> e a
  37. <b style="color:#0000aa;" title="(A ou B) verdade <=> A verdade ou B verdade">disjunção</b>,
  38. respectivamente os operadores <b>não</b>, <b>e</b> e <b>ou</b>. Seu significado pode ser entendido pelas <b>tabelas verdade</b>, vide tabela 1.
  39. <br/>
  40. <i>Nota sobre a linguagem C</i>: os operadores lógicos em <i>C</i> são respectivamente <tt>!</tt>, <tt>&&</tt> e <tt>||</tt>.<br/>
  41. Exemplo <i>C</i>: <tt>if (!(a>b) && (b&lt;c)) <cyan>// equivale que a<=b e b>c, ou seja, b e' maximo</cyan></tt>.
  42. <br/>
  43. <i>Nota sobre a linguagem Python</i>: os operadores lógicos em <i>Python</i> são respectivamente <tt>not</tt>, <tt>and</tt> e <tt>or</tt>.<br/>
  44. Exemplo <i>Python</i>: <tt>if (!(a>b) && (b&lt;c)) <cyan># equivale que a<=b e b>c, ou seja, b e' maximo</cyan></tt>.
  45. </p>
  46. <p>
  47. De outra parte, cada sentença lógica pode ser examinada sob o de vista de conjuntos.
  48. No exemplo <i>A implica B</i>, se entendermos <i>A</i> e <i>B</i> como conjuntos, a implicação indica que
  49. o conjunto <i>A</i> está contido no conjunto <i>B</i>. Isso está ilustrado na figura <i>1.a</i>, na qual usamos
  50. <a href="https://pt.wikipedia.org/wiki/Diagrama_de_Venn" title="Estudar diagrama de Venn na WikiPedia" target="_blank"><b>diagrama de Venn</b></a>
  51. </p>
  52. <p>
  53. Assim a sentença <i>não A</i> pode ser entendida como o complemento do conjunto <i>A</i>, ilustrado na figura <i>1.b</i>.
  54. E podemos compor as sentenças, por exemplo, criando a sentença <i>não A e B</i>, ou seja, como conjunto, os elementos
  55. que não estão em <i>A</i> e que simultaneamente estão em <i>B</i>, como ilustrado na figura <i>1.c</i>.
  56. </p>
  57. <p>
  58. A figura <i>1.a</i> apresenta o conjunto <i>B</i> (azul mais claro), contendo o conjunto <i>A</i>.
  59. A figura <i>1.b</i> apresenta o <b>complemento</b> ao conjunto <i>A</i> (azul mais claro), ou seja,
  60. os elementos que não estão em <i>A</i>.
  61. A figura <i>1.c</i> mostra a interseção (equivalente à disjunção) entre o complemento ao conjunto <i>A</i> interseção com o conjunto <i>B</i>
  62. (azul mais claro), ou seja, os elementos que estão no complemento de <i>A</i> com aqueles que
  63. estão em <i>B</i>.
  64. <center>
  65. <img src="img/img_conj_a_contido_b.png" title="imagem ilustrando conjunto A contido no conjunto B"/>
  66. <img src="img/img_conj_nao_a.png" title="imagem ilustrando conjunto nao A"/>
  67. <img src="img/img_conj_nao_a_e_b.png" title="imagem ilustrando conjunto nao A e B"/>
  68. <br/>
  69. <i title="Representação gráfica para operações com conjuntos">
  70. Fig. 1. Representação gráfica com conjuntos: (a) A contido em B; (b) complemento de A; e (c) B\A (em B, mas não em A).</i>
  71. </center>
  72. </p>
  73. <a name="explog"><span style="color: #0050A0">Tabela verdade</span></a>
  74. <p>
  75. Do ponto de vista da lógica, cada <i>sentença</i> deve ser ou <i>verdadeira</i> ou </i>falsa</i>
  76. (isto é, pode ocorrer apenas uma das duas opções, sendo um "ou exclusivo").
  77. Em termos práticos para a <i>programação</i>, o que interessa é a construção de
  78. <b style="color:#0000aa" title="EL = verdadeiro | falso | não EL | EL e EL | EL ou EL">expressões lógicas (EL)</b>,
  79. de modo análogo às <i>expressões aritméticas (EA)</i>.
  80. Assim, a <i>EL</i> mais elementar é aquela com a constante <i>verdadeiro</i> ou <i>falso</i>, como uma <i>EA</i> elementar
  81. seria um <i>número</i>.
  82. </p>
  83. <p>
  84. Os operadores lógicos são a <b style="color:#0000aa" title="não A">negação</b> inverte o valor lógico da expressão,
  85. a <b style="color:#0000aa" title="A e B">conjunção (e)</b> resulta verdadeiro se, e somente se, ambos os operandos são verdadeiro e
  86. a <b style="color:#0000aa" title="A ou B">disjunção (ou)</b> resulta falso se, e somente se, ambos os itens forem falsos.
  87. O resultado de cada um desses operadores é dado por sua
  88. <b style="color:#0000aa" title="Tabela definindo os resultados das operações lógicas">tabela verdade</b>, como indicada abaixo.
  89. <!-- https://pt.wikipedia.org/wiki/Tabela-verdade -->
  90. </p>
  91. <p>
  92. As tabelas abaixo representam as sentenças das operações básicas <i>não A</i>, <i>A e B</i> e <i>A ou B</i>.
  93. Simplificaremos escrevendo "verd" para "verdadeiro" (<i>1</i> em <i>C</i> e <i>true</i> em <i>Python</i>) e
  94. "fals" para "falso" (<i>0</i> em <i>C</i> e <i>false</i> em <i>Python</i>).
  95. <center>
  96. <i>Tab. 1. Tabela verdade para (a) negação, para (b) conjunção <i>e</i> e para (c) disjunção <i>ou</i>.</i>
  97. <table><tr>
  98. <td>
  99. <table class="tbCodeLinCol">
  100. <tr><th>A</th> <th>não A</th></tr>
  101. <tr><td>verd</td><td>fals</td></tr>
  102. <tr><td>fals</td><td>verd</td></tr>
  103. </table></td>
  104. <td> &nbsp; </td>
  105. <td>
  106. <table class="tbCodeLinCol">
  107. <tr><th>A</th> <th>B</th> <th>A e B</th></tr>
  108. <tr><td>verd</td><td>verd</td><td>verd</td></tr>
  109. <tr><td>verd</td><td>fals</td><td>fals</td></tr>
  110. <tr><td>fals</td><td>verd</td><td>fals</td></tr>
  111. <tr><td>fals</td><td>fals</td><td>fals</td></tr>
  112. </table></td>
  113. <td> &nbsp; </td>
  114. <td>
  115. <table class="tbCodeLinCol">
  116. <tr><th>A</th> <th>B</th> <th>A ou B</th></tr>
  117. <tr><td>verd</td><td>verd</td><td>verd</td></tr>
  118. <tr><td>verd</td><td>fals</td><td>verd</td></tr>
  119. <tr><td>fals</td><td>verd</td><td>verd</td></tr>
  120. <tr><td>fals</td><td>fals</td><td>fals</td></tr>
  121. </table></td>
  122. <td> &nbsp; </td>
  123. </tr>
  124. </table>
  125. </center>
  126. </p>
  127. <p>
  128. De modo geral, para cada <i>sentença</i>, ou <i>expressão lógica</i>, pode-se construir sua corresponde <i>tabela-verdade</i>.
  129. Assim, dada uma <i>sentença</i> formada com <i>k</i> itens lógicos (ou <i>sentenças elementares</i>),
  130. pode-se fazer uma tabela com <i>k+1</i> colunas, sendo a primeira formada pelo item 1,
  131. a segunda pelo item 2 e assim por diante.
  132. Por exemplo, e nas demais <i>k=3</i>.
  133. Por exemplo, se a sentença tem apenas um item (como na tabela 1.(a), <i>k=1</i>), existem <i>2<sup>1</sup></i> linhas e
  134. na última coluna está precisamente o valor da expressão.
  135. Se a sentença tiver dois itens (como na tabela 1.(b), <i>k=2</i>), então teremos <i>2<sup>2</sup>=4</i> linhas e o valor lógico
  136. resultante na última coluna.
  137. <br/>
  138. Generalizando, uma <i>expressão lógica</i> com <i>k</i> itens terá (além da linha título) <i>2<sup>k</sup></i> linhas,
  139. cada linha terá uma das possíveis <i>combinações</i> para os valores <i>verdadeiro</i> ou </i>falso</i> e em sua última
  140. coluna <i>k+1</i> o resultado da <i>sentença</i> completa.
  141. <br/>
  142. Portanto, a tabela terá <i>2<sup>k</sup></i> linhas, cada linha terá uma <i>combinação</i>
  143. possível para os valores <i>verdadeiro</i> ou </i>falso</i>.
  144. </p>
  145. <p>
  146. Assim, dada uma sentença formada com <i>k</i> itens lógicos (ou sentenças elementares),
  147. pode-se fazer uma tabela com <i>k+1</i> colunas, sendo a primeira formada pelo item 1,
  148. a segunda pelo item 2 e assim por diante. A coluna <i>k+1</i> representa a sentença completa.
  149. Nesse caso a tabela terá <i>2<sup>k</sup></i> linhas, cada linha terá uma <i>combinação</i>
  150. possível para os valores <i>verdadeiro</i> ou </i>falso</i>.
  151. </p>
  152. <p>
  153. Note que tanto a disjunção quanto a conjunção são operações comutativas e associativas.
  154. Comutativas:
  155. <i>A e B</i> é o mesmo que <i>B e A</i> (produz a mesma tabela verdade);
  156. <i>A ou B</i> é o mesmo que <i>B ou A</i>.
  157. Associativas:
  158. <i>A e (B e C)</i> é o mesmo que <i>(A e B) e C</i>;
  159. <i>A ou (B ou C)</i> é o mesmo que <i>(A ou B) ou C</i>.
  160. </p>
  161. <a name="exp-py"><span style="color: #0050A0">Leis de De Morgan</span></a>
  162. <p>
  163. Do mesmo modo que na aritmética podemos compor expressões com diferentes operadores (como '+' e '-'),
  164. também podemos compor sentenças misturando os três operadores.
  165. Para isso é interessante perceber que valem as seguintes equivalências, denominadas
  166. <i><a href="https://en.wikipedia.org/wiki/Augustus_De_Morgan" title="examinar WikiPedia sobre Augustus De Morgan">leis de De Morgan</a></i>:
  167. <center>
  168. <b>não (A e B)</b> &equiv; <b>(não A) ou (não B)</b><br/>
  169. <b>não (A ou B)</b> &equiv; <b>(não A) e (não B)</b><br/>
  170. </center>
  171. </p>
  172. <p>
  173. Se não estiver clara a equivalência, monte as tabelas verdade para cada par de sentença e observe que ambas
  174. produzem os mesmo resultados.
  175. </p>
  176. <p>
  177. Algumas fontes para aprofundamento:
  178. na <i>WikiPedia</i> examinar os vocábulos
  179. <a href="https://en.wikipedia.org/wiki/De_Morgan%27s_laws" title="seguir para o vocabulo De_Morgan na WikiPedia em Ingles">
  180. De_Morgan%27s_laws</a> ou
  181. <a href="https://pt.wikipedia.org/wiki/Teoremas_de_De_Morgan" title="seguir para o vocabulo De_Morgan na WikiPedia em Portugues">
  182. Teoremas_de_De_Morgan</a>.
  183. Se desejar aprofundar o entendimento sobre a linguagem matemática
  184. pegue a apostila do professor
  185. <a href="https://www.ime.usp.br/~bianconi/recursos/lo.pdf" title="pegar a apostila sobre logica de Bianconi">
  186. Ricardo Bianconi</a>.
  187. </p>
  188. <p class="autoria">
  189. <a href="https://www.ime.usp.br/~leo" target="_blank" title="seguir para a pagina do prof. Leônidas">Leônidas de Oliveira Brandão</a><br/>
  190. <a href="http://www.ime.usp.br/~leo" target="_blank" title="seguir para a página do LInE">http://line.ime.usp.br</a>
  191. </p>
  192. <p class="rodape">
  193. <b>Alterações</b>:<br/>
  194. 2020/08/19: várias pequenas correções, texto da seção "Tabela verdade" completamente reescrito<br/>
  195. 2020/08/15: novo formato, pequenas revisões<br/>
  196. 2020/08/07: revisão geral<br/>
  197. 2018/04/16: primeira versão
  198. </p>
  199. </div>