comparison src/Universes.v @ 479:40a9a36844d6

Batch of changes based on proofreader feedback
author Adam Chlipala <adam@chlipala.net>
date Wed, 28 Nov 2012 19:33:21 -0500
parents 1fd4109f7b31
children 31258618ef73
comparison
equal deleted inserted replaced
478:f02b698aadb1 479:40a9a36844d6
130 ]] 130 ]]
131 131
132 << 132 <<
133 Error: Illegal application (Type Error): 133 Error: Illegal application (Type Error):
134 ... 134 ...
135 The 1st term has type "Type (* (Top.15)+1 *)" which should be coercible to "Set". 135 The 1st term has type "Type (* (Top.15)+1 *)"
136 which should be coercible to "Set".
136 >> 137 >>
137 138
138 The parameter [T] of [id] must be instantiated with a [Set]. The type [nat] is a [Set], but [Set] is not. We can try fixing the problem by generalizing our definition of [id]. *) 139 The parameter [T] of [id] must be instantiated with a [Set]. The type [nat] is a [Set], but [Set] is not. We can try fixing the problem by generalizing our definition of [id]. *)
139 140
140 Reset id. 141 Reset id.
167 168
168 << 169 <<
169 Error: Universe inconsistency (cannot enforce Top.16 < Top.16). 170 Error: Universe inconsistency (cannot enforce Top.16 < Top.16).
170 >> 171 >>
171 172
172 %\index{universe inconsistency}%This error message reminds us that the universe variable for [T] still exists, even though it is usually hidden. To apply [id] to itself, that variable would need to be less than itself in the type hierarchy. Universe inconsistency error messages announce cases like this one where a term could only type-check by violating an implied constraint over universe variables. Such errors demonstrate that [Type] is _predicative_, where this word has a CIC meaning closely related to its usual mathematical meaning. A predicative system enforces the constraint that, for any object of quantified type, none of those quantifiers may ever be instantiated with the object itself. %\index{impredicativity}%Impredicativity is associated with popular paradoxes in set theory, involving inconsistent constructions like "the set of all sets that do not contain themselves" (%\index{Russell's paradox}%Russell's paradox). Similar paradoxes would result from uncontrolled impredicativity in Coq. *) 173 %\index{universe inconsistency}%This error message reminds us that the universe variable for [T] still exists, even though it is usually hidden. To apply [id] to itself, that variable would need to be less than itself in the type hierarchy. Universe inconsistency error messages announce cases like this one where a term could only type-check by violating an implied constraint over universe variables. Such errors demonstrate that [Type] is _predicative_, where this word has a CIC meaning closely related to its usual mathematical meaning. A predicative system enforces the constraint that, when an object is defined using some sort of quantifier, none of the quantifiers may ever be instantiated with the object itself. %\index{impredicativity}%Impredicativity is associated with popular paradoxes in set theory, involving inconsistent constructions like "the set of all sets that do not contain themselves" (%\index{Russell's paradox}%Russell's paradox). Similar paradoxes would result from uncontrolled impredicativity in Coq. *)
173 174
174 175
175 (** ** Inductive Definitions *) 176 (** ** Inductive Definitions *)
176 177
177 (** Predicativity restrictions also apply to inductive definitions. As an example, let us consider a type of expression trees that allows injection of any native Coq value. The idea is that an [exp T] stands for a reflected expression of type [T]. 178 (** Predicativity restrictions also apply to inductive definitions. As an example, let us consider a type of expression trees that allows injection of any native Coq value. The idea is that an [exp T] stands for a reflected expression of type [T].
1107 x = eq_rect p Q x p h 1108 x = eq_rect p Q x p h
1108 ]] 1109 ]]
1109 1110
1110 It turns out that this familiar axiom about equality (or some other axiom) is required to deduce [p = p0] from the hypothesis [H3] above. The soundness of that proof step is neither provable nor disprovable in Gallina. 1111 It turns out that this familiar axiom about equality (or some other axiom) is required to deduce [p = p0] from the hypothesis [H3] above. The soundness of that proof step is neither provable nor disprovable in Gallina.
1111 1112
1112 Hope is not lost, however. We can produce an even stranger looking lemma, which gives us the theorem without axioms. *) 1113 Hope is not lost, however. We can produce an even stranger looking lemma, which gives us the theorem without axioms. As always when we want to do case analysis on a term with a tricky dependent type, the key is to refactor the theorem statement so that every term we [match] on has _variables_ as its type indices; so instead of talking about proofs of [And p q], we talk about proofs of an arbitrary [r], but we only conclude anything interesting when [r] is an [And]. *)
1113 1114
1114 Lemma proj1_again'' : forall r, proof r 1115 Lemma proj1_again'' : forall r, proof r
1115 -> match r with 1116 -> match r with
1116 | And Ps p _ => match Ps return formula Ps -> Prop with 1117 | And Ps p _ => match Ps return formula Ps -> Prop with
1117 | nil => fun p => proof p 1118 | nil => fun p => proof p