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