From ramana.kumar at gmail.com Tue Oct 4 09:14:44 2011 From: ramana.kumar at gmail.com (Ramana Kumar) Date: Tue, 4 Oct 2011 10:14:44 +0100 Subject: [opentheory-users] opentheory tool to aid debugging Message-ID: Is it possible to coax the opentheory tool into removing Unwanted.id (as it would usually do for a valid article) from an invalid article? I'm trying to debug my article writer, and I would like to use my reader because I can make it produce whatever custom output easily, but my reader doesn't deal with Unwanted.id properly. Alternatively, would it be easy to get the opentheory tool to check that a specific theorem (or object) is at the top of the stack when it sees a debugging command encoded in article comments? I've been thinking of pretty-printing a theorem (or logging commands to produce its hypothesis list and conclusion) in article comments just after the article commands that are supposed to prove the theorem, in order to find out where exactly my article writer is going wrong. (I know it's going wrong somewhere because eventually an inference rule command fails.) From ramana.kumar at gmail.com Tue Oct 4 23:05:12 2011 From: ramana.kumar at gmail.com (Ramana Kumar) Date: Wed, 5 Oct 2011 00:05:12 +0100 Subject: [opentheory-users] opentheory tool to aid debugging In-Reply-To: References: Message-ID: FYI, I found an alternative method for debugging. Namely, after logging a proof, also log the desired theorem as a pair of a term list and a term, then immediately pop that pair off the stack. Then, when reading the article, if you encounter a pop command where the top of the stack is a pair followed by a theorem, check whether they match. This avoids having to deal with pretty-printing/parsing in comments and with any issues in the translation of names, since that's all dealt with by the usual term-logging and reading machinery. On Tue, Oct 4, 2011 at 10:14 AM, Ramana Kumar wrote: > Is it possible to coax the opentheory tool into removing Unwanted.id > (as it would usually do for a valid article) from an invalid article? > > I'm trying to debug my article writer, and I would like to use my > reader because I can make it produce whatever custom output easily, > but my reader doesn't deal with Unwanted.id properly. > > Alternatively, would it be easy to get the opentheory tool to check > that a specific theorem (or object) is at the top of the stack when it > sees a debugging command encoded in article comments? I've been > thinking of pretty-printing a theorem (or logging commands to produce > its hypothesis list and conclusion) in article comments just after the > article commands that are supposed to prove the theorem, in order to > find out where exactly my article writer is going wrong. (I know it's > going wrong somewhere because eventually an inference rule command > fails.) > From joe at gilith.com Fri Oct 7 01:26:44 2011 From: joe at gilith.com (Joe Hurd) Date: Thu, 6 Oct 2011 18:26:44 -0700 Subject: [opentheory-users] Fwd: tool config file In-Reply-To: References: Message-ID: I'm cc'ing this thread to the opentheory mailing list, to keep people informed. Cheers, Joe ---------- Forwarded message ---------- From: Joe Hurd Date: Thu, Oct 6, 2011 at 6:23 PM Subject: Re: tool config file To: Ramana Kumar Hi Ramana, How about an environment variable? I've just released a version that uses the directory in the OPENTHEORY environment variable as the theory directory, if it exists. Cheers, Joe On Thu, Oct 6, 2011 at 3:42 AM, Ramana Kumar wrote: > Is it possible to specify, perhaps in something like an > ~/.opentheoryrc file, a default root directory and maybe other > options? > > Then I wouldn't have to keep specifying the -d option whenever I use > the tool if I am using a non-standard directory location. > > From joe at gilith.com Fri Oct 7 01:40:17 2011 From: joe at gilith.com (Joe Hurd) Date: Thu, 6 Oct 2011 18:40:17 -0700 Subject: [opentheory-users] the Unwanted namespace In-Reply-To: References: Message-ID: Hi Ramana, > Is the Unwanted namespace documented? There is currently not any documentation for the Unwanted namespace. > What is the intended usage? As a place to map evil theorem-specific "tags" that could be post-processed away by the opentheory tool, rather than burdening the proof exporter with the task. > I am attempting to use Unwanted.id for various HOL4 constants that are > semantically identity functions, although sometimes at specific types > (these constants include arithmetic$NUMERAL and marker$Abbrev). I was > hoping, naively, to just record proofs that might contain these > constants as they are, translating each one to Unwanted.id, and have > the opentheory tool remove them automatically. Is this a realistic > hope? Yes, that is exactly how I use it with the HOL Light NUMERAL tag. > Currently the tool is failing to process an article because at > some point an extra Unwanted.id means two terms that should be > alpha-convertible aren't. (But I don't think it's the first occurrence > of Unwanted.id in the article.) The main problem I found was that I'd get extra theory assumptions of the form |- !n. n = n because I hadn't accounted for the definition of NUMERAL: |- !n. NUMERAL n = n Is there any way of reducing your problem to a simple case that I could look at? > Maybe I'm supposed to do some kind of > extra work preprocessing theorems before recording their proofs...? No, the intent is that the opentheory tool does all the work as a post-processing step. > Would it make sense for other names to live in the Unwanted namespace, > with semantics different from the identity function? Perhaps. I believe "K" term tags are also used in HOL4, where !x y. K x y = x which might result in a similar use for Unwanted.k in the future. Cheers, Joe From joe at gilith.com Fri Oct 7 01:43:10 2011 From: joe at gilith.com (Joe Hurd) Date: Thu, 6 Oct 2011 18:43:10 -0700 Subject: [opentheory-users] opentheory tool to aid debugging In-Reply-To: References: Message-ID: Hi Ramana, I've been thinking about this, and I was wondering whether it would be helpful for the opentheory tool to support debugging commands in the article file, along these lines: #DEBUG# stack which would print the stack at that point. What do you think? If you like the idea, what other debug commands would be useful? Cheers, Joe On Tue, Oct 4, 2011 at 4:05 PM, Ramana Kumar wrote: > FYI, I found an alternative method for debugging. > Namely, after logging a proof, also log the desired theorem as a pair > of a term list and a term, then immediately pop that pair off the > stack. > Then, when reading the article, if you encounter a pop command where > the top of the stack is a pair followed by a theorem, check whether > they match. > This avoids having to deal with pretty-printing/parsing in comments > and with any issues in the translation of names, since that's all > dealt with by the usual term-logging and reading machinery. > > On Tue, Oct 4, 2011 at 10:14 AM, Ramana Kumar wrote: >> Is it possible to coax the opentheory tool into removing Unwanted.id >> (as it would usually do for a valid article) from an invalid article? >> >> I'm trying to debug my article writer, and I would like to use my >> reader because I can make it produce whatever custom output easily, >> but my reader doesn't deal with Unwanted.id properly. >> >> Alternatively, would it be easy to get the opentheory tool to check >> that a specific theorem (or object) is at the top of the stack when it >> sees a debugging command encoded in article comments? I've been >> thinking of pretty-printing a theorem (or logging commands to produce >> its hypothesis list and conclusion) in article comments just after the >> article commands that are supposed to prove the theorem, in order to >> find out where exactly my article writer is going wrong. (I know it's >> going wrong somewhere because eventually an inference rule command >> fails.) >> > > _______________________________________________ > opentheory-users mailing list > opentheory-users at gilith.com > http://www.gilith.com/mailman/listinfo/opentheory-users > From ramana.kumar at gmail.com Fri Oct 7 09:03:19 2011 From: ramana.kumar at gmail.com (Ramana Kumar) Date: Fri, 7 Oct 2011 10:03:19 +0100 Subject: [opentheory-users] the Unwanted namespace In-Reply-To: References: Message-ID: >> Currently the tool is failing to process an article because at >> some point an extra Unwanted.id means two terms that should be >> alpha-convertible aren't. (But I don't think it's the first occurrence >> of Unwanted.id in the article.) > > Is there any way of reducing your problem to a simple case that I could look at? > Maybe - any suggestions? In the meantime the complete (gzipped) article is available here http://cam.xrchz.net/llist.art.gz. Maybe running opentheory with some extra debugging code to see whatever it does to Unwanted.id tags during reading this article will be helpful... FYI the error I get is ... in ObjectProv.mkEqMp: in Thm.eqMp: terms not alpha-equivalent: Number.Natural.+ (Number.Numeral.bit2 Number.Numeral.zero) (Number.Numeral.bit1 Number.Numeral.zero) = Number.Natural.+ (Number.Numeral.bit2 Number.Numeral.zero) (Number.Numeral.bit1 Number.Numeral.zero) vs Number.Natural.+ (Number.Numeral.bit2 Number.Numeral.zero) (Number.Numeral.bit1 Number.Numeral.zero) = Unwanted.id (Number.Natural.+ (Number.Numeral.bit2 Number.Numeral.zero) (Number.Numeral.bit1 Number.Numeral.zero)) different term structure at path 10 subterms: Number.Natural.+ (Number.Numeral.bit2 Number.Numeral.zero) vs Unwanted.id From ramana.kumar at gmail.com Fri Oct 7 09:05:24 2011 From: ramana.kumar at gmail.com (Ramana Kumar) Date: Fri, 7 Oct 2011 10:05:24 +0100 Subject: [opentheory-users] the Unwanted namespace In-Reply-To: References: Message-ID: it occurs to me that it might be a types problem - would the opentheory tool require the Unwanted.id constant to be created with a particular type? On Fri, Oct 7, 2011 at 10:03 AM, Ramana Kumar wrote: >>> Currently the tool is failing to process an article because at >>> some point an extra Unwanted.id means two terms that should be >>> alpha-convertible aren't. (But I don't think it's the first occurrence >>> of Unwanted.id in the article.) >> >> Is there any way of reducing your problem to a simple case that I could look at? >> > > Maybe - any suggestions? In the meantime the complete (gzipped) > article is available here http://cam.xrchz.net/llist.art.gz. Maybe > running opentheory with some extra debugging code to see whatever it > does to Unwanted.id tags during reading this article will be > helpful... > > FYI the error I get is > > ... > in ObjectProv.mkEqMp: > in Thm.eqMp: > terms not alpha-equivalent: > ? ? Number.Natural.+ (Number.Numeral.bit2 Number.Numeral.zero) > ? ? ? (Number.Numeral.bit1 Number.Numeral.zero) = > ? ? Number.Natural.+ (Number.Numeral.bit2 Number.Numeral.zero) > ? ? ? (Number.Numeral.bit1 Number.Numeral.zero) > ?vs Number.Natural.+ (Number.Numeral.bit2 Number.Numeral.zero) > ? ? ? (Number.Numeral.bit1 Number.Numeral.zero) = > ? ? Unwanted.id > ? ? ? (Number.Natural.+ (Number.Numeral.bit2 Number.Numeral.zero) > ? ? ? ? ?(Number.Numeral.bit1 Number.Numeral.zero)) > different term structure at path 10 subterms: > ? ? Number.Natural.+ (Number.Numeral.bit2 Number.Numeral.zero) > ?vs Unwanted.id > From ramana.kumar at gmail.com Fri Oct 7 09:13:41 2011 From: ramana.kumar at gmail.com (Ramana Kumar) Date: Fri, 7 Oct 2011 10:13:41 +0100 Subject: [opentheory-users] opentheory tool to aid debugging In-Reply-To: References: Message-ID: On Fri, Oct 7, 2011 at 2:43 AM, Joe Hurd wrote: > I've been thinking about this, and I was wondering whether it would be > helpful for the opentheory tool to support debugging commands in the > article file, along these lines: > > #DEBUG# stack > > which would print the stack at that point. > > What do you think? If you like the idea, what other debug commands > would be useful? I think it's a good idea in general to have some debugging commands, and using the #DEBUG for them also seems good. I don't see myself using the stack command, but it's an obvious one to include. The ones I would find most useful are copies of all the normal term-constructing commands (appTerm, varType, const, ref, etc.) and commands to test whether two objects at the top of the stack are equal (perhaps raising an exception if not), or, more specifically, whether a theorem object is equal to a pair of a list of hypotheses and a conclusion. I would leave it to the article writer to ensure that the article is valid (modulo the reasons for debugging in the first place) both with and without the #DEBUG commands being run (since I would want them to be able to manipulate the stack and dictionary). From ramana.kumar at gmail.com Sat Oct 8 09:11:49 2011 From: ramana.kumar at gmail.com (Ramana Kumar) Date: Sat, 8 Oct 2011 10:11:49 +0100 Subject: [opentheory-users] Prover9 HOL integration via OpenTheory In-Reply-To: References: Message-ID: Further to this, it would be nice to try the same method with Metis. Specifically I think that would mean writing a HOL->FOL mapping for standalone metis, where the HOL is encoded as an article, and then also a proof->article translation for metis proofs. Metis was designed for direct integration, so then we could compare how much worse the roundabout integration performs compared to the direct one. If it's not too bad, that would make integration via OpenTheory look like an OK idea (not just for portability in desperate circumstances). On Wed, Sep 14, 2011 at 11:48 PM, Joe Hurd wrote: > Hi Ramana, > > This sounds like a great project! I can think of lots of tactics I'd > like to share between theorem provers, and this project was successful > it could provide a template that could be instantiated for primality > proving, the Omega test, etc. > > I'd be happy to help by contributing the HOL Light reader. One thing I > might suggest, having thought a little about this application, is > related to this: > >> The input article file is "non-standard" in that the semantics is to return >> the higher order logic term left at the top of the stack after processing. >> Thus the input article represents a term. > > It's perfectly possible to use a standard article that contains one theorem > > {hypotheses} |- conclusion > > where the proof is simply "axiom". Then the tactic could prove this > theorem with a proper proof extracted from prover9, and return this as > another article. > > Tactics generally operate on sequents > > {assumptions} ?- goal > > so it's natural to serialize this as an article containing a single > theorem with a null (axiom) proof. > > Cheers, > > Joe > > _______________________________________________ > opentheory-users mailing list > opentheory-users at gilith.com > http://www.gilith.com/mailman/listinfo/opentheory-users > From ramana.kumar at gmail.com Sat Oct 8 19:02:12 2011 From: ramana.kumar at gmail.com (Ramana Kumar) Date: Sat, 8 Oct 2011 20:02:12 +0100 Subject: [opentheory-users] the Unwanted namespace In-Reply-To: References: Message-ID: I've uploaded a much smaller (~2000 lines) gzipped article to cam.xrchz.net/Unwanted.art.gz which fails with a similar error: FATAL ERROR: opentheory failed: in Article.fromTextFile: error in file "Unwanted.art" around line 1769: eqMp 313 def while executing eqMp command: stack = [|- Unwanted.id x <=> let x <- x in F, |- (x <=> let x <- x in F) <=> x <=> F, |- (x <=> F) <=> (x <=> F) <=> T, x, |- (!x. x <=> F) ==> let x <- x in x <=> F, |- (let x <- x in x <=> F) <=> x <=> F, [[], [[x, T]]], |- (~) = (~), |- (~T <=> ~F) <=> ~T <=> T, |- (<=>) (T <=> F) = (<=>) (T <=> F), |- (<=>) = (<=>), |- Unwanted.id = \x. F] in ObjectProv.mkEqMp: in Thm.eqMp: terms not alpha-equivalent: Unwanted.id x <=> let x <- x in F vs x <=> let x <- x in F different term structure at path 01 subterms: Unwanted.id x vs x However, in this case I would want processing to fail somewhere (perhaps not like this), because I think otherwise the article's exports would include |- T = F (and it would have consistent imports). Perhaps the same safeguard (if that is indeed what I'm running into here) is preventing my original article from being read, and so I'm not using Unwanted.id correctly there somehow..? On Fri, Oct 7, 2011 at 10:05 AM, Ramana Kumar wrote: > it occurs to me that it might be a types problem - would the > opentheory tool require the Unwanted.id constant to be created with a > particular type? > > On Fri, Oct 7, 2011 at 10:03 AM, Ramana Kumar wrote: >>>> Currently the tool is failing to process an article because at >>>> some point an extra Unwanted.id means two terms that should be >>>> alpha-convertible aren't. (But I don't think it's the first occurrence >>>> of Unwanted.id in the article.) >>> >>> Is there any way of reducing your problem to a simple case that I could look at? >>> >> >> Maybe - any suggestions? In the meantime the complete (gzipped) >> article is available here http://cam.xrchz.net/llist.art.gz. Maybe >> running opentheory with some extra debugging code to see whatever it >> does to Unwanted.id tags during reading this article will be >> helpful... >> >> FYI the error I get is >> >> ... >> in ObjectProv.mkEqMp: >> in Thm.eqMp: >> terms not alpha-equivalent: >> ? ? Number.Natural.+ (Number.Numeral.bit2 Number.Numeral.zero) >> ? ? ? (Number.Numeral.bit1 Number.Numeral.zero) = >> ? ? Number.Natural.+ (Number.Numeral.bit2 Number.Numeral.zero) >> ? ? ? (Number.Numeral.bit1 Number.Numeral.zero) >> ?vs Number.Natural.+ (Number.Numeral.bit2 Number.Numeral.zero) >> ? ? ? (Number.Numeral.bit1 Number.Numeral.zero) = >> ? ? Unwanted.id >> ? ? ? (Number.Natural.+ (Number.Numeral.bit2 Number.Numeral.zero) >> ? ? ? ? ?(Number.Numeral.bit1 Number.Numeral.zero)) >> different term structure at path 10 subterms: >> ? ? Number.Natural.+ (Number.Numeral.bit2 Number.Numeral.zero) >> ?vs Unwanted.id >> > From joe at gilith.com Sat Oct 8 22:32:57 2011 From: joe at gilith.com (Joe Hurd) Date: Sat, 8 Oct 2011 15:32:57 -0700 Subject: [opentheory-users] the Unwanted namespace In-Reply-To: References: Message-ID: Hi Ramana, I've taken a look at your file and your error messages, and I think perhaps it will help if I explain the current proof rewriting strategy for eliminating Unwanted.id. It's only two OpenTheory commands, appTerm and appThm, that change their behavior thusly appTerm (Unwanted.id) (tm) --> (tm) appThm (|- Unwanted.id = Unwanted.id) (|- x = y) --> (|- x = y) In the first error you encountered the proof involved deducing something like |- Unwanted.id = Natural.+ 0 and then using appThm with this as the first argument, but that doesn't fit into the pattern above for eliminating Unwanted.id. [I'm not entirely sure what's going on in your second example, but the theorem (|- Unwanted.id = \x. F) on the stack is perhaps cause for concern.] This proof post-processing is extremely simple and ad-hoc right now, and as you can see it can only handle one very special kind of pattern. I'd be interested in discussing ways to expand its scope, or alternatively perhaps there are ways to recast your proofs into the existing pattern. Cheers, Joe On Sat, Oct 8, 2011 at 12:02 PM, Ramana Kumar wrote: > I've uploaded a much smaller (~2000 lines) gzipped article to > cam.xrchz.net/Unwanted.art.gz which fails with a similar error: > > FATAL ERROR: opentheory failed: > in Article.fromTextFile: > error in file "Unwanted.art" around line 1769: > eqMp > 313 > def > while executing eqMp command: > ?stack = > ? ?[|- Unwanted.id x <=> let x <- x in F, > ? ? |- (x <=> let x <- x in F) <=> x <=> F, > ? ? |- (x <=> F) <=> (x <=> F) <=> T, x, > ? ? |- (!x. x <=> F) ==> let x <- x in x <=> F, > ? ? |- (let x <- x in x <=> F) <=> x <=> F, [[], [[x, T]]], |- (~) = (~), > ? ? |- (~T <=> ~F) <=> ~T <=> T, |- (<=>) (T <=> F) = (<=>) (T <=> F), > ? ? |- (<=>) = (<=>), |- Unwanted.id = \x. F] > in ObjectProv.mkEqMp: > in Thm.eqMp: > terms not alpha-equivalent: > ? ? Unwanted.id x <=> let x <- x in F > ?vs x <=> let x <- x in F > different term structure at path 01 subterms: Unwanted.id x vs x > > However, in this case I would want processing to fail somewhere > (perhaps not like this), because I think otherwise the article's > exports would include |- T = F (and it would have consistent imports). > Perhaps the same safeguard (if that is indeed what I'm running into > here) is preventing my original article from being read, and so I'm > not using Unwanted.id correctly there somehow..? > > On Fri, Oct 7, 2011 at 10:05 AM, Ramana Kumar wrote: >> it occurs to me that it might be a types problem - would the >> opentheory tool require the Unwanted.id constant to be created with a >> particular type? >> >> On Fri, Oct 7, 2011 at 10:03 AM, Ramana Kumar wrote: >>>>> Currently the tool is failing to process an article because at >>>>> some point an extra Unwanted.id means two terms that should be >>>>> alpha-convertible aren't. (But I don't think it's the first occurrence >>>>> of Unwanted.id in the article.) >>>> >>>> Is there any way of reducing your problem to a simple case that I could look at? >>>> >>> >>> Maybe - any suggestions? In the meantime the complete (gzipped) >>> article is available here http://cam.xrchz.net/llist.art.gz. Maybe >>> running opentheory with some extra debugging code to see whatever it >>> does to Unwanted.id tags during reading this article will be >>> helpful... >>> >>> FYI the error I get is >>> >>> ... >>> in ObjectProv.mkEqMp: >>> in Thm.eqMp: >>> terms not alpha-equivalent: >>> ? ? Number.Natural.+ (Number.Numeral.bit2 Number.Numeral.zero) >>> ? ? ? (Number.Numeral.bit1 Number.Numeral.zero) = >>> ? ? Number.Natural.+ (Number.Numeral.bit2 Number.Numeral.zero) >>> ? ? ? (Number.Numeral.bit1 Number.Numeral.zero) >>> ?vs Number.Natural.+ (Number.Numeral.bit2 Number.Numeral.zero) >>> ? ? ? (Number.Numeral.bit1 Number.Numeral.zero) = >>> ? ? Unwanted.id >>> ? ? ? (Number.Natural.+ (Number.Numeral.bit2 Number.Numeral.zero) >>> ? ? ? ? ?(Number.Numeral.bit1 Number.Numeral.zero)) >>> different term structure at path 10 subterms: >>> ? ? Number.Natural.+ (Number.Numeral.bit2 Number.Numeral.zero) >>> ?vs Unwanted.id >>> >> > > _______________________________________________ > opentheory-users mailing list > opentheory-users at gilith.com > http://www.gilith.com/mailman/listinfo/opentheory-users > From ramana.kumar at gmail.com Sat Oct 8 23:03:51 2011 From: ramana.kumar at gmail.com (Ramana Kumar) Date: Sun, 9 Oct 2011 00:03:51 +0100 Subject: [opentheory-users] the Unwanted namespace In-Reply-To: References: Message-ID: > [I'm not entirely sure what's going on in your second example, but the > theorem (|- Unwanted.id = \x. F) on the stack is perhaps cause for > concern.] I was deliberately trying to expose a possible unsoundness in the system, hence the scary-looking theorem. But now I see the only semantic effects implemented for Unwanted.id are less susceptible than I thought. > This proof post-processing is extremely simple and ad-hoc right now, > and as you can see it can only handle one very special kind of > pattern. I'd be interested in discussing ways to expand its scope, or > alternatively perhaps there are ways to recast your proofs into the > existing pattern. > Since my proofs are currently generated directly from existing HOL4 script files, I don't see how I could recast them into this pattern in any way easier than it would be to just pre-process all theorems by rewriting with the definitions of these unwanted constants before logging. But I'd still rather have the opentheory tool do all that processing... So let's have the discussion about ways to expand its scope. I eventually came to the conclusion that appTerm and appThm are the only commands that would ever need to change, because they are the only way a term of the form (Unwanted.id t) can enter the virtual machine's state. Perhaps opentheory should automatically just do an explicit proof after absThm (|- Unwanted.id = f) (|- x = y) of (|- x = f y), for all x y and f, using an assumption (|- Unwanted.id x = x). Also, you would need to prevent the name Unwanted.id from being used by defineConst. From joe at gilith.com Mon Oct 10 02:46:38 2011 From: joe at gilith.com (Joe Hurd) Date: Sun, 9 Oct 2011 19:46:38 -0700 Subject: [opentheory-users] the Unwanted namespace In-Reply-To: References: Message-ID: Hi Ramana, > So let's have the discussion about ways to expand its > scope. Sure! > I eventually came to the conclusion that appTerm and appThm are the > only commands that would ever need to change, because they are the > only way a term of the form (Unwanted.id t) can enter the virtual > machine's state. Unfortunately I can see other ways that terms like these could enter the state, such as appThm (|- (\f. f x) = t) (|- Unwanted.id = u) followed by betaConv of the LHS at a later point. > Perhaps opentheory should automatically just do an explicit proof > after absThm (|- Unwanted.id = f) (|- x = y) of (|- x = f y), for all > x y and f, using an assumption (|- Unwanted.id x = x). Also, you would > need to prevent the name Unwanted.id from being used by defineConst. I'd really like a scheme that eliminates all occurrences of the Unwanted.id constant from a proof, if that was possible. And by this I mean that grepping the resulting article for occurrences of the "Unwanted" namespace will not turn up any results. I believe the highly specialized scheme that the opentheory tool currently implements has this property, but I don't know if it's possible in general. If there is a proof rewriting strategy that achieves this, I speculate that it will not require an explicit definition of Unwanted.id in the form of a theorem. Cheers, Joe From ramana.kumar at gmail.com Mon Oct 10 07:55:23 2011 From: ramana.kumar at gmail.com (Ramana Kumar) Date: Mon, 10 Oct 2011 08:55:23 +0100 Subject: [opentheory-users] the Unwanted namespace In-Reply-To: References: Message-ID: > Unfortunately I can see other ways that terms like these could enter > the state, such as > > appThm (|- (\f. f x) = t) (|- Unwanted.id = u) > > followed by betaConv of the LHS at a later point. So we would need to consider betaConv too... Anything else? > I'd really like a scheme that eliminates all occurrences of the > Unwanted.id constant from a proof, if that was possible. And by this I > mean that grepping the resulting article for occurrences of the > "Unwanted" namespace will not turn up any results. OK. I think your current treatment of appTerm is fine - it won't fail, and it removes those occurrences of Unwanted.id from the article file. So let's consider appThm and betaConv. These are the general forms I see introducing unwanted terms: appThm (|- Unwanted.id = f) (|- x = y) appThm (|- f = Unwanted.id) (|- x = y) betaConv (|- (\f. t[f x]) Unwanted.id) What happens if you just change the semantics of all of these commands to replace any resulting (Unwanted.id t) terms by (t), and also prevent Unwanted.id from being defined (to stop an obvious soundness problem)? From ramana.kumar at gmail.com Mon Oct 10 16:32:12 2011 From: ramana.kumar at gmail.com (Ramana Kumar) Date: Mon, 10 Oct 2011 17:32:12 +0100 Subject: [opentheory-users] Prover9 HOL integration via OpenTheory In-Reply-To: References: Message-ID: Remembering that HOL4 already has an integration, with a nice interface, of the QBF solver Squolem (due mainly to Tjark Weber), I decided to try this idea out on that. And it seems to work. With only 17 lines of newly-written standard ML, I can produce an executable (available gzipped at cam.xrchz.net/holqbf.gz) that: 1. reads an article in from standard input 2. assumes the article produces a theorem with the axiom command that has the QBF to consider as its conclusion 3. providing squolem2 is installed, calls squolem to decide whether the QBF is valid or not 4. reconstructs the proof of (in)validity in HOL, and 5. writes an article representing that proof to standard output (Steps 3 and 4 just reuse the existing HOL4 integration.) I only tried it on some very simple examples (using HOL4 to read and write articles, and also trying opentheory on the proof articles). The proofs might depend on assumptions that are all in HOL4's standard library, and hopefully mostly in the OpenTheory standard library too (but probably not). An obvious weakness at this point are that I can't think of anything better to produce than a binary, which isn't very portable. The source code is spread over the HOL4 repository. Any ideas? There are bound to be major performance issues. And it would be nice to somehow enforce using only standard library assumptions. I don't think Isabelle/HOL currently has a QBF integration. HOL-Light does have one, but it's based on a different proof reconstruction method. If anyone here (especially with some expertise in those two systems) would be interested in working with me to test (and improve) this "integration port" on those systems, please let me know :) On Sat, Oct 8, 2011 at 10:11 AM, Ramana Kumar wrote: > Further to this, it would be nice to try the same method with Metis. > Specifically I think that would mean writing a HOL->FOL mapping for > standalone metis, where the HOL is encoded as an article, and then > also a proof->article translation for metis proofs. Metis was designed > for direct integration, so then we could compare how much worse the > roundabout integration performs compared to the direct one. If it's > not too bad, that would make integration via OpenTheory look like an > OK idea (not just for portability in desperate circumstances). > > On Wed, Sep 14, 2011 at 11:48 PM, Joe Hurd wrote: >> Hi Ramana, >> >> This sounds like a great project! I can think of lots of tactics I'd >> like to share between theorem provers, and this project was successful >> it could provide a template that could be instantiated for primality >> proving, the Omega test, etc. >> >> I'd be happy to help by contributing the HOL Light reader. One thing I >> might suggest, having thought a little about this application, is >> related to this: >> >>> The input article file is "non-standard" in that the semantics is to return >>> the higher order logic term left at the top of the stack after processing. >>> Thus the input article represents a term. >> >> It's perfectly possible to use a standard article that contains one theorem >> >> {hypotheses} |- conclusion >> >> where the proof is simply "axiom". Then the tactic could prove this >> theorem with a proper proof extracted from prover9, and return this as >> another article. >> >> Tactics generally operate on sequents >> >> {assumptions} ?- goal >> >> so it's natural to serialize this as an article containing a single >> theorem with a null (axiom) proof. >> >> Cheers, >> >> Joe >> >> _______________________________________________ >> opentheory-users mailing list >> opentheory-users at gilith.com >> http://www.gilith.com/mailman/listinfo/opentheory-users >> > From joe at gilith.com Mon Oct 10 17:28:34 2011 From: joe at gilith.com (Joe Hurd) Date: Mon, 10 Oct 2011 10:28:34 -0700 Subject: [opentheory-users] Prover9 HOL integration via OpenTheory In-Reply-To: References: Message-ID: Hi Ramana, This is very cool! I like this idea of a "standalone tactic". > An obvious weakness at this point are that I can't think of anything > better to produce than a binary, which isn't very portable. The source > code is spread over the HOL4 repository. Any ideas? What I would love to see is these kind of tactics available as "web services", so during theorem proving you could send goals to an URL that would try to prove them using specialized tactics and send you back a proof if they were successful. The nice thing about this architecture is that the user wouldn't need to install the external tools, and even if the proof tool was non-deterministic the proof would be saved by the user so there wouldn't be any problems replaying it. > And it would be nice to somehow enforce using only standard library assumptions. Agreed - such tactics should track the standard library, just like theories that depend on the standard library. I'm hoping that the standard library will converge quickly once people start using it and we develop guidelines for exported theorems. Cheers, Joe From Mike.Gordon at cl.cam.ac.uk Mon Oct 10 17:43:35 2011 From: Mike.Gordon at cl.cam.ac.uk (Mike Gordon) Date: Mon, 10 Oct 2011 18:43:35 +0100 Subject: [opentheory-users] Prover9 HOL integration via OpenTheory In-Reply-To: References: Message-ID: Yes, cool indeed ... > What I would love to see is these kind of tactics available as "web > services" ... is this the start of cloud theorem proving! -- Mike On Mon, Oct 10, 2011 at 6:28 PM, Joe Hurd wrote: > Hi Ramana, > > This is very cool! I like this idea of a "standalone tactic". > >> An obvious weakness at this point are that I can't think of anything >> better to produce than a binary, which isn't very portable. The source >> code is spread over the HOL4 repository. Any ideas? > > What I would love to see is these kind of tactics available as "web > services", so during theorem proving you could send goals to an URL > that would try to prove them using specialized tactics and send you > back a proof if they were successful. The nice thing about this > architecture is that the user wouldn't need to install the external > tools, and even if the proof tool was non-deterministic the proof > would be saved by the user so there wouldn't be any problems replaying > it. > >> And it would be nice to somehow enforce using only standard library assumptions. > > Agreed - such tactics should track the standard library, just like > theories that depend on the standard library. I'm hoping that the > standard library will converge quickly once people start using it and > we develop guidelines for exported theorems. > > Cheers, > > Joe > From joe at gilith.com Wed Oct 12 21:54:12 2011 From: joe at gilith.com (Joe Hurd) Date: Wed, 12 Oct 2011 14:54:12 -0700 Subject: [opentheory-users] package versions In-Reply-To: References: Message-ID: Hi Ramana, I just implemented this "requires" package information, and wrote a brief description of the syntax here: http://www.gilith.com/research/opentheory/theory.html http://www.gilith.com/research/opentheory/example-1.0.html What happens is when a theory file (*.thy) is installed, the opentheory tool gets the "required" package names, looks up the latest version of these packages that have been installed, and checks that the theorems proved by these theory packages completely cover the assumptions of the theory. No "requires" tags is a warning, no version of these packages installed is an error, and uncovered assumptions are listed as warnings. > For step 2, which assumptions need to be satisfied? Would you just > check that at least one is satisfied? Or do you mean all should be? I > imagine it would be common to only satisfy a subset of the assumptions > using other packages, but I don't think it's worthwhile for a packager > to specify exactly which... although maybe they can do that to an > extent by the way they structure the blocks in a package file. For a theory to be useful there must be some way to satisfy all of its assumptions, so the author is asked to list a set of theories that achieve this (sort of an existence proof that the theory can be used). Right now warnings will be produced for parametrized theories and axiom theories, but I think the feature is generally useful enough to be enabled, and we can work out the right behavior for unusual theories later. > But it seems like there's no theory-semantics content to a "requires" tag? Correct - it's just an extra check to help the theory author. I'll be interested in what you think of using the new feature. Cheers, Joe From ramana.kumar at gmail.com Thu Oct 13 09:09:34 2011 From: ramana.kumar at gmail.com (Ramana Kumar) Date: Thu, 13 Oct 2011 10:09:34 +0100 Subject: [opentheory-users] Prover9 HOL integration via OpenTheory In-Reply-To: References: Message-ID: On Mon, Oct 10, 2011 at 6:28 PM, Joe Hurd wrote: > What I would love to see is these kind of tactics available as "web > services", so during theorem proving you could send goals to an URL > that would try to prove them using specialized tactics and send you > back a proof if they were successful. The nice thing about this > architecture is that the user wouldn't need to install the external > tools, and even if the proof tool was non-deterministic the proof > would be saved by the user so there wouldn't be any problems replaying > it. I've uploaded a rough-and-ready cgi script that runs the qbf integration here: http://cam.xrchz.net/holqbf.cgi You either type (or paste) an article into the text box there and click submit, or you can pass it programmatically using, for example, curl: $ curl -F "article=@/path/to/term.art" cam.xrchz.net/holqbf.cgi and it will (if successful) return a plain text file which is an article encoding a proof of the term (or its negation). If unsuccessful it will hopefully return a plain text file with some kind of error message. I'd love to get feedback from anyone who uses this - it will probably break and I'm happy to try to fix it. I might eventually try to write a tactic in HOL Light or Isabelle that simply calls out to this service... (it's not so great for HOL4 since the code originally came from HOL4 so you can just the tactic there already) From ramana.kumar at gmail.com Thu Oct 13 12:54:56 2011 From: ramana.kumar at gmail.com (Ramana Kumar) Date: Thu, 13 Oct 2011 13:54:56 +0100 Subject: [opentheory-users] package versions In-Reply-To: References: Message-ID: On Wed, Oct 12, 2011 at 10:54 PM, Joe Hurd wrote: > I just implemented this "requires" package information, and wrote a > brief description of the syntax here: > > http://www.gilith.com/research/opentheory/theory.html > http://www.gilith.com/research/opentheory/example-1.0.html Great - thanks! > What happens is when a theory file (*.thy) is installed, the > opentheory tool gets the "required" package names, looks up the latest > version of these packages that have been installed, and checks that > the theorems proved by these theory packages completely cover the > assumptions of the theory. > > No "requires" tags is a warning, no version of these packages > installed is an error, and uncovered assumptions are listed as > warnings. It seems like the check that the required theories are actually installed isn't done right away, so first the article is processed (possibly taking a long time) before failing because of the requires line? Also, after this happened to me and I had to install base, I then ran into this problem: FATAL ERROR: opentheory failed: Error: package cl-0.5 is already staged for installation package install from theory file failed Even though cl does not appear in the list of installed packages. Now I suppose I have to manually remove the "staged" installation by rm -rf $OPENTHEORY/staging/cl-0.5 ? On the topic of staging, after I produce an article by proof-logging, would it be a good idea to immediately run opentheory info --article -o foo.art foo.art to clean it up, or would that be redundant given that I might eventually create a .thy file for it and process it somewhere along the way with the tool? > Right now warnings will be produced for parametrized theories and > axiom theories, but I think the feature is generally useful enough to > be enabled, and we can work out the right behavior for unusual > theories later. I would rather hope that parameterized theories would become so common as to be considered "the norm"... but I think your current default treatment of "requires" is fine for now. > I'll be interested in what you think of using the new feature. I uploaded cl-0.5 just now with a requirement for base. Now it only has 30 unsatisfied assumptions left... some (but not all) I think should be in base, or rather, I need to think of a way to make my articles depend on base only (+ maybe some compatibility packages) without touching the HOL4 script files they are logged from. But it seems like the "requires:" tags are being ignored in various places. Like on the repo's package summary, or if I ask the tool: opentheory info --summary cl-0.5 it still lists things like |- T as one of the assumptions (but base provides this). It seems like the only time I got the list of the 30 actually uncovered assumptions was when I issued the "install" command on my .thy file. I think it would be better if the requires tags made a difference to the package summary... From joe at gilith.com Fri Oct 14 18:46:11 2011 From: joe at gilith.com (Joe Hurd) Date: Fri, 14 Oct 2011 11:46:11 -0700 Subject: [opentheory-users] package versions In-Reply-To: References: Message-ID: Hi Ramana, Thanks for the quick response - it's great to get feedback on a feature while it's still fresh in my mind. > It seems like the check that the required theories are actually > installed isn't done right away, so first the article is processed > (possibly taking a long time) before failing because of the requires > line? Good point - I just released a version that checks that some version of the required theories are installed, before beginning the installation of the theory file. > Also, after this happened to me and I had to install base, I then ran > into this problem: > > FATAL ERROR: opentheory failed: > Error: package cl-0.5 is already staged for installation > package install from theory file failed > > Even though cl does not appear in the list of installed packages. Now > I suppose I have to manually remove the "staged" installation by rm > -rf $OPENTHEORY/staging/cl-0.5 ? You could do this, but it's better to use the opentheory cleanup command. > On the topic of staging, after I produce an article by proof-logging, > would it be a good idea to immediately run > ?opentheory info --article -o foo.art foo.art > to clean it up, or would that be redundant given that I might > eventually create a .thy file for it and process it somewhere along > the way with the tool? Articles always get cleaned up as part of the theory installation procedure, but when exporting theories from HOL Light I do an initial clean-up as part of the step to rename type operators and constants into the OpenTheory standard namespace. > I would rather hope that parameterized theories would become so common > as to be considered "the norm"... but I think your current default > treatment of "requires" is fine for now. I thought a little more about this, and have a new plan: 1. I added special code to ignore the 3 standard axioms of higher order logic, so theories that are supposed to be at the base of the theory hierarchy (such as base) can just say "requires: empty" and they won't get warnings about standard axioms. 2. For parametric theories, I think the theory developer should be responsible for constructing a "witness theory" that shows that it is possible to satisfy the input parameters. So, for example, for the "modular" parametric theory in the OpenTheory repo, the author should make a trivial "modular-witness" theory that defines a non-zero "modular" constant. Then modular-witness can be added to the requires list, and all the assumptions are satisfiable. As a side-benefit, the theory developer can be confident that the theory parameters are satisfiable. > I uploaded cl-0.5 just now with a requirement for base. Now it only > has 30 unsatisfied assumptions left... some (but not all) I think > should be in base, or rather, I need to think of a way to make my > articles depend on base only (+ maybe some compatibility packages) > without touching the HOL4 script files they are logged from. Sure - this is what I do exporting from HOL Light. I see that you've already renamed some of your constant names to the OpenTheory standard namespace - if you would like to further standardize your theory I have a few suggestions: 1. add confluent (and possibly other general constants) into the Relation namespace 2. rename your example namespace to something like "CombinatoryLogic" instead of "cl" 3. make sure that all your constant and type operator names are in camel case and begin with a lower case letter > But it seems like the "requires:" tags are being ignored in various > places. Like on the repo's package summary, or if I ask the tool: > ?opentheory info --summary cl-0.5 > it still lists things like |- T as one of the assumptions (but base > provides this). > It seems like the only time I got the list of the 30 actually > uncovered assumptions was when I issued the "install" command on my > .thy file. I'm deliberately keeping the new "requires" functionality contained for now, but I like your suggestion of it being used to produce the opentheory info --summary output. I'll implement this functionality. > I think it would be better if the requires tags made a difference to > the package summary... In the opentheory info --summary case, agreed. But I'm reluctant to use the "requires" information in the HTML "package document" on the repo, because it would need to be updated every time a new version of a required theory got added, and also because theories are supposed to be useful in other contexts than the one the author used. However, I'm willing to update this opinion if people don't actually do this in practice. Cheers, Joe From joe at gilith.com Fri Oct 14 19:37:21 2011 From: joe at gilith.com (Joe Hurd) Date: Fri, 14 Oct 2011 12:37:21 -0700 Subject: [opentheory-users] Prover9 HOL integration via OpenTheory In-Reply-To: References: Message-ID: Hi Ramana, > I've uploaded a rough-and-ready cgi script that runs the qbf > integration here: http://cam.xrchz.net/holqbf.cgi Great work! > You either type (or paste) an article into the text box there and > click submit, or you can pass it programmatically using, for example, > curl: > $ curl -F "article=@/path/to/term.art" cam.xrchz.net/holqbf.cgi > and it will (if successful) return a plain text file which is an > article encoding a proof of the term (or its negation). > If unsuccessful it will hopefully return a plain text file with some > kind of error message. After a bit of wrangling I was able to extract the goal !x. ?y. !z. (x \/ z) /\ y from HOL Light in article format, and when I pasted it in I got Exception raised at QDimacs.write_qdimacs_file: term is not a QBF (innermost quantifier must be existential) So I negated everything ?x. !y. ?z. (~x /\ ~z) \/ ~y and then got Exception raised at QDimacs.write_qdimacs_file: term is not a QBF (variable expected, subterm '?x ? ?z' found) Aha! It wants CNF, so I clausified the goal ?x. !y. ?z. (~x \/ ~y) /\ (~z \/ ~y) and then got an article file back that successfully proved my query: $ bin/polyml/opentheory info result.art WARNING: 4,284 objects left in the dictionary by result.art 2 input type operators: -> bool 9 input constants: = ! /\ ==> ? \/ ~ F T 19 assumptions: |- T |- (~) = \t. t ==> F |- (!) = \P. P = \x. T |- ~(p ==> q) ==> p |- !t. ~~t <=> t |- ~(p ==> q) ==> ~q |- (==>) = \p q. p /\ q <=> p |- !t. (t <=> T) \/ (t <=> F) |- (/\) = \p q. (\f. f p q) = \f. f T T |- (?) = \P. !q. (!x. P x ==> q) ==> q |- (\/) = \t1 t2. !t. (t1 ==> t) ==> (t2 ==> t) ==> t |- (p <=> ~q) <=> (p \/ q) /\ (~q \/ ~p) |- (!t. ~~t <=> t) /\ (~T <=> F) /\ (~F <=> T) |- (p <=> q \/ r) <=> (p \/ ~q) /\ (p \/ ~r) /\ (q \/ r \/ ~p) |- (p <=> q /\ r) <=> (p \/ ~q \/ ~r) /\ (q \/ ~p) /\ (r \/ ~p) |- !t. ((T <=> t) <=> t) /\ ((t <=> T) <=> t) /\ ((F <=> t) <=> ~t) /\ ((t <=> F) <=> ~t) |- !t. (T /\ t <=> t) /\ (t /\ T <=> t) /\ (F /\ t <=> F) /\ (t /\ F <=> F) /\ (t /\ t <=> t) |- !t. (T \/ t <=> T) /\ (t \/ T <=> T) /\ (F \/ t <=> t) /\ (t \/ F <=> t) /\ (t \/ t <=> t) |- (p <=> q <=> r) <=> (p \/ q \/ r) /\ (p \/ ~r \/ ~q) /\ (q \/ ~r \/ ~p) /\ (r \/ ~q \/ ~p) 1 theorem: |- ?x. !y. ?z. (~x \/ ~y) /\ (~z \/ ~y) > I'd love to get feedback from anyone who uses this - it will probably > break and I'm happy to try to fix it. > I might eventually try to write a tactic in HOL Light or Isabelle that > simply calls out to this service... (it's not so great for HOL4 since > the code originally came from HOL4 so you can just the tactic there > already) I'd be happy to put together a HOL Light tactic that does this, if you haven't already started work on this, since I already have all the machinery for logging goals. It would be great to also see this working in Isabelle. Very nice work - the first tactic in the cloud. Cheers, Joe From joe at gilith.com Sat Oct 15 18:10:36 2011 From: joe at gilith.com (Joe Hurd) Date: Sat, 15 Oct 2011 11:10:36 -0700 Subject: [opentheory-users] Prover9 HOL integration via OpenTheory In-Reply-To: <1318691588.2317.10.camel@weber> References: <1318691588.2317.10.camel@weber> Message-ID: Hi Tjark, > There may be copyright issues if you make (the functionality of) Squolem > available in this form. Thanks for bringing this up - I was not aware of the terms of the license http://www.cprover.org/qbv/LICENSE.txt > The expected QBF format is documented in Section 5.10.2 of the HOL4 > Description (cf. http://hol.sourceforge.net/documentation.html). For cloud tactics perhaps it makes sense to put this documentation on the web page that provides the interface to the tactic, to help integrators. > Geoff Sutcliffe has made various provers available via his System On > TPTP website (http://www.cs.miami.edu/~tptp/cgi-bin/SystemOnTPTP). > Isabelle's Sledgehammer tool can (since 2009) use some of these remotely > in place of locally installed provers. Again, thanks for the reference - I was not aware of this. Do you happen to know a published reference to this, or someone I can ask about this related work? Perhaps a better characterization of the novelty is a way of sharing tactics between theorem provers using the cloud (and using the OpenTheory standard library to fix a shared ontology). Cheers, Joe From tw333 at cam.ac.uk Sat Oct 15 15:13:08 2011 From: tw333 at cam.ac.uk (Tjark Weber) Date: Sat, 15 Oct 2011 23:13:08 +0800 Subject: [opentheory-users] Prover9 HOL integration via OpenTheory In-Reply-To: References: Message-ID: <1318691588.2317.10.camel@weber> On Fri, 2011-10-14 at 12:37 -0700, Joe Hurd wrote: > > I've uploaded a rough-and-ready cgi script that runs the qbf > > integration here: http://cam.xrchz.net/holqbf.cgi There may be copyright issues if you make (the functionality of) Squolem available in this form. > term is not a QBF (innermost quantifier must be existential) > [...] > term is not a QBF (variable expected, subterm '?x ? ?z' found) > > Aha! It wants CNF, so I clausified the goal The expected QBF format is documented in Section 5.10.2 of the HOL4 Description (cf. http://hol.sourceforge.net/documentation.html). > Very nice work - the first tactic in the cloud. Geoff Sutcliffe has made various provers available via his System On TPTP website (http://www.cs.miami.edu/~tptp/cgi-bin/SystemOnTPTP). Isabelle's Sledgehammer tool can (since 2009) use some of these remotely in place of locally installed provers. Kind regards, Tjark From ramana.kumar at gmail.com Sun Oct 16 19:27:18 2011 From: ramana.kumar at gmail.com (Ramana Kumar) Date: Sun, 16 Oct 2011 20:27:18 +0100 Subject: [opentheory-users] Prover9 HOL integration via OpenTheory In-Reply-To: References: <1318691588.2317.10.camel@weber> Message-ID: On Sat, Oct 15, 2011 at 7:10 PM, Joe Hurd wrote: > Thanks for bringing this up - I was not aware of the terms of the license > > http://www.cprover.org/qbv/LICENSE.txt I've written to the authors of squolem (at least to satisfy condition 5 of the license!) just now - thanks for the reminder. > >> The expected QBF format is documented in Section 5.10.2 of the HOL4 >> Description (cf. http://hol.sourceforge.net/documentation.html). > > For cloud tactics perhaps it makes sense to put this documentation on > the web page that provides the interface to the tactic, to help > integrators. The wishlist in HOL4's documentation (which I presume Tjark wrote most of..) includes making HOL4 automatically convert any QBF into the required form. I would have thought such a conversion already existed in HOL4; I suspect the pieces do (e.g. propositional CNF conversion) so I might try putting them together some time... But it would be interesting if, say, there's a (arbitrary QBF -> prenex normal form) conversion in HOL-Light or some other OpenTheory-enabled system, so I could try having one web service calling another... Is there? The wishlist also includes: interfacing with more QBF solvers, and making QBF solvers into web services. > Again, thanks for the reference - I was not aware of this. Do you > happen to know a published reference to this, or someone I can ask > about this related work? System Description: SystemOnTPTP, Sutcliffe, CADE-17, 2000, seems like a good start. http://www.springerlink.com/content/a12854806p071760/ From joe at gilith.com Mon Oct 17 02:00:18 2011 From: joe at gilith.com (Joe Hurd) Date: Sun, 16 Oct 2011 19:00:18 -0700 Subject: [opentheory-users] package versions In-Reply-To: References: Message-ID: Hi Ramana, > I'm deliberately keeping the new "requires" functionality contained > for now, but I like your suggestion of it being used to produce the > opentheory info --summary output. I'll implement this functionality. Further to this, I've just released a version of the opentheory tool that prints the "unsatisfied assumptions" when you run opentheory info --summary NAME.thy on a theory file NAME.thy with "requires" information. I think this is useful information for the theory developer. Cheers, Joe From rda at lemma-one.com Mon Oct 17 15:45:02 2011 From: rda at lemma-one.com (Rob Arthan) Date: Mon, 17 Oct 2011 16:45:02 +0100 Subject: [opentheory-users] Prover9 HOL integration via OpenTheory In-Reply-To: References: Message-ID: On 10 Oct 2011, at 18:43, Mike Gordon wrote: > Yes, cool indeed ... > >> What I would love to see is these kind of tactics available as "web >> services" > > ... is this the start of cloud theorem proving! -- Mike Jacques Fleuriot and Steve Obua are on that track too, see: http://proofpeer.appspot.com/html/currentVersion.html# Cheers, Rob. -------------- next part -------------- An HTML attachment was scrubbed... URL: From joe at gilith.com Mon Oct 17 16:31:35 2011 From: joe at gilith.com (Joe Hurd) Date: Mon, 17 Oct 2011 09:31:35 -0700 Subject: [opentheory-users] Prover9 HOL integration via OpenTheory In-Reply-To: References: Message-ID: Hi Rob, > Jacques Fleuriot and Steve Obua are on that track too, see: > http://proofpeer.appspot.com/html/currentVersion.html# ProofPeer is an interesting approach to the central problem of allowing everyone to contribute to a common library. I've been toying with the idea of using social network techniques to highlight useful theory packages - in Hackage there are now so many Haskell packages that it's sometimes hard to pick out the stable, popular package to solve a particular problem. Cheers, Joe From steven.obua at googlemail.com Tue Oct 18 00:48:52 2011 From: steven.obua at googlemail.com (Steven Obua) Date: Tue, 18 Oct 2011 01:48:52 +0100 Subject: [opentheory-users] ProofPeer Message-ID: <3B2C8822-D22E-43B2-A0BD-C3C1A07C2BFD@googlemail.com> Hi everyone, we noticed that Rob provided a link to our ProofPeer website in a previous post. Of course, just today we rearranged the site so that that link is not working any more. A link that is supposed to always work is the following: http://proofpeer.com . Cheers, Steven From ramana.kumar at gmail.com Fri Oct 28 09:38:34 2011 From: ramana.kumar at gmail.com (Ramana Kumar) Date: Fri, 28 Oct 2011 10:38:34 +0100 Subject: [opentheory-users] web tactics Message-ID: I have so far uploaded two "web tactics", which just make some piece of HOL4 functionality available to others. They are http://cam.xrchz.net/holqbf.cgi, which is described a bit in this thread http://www.gilith.com/pipermail/opentheory-users/2011-October/000184.html, and http://cam.xrchz.net/skico.cgi, which removes abstractions from a HOL term by rewriting it in combinatory form (using S,K,I,C, and o (aka B)). I have a note and a question for the list. Note: holqbf.cgi will fail on any reasonably complicated QBF because it tries to call an external SAT solver and I haven't uploaded one. One of my next steps might be to make the HOL Light integration of MiniSat into a web tactic, and then get holqbf to call it. I would choose the integration into HOL Light because the kernel is closest to OpenTheory's, but it might be interesting to see if there are significant differences using say the HOL4 integration, or a from-scratch OpenTheory integration. I also wrote a little function in HOL4, url_conv : string -> term -> thm, which takes the URL of a conversion and then calls and runs it. In general, the term might not be of type bool, so the original plan of encoding a term t as an article that just assumes and exports the theorem |- t does not work. For the time being I am encoding a term as an article that assumes and exports |- Function.Combinator.k Data.Bool.F t. Question: What do you think of this encoding scheme; would you prefer something else? Example alternatives are a dedicated tagging constant with the same semantics as K, or a convention for taking a term left on the virtual machine's stack (but that would get in the way of optimizing articles).