aboutsummaryrefslogtreecommitdiff
path: root/kernel/term.ml
diff options
context:
space:
mode:
authorherbelin2008-04-27 16:46:15 +0000
committerherbelin2008-04-27 16:46:15 +0000
commitca3812d7804f3936bb420e96fad034983ede271a (patch)
tree2e22e79f2225fcf3b7afcc29f99e844bd2460328 /kernel/term.ml
parentd7e7e6756b46998e864cc00355d1946b69a43c1a (diff)
Correction du bug des types singletons pas sous-type de Set
(i.e. "Inductive unit := tt." conduisait à "t:Prop" alors que le principe de la hiérarchie d'univers est d'être cumulative -- et que Set en soit le niveau 0). Une solution aurait été de poser Prop <= Set mais on adopte une autre solution. Pour éviter le côté contre-intuitif d'avoir unit dans Type et Prop <= Set, on garde la représentation de Prop au sein de la hiérarchie prédicative sous la forme "Type (max ([],[])" (le niveau sans aucune contrainte inférieure, appelons Type -1) et on adapte les fonctions de sous-typage et de typage pour qu'elle prenne en compte la règle Type -1 <= Prop (cf reduction.ml, reductionops.ml, et effets incidents dans Termops.refresh_universes et Univ.super). Petite uniformisation des noms d'univers et de sortes au passage (univ.ml, univ.mli, term.ml, term.mli et les autres fichiers). git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@10859 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'kernel/term.ml')
-rw-r--r--kernel/term.ml13
1 files changed, 5 insertions, 8 deletions
diff --git a/kernel/term.ml b/kernel/term.ml
index 45cd2fb0e0..a15510158f 100644
--- a/kernel/term.ml
+++ b/kernel/term.ml
@@ -43,8 +43,9 @@ type sorts =
| Prop of contents (* proposition types *)
| Type of universe
-let mk_Set = Prop Pos
-let mk_Prop = Prop Null
+let prop_sort = Prop Null
+let set_sort = Prop Pos
+let type1_sort = Type type1_univ
type sorts_family = InProp | InSet | InType
@@ -830,18 +831,14 @@ let mkMeta = mkMeta
let mkVar = mkVar
(* Construct a type *)
-let mkProp = mkSort mk_Prop
-let mkSet = mkSort mk_Set
+let mkProp = mkSort prop_sort
+let mkSet = mkSort set_sort
let mkType u = mkSort (Type u)
let mkSort = function
| Prop Null -> mkProp (* Easy sharing *)
| Prop Pos -> mkSet
| s -> mkSort s
-let prop = mk_Prop
-and spec = mk_Set
-and type_0 = Type prop_univ
-
(* Constructs the term t1::t2, i.e. the term t1 casted with the type t2 *)
(* (that means t2 is declared as the type of t1) *)
let mkCast = mkCast