Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] Non strictly positive occurrence

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] Non strictly positive occurrence


Chronological Thread 
  • From: Clément Pit-Claudel <cpitclaudel AT gmail.com>
  • To: coq-club AT inria.fr
  • Subject: Re: [Coq-Club] Non strictly positive occurrence
  • Date: Sat, 21 Aug 2021 21:59:57 -0400
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=cpitclaudel AT gmail.com; spf=Pass smtp.mailfrom=cpitclaudel AT gmail.com; spf=None smtp.helo=postmaster AT mail-qk1-f180.google.com
  • Ironport-hdrordr: A9a23:GyYtWqPIFZY1tMBcTuKjsMiBIKoaSvp037BZ7TENdfUzSL3lqynOpoVg6faQslwssR4b6La90cW7MBfhHNtOkPIs1NSZLXHbUQmTXeZfBOLZqlWKexEWtNQtsJuIG5IeNDSaNykYsS+V2njbLz9t+qj/zElqv4vjJrVWID2Cp5sO0+6xMGimLnE=
  • Ironport-phdr: A9a23:FCjchh0xYN67rDB5smDOUwQyDhhOgF0UFjAc5pdvsb9SaKPrp82kYBaHo6Q0xwKWFazgqNt8w9LMtK7hXWFSqb2gi1slNKJ2ahkelM8NlBYhCsPWQWfyLfrtcjBoVJ8aDAwt8H60K1VaF9jjbFPOvHKy8SQSGhLiPgZpO+j5AIHfg9qr2+yo/5DffgpEiTq/bLhvMBi4sALdu9UMj4B/MKgx0BzJonVJe+RS22xlIE+Ykgj/6Mmt4pNt6jxctP09+cFOV6X6ZLk4QqdDDDs6KWA15dbkugfFQACS+3YTSGQWkh5PAwjY8BH3W4r6vyXmuuZh3iSRIMv7Rq02Vzu/9admUALmhjkJNzA582/ZhMJ/g61Zrx29qBJy2JLUbYKPOfZiYq/Qc9EXSGxcVchRTSxBBYa8YpMRAuoFJ+FYqpfyp10SrRSmHwesBf/vxiZWi3/yx6I6zvkuHh/C3Ac9GN8BrGzUrNTpNKgOVeC61rTIwijdYPNSwjr9543IfQogofGIR75/bc3RyUw2Gg7Dk16fppDrMSmP2eQRr2iU8fBgVeS3hmMkrwx8rDeiy8UjhITLiYwY1lLJ+CV4zYspIdC1SlB3bNGnHZZStCyXKpZ7T80/T2xotig31L4LtJy7ciYFyJkqwQPUZf+fc4WQ/B7vSOKcLS17iX9lYr6zmQi+/Va6xuHhVcS4zE5GojRKn9XWt30Bygbf5taIR/dh5Eus2iqD2gbO4e9eO080j7DUK5s5z74wiJUTtUPDEzfzmErsja+Wclwo+vGr6+j6e7nmqIKQOoxohg3kPaQuncu/Aes8MgcQRWSU5eO81Lj78U34RrVFkOE2n7HHvJzGIckXvK20Dg9P3oo99RqzES2q3MkbkHUbNF5FfQiIj4ntO1HAOvD4CvK/jkywnzdzxvDGIqHuApHXIXjejbjuY7J95lVTyAo2199f5pZUBqsdL/L0X0/9rMbYAQMhMwyo3+bnD81w2Z8ZWWKWG6OWLKfSsUKT6e80OOmNZIoVuC7nJPQ/5v7ui2U5mV4HcqWz05sXciPwIvMzKEKAJHHon90pEGEQvwN4Qva5pkeFVGt4Y/e3UqQg0Qk6FMeNCY7eSo2pyOiKxCanFZlfe2xLDniDFH7pc8OPXPJaO3HaGdNojjFRDevpcIQmzxz77GcSLpJoK+PV/msTspexjLCdBsXWnBA2sCV3VoGTijHVCW5zmWwMSnk926Ut+SSVJX+M1KF5h7pTEtkBvpt0

On 8/21/21 5:01 PM, Marco Servetto wrote:
> Dear List, I'm trying to model a problem in COQ but I got stuck. My
> minimized problem is the following:
>
> Inductive Bool : Type := | T | F.
> Inductive A : Type :=
> | myA : (A->Bool)->A.

You minimized the problem too far, and Coq's concern with this type is
legitimate. The problem is that this definition would let you build
non-terminating functions, and from there prove False.

Let's see how the problem manifests itself. Start by turning off the
positivity checker for a moment:

Unset Positivity Checking.
Inductive A : Type := myA : (A -> Bool) -> A.
Set Positivity Checking.

Then define this fine function:

Definition not (b: Bool) :=
match b with T => F | F => T end.

And this odd one:

Definition loopy (a: A) :=
match a with myA f => not (f a) end.

That's enough; the following never terminates:

Compute (loopy (myA loopy)).

And indeed:

Goal False.
pose (loopy (myA loopy)) as b.

b := loopy (myA loopy): Bool
----------------------------
False

assert (b = not b) by reflexivity.

b := loopy (myA loopy): Bool
H: b = not b
----------------------------
False

destruct b; discriminate.
Qed.

There's a bit more detail on this in Chapter 3.6 "Reflexive Types" of CPDT.

Clément.



Archive powered by MHonArc 2.6.19+.

Top of Page