## 15-816 Linear Logic |

`/afs/cs/project/twelf/misc/ltwelf/bin/`

. They run only if
you have the `bin`

directoy of SML in your local path. To
start linear Twelf type
`/afs/cs/project/twelf/misc/ltwelf/bin/ltwelf`

. If you
need linear Twelf to be compiled for a different architecture just let me know.
As a standard, a configuration is defined by a SML file
`config.sml`

which should reside in the directory
where the actual code is. For the example of Mini-ML with references,
it looks like

val MLR = FrontEnd.defineConfig [ "syntax.llf", "typing.llf", "eval.llf" ];The files

`syntax.llf`

, `typing.llf`

, and
`eval.llf`

are the signatures files, as shown in class.
Loading the config file defines a configuration `MLR`

which you can now easily load with

FrontEnd.compileConfig MLR;

To start the interpreter type

FrontEnd.top ();and the system prompt

`?-`

asks you for your query. If
you type in
tpe (letval (ref (s (s z))) ([g] letval (ref z) ([r] (fix ([twice] case (! g) noop ([y] (g is y ; r is (s (s (! r))) ; twice)))) ; (! r)))) X.you should get the answer

Solving... X = nat. %P = tpe_letval ([x:exp] [Te1:tpe x (nat tref)] tpe_letval ([x1:exp] [Te2:tpe x1 (nat tref)] tpe_seq (tpe_deref Te2) (tpe_fix ([x2:exp] [Te3:tpe x2 cmd] tpe_case ([x3:exp] [Te4:tpe x3 nat] tpe_seq Te3 (tpe_seq (tpe_assign (tpe_s (tpe_s (tpe_deref Te2))) Te2) (tpe_assign Te4 Te1))) tpe_noop (tpe_deref Te1)))) (tpe_ref tpe_z)) (tpe_ref (tpe_s (tpe_s tpe_z))). More?where

`X = nat`

states that the logic variable `X`

has been instantiated by `nat`

, and it also returns the
proof term (always written as `%P = ...`

).

Frank Pfenning, Carsten Schuermann carsten@cs.cmu.edu