Open main menu

Muitas situações podem ser, e são, modeladas usando um sistema que tem-se um de dois estados quaisquer. Dependendo do contexto, o par de estados pode ser conhecido por verdadeiro e falso, ou ligado e desligado ou bom e mau, e assim por diante. Exemplos teóricos que vêm à mente ao mesmo tempo são as afirmações precisas que são feitas em ciências matemáticas e físicas, que são considerados como sendo verdadeiro ou falso. Entre as aplicações mais importantes está a modelagem de circuitos digitais em computadores, em que interruptores eletronicos podem também ser ligados ou desligados. Agora, veremos como Maple pode ser usado para manipular sistemas algébricos aritméticos, e para modelar as suas leis, ou regras, simbolicamente. Assim também, podemos modelar a aritmética da álgebra booleana. Na verdade, álgebra booleana é de certo modo mais simples que álgebra numérica, por isso é mais fácil. (Pelo menos, será, uma vez que ela se torne familiar para você).


Funções Booleanas

No Maple, há um construtor do tipo ““booleano””, isto é, um tipo de variável que pode ser usada para representar valores booleanos. Existem apenas dois valores booleanos e no Maple eles são representados pelos literais ““true”” e ““false””. Para o Maple, estes são dois valores constantes, assim como o numero ““2”” ou a matriz identidade 3x3 são constantes. Se você atribuir alguma dessas duas constantes para uma variavel então o valor da variavel será um valor constante.

a := true;
	b := false;

Dois valores constantes por si só não são muito interessantes. Para fazer coisas úteis, nós precisamos ser capazes de realizar operações significativas sobre elas. Para tal, Maple oferece dois conjuntos de operadores booleanos para realizar operações em variáveis booleanas e literais. O primeiro conjunto consiste nos operadores ‘and’, ‘or’ e ‘not’. Em Maple também é disponibilizado os operadores &and, &or e &not para operar sobre literais booleanos e variaveis com simplicidade. Eles estão disponiveis no pacote logic da linguagem. A diferença entre os dois conjuntos esta na forma em que as expressões formadas usando eles são simplificadas, por exemplo:

true and false;
true &and false;

O primeiro operador ‘and’ produz seu valor imediato, enquanto que o segundo ‘&and’ é mais útil para trabalhar simbolicamente com expressões booleanas, ou seja, para estudar a forma de uma expressão ao invés de seu valor. Um pequeno cuidado é necessário em como usar o operador ‘&not’. É muito importante que as expressões sejam suficientemente definidas com parenteses (Primeiramente, retiramos qualquer valor de ‘a’)

a := 'a';

Enquanto

not not a;

é um código Maple perfeitamente válido, a construção

&not &not a;

conduz, como podemos ver, a um erro de sintaxe. Ao invés disso, a ultima expressão deve ser escrita como

&not (&not a);

provendo nível extra com os parênnteses. O operador booleano ‘and’ é um operador binário, ele modela a semântica lógica and.

true and true;
true and false;
false and true;
false and false;

Estes quatro exemplos, exaure todos os possiveis argumentos do operador and. Nos veremos que o resultado de aplicamos ‘and’ para dois valores booleanos é true, precisamente quando o valor de ambos os operandos é true. Da mesma forma, o exemplo acima mostra que and é um operador comutativo. De fato, o segundo e o terceiro exemplo acima constituem uma prova deste fato. Do mesmo modo, nós podemos mostrar que o operador ‘or’ é comutativo. Seu comportamento pode ser completamente determinado pela aplicação dele sobre todos os possiveis pares de seus argumentos. (Faça isto agora!) O operador not, é um pouco diferente dos dois operadores binários &and e or, no fato que not é um operador (prefixo) unário. Seu efeito é alternar entre os dois valores booleanos.

not true;
not false;

Os resultados não são muito surpreendentes! Os operadores booleanos em Maple tem uma série de outras propriedades das quais você deve estar ciente. Ambos, and e or são operadores associativos. Por exemplo, dizer que and é um operador binãrio significa que sobre ele é aplicado dois argumentos de uma vez. Se nós desejarmos computar o valor de and para três valores ditos a, b e c, então duas expressões A mesma coisa é verdade para o operador or. Outra propriedade dos quais você deve estar ciente é que não é uma involução:

a and b and c and d;

Em outras palavras, a segunda aplicação de not desfaz o efeito da primeira. Vocẽ pode fazer exatamente a mesma coisa com as tão faladas variantes inertes desses operadores (aquelas om o & prefixado em seus nomes). No entanto, nenhuma simplificação automática ocorrerá. Isto é porque operadores booleanos inertes são usados primeiramente para trabalhar simbolicamente com operações booleanoas; eles são operadores sobre os quais as ferramentas do pacote logic de Maple são baseados. Por exemplo, usando o operador inerte &not, nos veremos que a expresão:

&not( &not ( a ) );

Não é tão simplificado em a.