Isn't it clear just from the form? Theorem name quote (ML) --> val name = Q.store_thm(name,quote,ML) Theorem name (ML) --> val name = save_thm(name,ML)
On Mon, Jan 7, 2019 at 8:34 PM <michael.norr...@data61.csiro.au> wrote: > Forward and backward give us nice terminology, thanks! It may also be > possible to have the quotation filter figure things out by looking for the > left-parenthesis that is required to follow the name in the forward case. > I may play with that. > > Michael > > On 8/1/19, 12:38, "Chun Tian (binghe)" <binghe.l...@gmail.com> wrote: > > Hmmm, well… all theorems are essentially *derived* from earlier > theorems or axioms, thus it seems (to me) that the word “derived” still > doesn’t capture the characterization of “save_thm” from “store_thm”. But > the word “dervied” makes more senses than previous “calculated” as > “save_thm”’s body is mainly using “derived rules” instead of “tactics”. > However, I see the essential difference is the direction in the proof: from > proof goal to existing theorems, or from existing theorems to proof goal. > > This whole mail thread is not really a technical discussion, thus > whatever I said here must be highly subjective, however I suggest the > following: > > 1. using keyword “forward” and “backward” to distinguish theorems > built by “save_thm” and “store_thm”, respectively: > > - Theorem(forward) name (MLcode); > - Theorem(backward) name tmquote (MLcode); > > 2. the keyword (backward) is optional (simply because this is the most > case), thus backward theorems can also be expressed (if detected the > tmquote part, somehow) in your current way: > > - Theorem name tmquote (MLcode); > > 3. if ML’s parser is smart enough, even the keyword (forward) can be > eliminated, because the number of arguments is different: in forward proof > it is 2, in backward proof it is 3: > > - Theorem name (MLcode); > - Theorem name tmquote (MLcode); > > How much you can go with above idea, depends on how powerful the ML > quotation code can be. > > Hope this helps, > > —Chun > > > Il giorno 08 gen 2019, alle ore 02:10, > michael.norr...@data61.csiro.au ha scritto: > > > > Indeed, they are both calculated. In one, you state the desired > end-state and head towards it with a tactic. In the other, you transform > existing theorems with rules of inference and derive a final statement > (hence the good practice, which you mentioned, of putting the statement > into a comment). > > > > Given that, what about > > > > Theorem(derived) name (MLcode); > > > > ? > > > > Michael > > > > On 7/1/19, 20:31, "Chun Tian (binghe)" <binghe.l...@gmail.com> > wrote: > > > > Hi Michael, > > > > Thanks, now I see your points: if it’s really a “lemma”, then > there’s no need to export it, thus `Q.prove` (or `prove`) should just do > the job. > > > > Among the two syntactic sugars, I personally like your first > version (Theorem(calculated) …), because it emphasized that, a `Theorem` > generated by `save_thm` has no differences (in use) with a `Theorem` > generated by `store_thm`, just the word “calculated” could have a better > name, as both kinds of theorems are essentially calculated. > > > > —Chun > > > >> Il giorno 07 gen 2019, alle ore 01:16, > michael.norr...@data61.csiro.au ha scritto: > >> > >> The Theorem keyword is a prettier way of writing `store_thm`, > which, as the name suggests, is indeed for theorems. In other words, the > choice of Theorem merely reflects our existing naming convention. > >> > >> If you have a lemma that shouldn’t be “stored”, then you should > probably be using `Q.prove` (or `prove`). The use of theory files that > make theorem values persistent is the way in which users can distinguish > important results that should persist (that is, “theorems”), and those that > should be more ephemeral. > >> > >> The existing `save_thm` entrypoint has the same problem with > requiring redundant typing of names. I’m thus tempted to invent a Theorem > analogue to map to it. My current feeling is to go for something like > >> > >> Theorem(calculated) thmname (ML code); > >> > >> Or > >> > >> Computed_Theorem thmname (ML code) > >> > >> Or …? > >> > >> Suggestions welcome. > >> > >> Michael > >> > >> From: "Chun Tian (binghe)" <binghe.l...@gmail.com> > >> Date: Thursday, 3 January 2019 at 23:20 > >> To: Makarius <makar...@sketis.net> > >> Cc: Michael Norrish <michael.norr...@data61.csiro.au>, hol-info < > hol-info@lists.sourceforge.net> > >> Subject: Re: [Hol-info] New grammar of defining theorems? > >> > >> So the key is to make sure that they’re not distinguished > internally by some tools, and if some tools do, it’s their problems but > HOL’s. > >> > >> I personally don’t like the keyword “Theorem” because I think many > small theorems with 3 lines of tactics do not deserve the name “Theorem”. > The correct way of using these conventions should be aligned with majority > math books, which I believe there must be some “rules” mentioned somewhere. > >> > >> On the other side, HOL4 users always have multiple ways to build a > theorem. For example, sometimes I perfer using “save_thm” to build theorems > forwardly and put the statement as comments before it, sometimes multiple > theorems were put into a “local” block sharing common tactics. As a result, > HOL4 proof scripts were *not* documents but essentially raw ML programs, > thus extremely flexible. I may not adopt this new grammar in a complex > proof script in which different ways of building theorems were used > together. > >> > >> —Chun > >> > >> P. S. Coq seems to have even more synonyms: (do Coq users here > share the same concerns?) > >> > >> Lemma ident [binders] : type. > >> Remark ident [binders] : type. > >> Fact ident [binders] : type. > >> Corollary ident [binders] : type. > >> Proposition ident [binders] : type. > >> > >> These commands are synonyms of Theorem ident > [binders] : type. > >> > >> Il giorno 03 gen 2019, alle ore 12:23, Makarius < > makar...@sketis.net> ha scritto: > >> > >> On 03/01/2019 11:23, Chun Tian (binghe) wrote: > >> > >> Hi Michael, > >> > >> thanks for fixing the bugs. (now I see why I can’t find its > definition…) > >> > >> Going in this direction, have you considered adding also “Lemma” > and “Corollary”? Internally they're equivalent with “Theorem”, but they > could literally help writers (and readers) identifying different levels of > theorems, like those in math books. > >> > >> This reminds me of Isabelle/Isar. Some decades ago I introduced > these > >> variants of 'theorem' and it became a running gag of confusion and > >> unclear corner cases, because aliases were not really identical, but > >> distinguished internally by some tools. > >> > >> Recently, we even introduced 'proposition' as another variant, but > it is > >> unclear if it is more prominent than 'theorem' or less prominent > than > >> 'lemma'. Thus it depends on local conventions of particular > >> formalization projects how to treat it, e.g. in document > presentation. > >> > >> If I had another chance today, I would probably eliminate all funny > >> aliases of Isar commands. > >> > >> > >> Makarius > >> > >> > >> > >> _______________________________________________ > >> hol-info mailing list > >> hol-info@lists.sourceforge.net > >> https://lists.sourceforge.net/lists/listinfo/hol-info > > > > > > > > > > _______________________________________________ > > hol-info mailing list > > hol-info@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/hol-info > > > > > _______________________________________________ > hol-info mailing list > hol-info@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/hol-info >
_______________________________________________ hol-info mailing list hol-info@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hol-info