From rda at lemma-one.com Fri Nov 22 16:08:49 2013 From: rda at lemma-one.com (Rob Arthan) Date: Fri, 22 Nov 2013 16:08:49 +0000 Subject: [opentheory-users] Status of derived syntax Message-ID: <90D3187E-5208-471C-9240-EA2B316BA2C9@lemma-one.com> What is the status of things like let-terms and set comprehensions in the Gilith Open Theory Repo. I can't see the definitions of the magic constants that are used to represent these things (LET and GSPEC in HOL Light and HOL4)? A peculiar sequence of complicated assumptions involving let builds up in the HTML listings. Regards, Rob. -------------- next part -------------- An HTML attachment was scrubbed... URL: From joe at gilith.com Fri Nov 22 18:58:57 2013 From: joe at gilith.com (Joe Leslie-Hurd) Date: Fri, 22 Nov 2013 10:58:57 -0800 Subject: [opentheory-users] Status of derived syntax In-Reply-To: <90D3187E-5208-471C-9240-EA2B316BA2C9@lemma-one.com> References: <90D3187E-5208-471C-9240-EA2B316BA2C9@lemma-one.com> Message-ID: Hi Rob, The derived syntax in OpenTheory is rather ad-hoc: I just hard-coded some common mathematical syntax such as numerals, pairs and sets which is triggered by specific names in the OpenTheory namespace. When exporting HOL Light theories to the OpenTheory library, one of the more involved things I had to do is remove as many HOL Light-specific tags as possible. So for example, the NUMERAL tag is easily removed, and OpenTheory numerals are instead recognized by sequences of bit0 and bit1 functions terminated by natural number zero. The OpenTheory version of GSPEC is called fromPredicate, and you can see the standard library renamings in the OpenTheory fork of HOL Light in the file opentheory/stdlib/stdlib.int This is how sets are recognized for printing purposes (assuming that the term argument to fromPredicate has the right shape). Finally, I'm rather pleased by my scheme for recognizing let expressions, although it sounds like it might be causing you problems displaying your theory. Lets are simply terms that can be beta-reduced, so (\v. t[v]) x is printed as let v = x in t[v] No need for any special term tags, and in all the theories I have so far encountered there are no subterms in theorems that can be beta-reduced (and thus accidentally print as let). Hope that helps, Joe On Fri, Nov 22, 2013 at 8:08 AM, Rob Arthan wrote: > What is the status of things like let-terms and set comprehensions in the > Gilith Open Theory Repo. I can't see the definitions of the magic constants > that are used to represent these things (LET and GSPEC in HOL Light and > HOL4)? A peculiar sequence of complicated assumptions involving let builds > up in the HTML listings. > > Regards, > > Rob. > > _______________________________________________ > opentheory-users mailing list > opentheory-users at gilith.com > http://www.gilith.com/mailman/listinfo/opentheory-users > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From rda at lemma-one.com Sat Nov 23 15:53:19 2013 From: rda at lemma-one.com (Rob Arthan) Date: Sat, 23 Nov 2013 15:53:19 +0000 Subject: [opentheory-users] Status of derived syntax In-Reply-To: References: <90D3187E-5208-471C-9240-EA2B316BA2C9@lemma-one.com> Message-ID: Joe, On 22 Nov 2013, at 18:58, Joe Leslie-Hurd wrote: > Hi Rob, > > The derived syntax in OpenTheory is rather ad-hoc: I just hard-coded some common mathematical syntax such as numerals, pairs and sets which is triggered by specific names in the OpenTheory namespace. > > When exporting HOL Light theories to the OpenTheory library, one of the more involved things I had to do is remove as many HOL Light-specific tags as possible. So for example, the NUMERAL tag is easily removed, and OpenTheory numerals are instead recognized by sequences of bit0 and bit1 functions terminated by natural number zero. > > The OpenTheory version of GSPEC is called fromPredicate, and you can see the standard library renamings in the OpenTheory fork of HOL Light in the file > > opentheory/stdlib/stdlib.int > > This is how sets are recognized for printing purposes (assuming that the term argument to fromPredicate has the right shape). > > Finally, I'm rather pleased by my scheme for recognizing let expressions, although it sounds like it might be causing you problems displaying your theory. I haven't got that far yet. I have just been looking at the article files and HTML pages in the repo. > Lets are simply terms that can be beta-reduced, so > > (\v. t[v]) x > > is printed as > > let v = x in t[v] > > No need for any special term tags, and in all the theories I have so far encountered there are no subterms in theorems that can be beta-reduced (and thus accidentally print as let). Nice idea. I don't think you would want that feature while doing interactive theorem-proving, but it makes sense in your context. I have just had a go with the ProofPower theorem finder and it supports your approach: there are no theorems saved in the ProofPower-HOL theory hierarchy containing beta-redexes. However, some packages contain assumptions that do contain beta-redexes and hence have been printed out as let-expressions in the HTML. See: http://opentheory.gilith.com/opentheory/packages/axiom-choice-1.7/axiom-choice-1.7.html http://opentheory.gilith.com/opentheory/packages/axiom-extensionality-1.8/axiom-extensionality-1.8.html http://opentheory.gilith.com/opentheory/packages/natural-1.81/natural-1.81.html The assumption in the last one of these is a real monster. They all look like intermediate lemmas generated by some proof procedure whose proofs have somehow gone missing. > > Hope that helps, It does indeed. I have some other questions about using the article files in the repo, but I think I will start a separate thread for that. Regards, Rob. > > Joe > > > > > On Fri, Nov 22, 2013 at 8:08 AM, Rob Arthan wrote: > What is the status of things like let-terms and set comprehensions in the Gilith Open Theory Repo. I can't see the definitions of the magic constants that are used to represent these things (LET and GSPEC in HOL Light and HOL4)? A peculiar sequence of complicated assumptions involving let builds up in the HTML listings. > > Regards, > > Rob. > > _______________________________________________ > opentheory-users mailing list > opentheory-users at gilith.com > http://www.gilith.com/mailman/listinfo/opentheory-users > > > _______________________________________________ > opentheory-users mailing list > opentheory-users at gilith.com > http://www.gilith.com/mailman/listinfo/opentheory-users -------------- next part -------------- An HTML attachment was scrubbed... URL: From rda at lemma-one.com Sat Nov 23 16:24:57 2013 From: rda at lemma-one.com (Rob Arthan) Date: Sat, 23 Nov 2013 16:24:57 +0000 Subject: [opentheory-users] Importing from the Gilith OpenTheory Repo Message-ID: <97AF3AA1-8D33-4FE0-A48B-25E738011F98@lemma-one.com> I am trying to import the base package into ProofPower from the Gilith OpenTheory Repo using my prototype OpenTheory reader. I did "opentheory install base" and that seemed to work (once I had installed the md5sha1sum package from MacPorts to resolve the dependency on sha1sum). It created a directory $HOME/.opentheory with some interesting looking things in it, in particular, a subdirectory called packages with lots of subdirectories containing, inter alia, article files. Is the idea that I should be able to read a single article file to import an entire package? Or do I need to process the theory files somehow. Or should I not be looking in $HOME/.opentheory/packages at all but doing something else? When I look at the subdirectories of $HOME/.opentheory/packages, some contain 1 article file and some contain 2. In bool-def-1.10 for example, there are 2: bool-def-1.10.art and bool-def.art. I can import the latter but not the former, because it attempts create a definition referring to a non-existent constant called bool-def-1.10. In base-1.132 there is just one article file base-1.132.art. When I try to import that I get the same kind of problem: it tries to define Data.Bool.T to be equal to a constant called base-1.132. What am I missing? Regards, Rob. -------------- next part -------------- An HTML attachment was scrubbed... URL: From ramana at member.fsf.org Sun Nov 24 09:45:00 2013 From: ramana at member.fsf.org (Ramana Kumar) Date: Sun, 24 Nov 2013 09:45:00 +0000 Subject: [opentheory-users] Importing from the Gilith OpenTheory Repo In-Reply-To: <97AF3AA1-8D33-4FE0-A48B-25E738011F98@lemma-one.com> References: <97AF3AA1-8D33-4FE0-A48B-25E738011F98@lemma-one.com> Message-ID: I think the idea of the base package is that everything in it should already be supported by your theorem prover, so you don't need to import it - rather, you use it as a dependency for things you export from your theorem prover. That said, I think you can generate a single article that performs all the proofs in a package, like base, using the opentheory tool with the info command and the --article option. On Sat, Nov 23, 2013 at 4:24 PM, Rob Arthan wrote: > I am trying to import the base package into ProofPower from the Gilith > OpenTheory Repo using my prototype OpenTheory reader. I did "opentheory > install base" and that seemed to work (once I had installed the md5sha1sum > package from MacPorts to resolve the dependency on sha1sum). It created a > directory $HOME/.opentheory with some interesting looking things in it, in > particular, a subdirectory called packages with lots of subdirectories > containing, inter alia, article files. > > Is the idea that I should be able to read a single article file to import > an entire package? Or do I need to process the theory files somehow. Or > should I not be looking in $HOME/.opentheory/packages at all but doing > something else? > > When I look at the subdirectories of $HOME/.opentheory/packages, some > contain 1 article file and some contain 2. In bool-def-1.10 for example, > there are 2: bool-def-1.10.art and bool-def.art. I can import the latter > but not the former, because it attempts create a definition referring to a > non-existent constant called bool-def-1.10. In base-1.132 there is just one > article file base-1.132.art. When I try to import that I get the same kind > of problem: it tries to define Data.Bool.T to be equal to a constant called > base-1.132. What am I missing? > > Regards, > > Rob. > > _______________________________________________ > opentheory-users mailing list > opentheory-users at gilith.com > http://www.gilith.com/mailman/listinfo/opentheory-users > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From rda at lemma-one.com Sun Nov 24 14:46:46 2013 From: rda at lemma-one.com (Rob Arthan) Date: Sun, 24 Nov 2013 14:46:46 +0000 Subject: [opentheory-users] Importing from the Gilith OpenTheory Repo In-Reply-To: References: <97AF3AA1-8D33-4FE0-A48B-25E738011F98@lemma-one.com> Message-ID: <5C26F944-1CE1-40EB-9F8D-2803F358D656@lemma-one.com> Ramana, On 24 Nov 2013, at 09:45, Ramana Kumar wrote: > I think the idea of the base package is that everything in it should already be supported by your theorem prover, so you don't need to import it - rather, you use it as a dependency for things you export from your theorem prover. > I want to import it so I can have a better look at it. The kind of thing I want to do is to make sure that my reader can prove all the assumptions in it and to make sure that my writer only uses definitions and theorems that it provides when it is writing out a ProofPower inference as a sequence of OpenTheory inferences. > That said, I think you can generate a single article that performs all the proofs in a package, like base, using the opentheory tool with the info command and the --article option. > I invoked opentheory like this: opentheory info --article base and after 12 minutes learnt that I should have invoked it like this: opentheory info --article base >base.art I am then able to import all 1117 theorems and 3 assumptions from base.art into ProofPower. Thanks! Rob. -------------- next part -------------- An HTML attachment was scrubbed... URL: From ramana at member.fsf.org Sun Nov 24 15:29:40 2013 From: ramana at member.fsf.org (Ramana Kumar) Date: Sun, 24 Nov 2013 15:29:40 +0000 Subject: [opentheory-users] Importing from the Gilith OpenTheory Repo In-Reply-To: <5C26F944-1CE1-40EB-9F8D-2803F358D656@lemma-one.com> References: <97AF3AA1-8D33-4FE0-A48B-25E738011F98@lemma-one.com> <5C26F944-1CE1-40EB-9F8D-2803F358D656@lemma-one.com> Message-ID: You can also use the -o or --output option instead of shell redirection. On Sun, Nov 24, 2013 at 2:46 PM, Rob Arthan wrote: > Ramana, > > On 24 Nov 2013, at 09:45, Ramana Kumar wrote: > > I think the idea of the base package is that everything in it should > already be supported by your theorem prover, so you don't need to import it > - rather, you use it as a dependency for things you export from your > theorem prover. > > I want to import it so I can have a better look at it. The kind of thing I > want to do is to make sure that my reader can prove all the assumptions in > it and to make sure that my writer only uses definitions and theorems that > it provides when it is writing out a ProofPower inference as a sequence of > OpenTheory inferences. > > That said, I think you can generate a single article that performs all the > proofs in a package, like base, using the opentheory tool with the info > command and the --article option. > > I invoked opentheory like this: > > opentheory info --article base > > and after 12 minutes learnt that I should have invoked it like this: > > opentheory info --article base >base.art > > I am then able to import all 1117 theorems and 3 assumptions from base.art > into ProofPower. > > Thanks! > > Rob. > > > _______________________________________________ > opentheory-users mailing list > opentheory-users at gilith.com > http://www.gilith.com/mailman/listinfo/opentheory-users > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From joe at gilith.com Mon Nov 25 18:08:46 2013 From: joe at gilith.com (Joe Leslie-Hurd) Date: Mon, 25 Nov 2013 18:08:46 +0000 Subject: [opentheory-users] Importing from the Gilith OpenTheory Repo In-Reply-To: References: <97AF3AA1-8D33-4FE0-A48B-25E738011F98@lemma-one.com> <5C26F944-1CE1-40EB-9F8D-2803F358D656@lemma-one.com> Message-ID: Sorry I'm late to the thread - I have just jumped 8 time zones to visit the UK for a while. As Ramana said, the opentheory tool is supposed to be the main way that you interact with the theory directory in ~/.opentheory, and Ramana gave you the right invocation to covert a theory package to an article file: http://www.gilith.com/research/opentheory/faq.html#convert-theory-to-article The NAME-VERSION.art article file you found inside ~/.opentheory/packages/NAME-VERSION is actually a cache of the theorems in the theory package stored in article format, where the "proof" of each theorem just uses the axiom command. These theorem caches are used to match dependencies between packages without needing to read in the whole proof in the theory package. Cheers, Joe On Sun, Nov 24, 2013 at 3:29 PM, Ramana Kumar wrote: > You can also use the -o or --output option instead of shell redirection. > > > On Sun, Nov 24, 2013 at 2:46 PM, Rob Arthan wrote: > >> Ramana, >> >> On 24 Nov 2013, at 09:45, Ramana Kumar wrote: >> >> I think the idea of the base package is that everything in it should >> already be supported by your theorem prover, so you don't need to import it >> - rather, you use it as a dependency for things you export from your >> theorem prover. >> >> I want to import it so I can have a better look at it. The kind of thing >> I want to do is to make sure that my reader can prove all the assumptions >> in it and to make sure that my writer only uses definitions and theorems >> that it provides when it is writing out a ProofPower inference as a >> sequence of OpenTheory inferences. >> >> That said, I think you can generate a single article that performs all >> the proofs in a package, like base, using the opentheory tool with the info >> command and the --article option. >> >> I invoked opentheory like this: >> >> opentheory info --article base >> >> and after 12 minutes learnt that I should have invoked it like this: >> >> opentheory info --article base >base.art >> >> I am then able to import all 1117 theorems and 3 assumptions from >> base.art into ProofPower. >> >> Thanks! >> >> Rob. >> >> >> _______________________________________________ >> opentheory-users mailing list >> opentheory-users at gilith.com >> http://www.gilith.com/mailman/listinfo/opentheory-users >> >> > > _______________________________________________ > opentheory-users mailing list > opentheory-users at gilith.com > http://www.gilith.com/mailman/listinfo/opentheory-users > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From joe at gilith.com Mon Nov 25 18:35:03 2013 From: joe at gilith.com (Joe Leslie-Hurd) Date: Mon, 25 Nov 2013 18:35:03 +0000 Subject: [opentheory-users] Status of derived syntax In-Reply-To: References: <90D3187E-5208-471C-9240-EA2B316BA2C9@lemma-one.com> Message-ID: Hi Rob, I think you have worked out your problem, but I wanted to explain the origin of the monster assumption you found in the natural theory package. There are 3 axioms used to set up the standard theory library (extensionality, choice and infinity), and two primitive constants (= and select). A problem I found is that the usual presentation of the basic axioms refers to other constants, for example extensionality contains a universal quantifier. If you were to assert an axiom in terms of a non-primitive constant you run the risk of a theory package defining the non-primitive constant in an unexpected way, and then the axiom might make the system inconsistent. My resolution is to expand the standard axioms using the definition of the constants, and have little theory packages that prove the usual presentation of the axiom in terms of the expanded axiom and the definition of the non-primitive constants that it refers to. For example, here is the axiom-extensionality package: $ opentheory info --summary --show-assumptions axiom-extensionality 2 external type operators: -> bool 3 external constants: = ! T 3 assumptions: |- T <=> (\p. p) = \p. p |- (!) = \p. p = \x. T |- let a d <- (\e. d e) = d in a = \b. (\c. c) = \c. c 1 theorem: |- !t. (\x. t x) = t The "real" extensionality axiom is the third assumption, and the usual presentation is proved as a theorem in terms of the real axiom and the standard definition of logical quantifiers. So if you were to define the universal quantifier in a different way, it wouldn't match the assumptions of this package and so you wouldn't get access to the axiom of extensionality. The monster assumption you found in the natural theory package is the expanded version of the axiom of the infinity, which refers to injectivity and surjectivity, the definition of which refer to other constants which must be recursively expanded. The resulting "real" axiom of infinity is indeed a real monster. Cheers, Joe On Sat, Nov 23, 2013 at 3:53 PM, Rob Arthan wrote: > Joe, > > On 22 Nov 2013, at 18:58, Joe Leslie-Hurd wrote: > > Hi Rob, > > The derived syntax in OpenTheory is rather ad-hoc: I just hard-coded some > common mathematical syntax such as numerals, pairs and sets which is > triggered by specific names in the OpenTheory namespace. > > When exporting HOL Light theories to the OpenTheory library, one of the > more involved things I had to do is remove as many HOL Light-specific tags > as possible. So for example, the NUMERAL tag is easily removed, and > OpenTheory numerals are instead recognized by sequences of bit0 and bit1 > functions terminated by natural number zero. > > The OpenTheory version of GSPEC is called fromPredicate, and you can see > the standard library renamings in the OpenTheory fork of HOL Light in the > file > > opentheory/stdlib/stdlib.int > > This is how sets are recognized for printing purposes (assuming that the > term argument to fromPredicate has the right shape). > > Finally, I'm rather pleased by my scheme for recognizing let expressions, > although it sounds like it might be causing you problems displaying your > theory. > > > I haven't got that far yet. I have just been looking at the article files > and HTML pages in the repo. > > Lets are simply terms that can be beta-reduced, so > > (\v. t[v]) x > > is printed as > > let v = x in t[v] > > No need for any special term tags, and in all the theories I have so far > encountered there are no subterms in theorems that can be beta-reduced (and > thus accidentally print as let). > > > Nice idea. I don't think you would want that feature while doing > interactive theorem-proving, but it makes sense in your context. I have > just had a go with the ProofPower theorem finder and it supports your > approach: there are no theorems saved in the ProofPower-HOL theory > hierarchy containing beta-redexes. > > However, some packages contain assumptions that do contain beta-redexes > and hence have been printed out as let-expressions in the HTML. See: > > > http://opentheory.gilith.com/opentheory/packages/axiom-choice-1.7/axiom-choice-1.7.html > > http://opentheory.gilith.com/opentheory/packages/axiom-extensionality-1.8/axiom-extensionality-1.8.html > > http://opentheory.gilith.com/opentheory/packages/natural-1.81/natural-1.81.html > > The assumption in the last one of these is a real monster. They all look > like intermediate lemmas generated by some proof procedure whose proofs > have somehow gone missing. > > > Hope that helps, > > > It does indeed. I have some other questions about using the article files > in the repo, but I think I will start a separate thread for that. > > Regards, > > Rob. > > > Joe > > > > > On Fri, Nov 22, 2013 at 8:08 AM, Rob Arthan wrote: > >> What is the status of things like let-terms and set comprehensions in the >> Gilith Open Theory Repo. I can't see the definitions of the magic constants >> that are used to represent these things (LET and GSPEC in HOL Light and >> HOL4)? A peculiar sequence of complicated assumptions involving let builds >> up in the HTML listings. >> >> Regards, >> >> Rob. >> >> _______________________________________________ >> opentheory-users mailing list >> opentheory-users at gilith.com >> http://www.gilith.com/mailman/listinfo/opentheory-users >> >> > _______________________________________________ > opentheory-users mailing list > opentheory-users at gilith.com > http://www.gilith.com/mailman/listinfo/opentheory-users > > > > _______________________________________________ > opentheory-users mailing list > opentheory-users at gilith.com > http://www.gilith.com/mailman/listinfo/opentheory-users > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From rda at lemma-one.com Thu Nov 28 14:39:23 2013 From: rda at lemma-one.com (Rob Arthan) Date: Thu, 28 Nov 2013 14:39:23 +0000 Subject: [opentheory-users] Status of derived syntax In-Reply-To: References: <90D3187E-5208-471C-9240-EA2B316BA2C9@lemma-one.com> Message-ID: Joe, On 25 Nov 2013, at 18:35, Joe Leslie-Hurd wrote: > Hi Rob, > > I think you have worked out your problem, but I wanted to explain the origin of the monster assumption you found in the natural theory package. > > There are 3 axioms used to set up the standard theory library (extensionality, choice and infinity), and two primitive constants (= and select). A problem I found is that the usual presentation of the basic axioms refers to other constants, for example extensionality contains a universal quantifier. If you were to assert an axiom in terms of a non-primitive constant you run the risk of a theory package defining the non-primitive constant in an unexpected way, and then the axiom might make the system inconsistent. > > My resolution is to expand the standard axioms using the definition of the constants, and have little theory packages that prove the usual presentation of the axiom in terms of the expanded axiom and the definition of the non-primitive constants that it refers to. I take it that for you only equality and choice are primitive. > For example, here is the axiom-extensionality package: > > $ opentheory info --summary --show-assumptions axiom-extensionality > 2 external type operators: -> bool > 3 external constants: = ! T > 3 assumptions: > |- T <=> (\p. p) = \p. p > |- (!) = \p. p = \x. T > |- let a d <- (\e. d e) = d in a = \b. (\c. c) = \c. c > 1 theorem: > |- !t. (\x. t x) = t > > The "real" extensionality axiom is the third assumption, and the usual presentation is proved as a theorem in terms of the real axiom and the standard definition of logical quantifiers. So if you were to define the universal quantifier in a different way, it wouldn't match the assumptions of this package and so you wouldn't get access to the axiom of extensionality. > ETA_AX and SELECT_AX only use outermost universal quantifier, so you could just have stripped that off, giving equivalent readable axioms with free variables. That approach doesn't help with INFINITY_AX. > The monster assumption you found in the natural theory package is the expanded version of the axiom of the infinity, which refers to injectivity and surjectivity, the definition of which refer to other constants which must be recursively expanded. The resulting "real" axiom of infinity is indeed a real monster. > Having imported the axioms into ProofPower and beta-reduced them, I do see your problem with INFINITY_AX as it is completely unreadable before and after beta-reduction. But I don't really understand the problem you are trying to guard against. In addition to the axiom of infinity, the package axiom-infinity inputs the logical connectives and the quantifiers and has assumptions that say these things and injective and surjective have their standard meaning. You use the quantifiers and logical connectives in the assumptions about injective and surjective, so why does it cause a problem to use them in the axiom of infinity? Regards, Rob. -------------- next part -------------- An HTML attachment was scrubbed... URL: From rda at lemma-one.com Fri Nov 29 15:23:43 2013 From: rda at lemma-one.com (Rob Arthan) Date: Fri, 29 Nov 2013 15:23:43 +0000 Subject: [opentheory-users] Type variables Message-ID: <5B76842B-569A-4673-934A-731428BAF082@lemma-one.com> The OpenTheory "thm" command allows for an alpha-conversion to get the variable names in a theorem exactly right. The description doesn't say anything about type instantiation, so presumably type variable names have to be right already. Perhaps it should allow type variable renaming too, because the choice of type variable names in definitions of existing constants (like the quantifiers) is going to be implementation-dependent. Unfortunately, this is a little tricky to specify and implement because "thm" also allows the inferred theorem to have fewer assumptions than the target theorem. On this topic, the Gilith OpenTheory Repo seems to use HOL Light type variable names (A, B, C etc.) that can't be parsed in HOL4 or ProofPower. In any case, if "thm" doesn't allow for type variable renaming, then the documentation needs to say what type variables have been used. Regards, Rob. -------------- next part -------------- An HTML attachment was scrubbed... URL: