![]() |
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 = ...
).