This repository has been archived by the owner on Sep 9, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
A propositional linear inverse method theorem prover (written in 2003-2004, very lightly maintained)
License
chaudhuri/sympli
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Compiling ========= This requires the MLTon version 20130715 or later. It currently does not work with SML/NJ. You will need the mlyacc-lib library as well, which is generally distributed with the mlton-basis package. Running the MLTon compiled binary ================================= Running "make" produces a program "sym". Use it as follows: % ./sym [-e #] file1.sym file2.sym ... It runs the files one after the other. The -e option specifies which search engine to use. The engines and their numbers are in top/engine.sml. If you are trying one of the profiled binaries (eg. sym-time), perform the following steps in order: % ./sym-time file1.sym file2.sym ... % mlprof -raw true ./sym-time mlmon.out The "-raw true" flag shows raw values in addition to the percentage values. If you want source line numbers also, use "-show-line true". Input format ============ 1. Comments ------------- Block comments are delimited by balanced (* and *). They may be arbitrarily nested. Line comments start with '% ' (minus quotes), and ignore everything until the end of line character. 2. Propositions ----------------- Any identifier that is not a keyword is a valid atomic proposition. Propositions are combined with the following unary and binary connectives, listed in order of precedence: ! exponential * tensor, left assoc. & with, left assoc. + choice, left assoc. -o linear impl., right assoc. o- linear impl., left assoc. (B o- A == A -o B) -> implication, right assoc. (A -> B == !A -o B) <- implication, left assoc. (B <- A == !A -o B) o-o linear equiv., non assoc. (A o-o B == (A -o B) & (A o- B)) <-> unr. equiv., non assoc. (A <-> B == (A -> B) & (A <- B)) { } CLF-monad In addition are the propositional constants 0, 1 and #. 0 falsehood 1 unit (mult.) # truth (add.) 3. Proof terms ---------------- Proofs are represented as normal natural deduction terms. They have the following grammar. (synthesizing) i ::| u hypothesis | i c impl elim | fst i | snd i with elims | [c] coercion (checking) c ::| i silent coercion | c * c tensor intro | let u * v = i in c end tensor elim | 1 one intro | let 1 = i in c end one elim | \u. c impl intro | (c, c) with intro | () top intro | inl c | inr c choice intros | case i of inl u => c | inr u => c choice elim | abort i zero elim | !c bang intro | let !u = i in c end bang elim | {c} monad intro | let {u} = i in c end monad elim | let u = i in c end delayed linear subst | ulet w = i in c end delayed unrestr. subst Proof terms with the [] coercion are not normal, and cannot be checked. Non-normal proof terms are produced during the proof-maintenance phase, but they are normalized before checking. NOTE TO USERS OF NON-MONADIC VERSION: The CLF monad is written using {}. This is different from the {} coercion of earlier versions. 4. Directives --------------- All directives are prefixed by '%', with no following space. They are as follows. %prove <prop>. Proves a the given proposition, and: %refute [<number> :] <prop>. Attempt to perform <number> (default: infinite) iterations for the OTTER loop, and then succeeds; but fail if a proof is found. %include 'filename.sym'. Process named file. %norm <checking>. Take the given closed checking term and calculate its beta-gamma-normal form. %check <checking> : <prop>. %reject <checking> : <prop>. Check (or reject) a given closed *normal* proof term against a given proposition. Attempts to check (reject) a term containing [] will always fail (succeed). %channel <channel>. Allocates a new channel of output, and binds it to standard out. Channel names are any valid identifier. By default there are two channels: 'highlevel' and 'error', both bound to the standard out. %bind <channel> : 'somefilename.log'. Send all output to specified channel from now on to somefilename.log. The channel need not have been specified with %channel earlier. You can rebind channels, in which case the old file (if any) that the channel was bound to is closed. NOTE: if you bind to a file twice in one run, you'll end up overwriting all the output of the first run %log <operation> : <channel>. Log the specified operation on the specified channel. Operation names are valid identifiers. The following are the documented operations: cfg -- output produced while reading the input file and delegating to various components. This is on 'highlevel' by default. setup -- during a proof or a refute, this prints the various setup and teardown steps such as the calculated labels, initial sequents, goal, etc. Not on anything by default. rules -- all output during specialising of rules. Not on anything by default. counters -- various performance and statistics counters. Not on anything by default. database -- the kept sequents at the beginning of every OTTER loop. Not on anything by default. sos -- the set of support at the beginning of every OTTER loop. Not on anything by default. active -- the active set at the beginning of every OTTER loop. Not on anything by default. sel -- the selected sequent at the beginning of every OTTER loop. Not on anything by default. prefactor, postfactor -- new sequents before and after factoring. Not on anything by default. fsubs, bsubs -- forward and backward subsumption output. Not on anything by default. validation -- output produced by the final validation phase, including the final proof-term. Not on anything by default. loop -- misc. output specific to the mechanics of the OTTER loop. Not on anything by default. timers -- various timers, printed at the end of major commands and directives (i.e., prove, refute, %check, %reject, etc.) NOTE: there is no additional cost to operations that are not logged on anything. %unlog <operation>. Stop logging the specified operation.
About
A propositional linear inverse method theorem prover (written in 2003-2004, very lightly maintained)
Topics
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published