Este tipo de operadores permite obtener solo dos resultados, por lo que se conocen también como booleanos, porque hacen uso de los principios del álgebra de Boole. Los resultados son Verdadero o Falso. La sintáxis especifica
una serie de reglas de construcción que deberán cumplir las fórmulas para ser sintácticamente correctas. Los elementos que estudiaremos en una fórmula, en lógica proposicional son:
- Símbolos: p, q, r...
- Operadores: negación, conjunción, disyunción, condicinal, disyunción exclusiva
- Paréntesis: ( )
Las reglas de construcción sintácticas son:
- Un símbolo sólo no es una fórmula
- Los operadores unarios se anteponen al símbolo. Los operadores binarios se sitúan entre los símbolos.
- Los paréntesis han de estar bien formados, y ha de haber tantos paréntesis de abertura como de cierre:
- Son correctos: (p), p and (q), p or ((not q) and r)...
- No son correctos: (), (p (or) q), p and (q or (not r)...
- Son correctos: (p), p and (q), p or ((not q) and r)...
- Son fórmulas:
- p, not p, p and q, p xor (not q), not (p -> q)...
- p, not p, p and q, p xor (not q), not (p -> q)...
Hemos hablado de operadores unarios y binarios. Los primeros afectan sólo a un símbolo o fórmula, en cambio los segundos afectan a los 2 símbolos o fórmulas que haya a su izquierda y derecha.
Una fórmula es cualquier combinación de elementos que cumplan las reglas sintácticas. Por ejemplo, si tengo un símbolo p: "hace frío". La fórmula not p equivale a "no hace frío".
De los símbolos no hay nada más que decir, son letras minúsculas del alfabeto. En cuanto a los operadores lógicos, no vamos a verlos todos, sólo los necesarios para comprender
la lógica que después aplicaremos a la programación. Cada operador está representado por un símbolo:
Veamos la tabla de prioridad (precedencia) y asociatividad de los operadores de mayor a menor prioridad:
Nota: Aunque los paréntesis no son un operador, se han considerado ya que son los primeros que
se interpretan.
La asociatividad de los operadores indica cómo se evalúan las expresiones. Por ejemplo, el operador not se evalúa de derecha a izquierda, en la expresión not p se evalúa p , y después se aplica
la negación de p . Sin embargo, el operador and se evalúa de izquierda a derecha, en la expresión p and q se evalúa p , y después se evalúa p and q . Esto puede parecer inútil, pero sabiendo que 0 and cualquier valor siempre es 0,
si evalúamos p and q , y p es 0, no hace falta evaluar q .
Los operadores se interpretan según su prioridad para la correctaagrupación de las expresiones. Primero los de mayor prioridad y después los de menor prioridad. Es decir, ante la fórmula not p or q podríamos
dudar si interpretarla (not p) or q o not (p or q). La fórmula correcta es la primera, ya que el operador not tiene más prioridad que el operador or. De todas formas, ante la duda, es mejor
utilizar paréntesis.
Lo primero es asignar símbolos. Se pone un símbolo por cada acción simple que no se puede descomponer en otras:
- p: Llueve
- q: Me mojo
- r: Tengo un paraguas
Ahora pasamos a formalizar las sentencias:
not p
p -> q
r -> p
((not p) and (r)) -> not q
Propiedades
Algunos conectivos lógicos tienen propiedades que se pueden expresar en teoremas que contienen el conectivo. Algunas de estas propiedades que una conectiva lógica puede tener son:
- Asociatividad: En una expresión que contiene dos o más del mismo conectivo asociativo en una línea, el orden de las operaciones, no importa, siempre y cuando la secuencia de los operandos no cambia.
- Conmutatividad: Los operandos del conectivo pueden ser intercambiados (uno por el otro), mientras que la preservación de
equivalencia lógica de la expresión original. - Distributividad: Un conectivo denotado por · distribuye sobreotra que conecta denotado por el signo +, · si a · (b + c) = (a · b) + (a · c) para todos los operandos a, b, c.
- Idempotencia: Cuando los operandos de una operación son iguales, el compuesto es lógicamente equivalente al operando.
- Absorción: Un par de conectivos and, or satisface la ley de absorción si a and (a or b) = a para todos los operandos a, b.
- Afinidad: Cada variable siempre hace una diferencia en el valor de verdad de la operación o nunca hace una diferencia.
- Dualidad: Para leer las asignaciones de valores de verdad para la operación desde arriba hacia abajo en su tabla de verdad es lo mismo que tomar el complemento de lectura de la tabla de la misma u otra
conectiva desde abajo hacia arriba.
- Preservación de la verdad: El compuesto todos los argumentos son tautologías es una tautología en sí.
- Falsedad de preservación: El compuesto de todos los argumentos son contradicciones es una contradicción en sí.
- Involutividad (para conectivos unarios): f(f(a)) = a. Por ejemplo negación en la lógica clásica.
Historia de las notaciones
- Negación: el símbolo ¬ apareció en Heyting en 1929; el símbolo ˜ apareció en Russell en 1908; una notación alternativa es añadir una línea horizontal encima de la fórmula.
- Conjunción: el símbolo /\ apareció en Heyting en 1929; & apareció al menos en Schönfinkel en 1924; · vino la interpretación de Boole de la lógica como un álgebra
elemental.
- Disyunción: el símbolo \/ apareció en Russell en 1908; también se utiliza el símbolo +, a pesar de la ambigüedad surgida de la álgebra elemental ordinaria al ser el
+ considerado un o exclusivo
lógicamente interpretado como una alianza de dos elementos; puntualmente en la historia, un + junto con un punto en la esquina inferior derecha fue usado por Peirce, Implicación: el símbolo -> se puede ver en Hilbert en 1917; ↄ fue utilizado por Russell en 1908 (comparar con la notación de la C invertida de Peano); => se utilizó en Vax. - Bicondicional: el símbolo fue utilizado = al menos por Russell en 1908; se utilizó <-> al menos por Tarski in 1940;
<=> fue utilizado en Vax; otros símbolos aparecieron puntualmente en la historia como ↄ c en Gentzen, ˜ en Schönfinkel o c ↄ en Chazal.
- Verdadero: el símbolo 1 vino de la interpretación de Boole de la lógica como un álgebra elemental de booleana como la álbegra dos elementos; otras anotaciones incluyendo /\ fueron encontrados
en Peano \/.
- Falso: el símbolo 0 también proviene de la interpretación de Boole de la lógica como un anillo; otras anotaciones inclusive fueron encontradas en Peano.
Busqueda WEB
Los motores de búsqueda necesitan que la gente sea específica al momento de buscar información. La mayoría de las veces utilizan más de una palabra para encontrar información para evitar resultados no deseados.
En estos casos los operadores lógicos sirven para conducir una búsqueda, evitando términos no deseados o por el contrario, establecer qué términos deben aparecer en el vínculo buscado.
Imaginemos que realizamos una búsqueda web sobre un ave picidae o como se les conoce comúnmente "pájaro carpintero" pero lo que obtiene como resultado es una animación de Universal Studios y su personaje "pájaro loco"
u obtiene miles de resultados sin saber cual contiene la información que se desea.
Para obtener resultados más exactos con la información que se necesita se utilizan los operadores lógicos o booleanos que son 6:
- AND (conjunción o "+, o y")
- NOT (negación o -)
- OR (disyunción o "O")
- Asterisco *
- Paréntesis ()
- Doble comillas ""
Programación
Los operadores lógicos permiten agrupar expresiones lógicas. Las expresiones lógicas son todas aquellas expresiones que obtienen como resultado verdadero o falso. Los operadores lógicos son aquellos que hacen de nexo de este tipo de expresiones.
Para entrar más en detalle respecto a los operadores lógicos en la programación, utilizaremos de referencia los operadores lógicos en Java y C++ (Suelen ser
similares, o incluso los mismos en otros lenguajes), estos son los siguientes:
El operador || se obtiene en la mayoría de los teclados pulsando ALT GR + 1, es decir, la tecla ALT GR y el número 1 simultáneamente.
Los operadores && y || se llaman operadores en cortocircuito porque si
no se cumple la condición de un término no se evalúa el resto de la operación. Por ejemplo: (a == b && c != d && h >= k) tiene tres evaluaciones: la primera comprueba si la variable a es igual a b. Si
no se cumple esta condición, el resultado de la expresión es falso y no se evalúan las otras dos condiciones posteriores.
En un caso como ( a < b || c != d || h <= k) se evalúa si a es menor que b. Si se cumple
esta condición el resultado de la expresión es verdadero y no se evalúan las otras dos condiciones posteriores.