coq-club AT inria.fr
Subject: The Coq mailing list
List archive
- From: Nikhil Swamy <nswamy AT microsoft.com>
- To: Stefan Monnier <monnier AT iro.umontreal.ca>
- Cc: "coq-club AT inria.fr" <coq-club AT inria.fr>
- Subject: Re: [Coq-Club] Nested positivity
- Date: Wed, 8 Feb 2023 18:29:01 +0000
- Accept-language: en-US
- Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microsoft.com; dmarc=pass action=none header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=55YTDxVklZzI3d/9+gO3lWq8y2jBz8EcwNKdLMfvYEE=; b=ftBPA/3oc+CL3VRo8Dm3axet3j7BEoKSiwy50ivRB6CSdTuIMhxUQRVmAAlskpKu8G+M6BAfwTo/Nl6e6C2iBAjaFNglxJxyJ7OZaVgx7oo0kX6DrUg5t5/owcMnaleAbJXyNYA+KAaHrXSefpzDgz5srcRVCW+ZfKcX4oNqmoxn5/URGVO/+BY+10dPYQyJ6n8kL7M3CkuPnzCUKQ2IGIpjVkNnNP6ZoQhHXvsNK23Z7hJ+MEe2v2ZF3lDsFVlh+6Z6XMuJNjIpl75JKh0Yl8jKOULN+/M/DQO1k4muIWAFXNsbrurgeZbZLpsl53ln4ZhDEwnzFfuBZVTETBi+TA==
- Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TM7SajbXeP3EHCvsBy4C50zZbdAttBUO0SJFFZTqMAjCVOlrdfLvLCOzZVJiptkpbnt/nCXCfZpzpfYOOI5nDZCZc1NuIJJe7JoqNkHqU3jaW2IpadkcifcvTcKhV11BEyyv4srjhawwpASg/GUwCUEsXWZqHZwFM0czXEii2gEsL2Smq1UQvmftwOBIFd/vKD7tk0WgAqzysLn/Ty/jymvnfnP+5HHWO+IR+7eHXh+hODDkAbn46UhekKjTdK0T2PZLFXT/NYSkhKp5ypeUTEfwt7tdLzaQ0gu7CItj3JioasoqWCN4d4H2GFHXhbFmaC8cWcbEV/c8Qkou22Q0xA==
- Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=nswamy AT microsoft.com; spf=Pass smtp.mailfrom=nswamy AT microsoft.com; spf=Pass smtp.helo=postmaster AT BN3PR00CU001-vft-obe.outbound.protection.outlook.com
- Ironport-data: A9a23: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
- Ironport-hdrordr: A9a23:yRXU6q3yIoHohwBc6B+EpQqjBJUkLtp133Aq2lEZdPU1SL3kqy nAppQmPHPP5Qr5HUtQ/OxoW5PwPU80l6QFgrX5VI3KNGKNhILrFvAB0WKI+VLd8ljFl9K1op 0PT0ERMrHN5HFB/KHHCFPRKadH/DDNytHNuQ6X9QYVcek+A5sQlDuQIm6gYzdLrCAvP+tAKK ah
- Ironport-phdr: A9a23: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 pn7cY43atLoTH29Vw7n4w8=
- Ironport-sdr: 63e3e9f1_5vjbZNdTMdUbup88FlmMpgPefcZPBG5wlWqt67MTOf1Oktd 0hviOiyHr6TzscmpGoiwF/UUEuukExb9Da/+RVw==
- Msip_labels: MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Enabled=True;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SiteId=72f988bf-86f1-41af-91ab-2d7cd011db47;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_SetDate=2023-02-08T18:29:01.309Z;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Name=General;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_ContentBits=0;MSIP_Label_f42aa342-8706-4288-bd11-ebb85995028c_Method=Standard;
Thanks Stefan. In this case, it does seem closely related to uniqueness of
identity proofs.
However, forbidding indexes (and non-uniformly recursive parameters) from
mentioning the inductive being defined seems to impose a broader class of
restrictions that I don't know how to interpret.
For instance, in this context of basic definitions:
Inductive Eq (A:Type) (x:A) : A -> Type :=
| Refl : Eq A x x.
Inductive Opt (A:Type) :=
| None : Opt A
| Some : A -> Opt A.
Inductive Sigma (A:Type) (B: A -> Type) : Type :=
| Sig : forall (x:A), B x -> Sigma A B.
Here is something that is accepted:
Definition n (A:Type) := Sigma A (fun (v:A) => Eq A v v).
Inductive N :=
| MkN : n N -> N.
But, here's a small variant where the inductive definition M is rejected.
Definition IsSome (A:Type) (x:Opt A) : bool :=
match x with
| Some _ _ => true
| _ => false
end.
Definition m (A:Type) := Sigma (Opt A) (fun (v:Opt A) => Eq bool (IsSome A v)
true).
Inductive M :=
| MkM : m M -> M.
I think the only difference that I can see is that in the case of n N, the
type N appears only as a parameter of both Sigma and Eq and so it is
accepted.
Whereas in the second case, the type A appears free in the index of the
constructed type of the Refl constructor (after instantiation with the
parameters bool and (IsSome A v)).
Interestingly, although Agda also rejects my first example with I1 and I2, it
accepts an adaption of this second example.
data Bool : Set where
true : Bool
false : Bool
data Eq (A : Set) (x : A) : A -> Set where
refl : Eq A x x
data Opt (A : Set) : Set where
some : A -> Opt A
none : Opt A
isSome : (A : Set) -> Opt A -> Bool
isSome A (some _) = true
isSome A none = false
data Sigma (A : Set) (B : A -> Set) : Set where
sig : (x : A) -> B x -> Sigma A B
n : Set -> Set
n A = Sigma A (\x -> Eq A x x)
data N : Set where
MkN : n N -> N
m : Set -> Set
m A = Sigma (Opt A) (\x -> Eq Bool (isSome A x) true)
Is there something fundamental here or is it just a quirk of the syntactic
nested positivity condition?
Thanks for any insights!
-Nik
From: Stefan Monnier <monnier AT iro.umontreal.ca>
Sent: Tuesday, February 7, 2023 3:36 PM
To: Nikhil Swamy <nswamy AT microsoft.com>
Cc: coq-club AT inria.fr <coq-club AT inria.fr>
Subject: Re: [Coq-Club] Nested positivity
> Coq rejects the definition of I2 below saying "Non strictly positive
> occurrence of "I2" in "I1 I2 I2 -> I2".".
>
> Inductive I1 (A:Type) : Type -> Type :=
> | MkI1 : I1 A A.
>
> Inductive I2 :=
> | MkI2 : I1 I2 I2 -> I2.
>
> I think this is due to a violation of the Nested Positivity condition,
> described here:
> https://coq.inria.fr/refman/language/core/inductive.html#nested-positivity
>
> However, I couldn't find a description in the manual for why nested
> positivity is important.
>
> In particular, if one were to accept a definition in which the type being
> defined (I2 in this case) appears as an index of some other inductive type
> (e.g., I1), do things become inconsistent?
Coq's positivity requirements are stricter than mere positivity
(because of impredicativity), but even for "mere" positivity I think
your above I2 type is only positive if you assume uniqueness of
I1 proofs (i.e. axiom K):
I1 ≃ Eq
MkI1 ≃ eq_refl
I2 ≃ μx . (I1 x x) = μF
I can define
fmap : (α → β) → F α → F β
fmap f _ = eq_refl
but then for `fmap id = id` to be true I need axiom K.
I'd be curious to know if admitting such definitions is more or less
soundness-threatening than axiom K.
Stefan
- [Coq-Club] Nested positivity, Nikhil Swamy, 02/07/2023
- Re: [Coq-Club] Nested positivity, Stefan Monnier, 02/08/2023
- Re: [Coq-Club] Nested positivity, Nikhil Swamy, 02/08/2023
- Re: [Coq-Club] Nested positivity, Yannick Forster, 02/08/2023
- Re: [Coq-Club] Nested positivity, Nikhil Swamy, 02/08/2023
- Re: [Coq-Club] Nested positivity, Stefan Monnier, 02/08/2023
Archive powered by MHonArc 2.6.19+.