I quote the beginning of the 2nd paragraph of Chapter 4 (Goal Directed Proof: 
Tactics and Tacticals) in The HOL System DESCRIPTION:

"Even with recourse to derived inference rules, it is still surprisingly 
awkward to work
*forward*, to find a chain of theorems that culminates in a desired theorem. …"

This is where the keyword “forward” comes from.

—Chun

> Il giorno 08 gen 2019, alle ore 02:38, Chun Tian (binghe) 
> <binghe.l...@gmail.com> ha scritto:
> 
> 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
> 

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

_______________________________________________
hol-info mailing list
hol-info@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/hol-info

Reply via email to