<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<div style="text-align: center;"><big><big><big><big>Bigtoe Interactive
Demo</big></big></big></big><br>
</div>
<pre><br>The Ocaml source of Bigtoe: <a href="bigtoe.tar.gz">bigtoe.tar.gz</a><br></pre>
<ul>
  <li>to clean: make clean</li>
  <li>to build: make</li>
</ul>
<br>
<form action="./bigtoe.cgi" method="post"> <textarea rows="10"
 cols="80" name="input"></textarea><br>
  <input value="submit" name="submit" type="submit"></form>
<H2> Numerical Expression Language  &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Boolean Expression Language </H2>
<PRE>
expr::= var                                                                   exprb::= TT
        integer                                                                        expr == expr                       
        expr + expr                                                                    expr &lt;= expr
        expr - expr                                                                    expr &lt; expr
        expr * expr                                                                    expr &gt;= expr
                                                                                       expr &gt; expr
                                                                                       exprb /\ exprb
                                                                                       exprb \/ exprb
                                                                                       ! exprb
</PRE>
<H2> Spatial Assertion  &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Assertion Language </H2>
<PRE>
sigma ::= E                                                                   Assrt ::= (exprb | sigma)
          expr |-&gt;_                                                                     Assert \/ Assert
          expr |-&gt; expr
          list expr expr
</PRE>
<H2> Programming Language &nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Goals</H2>
<PRE>
Programming Language (cmd): var := expr (alternative: var &lt;- expr)                    Goal : { assert } cmd { assert }
                            var := [expr] (alternative: var &lt;-* expr)                        assert |- assert
                            [expr] := expr (alternative: expr *&lt;- expr)                      exprb
                            if (exprb) then { cmd } else { cmd }
                            while (exprb) [assert] { cmd }
                            cmd; cmd
</PRE>

Example of program:


<br>
<ul>
  <li>Reverse list:</li>
</ul>
<pre>		{TT | list i 0}<br><br>		j &lt;- 0;<br>		while (i &lt;&gt; 0) [(TT | list i 0 ** list j 0)]{<br>		        k &lt;-* i;<br>		        i *&lt;- j;<br>		        j &lt;- i;<br>		        i &lt;- k<br>		}	<br> <br>		{TT | list j 0}<br><br></pre>
<ul>
  <li>List traversal:<br>
  </li>
</ul>
<pre>		{TT | list i 0}<br>		j := i;<br>		while (j &lt;&gt; 0) [<br>		         (TT | list i j ** list j 0)<br>		        ] {<br>        <br>		        j := [j]<br>        <br>		}<br>		{TT | list i 0}   <br></pre>
<ul>
  <li>List append:<br>
  </li>
</ul>
<pre>		{TT | list i 0 ** list j 0}<br>		if (i == 0) then {<br>		        i := j<br>		} else {<br>		        curr := i;<br>		        tmp := [curr];        <br>		        while (tmp &lt;&gt; 0) <br>		                [(TT | list i curr ** curr |-&gt; tmp ** curr + 1 |-&gt;_ ** list tmp 0 ** list j 0)]{<br>		                curr := tmp;<br>		                tmp := [curr]<br>		        };<br>		        [curr] := j<br>		}<br>		{TT | list i 0}<br></pre>
<ul>
  <li>Insert (head):</li>
</ul>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {TT | x |-&gt;
vx ** x+1 |-&gt;_ ** list y 0}<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; [x] := y<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {TT | list x 0}<br>
<br>
<ul>
  <li>Insert (tail):<br>
  </li>
</ul>
<pre>		{x &lt;&gt; 0 |  list i 0 ** x |-&gt;_  ** x + 1 |-&gt; data}<br>		x *&lt;- 0;<br>		if (i == 0){<br>			i &lt;- x<br>		} else {<br>			curr &lt;- i;<br>			tmp &lt;-* curr;<br>			while (tmp &lt;&gt; 0)<br>				[{i &lt;&gt; 0 |  list i curr ** curr |-&gt; tmp ** curr + 1 |-&gt;_  **  list tmp 0 ** x |-&gt; 0 ** x + 1 |-&gt; data}]{<br>				curr &lt;- tmp;<br>				tmp &lt;-* curr<br>			};<br>			curr *&lt;- x<br>		}<br>		{TT |  list i x ** x |-&gt; 0 ** x + 1 |-&gt; data}<br><br><br>
</pre>
</body>
</html>
