coq-club AT inria.fr
Subject: The Coq mailing list
List archive
- From: Abhishek Anand <abhishek.anand.iitg AT gmail.com>
- To: coq-club <coq-club AT inria.fr>
- Subject: [Coq-Club] section variables and asynchronous proof checking
- Date: Fri, 11 Dec 2015 17:07:49 -0500
- Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=abhishek.anand.iitg AT gmail.com; spf=Pass smtp.mailfrom=abhishek.anand.iitg AT gmail.com; spf=None smtp.helo=postmaster AT mail-qk0-f175.google.com
- Ironport-phdr: 9a23:rRpmPBYuvWBjAwp+Ol3CfVv/LSx+4OfEezUN459isYplN5qZpcm4bnLW6fgltlLVR4KTs6sC0LqI9fi4EUU7or+/81k6OKRWUBEEjchE1ycBO+WiTXPBEfjxciYhF95DXlI2t1uyMExSBdqsLwaK+i760zceF13FOBZvIaytQ8iJ35rxj7j60qaQSjsLrQL1Wal1IhSyoFeZnegtqqwmFJwMzADUqGBDYeVcyDAgD1uSmxHh+pX4p8Y7oGwD884mosVHSODxe7kyBehTCy1jOGQo7uXqswPCRE2B/C1PfH8Rl09hCQjE9xH3Xd/YtCL8uqIp0SOaPNb2QLNyUDKr6astSR70hw8IMjc49Cfcjckm3/ETmw6ouxEqm92cW4qSLvcrJq4=
Hi,
While trying to investigate why CoqIDE (Windows 8.5pl3) was not checking my opaque proofs asynchronously (in a background thread), I found that
the section variables often (always?) prevent CoqIDE from checking opaque proofs asynchronously.
This behaviour of CoqIDE does not surprise me anymore.
The fundamental property that enabled asynchronous proof checking was that the exact content between Proof....Qed does not matter, as long as the content is correct. Section variables break this invariant,
because at the end of a section, the types of its lemmas depends on the section variables used in the proofs. This is illustrated in the example below. The types of [useEqq] and [noUseEqq] are different
at the end of the section, even though they were identical inside.
Is there a way to get both the brevity enabled by section variables, and
the significant productivity-boost enabled by asynchronous proof checking?
An easy fix could be a switch to make the types of lemmas of a section depend on all section variables, and thus regain the invariant enabling asynchronous proof checking?
Section NoAsynch.
Variables a b:nat.
Hypothesis eqq : a=b.
Lemma useEqq :a=a.
Proof.
rewrite eqq.
reflexivity.
Qed.
Lemma noUseEqq :a=a.
Proof.
reflexivity.
Qed.
End NoAsynch.
Check useEqq.
(*useEqq
: forall a b : nat, a = b -> a = a *)
Check noUseEqq.
(*noUseEqq
: forall a : nat, a = a*)
Indeed, when section variables are eliminated, as below,
CoqIDE checks the proofs below asynchronously.
Section Asynch.
Lemma useEqqA (a b:nat) (eqq:a=b) :a=a.
Proof.
rewrite eqq.
reflexivity.
Qed.
Lemma noUseEqqA (a b:nat) (eqq:a=b) :a=a.
Proof.
reflexivity.
Qed.
End Asynch.
Thanks,
-- Abhishek
http://www.cs.cornell.edu/~aa755/- [Coq-Club] section variables and asynchronous proof checking, Abhishek Anand, 12/11/2015
- Re: [Coq-Club] section variables and asynchronous proof checking, Enrico Tassi, 12/12/2015
- Re: [Coq-Club] section variables and asynchronous proof checking, Abhishek Anand, 12/12/2015
- Re: [Coq-Club] section variables and asynchronous proof checking, Enrico Tassi, 12/12/2015
Archive powered by MHonArc 2.6.18.