[opentheory-users] importer for Isabelle
Brian Huffman
brianh at cs.pdx.edu
Thu Apr 14 22:40:53 UTC 2011
Hello,
I now have a working OpenTheory importer for Isabelle (tested with
Isabelle2011). The code is still kind of a mess, with a bunch of extra
debugging code sitting around, so I'll wait until I've cleaned it up a
bit before I share it. There are still a few improvements that need to
be made, but I think I have all the major bugs fixed now: It can
successfully import the parser-1.5 library (reading the article file
generated by "opentheory info --article parser-1.5").
The implementation adds three new tables to Isabelle's Theory_Data:
1) A set of theorems; there must be an entry here that matches each
"axiom" command.
2) A mapping of type names; there must be a matching entry for each
"typeOp" command.
3) A mapping of constant names; there must be a matching entry for
each "const" command.
The set of theorems is extended using the [opentheory] attribute, like this:
lemma [opentheory]: "ALL m::nat. m + 0 = m"
by simp
(I have lots of these kinds of proofs for natural numbers and booleans.)
The importer also adds new theorems to the set whenever it processes a
"thm" command. The complete list of theorems can be accessed using the
name "opentheory", which is one of those new dynamic theorem
references in Isabelle; it can be used in proof scripts or anywhere
just like any other theorem name.
The other tables are extended using "setup" commands with "add_tyop"
and "add_const" ML functions, like this:
setup {*
fold OpenTheory.add_tyop
[("->", @{type_name "fun"}),
("bool", @{type_name "bool"}),
("Number.Natural.natural", @{type_name "nat"}),
("Data.Pair.*", @{type_name "prod"})]
*}
setup {*
fold OpenTheory.add_const
[("=", @{const_name "HOL.eq"}),
("Data.Bool.!", @{const_name "All"}),
("Data.Bool.==>", @{const_name "HOL.implies"}),
("Data.Bool.\\\\/", @{const_name "HOL.disj"}),
("Data.Bool./\\\\", @{const_name "HOL.conj"}),
("Data.Bool.cond", @{const_name "If"}),
("Data.Bool.select", @{const_name "Eps"})]
*}
The importer should also extend these tables whenever it defines a new
constant or type, but I haven't implemented this yet. Another nice
feature would be a way for users to influence how the importer chooses
names for newly-defined constants and types. Right now it takes the
names directly from the strings in the article file, which isn't so
nice for names like "HOLLight._dest_rec" (Isabelle's parser can't
handle names that start with underscores).
Once I clean up the code, I'm not sure what I should do with it... I
suppose I could add it to the Isabelle repo, but I'm not sure if I
want to advertise to Munich crowd that I've been doing all this work
that is unrelated to finishing my thesis :)
- Brian
More information about the opentheory-users
mailing list