|
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 = ...).