<?xml encoding="ISO-8859-1"?>
+<!-- Copyright (C) 2000, HELM Team -->
+<!-- -->
+<!-- This file is part of HELM, an Hypertextual, Electronic -->
+<!-- Library of Mathematics, developed at the Computer Science -->
+<!-- Department, University of Bologna, Italy. -->
+<!-- -->
+<!-- HELM is free software; you can redistribute it and/or -->
+<!-- modify it under the terms of the GNU General Public License -->
+<!-- as published by the Free Software Foundation; either version 2 -->
+<!-- of the License, or (at your option) any later version. -->
+<!-- -->
+<!-- HELM is distributed in the hope that it will be useful, -->
+<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of -->
+<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -->
+<!-- GNU General Public License for more details. -->
+<!-- -->
+<!-- You should have received a copy of the GNU General Public License -->
+<!-- along with HELM; if not, write to the Free Software -->
+<!-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, -->
+<!-- MA 02111-1307, USA. -->
+<!-- -->
+<!-- For details, see the HELM World-Wide-Web page, -->
+<!-- http://cs.unibo.it/helm/. -->
+
<!--*****************************************************************-->
<!-- DTD FOR CIC OBJECTS: -->
<!-- First draft: September 1999, Claudio Sacerdoti Coen -->
<!-- CIC term declaration -->
<!ENTITY % term '(LAMBDA|CAST|PROD|REL|SORT|APPLY|VAR|META|IMPLICIT|CONST|
- ABST|MUTIND|MUTCONSTRUCT|MUTCASE|FIX|COFIX)'>
+ LETIN|MUTIND|MUTCONSTRUCT|MUTCASE|FIX|COFIX)'>
+
+<!-- CIC sorts -->
+
+<!ENTITY % sort '(Prop|Set|Type)'>
+
+<!-- CIC sequents -->
+
+<!ENTITY % sequent '((Decl|Def|Hidden)*,Goal)'>
<!-- CIC objects: -->
params CDATA #REQUIRED
id ID #REQUIRED>
-<!ELEMENT Variable (type)>
+<!ELEMENT Variable (body?,type)>
<!ATTLIST Variable
name CDATA #REQUIRED
id ID #REQUIRED>
+<!ELEMENT Sequent %sequent;>
+<!ATTLIST Sequent
+ no NMTOKEN #REQUIRED
+ id ID #REQUIRED>
+
<!-- Elements used in CIC objects, which are not terms: -->
<!ELEMENT InductiveType (arity,Constructor*)>
name CDATA #REQUIRED
inductive (true|false) #REQUIRED>
-<!ELEMENT Conjecture %term;>
+<!ELEMENT Conjecture %sequent;>
<!ATTLIST Conjecture
- no NMTOKEN #REQUIRED>
+ no NMTOKEN #REQUIRED
+ id ID #REQUIRED>
<!ELEMENT Constructor %term;>
<!ATTLIST Constructor
name CDATA #REQUIRED>
+<!ELEMENT Decl %term;>
+<!ATTLIST Decl
+ name CDATA #IMPLIED
+ id ID #REQUIRED>
+
+<!ELEMENT Def %term;>
+<!ATTLIST Def
+ name CDATA #IMPLIED
+ id ID #REQUIRED>
+
+<!ELEMENT Hidden EMPTY>
+<!ATTLIST Hidden
+ id ID #REQUIRED>
+
+<!ELEMENT Goal %term;>
+
<!-- CIC terms: -->
<!ELEMENT LAMBDA (source,target)>
<!ATTLIST LAMBDA
- id ID #REQUIRED>
+ id ID #REQUIRED
+ sort %sort; #REQUIRED>
+
+<!ELEMENT LETIN (term,letintarget)>
+<!ATTLIST LETIN
+ id ID #REQUIRED
+ sort %sort; #REQUIRED>
<!ELEMENT PROD (source,target)>
<!ATTLIST PROD
- id ID #REQUIRED>
+ id ID #REQUIRED
+ type %sort; #REQUIRED>
<!ELEMENT CAST (term,type)>
<!ATTLIST CAST
- id ID #REQUIRED>
+ id ID #REQUIRED
+ sort %sort; #REQUIRED>
<!ELEMENT REL EMPTY>
<!ATTLIST REL
value NMTOKEN #REQUIRED
binder CDATA #REQUIRED
- id ID #REQUIRED>
+ id ID #REQUIRED
+ sort %sort; #REQUIRED>
<!ELEMENT SORT EMPTY>
<!ATTLIST SORT
<!ELEMENT APPLY (%term;)+>
<!ATTLIST APPLY
- id ID #REQUIRED>
+ id ID #REQUIRED
+ sort %sort; #REQUIRED>
<!ELEMENT VAR EMPTY>
<!ATTLIST VAR
- relUri CDATA #REQUIRED
- id ID #REQUIRED>
-
-<!ELEMENT META EMPTY>
+ relUri CDATA #REQUIRED
+ id ID #REQUIRED
+ sort %sort; #REQUIRED>
+
+<!-- The substitutions are ordered by increasing DeBrujin -->
+<!-- index. An empty substitution means that that index is -->
+<!-- not accessible. -->
+<!ELEMENT META (substitution*)>
<!ATTLIST META
- no NMTOKEN #REQUIRED
- id ID #REQUIRED>
+ no NMTOKEN #REQUIRED
+ id ID #REQUIRED
+ sort %sort; #REQUIRED>
<!ELEMENT IMPLICIT EMPTY>
<!ATTLIST IMPLICIT
<!ELEMENT CONST EMPTY>
<!ATTLIST CONST
- uri CDATA #REQUIRED
- id ID #REQUIRED>
-
-<!ELEMENT ABST EMPTY>
-<!ATTLIST ABST
- uri CDATA #REQUIRED
- id ID #REQUIRED>
+ uri CDATA #REQUIRED
+ id ID #REQUIRED
+ sort %sort; #REQUIRED>
<!ELEMENT MUTIND EMPTY>
<!ATTLIST MUTIND
uri CDATA #REQUIRED
noType NMTOKEN #REQUIRED
noConstr NMTOKEN #REQUIRED
- id ID #REQUIRED>
+ id ID #REQUIRED
+ sort %sort; #REQUIRED>
<!ELEMENT MUTCASE (patternsType,inductiveTerm,pattern*)>
<!ATTLIST MUTCASE
uriType CDATA #REQUIRED
noType NMTOKEN #REQUIRED
- id ID #REQUIRED>
+ id ID #REQUIRED
+ sort %sort; #REQUIRED>
<!ELEMENT FIX (FixFunction+)>
<!ATTLIST FIX
noFun NMTOKEN #REQUIRED
- id ID #REQUIRED>
+ id ID #REQUIRED
+ sort %sort; #REQUIRED>
<!ELEMENT COFIX (CofixFunction+)>
<!ATTLIST COFIX
noFun NMTOKEN #REQUIRED
- id ID #REQUIRED>
+ id ID #REQUIRED
+ sort %sort; #REQUIRED>
<!-- Elements used in CIC terms: -->
<!ATTLIST CofixFunction
name CDATA #REQUIRED>
+<!ELEMENT substitution ((%term;)?)>
+
<!-- Sintactic sugar for CIC terms and for CIC objects: -->
<!ELEMENT source %term;>
<!ATTLIST target
binder CDATA #IMPLIED>
+<!ELEMENT letintarget %term;>
+<!ATTLIST letintarget
+ binder CDATA #REQUIRED>
+
<!ELEMENT term %term;>
<!ELEMENT type %term;>