Skip to content

Latest commit

 

History

21 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Boolean Evaluator

booleval es una command line utility que evalúa expresiones lógicas e imprime sus tablas de verdad.

Grammar

<eval> ::= ";"
       |   "exit"
       |   <prop>
       |   <eval> <prop>

<prop> ::= <term>
       |   <prop>  "->"  <term>
       |   <prop> "<->"  <term>
       |   <prop> "<~>"  <term>

<term> ::= <atom>
       |   <term> "&" <atom>
       |   <term> "|" <atom>
       |   <term> "!" <atom>

<atom> ::= <id>
       | "~" <atom>
       | "(" <prop> ")"
       | "[" <prop> "]"
       | "{" <prop> "}"

<id> ::= [a-zA-Z]{1,1}

Conectores Lógicos

La sig. tabla muestra los conectores lógicos y su equivalente implementados en booleval (Booleval):

Conector Lógica Booleval
Negación ¬ ~
Conjunción ˄ &
Disyunción ˅ |
Disyunción Exclusiva ⊻ <~>
Condicional → ->
Bicondicional ↔ <->
Negación Conjunta ↓ !

Puntuadores: como comenté anteriormente, cada expresión debe terminar con ;. También podemos utilizar (), [] y {} como separadores. Además, booleval reconoce los comentarios de una línea (como en Python), todo lo que esté luego del caracter # hasta el salto de línea será ignorado. Los comentarios son (más) útiles para documentar las expresiones cuando las tengamos en un archivo.

Ejemplos

Cada expresión lógica debe terminar en ';', esto hace posible que booleval pueda procesar varias de estas al mismo tiempo (separadas por ;). La siguiente expresión lógica (p ∧ q → r) se la podemos pasar a booleval como: (p & q → r);. Nota: la precedencia y asociatividad de los conectores lógicos está programada en la utilidad, por lo que todas las siguientes expresiones son equivalentes: (p ∧ q) → r ≡ {(p ∧ q) → r} ≡ p ∧ q → r.

Uso

  • Arrancar el programa
$ python -m booleval              ## entrada estándar
$ python -m booleval < props.txt  ## redirección

Luego de ejecutar el comando anterior (entrada estándar), la utilidad nos responde mostrandonos el siguiente prompt '>' que nos señala que está lista para evaluar expresiones:

$>
  • Corrida. Nota que lo que aparece luego de ; es un comentario:
$> ~(p & q) <-> (~p | ~q);  # De Morgan's Law
  • Salida:

La línea final de la tabla muestra si se trata de una Tautología (tautology), Contradicción (contradiction) o una Contingencia (contingent):

p  q  (p&q)  ~(p&q)  ~p  ~q  (~p|~q)  ~(p&q)<->(~p|~q)
======================================================
V  V    V       F     F   F     F             V
V  F    F       V     F   V     V             V
F  V    F       V     V   F     V             V
F  F    F       V     V   V     V             V
======================================================
~(p&q)<->(~p|~q) = tautology

Nota: algunos prefieren que la tabla anterior se mostrara así:

p  q  ~p  ~q  (p&q)  ~(p&q)  (~p|~q)  ~(p&q)<->(~p|~q)
======================================================
V  V   F   F    V       F       F             V
V  F   F   V    F       V       V             V
F  V   V   F    F       V       V             V
F  F   V   V    F       V       V             V
======================================================
~(p&q)<->(~p|~q) = tautology

Sin embargo, esta salida no muestra el estricto orden (de izquierda a derecha) de evaluación de las subexpresiones.


  • Ejemplo Complejo:

Una proposición {[(p ∧ q) → ¬r] ↔ [(s ∨ ¬t) ∧ (r → p)]} (1) requiere generar 2⁵ = 32 filas necesarias para las 5 variables; (2) las entradas de las variables (p, q, r, s, t) deben seguir el orden binario estándar fundamental para legibilidad técnica; (3) comprobar:

  1. A = (p ∧ q) → ¬r
  2. B = (s ∨ ¬t)
  3. C = (r → p)
  4. D = B ∧ C

Resultado Final: A ↔ D

  • Entrada:
$> {[(p & q) -> ~r] <-> [(s | ~t) & (r -> p)]};
  • Salida (copiada directo de la terminal):
p  q  r  s  t  (p&q)  ~r  [(p&q)->~r]  ~t  (s|~t)  (r->p)  [(s|~t)&(r->p)]  {[(p&q)->~r]<->[(s|~t)&(r->p)]}
===========================================================================================================
V  V  V  V  V    V     F       F        F     V       V           V                        F
V  V  V  V  F    V     F       F        V     V       V           V                        F
V  V  V  F  V    V     F       F        F     F       V           F                        V
V  V  V  F  F    V     F       F        V     V       V           V                        F
V  V  F  V  V    V     V       V        F     V       V           V                        V
V  V  F  V  F    V     V       V        V     V       V           V                        V
V  V  F  F  V    V     V       V        F     F       V           F                        F
V  V  F  F  F    V     V       V        V     V       V           V                        V
V  F  V  V  V    F     F       V        F     V       V           V                        V
V  F  V  V  F    F     F       V        V     V       V           V                        V
V  F  V  F  V    F     F       V        F     F       V           F                        F
V  F  V  F  F    F     F       V        V     V       V           V                        V
V  F  F  V  V    F     V       V        F     V       V           V                        V
V  F  F  V  F    F     V       V        V     V       V           V                        V
V  F  F  F  V    F     V       V        F     F       V           F                        F
V  F  F  F  F    F     V       V        V     V       V           V                        V
F  V  V  V  V    F     F       V        F     V       F           F                        F
F  V  V  V  F    F     F       V        V     V       F           F                        F
F  V  V  F  V    F     F       V        F     F       F           F                        F
F  V  V  F  F    F     F       V        V     V       F           F                        F
F  V  F  V  V    F     V       V        F     V       V           V                        V
F  V  F  V  F    F     V       V        V     V       V           V                        V
F  V  F  F  V    F     V       V        F     F       V           F                        F
F  V  F  F  F    F     V       V        V     V       V           V                        V
F  F  V  V  V    F     F       V        F     V       F           F                        F
F  F  V  V  F    F     F       V        V     V       F           F                        F
F  F  V  F  V    F     F       V        F     F       F           F                        F
F  F  V  F  F    F     F       V        V     V       F           F                        F
F  F  F  V  V    F     V       V        F     V       V           V                        V
F  F  F  V  F    F     V       V        V     V       V           V                        V
F  F  F  F  V    F     V       V        F     F       V           F                        F
F  F  F  F  F    F     V       V        V     V       V           V                        V
===========================================================================================================
{[(p&q)->~r]<->[(s|~t)&(r->p)]} = contingent
  • Salir de la herramienta:
$> exit

Capturas de Pantalla

Terminal estándar (CMD)

Corrida en la CMD

Ejecución en PowerShell

Salida en PowerShell

To Do

  • Mejorar esta documentación
  • Agregar una interfaz gráfica (GUI)
  • Implementar más features
  • Más conectores; conectores alternativos...
  • Exportar a distintos formatos (Markdown, reStructuredText, etc.)?

License

MIT License

Maintainers

Written by Osmar D. Gómez A (ozzygomez)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages