Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] Manual proof terms definitions and typechecking

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] Manual proof terms definitions and typechecking


Chronological Thread 
  • From: Gaëtan Gilbert <gaetan.gilbert AT skyskimmer.net>
  • To: coq-club AT inria.fr
  • Subject: Re: [Coq-Club] Manual proof terms definitions and typechecking
  • Date: Thu, 20 Apr 2023 17:32:21 +0200
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=gaetan.gilbert AT skyskimmer.net; spf=Pass smtp.mailfrom=gaetan.gilbert AT skyskimmer.net; spf=None smtp.helo=postmaster AT relay2-d.mail.gandi.net
  • Ironport-data: A9a23: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 VUIqat4rI1XhKI//QuMu5KYJf3BgA7S8g==
  • Ironport-hdrordr: A9a23:JIc7g6trzNhEs1DFMLGUmX2V7skDe9V00zEX/kB9WHVpm7+j5q OTdZMgpHjJYVcqKRUdcL+7VZVoLUmsl6KdpLNhWItKPzOLhILLFutfBOLZqlWKJ8S9zI5gPM xbHZSWZueQMbE3t6nH3DU=
  • Ironport-phdr: A9a23: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 p7AnaT/KXFE/s6GpaMh
  • Ironport-sdr: 64415b09_vW+jVhXrXPy4I8Nem8WE6ohuPbLS53i+NdFXoPnccKVg+o9 bVbHqK2ICf4Wc8pzIGZDdhwwwP+bNFGSV2QZHwQ==

It may seem obvious to a human how to translate that string to a term
understood by the kernel, but the general algorithm runs unification.

Gaëtan Gilbert

On 20/04/2023 17:12, Matthieu Baty wrote:
Hi Gaëtan and thanks for your answer,

> Elaboration of the user syntax "(@eq_refl nat 0)" to a term with expected type
"slow = 0" runs unification.

I still fail to see why it is required at this stage: any possible error
should be detected by the subsequent kernel checks anyways, right?

Thanks,

Matthieu

On 18/04/2023 14:55, Gaëtan Gilbert wrote:

> When proving a lemma through reflexivity, I expect unification to run twice:
> once while building the proof term interactively (can be skipped with
> exact_no_check eq_refl) and once at Qed time.

Technically at Qed time is only conversion (no existential variables may
remain), but this does not matter here.


> Alternatively, I could bypass interactive proof term construction and
provide my
> proof as a definition. I would then expect the validation of the term to
take as
> long as the previous `Qed` (i.e. x seconds). Alas, I would be wrong, as it
ends
> up taking twice that time.

Elaboration of the user syntax "(@eq_refl nat 0)" to a term with expected type
"slow = 0" runs unification.
Then the kernel checks the produced term which involves running conversion.

Gaëtan Gilbert

On 18/04/2023 14:51, Matthieu Baty wrote:
Hello coq-club,

I recently ran into a puzzling Coq behavior regarding the typechecking of
manual
proof terms definitions and  I would appreciate some pointers. The attached
file
contains a runnable example of what I describe in here.

When proving a lemma through reflexivity, I expect unification to run twice:
once while building the proof term interactively (can be skipped with
exact_no_check eq_refl) and once at Qed time.

Lemma interactive_proof: slow = 0.
Proof.
   Time reflexivity. (* x seconds *)
Time Qed.           (* also x seconds *)

Alternatively, I could bypass interactive proof term construction and provide
my
proof as a definition. I would then expect the validation of the term to take
as
long as the previous `Qed` (i.e. x seconds). Alas, I would be wrong, as it
ends
up taking twice that time.

Time Definition raw_proof: slow = 0 := (@eq_refl nat 0). (* 2x seconds *)

This is not a `Definition` issue, as using `Check` with the appropriate type
annotations yields the same behavior.

Time Check (@eq_refl nat 0: slow = 0). (* also 2x seconds *)

Tactics in terms can help with this: replacing the body of the previous
definition with ltac:(exact_no_check (<my_proof>)) makes it run in the time I
expect it to (x seconds). I can't see why all proof definitions don't behave
like this.

What exactly is going on? Is there a good reason for this behavior?

Thanks,
Matthieu Baty



Archive powered by MHonArc 2.6.19+.

Top of Page