coq-club AT inria.fr
Subject: The Coq mailing list
List archive
- From: Amin Timany <amintimany AT gmail.com>
- To: coq-club AT inria.fr
- Subject: Re: [Coq-Club] Universe Polymorphism
- Date: Thu, 8 Dec 2022 18:44:30 +0100
- Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=amintimany AT gmail.com; spf=Pass smtp.mailfrom=amintimany AT gmail.com; spf=None smtp.helo=postmaster AT mail-ej1-f45.google.com
- Ironport-data: A9a23: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
- Ironport-hdrordr: A9a23:Pbf9Cq2BjN44fTghqdaSZwqjBJ8kLtp133Aq2lEZdPUzSL38qy nOpoV46faQslwssR4b6La90cW7MBDhHNtOkPIs1MmZLXPbURqTXeVfBOLZqlWKexEWtNQtrJ uIG5IeNDSaNykcsS+V2njBLz/i+rW6GWKT6Ns2A00DcegTUdAc0+6xMGimLnE=
- Ironport-phdr: A9a23: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 3PgLpv3KI0SMsvw3EkwMzFH
- Ironport-sdr: 6392228a_BwrXqwHwffiUaKkSrBujoapC8ehk0J0xM3kcEdH4e9C0JgQ 2/9MPO7UQSDAg9YrIpcLz+tAsVgjlxefkEPWD+A==
Dear Helmut,
Perhaps the following counterexample can be helpful which directly constructs
"the set of all sets that are not elements of themselves” as in Russel’s
paradox. (I checked this example with Coq version 8.15.2 with the
“-type-in-type” option.)
Inductive Ens@{i} : Type@{i} :=
ens_intro : forall A : Type@{i+1}, (A -> Ens) -> Ens.
Definition idx (A : Ens) : Type := match A with ens_intro T _ => T end.
Definition elem (A : Ens) (i : idx A) : Ens :=
match A as u return idx u -> Ens with ens_intro B f => fun j => f j end i.
Definition elem_of (x A : Ens) := exists a, elem A a = x.
Definition Union {T} (f : T -> Ens) :=
ens_intro {x : T & idx (f x)} (fun u => elem (f (projT1 u)) (projT2 u)).
Lemma elem_of_union {T} (f : T -> Ens) A : elem_of A (Union f) <-> exists t,
elem_of A (f t).
Proof.
split.
- intros [[z idx] Hzidx]; exists z, idx; assumption.
- intros [z [idx Hzidx]]; exists (existT _ z idx); assumption.
Qed.
Definition singleton_if (a : Ens) (P : Prop) : Ens := ens_intro {x : unit |
P} (fun _ => a).
Lemma elem_of_singleton_if a b P : (P /\ a = b) <-> elem_of b (singleton_if a
P).
Proof.
split.
- intros [HP ->].
exists (exist _ tt HP); reflexivity.
- intros [[z Hz1] Hz2]; tauto.
Qed.
Definition Russel : Ens := Union (fun A : Ens => singleton_if A (not (elem_of
A A))).
Theorem Russel's_Paradox : elem_of Russel Russel <-> not (elem_of Russel
Russel).
Proof.
split.
- intros Helem.
apply elem_of_union in Helem as [t Ht].
apply elem_of_singleton_if in Ht as [? ->].
assumption.
- intros Hnelem.
apply elem_of_union.
exists Russel.
apply elem_of_singleton_if; split; [assumption|reflexivity].
Qed.
Regards,
Amin
> On 17 Nov 2022, at 12.05, Helmut Brandl <helmut.brandl AT gmx.net> wrote:
>
> Thanks Gaëtan for your effort and your patience with my questions.
>
> However the situation remains somehow unsatisfactory. By reading and
> rereading the documentation I cannot find a clear rule which states what is
> allowed and what is not allowed with respect to universes. As opposed to
> that, the positivity condition is stated very clearly and to my surprise,
> the justification of the positivity rule is explained with some examples
> which are short and to the point.
>
> My intuitive explanation with the “hiding” of a higher universe type within
> a lower universe inductive definition might be correct. But it is not very
> precise and does not give a justification. Furthermore the example of the
> existential quantification does give a constraint on the universes without
> explaining the general rule.
>
> Sorry for me insisting on this topic. Maybe it cannot be resolved easily.
>
> Anyhow thanks for your efforts.
>
> Helmut
>
>
>> On 17 Nov 2022, at 11:12, Gaëtan Gilbert <gaetan.gilbert AT skyskimmer.net>
>> wrote:
>>
>>> Unfortunately I have not found the rule that every argument of a
>>> constructor must be at a smaller or equal universe to the output universe
>>
>> I can't find it either although it's mentioned, eg
>>
>>> One can remark that there is a constraint between the sort of the arity
>>> of the inductive type and the sort of the type of its constructors which
>>> will always be satisfied for the impredicative sorts SProp and Prop but
>>> may fail to define inductive type on sort Set and generate constraints
>>> between universes for inductive types in the Type hierarchy.
>>
>> Probably a doc bug.
>>
>> The reason for the rule is basically what you said earlier
>>
>>> I suspect that if it were well typed, then I could ‘hide’ an object from
>>> the universe ‘u+1’ in the list which resides in the universe ‘u’.
>>
>> which leads to inconsistency. See also
>> https://coq.inria.fr/distrib/current/stdlib/Coq.Logic.Hurkens.html and
>> mentioned references.
>>
>> Gaëtan Gilbert
>>
>> On 17/11/2022 10:45, Helmut Brandl wrote:
>>>> On 16 Nov 2022, at 23:35, Gaëtan Gilbert <gaetan.gilbert AT skyskimmer.net
>>>> <mailto:gaetan.gilbert AT skyskimmer.net>> wrote:
>>>>
>>>> The rules for inductives
>>>> https://coq.github.io/doc/master/refman/language/core/inductive.html#theory-of-inductive-definitions
>>>>
>>>> <https://coq.github.io/doc/master/refman/language/core/inductive.html#theory-of-inductive-definitions>
>>>> basically every argument of a constructor must be at a smaller or equal
>>>> universe to the output universe of the inductive. The first argument of
>>>> cons fails this.
>>> Thanks for the explanation. I have tried to read the description in the
>>> link. Unfortunately I have not found the rule that every argument of a
>>> constructor must be at a smaller or equal universe to the output
>>> universe. Could you point to the specific paragraph which states that
>>> rule. Since the rules are very technical I might have overlooked it.
>>> My intention is to understand not only the “what” of the rules, but also
>>> the “why” of the rules. What is the justification of such a rule? E.g.
>>> first I didn’t understand the necessity of the positivity rule of the
>>> constructor types. Then I have found an example which makes the necessity
>>> of the positivity rule clear. If the following inductive type were allowed
>>> Inductive T: Type :=
>>> | co: (T -> T) -> T.
>>> I could define a fixpoint with infinite recursion
>>> Fixpoint run (t: T): T :=
>>> match t with
>>> | co f => run (f (co f))
>>> end.
>>> Is there a similar justification for the rule you have mentioned? Does
>>> the rule inhibit an inconsistency like infinite recursion?
>>> — Helmut
>>>>
>>>> Gaëtan Gilbert
>>>>
>>>> On 16/11/2022 22:32, Helmut Brandl wrote:
>>>>>> On 16 Nov 2022, at 22:06, Helmut Brandl <helmut.brandl AT gmx.net
>>>>>> <mailto:helmut.brandl AT gmx.net> <mailto:helmut.brandl AT gmx.net
>>>>>> <mailto:helmut.brandl AT gmx.net>>> wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>> On 16 Nov 2022, at 21:23, Gaëtan Gilbert
>>>>>>> <gaetan.gilbert AT skyskimmer.net <mailto:gaetan.gilbert AT skyskimmer.net>
>>>>>>> <mailto:gaetan.gilbert AT skyskimmer.net
>>>>>>> <mailto:gaetan.gilbert AT skyskimmer.net>>> wrote:
>>>>>>>
>>>>>>>
>>>>>>>> I.e. the argument type of a function type can live in a higher
>>>>>>>> universe than the result type.
>>>>>>>
>>>>>>> Yes, but "lst" is an _inhabitant_ of the function type, it's not the
>>>>>>> function type itself.
>>>>>>>
>>>>>>> Similarly "(fun A:Type@{u+1} => A) : Type@{u+1} -> Type@{u}" is
>>>>>>> rejected
>>>>>>
>>>>>> In that case the rejection is clear to me. The term ‘A’ has type
>>>>>> ’Type@{u+1}’. Therefore the function returns a result of type
>>>>>> ’Type@{u+1}’ and not ’Type@{u}’ as required by the type annotation.
>>>>>> I.e. the function on the left hand side of the colon is not an
>>>>>> inhabitant of the type on the right hand side of the colon. The
>>>>>> compiler must reject it.
>>>>>>
>>>>>> Are you saying that the type ’Type@{u+1} -> Type@{u}’ is not allowed
>>>>>> to be inhabited? Is there such a typing rule? If there is such a
>>>>>> typing rule, I would like to understand why it is there. Does the
>>>>>> violation of such a typing rule create any inconsistencies like an
>>>>>> inhabitant of the type ‘forall A: Type, A’?
>>>>> According to coq the type ’Type@{u+1} -> Type@{u}’ can have
>>>>> inhabitants. E.g. the following is accepted by coq:
>>>>> Check (fun A: Type@{u+1} => nat): Type@{u+1} -> Type@{u}.
>>>>> However my construction of the inductive type ‘lst’ which is an
>>>>> inhabitant of exactly that type is rejected. Why is it possible to
>>>>> construct a function of that type but not an inductive definition?
>>>>>>
>>>>>>
>>>>>> — Helmut
>>>>>>
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On 16/11/2022 21:02, Helmut Brandl wrote:
>>>>>>>> I’d like to understand universes and universe polymorphism better.
>>>>>>>> Therefore I have some questions:
>>>>>>>> The following term is well typed in coq:
>>>>>>>> Universe u.
>>>>>>>> Check forall A:Type@{u+1}, Type@{u}.
>>>>>>>> I.e. the argument type of a function type can live in a higher
>>>>>>>> universe than the result type. If I try the same with an inductive
>>>>>>>> type, I get an error.
>>>>>>>> Inductive lst (A: Type@{u+1}): Type@{u} :=
>>>>>>>> | nil: lst A
>>>>>>>> | cons: A -> lst A -> lst A.
>>>>>>>> *Error:*Universe inconsistency. Cannot enforce u = max(Set, u+1).
>>>>>>>> What is the theoretical background of this consistency error. The
>>>>>>>> type of ‘lst’ is exactly the type I have checked above as well
>>>>>>>> typed. I suspect that if it were well typed, then I could ‘hide’ an
>>>>>>>> object from the universe ‘u+1’ in the list which resides in the
>>>>>>>> universe ‘u’. Can anybody help to give a more precise explanation.
>>>>>>>> Regards
>>>>>>>> Helmut
>>>>>>
>
- Re: [Coq-Club] Universe Polymorphism, Amin Timany, 12/08/2022
- Re: [Coq-Club] Universe Polymorphism, Helmut Brandl, 12/08/2022
- Re: [Coq-Club] Universe Polymorphism, Sylvain Boulmé, 12/09/2022
- Re: [Coq-Club] Universe Polymorphism, Gaëtan Gilbert, 12/09/2022
- Re: [Coq-Club] Universe Polymorphism, Helmut Brandl, 12/08/2022
Archive powered by MHonArc 2.6.19+.