--
You received this message because you are subscribed to the Google Groups "Ghilbert" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ghilbert+u...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
On Oct 31, 2013 10:40 PM, "Jim Kingdon" <jkingd...@gmail.com> wrote:
> * you can run the javascript verifier through the tests with "rhino js/verify_test.js testsuite" (don't know whether it would run on node too, but this is unlikely to be an issue of one javascript versus another).
I just pushed an update with a little shim that allows it to work under node.js. I hope that my change does not disrupt your rhino workflow, but I did not have time to test it, so I apologize in advance if it does.
> Please do speak up. Don't know about anyone else, but I get more motivated when we talk about stuff on mailing lists as well as writing code.
+1 to this.
You can consider me also "on the verge of fixing" these JS verify bugs.
For a long time, and for reasons I can't quite explain, I have been obsessed with making a ghilbert theorem-prover with a point-and-click interface and a gamification layer. My latest working version is nicknamed Orcat and is hosted at http://orcat.org . One can currently get up to 86 points, by going as far as defining prime(n). However I doubt that anyone but me could actually do so, since the interface has been drifting, and has never been "good enough to stop and document".
In the course of developing it, I have been shearing away from ghilbert in a few philosophical areas, which I will now spew forth on rather than take the time to write a considered document. These do have a bit of causality flowing throw them; they are in roughly the order I came to them and each is partly motivated by the previous ones.
1. The user/player should be able to operate instantly on any node of an sexp-tree, without having to first prove a result about leaves and then "climb the tree" ("anim1i orim2i bibi1i" etc). That drudgery should be automated.
2. The user should see only deductions, and not inferences. I have retained modus ponens and a couple corresponding biconditional inferences under the hood, but they are invisible to the user. The main advantage of inferences is the reduction of boilerplate, which can be machine-generated.
3. .gh files should be considered machine-readable, not human-readable. Once you accept the machine-generated ghilbert code from #1 and #2, and once you see all the mandhyp text as pollution, this follows quickly.
4. Theorems should not be named. Naming things is famously one of the two hard problems in computer science (along with synchronization and off-by-one errors). There's a clear bifurcation between the metamath camp (short and cryptic) and the ProofWiki camp (long and verbose). I see that in the current ghilbert-app repository, we now have the worst of both worlds: an inconsistent agglomeration of the two. In practice, there is no naming system that doesn't suck. The variety of theorems is too great for a system which is consistent, general, easily memorized, and easily taught, and which provides quick mental access for more than a few people worldwide. What is needed instead is a good theorem search-engine. For compatability, Orcat generates theorem names from their statement sexps (e.g. "_dv_A_y___rarr_forall_z_rarr_equals_z_Oslash_A_rarr_forall_y_rarr_forall_z_rarr_equals_z_y_A_forall_z_rarr_equals_z_sect_y_A_forall_z_A".
5. Nor should there be names for variables, operators, kinds, or interfaces. There should be one universal content-addressable namespace for all ghilbert objects. If you and I prove the same theorem, in the same way, from the same axioms, we should be able to generate the same object. But this is impossible if we each choose our own names for everything (and our own ordering of axioms within an interface). Right now, I have only a vision for this and I don't know whether it's practical. We already have a pseudo-canonical naming scheme for variables within a stmt. My next step is going to be generating names for operators based on their defthms. Of course, these will be uncomfortably long, so I'm thinking about a compact binary encoding for sexps and/or a hashing function (but what about collisions?). For operators defined by axioms and not dethms, I want to come up with some name computed from "what axioms are true about this operator". Kinds, it seems to me, can be eliminated entirely and inferred at verify-time. An interface will be named after the sorted list of statements it contains.
My hope is to eventually have a script that can parse set.mm into theorem-objects, and parse ProofWiki and our own peano_thms.gh as well. All propositional-logic theorems will collide, even if the names are different. The peano theorems will be able to be automatically kind-bound to metamath's cardinals, since the theorems proved in metamath about cardinals will collide with the peano axioms required by our proofs. This will make practical a "global theorem search engine" which can search many different corpuses and convert between them. It will also be able to spit out verifiable Ghilbert versions of all objects; however the names will be opaque and one will need a kind of naming-layer (something like a stylesheet -- each camp can choose its own) in order to read the proofs.
So far I've gotten just far enough to give this harebrained scheme a name: "caghni" for "Content-Addressable GHilbert Namespace and Index". I'll be trying to develop it at http://github.com/abliss/caghni if my motivation stays high enough.
In the course of developing it, I have been shearing away from ghilbert in a few philosophical areas, which I will now spew forth on rather than take the time to write a considered document. These do have a bit of causality flowing throw them; they are in roughly the order I came to them and each is partly motivated by the previous ones.
1. The user/player should be able to operate instantly on any node of an sexp-tree, without having to first prove a result about leaves and then "climb the tree" ("anim1i orim2i bibi1i" etc). That drudgery should be automated.
2. The user should see only deductions, and not inferences. I have retained modus ponens and a couple corresponding biconditional inferences under the hood, but they are invisible to the user. The main advantage of inferences is the reduction of boilerplate, which can be machine-generated.
3. .gh files should be considered machine-readable, not human-readable. Once you accept the machine-generated ghilbert code from #1 and #2, and once you see all the mandhyp text as pollution, this follows quickly.
4. Theorems should not be named. Naming things is famously one of the two hard problems in computer science (along with synchronization and off-by-one errors). There's a clear bifurcation between the metamath camp (short and cryptic) and the ProofWiki camp (long and verbose). I see that in the current ghilbert-app repository, we now have the worst of both worlds: an inconsistent agglomeration of the two. In practice, there is no naming system that doesn't suck. The variety of theorems is too great for a system which is consistent, general, easily memorized, and easily taught, and which provides quick mental access for more than a few people worldwide. What is needed instead is a good theorem search-engine. For compatability, Orcat generates theorem names from their statement sexps (e.g. "_dv_A_y___rarr_forall_z_rarr_equals_z_Oslash_A_rarr_forall_y_rarr_forall_z_rarr_equals_z_y_A_forall_z_rarr_equals_z_sect_y_A_forall_z_A".
5. Nor should there be names for variables, operators, kinds, or interfaces. There should be one universal content-addressable namespace for all ghilbert objects. If you and I prove the same theorem, in the same way, from the same axioms, we should be able to generate the same object. But this is impossible if we each choose our own names for everything (and our own ordering of axioms within an interface). Right now, I have only a vision for this and I don't know whether it's practical. We already have a pseudo-canonical naming scheme for variables within a stmt. My next step is going to be generating names for operators based on their defthms. Of course, these will be uncomfortably long, so I'm thinking about a compact binary encoding for sexps and/or a hashing function (but what about collisions?). For operators defined by axioms and not dethms, I want to come up with some name computed from "what axioms are true about this operator". Kinds, it seems to me, can be eliminated entirely and inferred at verify-time. An interface will be named after the sorted list of statements it contains.
My hope is to eventually have a script that can parse set.mm into theorem-objects, and parse ProofWiki and our own peano_thms.gh as well. All propositional-logic theorems will collide, even if the names are different. The peano theorems will be able to be automatically kind-bound to metamath's cardinals, since the theorems proved in metamath about cardinals will collide with the peano axioms required by our proofs. This will make practical a "global theorem search engine" which can search many different corpuses and convert between them. It will also be able to spit out verifiable Ghilbert versions of all objects; however the names will be opaque and one will need a kind of naming-layer (something like a stylesheet -- each camp can choose its own) in order to read the proofs.
So far I've gotten just far enough to give this harebrained scheme a name: "caghni" for "Content-Addressable GHilbert Namespace and Index". I'll be trying to develop it at http://github.com/abliss/caghni if my motivation stays high enough.
--
On Nov 2, 2013 1:44 AM, "Paul Merrell" <pa...@merrells.org> wrote:
> I totally agree. In fact, I've already automated this. As you edit proofs on the edit page, you will see the last statement appear in the bottom right corner. You can click on parts of that statement to traverse the tree and move to the node you want then you can apply different theorems to that node like commuting, associating, and distributing. Any theorem with a <suggest> tag before front of it will appear as suggestion if it is applicable.
Neat! Looking forward to your tutorial of all the WhizzBang new features.
<suggest> is good for now, but one day I hope we can display all known theorems which unify, ordered by a TheoremRank which takes into account the popularity of the theorem as well as its relevance to the current situation.
> I think inferences are useful in some cases because when we display the proofs they can make the proofs more human-readable. Consider the following examples:
>
> I'd argue that using imim2i like this:
> φ → ψ
> (χ → φ) → χ → ψ
>
> is much more readable than using imim2:
> (φ → ψ) → (χ → φ) → χ → ψ
>
> And using eqcomi like this
> A = B
> B = A
>
> is more readable than eqcom
> A = B ↔ B = A
I agree, but this is something that the proof displayer can detect and format appropriately. It's not worth the extra cognitive load, extra theorem names, and extra code in the verifier for this to be encoded in the .GH file. (eqcomi is just one special case of "applying eqcom to a node", having chosen the root node of the sexp tree.)
( I forgot to mention: once you do away with inferences, you can also remove the proof stack . at every step of the proof you simply have one valid theorem.)
--
You would probably still prove the base case, inductive step, and alpha-glue as helper theorems. Then you would start a new proof with the "induction deduction", which is just like the induction inference but rephrased to use -> instead of hypotheses. Then you'd manipulate that theorem until it looked like your goal, by "detatching the antecedents in place" using your helper theorems.
Okay, I realize that's not a very good explanation, so I'll copy an example from orcat. We're going to prove