<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:annotation>
    <xs:documentation>QEDEQ 1.0 Schema
    
This file is part of the project "Hilbert II" - http://www.qedeq.org

Copyright 2000-2008,  Michael Meyling &lt;mime@qedeq.org&gt;.</xs:documentation>
  </xs:annotation>

  <xs:element name="QEDEQ">
    <xs:annotation>
        <xs:documentation>Root element. Any QEDEQ document has this structure.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="HEADER">
          <xs:annotation>
            <xs:documentation>File specification, infromation about the authors, imports of other QEDEQ modules and so on are part of the header.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="SPECIFICATION">
                <xs:annotation>
                  <xs:documentation>File specification of this module. What is the name of this module and where to find it.</xs:documentation>
                </xs:annotation>
              </xs:element>
              <xs:element ref="TITLE">
                <xs:annotation>
                  <xs:documentation>Title of this QEDEQ module.</xs:documentation>
                </xs:annotation>
              </xs:element>
              <xs:element name="ABSTRACT">
                <xs:annotation>
                  <xs:documentation>Module contents description.</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                  <xs:sequence>
                    <xs:element ref="LATEX" maxOccurs="unbounded"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="AUTHORS">
                <xs:annotation>
                  <xs:documentation>List of authors of this module.</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="AUTHOR">
                      <xs:annotation>
                        <xs:documentation>Name and email address of author.</xs:documentation>
                      </xs:annotation>
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="NAME">
                            <xs:annotation>
                              <xs:documentation>Name of author.</xs:documentation>
                            </xs:annotation>
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element ref="LATEX"/>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                        <xs:attribute name="email" type="EMAILTYPE">
                          <xs:annotation>
                            <xs:documentation>Email address of author.</xs:documentation>
                          </xs:annotation>
                        </xs:attribute>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="IMPORTS" minOccurs="0">
                <xs:annotation>
                  <xs:documentation>References to other QEDEQ modules that are a precondition for this one.</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="IMPORT" maxOccurs="unbounded">
                      <xs:annotation>
                        <xs:documentation>A single reference to a QEDEQ module that must be imported.</xs:documentation>
                      </xs:annotation>
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element ref="SPECIFICATION">
                            <xs:annotation>
                              <xs:documentation>File specification of QEDEQ module to import. What is the name of this module and where to find it.</xs:documentation>
                            </xs:annotation>
                          </xs:element>
                        </xs:sequence>
                        <xs:attribute name="label" type="xs:NMTOKEN" use="required">
                          <xs:annotation>
                            <xs:documentation>Prefix for labels from referenced QEDEQ module. References to labels in the referenced module must be extended with this prefix. This label must be unique within this module.</xs:documentation>
                          </xs:annotation>
                        </xs:attribute>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="USEDBY" minOccurs="0">
                <xs:annotation>
                  <xs:documentation>List of QEDEQ modules which use (import) this module. This information could be incorrect due to changes in the referenced modules. Also newly created modules could be missing. To keep these entries correct the external module administrator should email the module administrator of this module. This label must be unique within this module.</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                  <xs:sequence>
                    <xs:element ref="SPECIFICATION">
                      <xs:annotation>
                        <xs:documentation>File specification of QEDEQ module that depends on this one. What is the name of this module and where to find it.</xs:documentation>
                      </xs:annotation>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="email" type="EMAILTYPE">
              <xs:annotation>
                <xs:documentation>Email address for administration services of this QEDEQ module.</xs:documentation>
              </xs:annotation>          
            </xs:attribute>
          </xs:complexType>
        </xs:element>
        <xs:element name="CHAPTER" maxOccurs="unbounded">
          <xs:annotation>
            <xs:documentation>This part corresponds to the LaTeX item chapter.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="TITLE">
                <xs:annotation>
                  <xs:documentation>Chapter title.</xs:documentation>
                </xs:annotation>
              </xs:element>
              <xs:element name="INTRODUCTION" minOccurs="0">
                <xs:annotation>
                  <xs:documentation>Chapter contents description.</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                  <xs:sequence>
                    <xs:element ref="LATEX" minOccurs="1" maxOccurs="unbounded"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="SECTION" minOccurs="0" maxOccurs="unbounded">
                <xs:annotation>
                  <xs:documentation>Section of chapter.</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                  <xs:sequence>
                    <xs:element ref="TITLE">
                      <xs:annotation>
                        <xs:documentation>Section title.</xs:documentation>
                      </xs:annotation>
                    </xs:element>
                    <xs:element name="INTRODUCTION" minOccurs="0">
                      <xs:annotation>
                        <xs:documentation>Section contents description.</xs:documentation>
                      </xs:annotation>
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element ref="LATEX" minOccurs="1" maxOccurs="unbounded"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="SUBSECTIONS" minOccurs="0">
                      <xs:annotation>
                        <xs:documentation>List of subsections.</xs:documentation>
                      </xs:annotation>
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element ref="SUBSECTIONTYPE" minOccurs="1" maxOccurs="unbounded"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="noNumber" type="xs:boolean" use="optional">
                    <xs:annotation>
                      <xs:documentation>Should this section be numbered?.</xs:documentation>
                    </xs:annotation>
                  </xs:attribute>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="noNumber" type="xs:boolean" use="optional">
              <xs:annotation>
                <xs:documentation>Should this section be numbered?.</xs:documentation>
              </xs:annotation>
            </xs:attribute>
          </xs:complexType>
        </xs:element>
        <xs:element name="BIBLIOGRAPHY" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Literature references.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="ITEM" maxOccurs="unbounded">
                <xs:annotation>
                  <xs:documentation>Single literature reference.</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                  <xs:sequence>
                    <xs:element ref="LATEX" maxOccurs="unbounded"/>
                  </xs:sequence>
                  <xs:attribute name="label" type="xs:NMTOKEN" use="required">
                    <xs:annotation>
                      <xs:documentation>Label for this reference. This label must be unique within this module.</xs:documentation>
                    </xs:annotation>
                  </xs:attribute>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="TITLE">
    <xs:annotation>
      <xs:documentation>Title of a text segment.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="LATEX" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="LATEX">
    <xs:annotation>
      <xs:documentation>For each supported language entry one can find a LaTeX text here.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:string">
          <xs:attribute name="language" type="xs:language" use="optional"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>

  <xs:element name="SPECIFICATION">
    <xs:annotation>
      <xs:documentation>File specification of this module. What is the name of this module and where to find it.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="LOCATIONS">
          <xs:annotation>
           <xs:documentation>List of locations to find the QEDEQ module.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="LOCATION" maxOccurs="unbounded">
                <xs:annotation>
                  <xs:documentation>Location of a QEDEQ module.</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                <xs:attribute name="value" type="LOCATIONTYPE" use="required">
                  <xs:annotation>
                    <xs:documentation>URL to location of a QEDEQ module directory.</xs:documentation>
                  </xs:annotation>
                </xs:attribute>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="name" type="xs:string" use="required">
        <xs:annotation>
          <xs:documentation>Technical name of QEDEQ module. Also the main part of the file name. The complete name has ".xml" appended. Together with an LOCATION the complete path to a QEDEQ module can be build.</xs:documentation>
        </xs:annotation>
      </xs:attribute>
      <xs:attribute name="ruleVersion" type="xs:string" use="required">
        <xs:annotation>
          <xs:documentation>Locical rule version that is needed to be able to make the derivations made in the QEDEQ module.</xs:documentation>
        </xs:annotation>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="TERMTYPE" abstract="true">
    <xs:annotation>
      <xs:documentation>Type for a term.</xs:documentation>
    </xs:annotation>
  </xs:element>
  
  <xs:element name="TERM">
    <xs:annotation>
      <xs:documentation>Logical language: Term.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="TERMTYPE"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="VAR" substitutionGroup="TERMTYPE">
    <xs:annotation>
      <xs:documentation>Logical language: Subject variable.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:attribute name="id" type="xs:string" use="required">
        <xs:annotation>
          <xs:documentation>Identifies a subject variable. Also used as a LaTeX expression for this variable.</xs:documentation>
        </xs:annotation>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="FUNCON" substitutionGroup="TERMTYPE">
    <xs:annotation>
      <xs:documentation>Logical language: Function constant.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="TERMTYPE" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="ref" type="xs:string" use="required">
        <xs:annotation>
          <xs:documentation>References a function constant definition. The function constant must be defined within this or an imported module. For an external reference the name must begin with the appropiate label follwed by an dot. </xs:documentation>
        </xs:annotation>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="FUNVAR" substitutionGroup="TERMTYPE">
    <xs:annotation>
      <xs:documentation>Logical language: Function variable.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="TERMTYPE" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="id" type="xs:string" use="required">
        <xs:annotation>
          <xs:documentation>Identifies a function variable. Also used as a LaTeX expression for this variable.</xs:documentation>
        </xs:annotation>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="CLASS" substitutionGroup="TERMTYPE">
    <xs:annotation>
      <xs:documentation>Logical language: Class described by property. For example {x | x = x }.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="VAR" minOccurs="1" maxOccurs="1"/>
        <xs:element ref="FORMULATYPE" minOccurs="1" maxOccurs="1"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="QUANTIFIER_INTERSECTION" substitutionGroup="TERMTYPE">
    <xs:annotation>
      <xs:documentation>Logical language: Intersection about all classes that fullfil a property.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="VAR" minOccurs="1" maxOccurs="1"/>
        <xs:element ref="FORMULATYPE" minOccurs="1" maxOccurs="1"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="QUANTIFIER_UNION" substitutionGroup="TERMTYPE">
    <xs:annotation>
      <xs:documentation>Logical language: Union about all classes that fullfil a property.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="VAR" minOccurs="1" maxOccurs="1"/>
        <xs:element ref="FORMULATYPE" minOccurs="1" maxOccurs="1"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="FORMULA">
    <xs:annotation>
      <xs:documentation>Logical language: Formula.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="FORMULATYPE"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="FORMULATYPE" abstract="true">
    <xs:annotation>
      <xs:documentation>Type for a formula.</xs:documentation>
    </xs:annotation>
  </xs:element>

  <xs:element name="PREDCON" substitutionGroup="FORMULATYPE">
    <xs:annotation>
      <xs:documentation>Logical language: Predicate constant.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="TERMTYPE" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="ref" type="xs:string" use="required">
        <xs:annotation>
          <xs:documentation>References a predicate constant definition. The predicate constant must be defined within this or an imported module. For an external reference the name must begin with the appropiate label follwed by an dot. </xs:documentation>
        </xs:annotation>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="PREDVAR" substitutionGroup="FORMULATYPE">
    <xs:annotation>
      <xs:documentation>Logical language: Predicate variable.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="TERMTYPE" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="id" type="xs:string" use="required">
        <xs:annotation>
          <xs:documentation>Identifies a predicate variable. Also used as a LaTeX expression for this variable.</xs:documentation>
        </xs:annotation>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="EXISTS" substitutionGroup="FORMULATYPE">
    <xs:annotation>
      <xs:documentation>Logical language: Logical existential quantifier.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="VAR" minOccurs="1"/>
        <xs:element ref="FORMULATYPE"/>
        <xs:element ref="FORMULATYPE" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="EXISTSU" substitutionGroup="FORMULATYPE">
    <xs:annotation>
      <xs:documentation>Logical language: Logical uniqueness quantifier. Proposes the existence of an unique element.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="VAR" minOccurs="1"/>
        <xs:element ref="FORMULATYPE"/>
        <xs:element ref="FORMULATYPE" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="FORALL" substitutionGroup="FORMULATYPE">
    <xs:annotation>
      <xs:documentation>Logical language: Logical universal quantifier.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="VAR" minOccurs="1"/>
        <xs:element ref="FORMULATYPE"/>
        <xs:element ref="FORMULATYPE" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="AND" substitutionGroup="FORMULATYPE">
    <xs:annotation>
      <xs:documentation>Logical language: Logical conjunction.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="FORMULATYPE" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="OR" substitutionGroup="FORMULATYPE">
    <xs:annotation>
      <xs:documentation>Logical language: Logical disjunction.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="FORMULATYPE" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="EQUI" substitutionGroup="FORMULATYPE">
    <xs:annotation>
      <xs:documentation>Logical language: Logical equivalence.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="FORMULATYPE" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="IMPL" substitutionGroup="FORMULATYPE">
    <xs:annotation>
      <xs:documentation>Logical language: Logical implication.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="FORMULATYPE"/>
        <xs:element ref="FORMULATYPE"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="NOT" substitutionGroup="FORMULATYPE">
    <xs:annotation>
      <xs:documentation>Logical language: Logical negation.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="FORMULATYPE"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="SUBSECTIONTYPE" abstract="true">
    <xs:annotation>
      <xs:documentation>Type for a subsection.</xs:documentation>
    </xs:annotation>
  </xs:element>

  <xs:element name="SUBSECTION" substitutionGroup="SUBSECTIONTYPE">
    <xs:annotation>
      <xs:documentation>This a normal LaTeX subsection of a section.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="TITLE" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Subsection title.</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="TEXT" minOccurs="0">
          <xs:annotation>
            <xs:documentation>The LaTeX text of this subsection.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="LATEX" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="id" type="xs:NMTOKEN" use="optional">
        <xs:annotation>
          <xs:documentation>Reference id for this subsection.</xs:documentation>
        </xs:annotation>
      </xs:attribute>
      <xs:attribute name="level" type="xs:string">
        <xs:annotation>
          <xs:documentation>Detail level of this subsection.</xs:documentation>
        </xs:annotation>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="NODE" substitutionGroup="SUBSECTIONTYPE">
    <xs:annotation>
      <xs:documentation>This part is the smallest unit and corresponds to the LaTeX item subsection. But it also carries formal AXIOMs, THEOREMS or else.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="NAME" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Short text to describe this item. Used when referencing to this.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="LATEX" maxOccurs="unbounded"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="TITLE" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Subsection title.</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element ref="PRECEDING" minOccurs="0"/>
        <xs:element ref="NODETYPE">
          <xs:annotation>
            <xs:documentation>Mathematical meat. For example an axiom, proposition, definition etc.</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="SUCCEEDING" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="id" type="xs:string" use="required">
        <xs:annotation>
          <xs:documentation>Reference id for this node.</xs:documentation>
        </xs:annotation>
      </xs:attribute>      
      <xs:attribute name="level" type="xs:string">
        <xs:annotation>
          <xs:documentation>Detail level of this subsection.</xs:documentation>
        </xs:annotation>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="PRECEDING">
    <xs:annotation>
      <xs:documentation>Text that precedes the mathematical meat.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="LATEX" minOccurs="1" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="SUCCEEDING">
    <xs:annotation>
      <xs:documentation>Text that succeeds mathematical meat.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="LATEX" minOccurs="1" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="NODETYPE" abstract="true">
    <xs:annotation>
      <xs:documentation>Type for a node. This might be an AXIOM, THEOREM or something else.</xs:documentation>
    </xs:annotation>
  </xs:element>

  <xs:element name="DEFINITION_PREDICATE" substitutionGroup="NODETYPE">
    <xs:annotation>
      <xs:documentation>Definition of a predicate constant. The attributes "name" and "arguments" must be unique within one QEDEQ module.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="LATEXPATTERN" type="xs:string">
          <xs:annotation>
            <xs:documentation>LaTeX pattern for predicate with arguments as #&lt;n&gt;.</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="VARLIST" minOccurs="0">
          <xs:annotation>
            <xs:documentation>List of predicate arguments.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="VAR" minOccurs="1" maxOccurs="unbounded"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="FORMULA" minOccurs="0"/>
        <xs:element name="DESCRIPTION" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Additional description.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="LATEX" minOccurs="1" maxOccurs="unbounded"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="arguments" type="xs:NMTOKEN" use="required">
        <xs:annotation>
          <xs:documentation>Number of arguments for the new predicate.</xs:documentation>
        </xs:annotation>
      </xs:attribute>
      <xs:attribute name="name" type="xs:string" use="required">
        <xs:annotation>
          <xs:documentation>Name for the new predicate. This name must not occur as a label within this module.</xs:documentation>
        </xs:annotation>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="DEFINITION_FUNCTION" substitutionGroup="NODETYPE">
    <xs:annotation>
      <xs:documentation>Definition of a function. The attributes "name" and "arguments" must be unique within one QEDEQ module. The "</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="LATEXPATTERN" type="xs:string">
          <xs:annotation>
            <xs:documentation>LaTeX pattern for function with arguments as #&lt;n&gt;.</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="VARLIST" minOccurs="0">
          <xs:annotation>
            <xs:documentation>List of function arguments.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="VAR" minOccurs="1" maxOccurs="unbounded"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="TERM" minOccurs="0"/>
        <xs:element name="DESCRIPTION" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Additional description.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="LATEX" minOccurs="1" maxOccurs="unbounded"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="arguments" type="xs:string" use="required">
        <xs:annotation>
          <xs:documentation>Number of arguments for the new function.</xs:documentation>
        </xs:annotation>
      </xs:attribute>
      <xs:attribute name="name" type="xs:string" use="required">
        <xs:annotation>
          <xs:documentation>Name for the new function. This name must not occur as a label within this module.</xs:documentation>
        </xs:annotation>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="AXIOM" substitutionGroup="NODETYPE">
    <xs:annotation>
      <xs:documentation>Mathematical axiom.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="FORMULA">
          <xs:annotation>
            <xs:documentation>An axiom formula.</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="DESCRIPTION" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Additional description.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="LATEX" minOccurs="1" maxOccurs="unbounded"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="RULE" substitutionGroup="NODETYPE">
    <xs:annotation>
      <xs:documentation>A new meta rule.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
          <xs:element name="LINK" minOccurs="0" maxOccurs="unbounded">
          <xs:annotation>
            <xs:documentation>References to theorems or axioms.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
                <xs:attribute name="id" type="xs:string" use="required"/>
          </xs:complexType>
          </xs:element>
        <xs:element name="DESCRIPTION" minOccurs="1">
          <xs:annotation>
            <xs:documentation>Additional description.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="LATEX" minOccurs="1" maxOccurs="unbounded"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="PROOF" minOccurs="0" maxOccurs="unbounded">
          <xs:annotation>
            <xs:documentation>Informal proof for this rule.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="LATEX" minOccurs="1" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attribute name="kind" type="xs:NMTOKEN" use="required"/>
            <xs:attribute name="level" type="xs:string" use="required"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="name" type="xs:string" use="required"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="THEOREM" substitutionGroup="NODETYPE">
    <xs:annotation>
      <xs:documentation>A theorem and it's proof.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="FORMULA">
          <xs:annotation>
            <xs:documentation>This formula is the theorem.</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="DESCRIPTION" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Additional description.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="LATEX" minOccurs="1" maxOccurs="unbounded"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="PROOF" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="FORMAL_PROOF" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="PROOF">
    <xs:annotation>
      <xs:documentation>An informal proof.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="LATEX" minOccurs="1" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="kind" type="xs:NMTOKEN" use="required"/>
      <xs:attribute name="level" type="xs:string" use="required"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="FORMAL_PROOF">
    <xs:annotation>
      <xs:documentation>A formal proof.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="PRECEDING" minOccurs="0" maxOccurs="1"/>
        <xs:element ref="SUCCEEDING" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
      <xs:attribute name="kind" type="xs:NMTOKEN" use="required"/>
      <xs:attribute name="level" type="xs:string" use="required"/>
    </xs:complexType>
  </xs:element>

  <xs:simpleType name="EMAILTYPE">
    <xs:annotation>
      <xs:documentation>Type for an email. An email address.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:token">
      <xs:minLength value="0" />
      <xs:maxLength value="100" />
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="LOCATIONTYPE">
    <xs:annotation>
      <xs:documentation>Type for a location. Location directory of module.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:anyURI">
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="LEVELTYPE">
    <xs:annotation>
      <xs:documentation>Type for a level. Detail level.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:byte">
    </xs:restriction>
  </xs:simpleType>

</xs:schema>
