Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
This file:
  http://angg.twu.net/gab/README.html
               (find-gab "README")
Author: Eduardo Ochs <eduardoochs@gmail.com>
Varsion: 2012may15
Public domain.


     __              _      __   
    / /   __ _  __ _| |__   \ \  
   | |   / _` |/ _` | '_ \   | | 
  < <   | (_| | (_| | |_) |   > >
   | |   \__, |\__,_|_.__/   | | 
    \_\  |___/              /_/  

GabCalc - a calculator for mathematical expressions involving
  quantifiers and set comprehension, inspired by Andrej Bauer's PLZoo

Note: this is not a proper README yet!
I have only made one public announcement, for a TINY part of gab.lua...
Because the rest is still a mess!
See: http://angg.twu.net/gab/gab-lpeg.lua



Introduction: examples
======================
This e-script

* (eepitch-gab)
* (eepitch-kill)
* (eepitch-gab)
pev "Fa a<-{2,3,4}. Ex b<-{2,3,4}. a*b>10"
pev "{(x,y) | x<-{2,3}, y<-{3,4}, x<y}"
pev "(\\ a. a*a)(5)"

generates this transcript:

  Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
  > pev "Fa a<-{2,3,4}. Ex b<-{2,3,4}. a*b>10"
  Fa a <- {2, 3, 4}. Ex b <- {2, 3, 4}. a*b > 10
  Fa__________.
  |           |
  <-_.        Ex__________.
  |  |        |           |
  a  {}_.__.  <-_.        >_____.
     |  |  |  |  |        |     |
     2  3  4  b  {}_.__.  *__.  10
                 |  |  |  |  |  
                 2  3  4  a  b  
  F

  > pev "{(x,y) | x<-{2,3}, y<-{3,4}, x<y}"
  {(x, y) | x <- {2, 3}, y <- {3, 4}, x < y}
  So_______.________._____.
  |        |        |     |
  <-_.     <-_.     <__.  ()_.
  |  |     |  |     |  |  |  |
  x  {}_.  y  {}_.  x  y  x  y
     |  |     |  |        
     2  3     3  4        
  {(2, 3), (2, 4), (3, 4)}

  > pev "(\\ a. a*a)(5)"
  (\a.a*a)(5)
  Ap_______.
  |        |
  \__.     5
  |  |     
  a  *__.  
     |  |  
     a  a  
  25

  > 




Files
=====
Code:
  http://angg.twu.net/gab/gab.lua
               (find-gab "gab.lua")
Tests:
  http://angg.twu.net/gab/gab-tests.lua
               (find-gab "gab-tests.lua")
The LPeg tricks used in the parser:
  http://angg.twu.net/gab/gab-lpeg.lua
               (find-gab "gab-lpeg.lua")

Old files (some are obsolete, some are garbage):
  http://angg.twu.net/gab/gab-oldparser.lua
               (find-gab "gab-oldparser.lua")
  http://angg.twu.net/gab/gabriela-app.lua
               (find-gab "gabriela-app.lua")
  http://angg.twu.net/gab/gabriela.lua
               (find-gab "gabriela.lua")

The development is being made with eev and eepitch - see:
  http://angg.twu.net/eev-current/eepitch.el.html
  http://angg.twu.net/eev-current/eev-intro.el.html



History
=======
One of the courses that I teach at the university where I work is
Discrete Mathematics ("MD").

The Teaching Assistant for MD in 2011, Gabriela Avila de Queiroz,
chose to do as her reseach project a program that could interpret some
expressions involving nested quantifiers, and calculate their results.
She had some difficulties with Lua, and ended up writing it in C.

In the beginning of 2012 I ported her program to Lua, and started
learning ML with the intent of extending a language from PLZoo to add
quantifiers to it - and, later, also adding categorical operations.
But then I went back to Lua - possibly temporarily - and started
adding features to the calculator in Lua - a printer that used infix
notation, an evaluator, printers of expressions in a lisp-y form and
in tree form, set comprehension, lambda forms and function
application, definitions, a bare-bones way to calculate and print
grids of values (like in spreasheets), a primitive recursive-descent
parser written in Lua that required spaces between any two tokens, and
a "real" parser written in LPeg.



Some Medium-Term Goals
======================
If/then/else. Abbreviations. Sets of the form {a,...,b} (with
ellipsis). Debugging tools. Set membership and equality. Better
support for defining functions. Functions defined in Lua. Memoization.
Inductive definitions. Substitution operators (like [x:=4](x*x)).
Reduction rules and tools for operating on a certain subexpression.
Expressions that keep their history.

Plotting points.

Full support for two-dimensional "modal" and "intuitionistic"
truth-values - for toposes of the form Set^D, where is the poset
generated by a subset of N×N.

Interface with dednat5.

Thunks and lazyness.





The Logo
========
Here:
  http://angg.twu.net/gab/gab.png
It was adapted from:
  http://www.pbs.org/design/2009/09/stealing-the-perfect-color-scheme.html
  http://www.pbs.org/design/images/rothko.jpg
and created with Gimp's color picker and this:
  http://angg.twu.net/elisp/myxpm.el.html#gab
          (find-angg "elisp/myxpm.el"    "gab")





-- Local Variables:
-- coding:             raw-text-unix
-- ee-anchor-format:   "«%s»"
-- End: