coq-club AT inria.fr
Subject: The Coq mailing list
List archive
- From: Matthieu Baty <matthieu.baty AT epfl.ch>
- To: <coq-club AT inria.fr>
- Subject: Re: [Coq-Club] Manual proof terms definitions and typechecking
- Date: Thu, 20 Apr 2023 17:12:40 +0200
- Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=matthieu.baty AT epfl.ch; spf=Pass smtp.mailfrom=matthieu.baty AT epfl.ch; spf=None smtp.helo=postmaster AT smtpout.epfl.ch
- Dkim-filter: OpenDKIM Filter v2.11.0 smtp2.epfl.ch 4EE7440ED33A
- Ironport-data: A9a23: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
- Ironport-hdrordr: A9a23:OzA35KjJD5LfWf/R636d18pwAnBQXvMji2hC6mlwRA09TyXqrb HNoB19726NtN9xYgBYpTjjUJPrfZq4z/NICOYqU4tKMDOW31dAabsSi7cKoAeAJ8SdzIFgPM 5bGsAUZOEYT2IK6foSizPIcOrIruP3lZxAyd2/8587JjsaEZ2IuD0JcTqmLg==
- Ironport-phdr: A9a23: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 QpvNGWdL1qwp6BlaXhslROatINBHbhXTf8cCCI=
- Ironport-sdr: 6441566b_gcNCnl6mXagsrLHhyqltcBLYkOTe2iX7sCbL29bfmzmaEBH HHZtqfmy0hG5Q65GUkEevXVwXaALEUaxHNYQFaw==
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
- [Coq-Club] Manual proof terms definitions and typechecking, Matthieu Baty, 04/18/2023
- Re: [Coq-Club] Manual proof terms definitions and typechecking, Gaëtan Gilbert, 04/18/2023
- Re: [Coq-Club] Manual proof terms definitions and typechecking, Matthieu Baty, 04/20/2023
- Re: [Coq-Club] Manual proof terms definitions and typechecking, Gaëtan Gilbert, 04/20/2023
- Re: [Coq-Club] Manual proof terms definitions and typechecking, Matthieu Baty, 04/20/2023
- Re: [Coq-Club] Manual proof terms definitions and typechecking, Gaëtan Gilbert, 04/18/2023
Archive powered by MHonArc 2.6.19+.