<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" version="2.4">
  <xs:include schemaLocation="lts.xsd"/>
  <xs:element name="name" type="xs:string"/>
  <xs:group name="label">
    <xs:annotation>
      <xs:documentation>a label for semantic labeling</xs:documentation>
    </xs:annotation>
    <xs:choice>
      <xs:element name="numberLabel">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="number"
              type="xs:nonNegativeInteger"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="symbolLabel">
        <xs:complexType>
          <xs:sequence>
            <xs:group maxOccurs="unbounded" minOccurs="0" ref="symbol"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:choice>
  </xs:group>
  <xs:group name="symbol">
    <xs:annotation>
      <xs:documentation>is used as a function symbol in terms, orderings, ....</xs:documentation>
    </xs:annotation>
    <xs:choice>
      <xs:element ref="name"/>
      <xs:element name="sharp">
        <xs:complexType>
          <xs:sequence>
            <xs:group ref="symbol"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="labeledSymbol">
        <xs:complexType>
          <xs:sequence>
            <xs:group ref="symbol"/>
            <xs:group ref="label"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:choice>
  </xs:group>
  <xs:element name="var" type="xs:string"/>

  <xs:element name="termIndex" type="xs:string"/>
  <xs:group name="term">
    <xs:choice>
      <xs:element ref="var"/>
      <xs:element name="funapp">
        <xs:complexType>
          <xs:sequence>
            <xs:group ref="symbol"/>
            <xs:group maxOccurs="unbounded" minOccurs="0" ref="term"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element ref="termIndex"/>
    </xs:choice>
  </xs:group>
  <xs:complexType name="term">
    <xs:group ref="term"/>
  </xs:complexType>
  <xs:complexType name="unindexedRule">
    <xs:annotation>
      <xs:documentation>first term is lhs, second term is rhs</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:group ref="term"/>
      <xs:group ref="term"/>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="ruleIndex" type="xs:string"/>
  <xs:group name="rule">
    <xs:annotation>
      <xs:documentation>a rule can either be spelled out or just be referenced by some index. all rule indices have to occur in the global /certificationProblem/lookupTables/ruleTable map.</xs:documentation>
    </xs:annotation>
    <xs:choice>
      <xs:element name="rule" type="unindexedRule"/>
      <xs:element ref="ruleIndex"/>
    </xs:choice>
  </xs:group>
  <xs:complexType name="conditions">
    <xs:sequence>
      <xs:element name="condition" minOccurs="0" maxOccurs="unbounded">
        <xs:annotation>
          <xs:documentation>first term is lhs, second term is rhs</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:group ref="term"/>
            <xs:group ref="term"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="conditionalRule">
    <xs:annotation>
      <xs:documentation>first term is lhs, second term is rhs</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:group ref="term"/>
      <xs:group ref="term"/>
      <xs:element name="conditions" type="conditions" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="rules">
    <xs:sequence>
      <xs:group maxOccurs="unbounded" minOccurs="0" ref="rule"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="conditionalRules">
    <xs:sequence>
      <xs:element maxOccurs="unbounded" minOccurs="0" name="rule" type="conditionalRule"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="trs">
    <xs:sequence>
      <xs:element name="rules" type="rules"/>
    </xs:sequence>
  </xs:complexType>
  <xs:group name="number">
    <xs:choice>
      <xs:element name="integer" type="xs:integer"/>
      <xs:element name="rational">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="numerator" type="xs:integer"/>
            <xs:element name="denominator" type="xs:positiveInteger"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="algebraic">
        <xs:annotation>
          <xs:documentation>the algebraic number (a,b,c) represents the number
a + b * sqrt(c)</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:group ref="number"/>
            <xs:group ref="number"/>
            <xs:group ref="number"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:choice>
  </xs:group>
  <xs:group name="coefficient">
    <xs:choice>
      <xs:group ref="number"/>
      <xs:element name="minusInfinity"/>
      <xs:element name="plusInfinity"/>
      <xs:element ref="vector"/>
      <xs:element ref="matrix">
        <xs:annotation>
          <xs:documentation>list of row-vectors</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:choice>
  </xs:group>
  <xs:element name="vector">
    <xs:complexType>
      <xs:sequence>
        <xs:group maxOccurs="unbounded" ref="coefficient"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="matrix">
    <xs:annotation>
      <xs:documentation>list of column-vectors</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="vector"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:group name="polynomial">
    <xs:choice>
      <xs:group ref="coefficient"/>
      <xs:element name="variable" type="xs:positiveInteger"/>
      <xs:element name="sum">
        <xs:complexType>
          <xs:sequence>
            <xs:group maxOccurs="unbounded" ref="polynomial"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="product">
        <xs:complexType>
          <xs:sequence>
            <xs:group maxOccurs="unbounded" ref="polynomial"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="max">
        <xs:annotation>
          <xs:documentation>note that this max is only used for min-max interpretations and not for arctic... interpretations. For example, in arctic one has to use plus and not max.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:group maxOccurs="unbounded" ref="polynomial"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="min">
        <xs:annotation>
          <xs:documentation>note that this min is only used for min-max interpretations and not for arctic... interpretations. For example, in arctic one has to use plus and times, but neither min nor max.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:group maxOccurs="unbounded" ref="polynomial"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:choice>
  </xs:group>
  <xs:group name="function">
    <xs:choice>
      <xs:group ref="polynomial">
        <xs:annotation>
          <xs:documentation>note that when using polynomials over a vector-domain, then the constant coefficient is a vector whereas the other coefficients are matrices. Moreover, in this case only linear polynomials are allowed.</xs:documentation>
        </xs:annotation>
      </xs:group>
    </xs:choice>
  </xs:group>
  <xs:element name="arity" type="xs:nonNegativeInteger"/>
  <xs:element name="dimension" type="xs:positiveInteger"/>
  <xs:element name="strictDimension" type="xs:positiveInteger"/>
  <xs:element name="degree" type="xs:nonNegativeInteger"/>
  <xs:element name="position" type="xs:positiveInteger"/>
  <xs:element name="positionInTerm">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="position" maxOccurs="unbounded" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="argumentFilter">
    <xs:annotation>
      <xs:documentation>an argument filter consist of a mapping from symbols to collapsing or non-collapsing filters.

Example: 
an entry f/3 -> collapsing/1 filters the ternary symbol f to its third argument.
an entry f/3 -> nonCollapsing/3 1 filters the term f(x,y,z) to f(z,x) 

often for nonCollapsing filters the positions are given in increasing order. However, argument filters can also be used to simulate permutations e.g. to express some LPOS by an LPO an argument filter.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" minOccurs="0" name="argumentFilterEntry">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="symbol"/>
              <xs:element ref="arity"/>
              <xs:choice>
                <xs:element name="collapsing" type="xs:positiveInteger"/>
                <xs:element name="nonCollapsing">
                  <xs:complexType>
                    <xs:sequence>
                      <xs:element maxOccurs="unbounded" minOccurs="0" ref="position"/>
                    </xs:sequence>
                  </xs:complexType>
                </xs:element>
              </xs:choice>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="multisetArgumentFilter">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="multisetArgumentFilterEntry" maxOccurs="unbounded" minOccurs="0">
          <xs:annotation>
            <xs:documentation>Note that the arities within the status precedence entries in combination with argument filters correspond to the unfiltered arities. E.g., if the second argument of f/3 is dropped then the status precedence entry still has to give arity 3 to f.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="symbol"/>
              <xs:element ref="arity"/>
              <xs:element name="status">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element ref="position" maxOccurs="unbounded"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="domain">
    <xs:complexType>
      <xs:choice>
        <xs:element name="naturals"/>
        <xs:element name="negativeIntegers"/>
        <xs:element name="integers">
          <xs:annotation>
            <xs:documentation>purpose: 
-arctic below zero is arctic-integer
-bounded increase is over integers</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="rationals">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="delta">
                <xs:complexType>
                  <xs:sequence>
                    <xs:group ref="number"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="algebraicNumbers">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="delta">
                <xs:complexType>
                  <xs:sequence>
                    <xs:group ref="number"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="arctic">
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="domain"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="tropical">
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="domain"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="matrices">
          <xs:annotation>
            <xs:documentation>the domain of matrices where the elements are from the subdomain specified</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="dimension"/>
              <xs:element ref="strictDimension">
                <xs:annotation>
                  <xs:documentation>in the upper left submatrix of this dimension there must be a strict decrease
(the remaining parts of the matrix is ignored for strict decreases, only weak decreases are required).</xs:documentation>
                </xs:annotation>
              </xs:element>
              <xs:element ref="domain"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:group name="maxPolyExpression">
    <xs:choice>
      <xs:element name="constant" type="xs:nonNegativeInteger"/>
      <xs:element name="variable" type="xs:positiveInteger"/>
      <xs:element name="sum">
        <xs:complexType>
          <xs:sequence>
            <xs:group maxOccurs="unbounded" minOccurs="0" ref="maxPolyExpression"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="product">
        <xs:complexType>
          <xs:sequence>
            <xs:group maxOccurs="unbounded" minOccurs="0" ref="maxPolyExpression"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="max">
        <xs:complexType>
          <xs:sequence>
            <xs:group maxOccurs="unbounded" minOccurs="1" ref="maxPolyExpression"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:choice>
  </xs:group>
  <xs:group name="maxMonusExpression">
    <xs:choice>
      <xs:element name="constant" type="xs:nonNegativeInteger"/>
      <xs:element name="variable" type="xs:positiveInteger"/>
      <xs:element name="sum">
        <xs:complexType>
          <xs:sequence>
            <xs:group maxOccurs="unbounded" minOccurs="0" ref="maxMonusExpression"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="max">
        <xs:complexType>
          <xs:sequence>
            <xs:group maxOccurs="unbounded" minOccurs="1" ref="maxMonusExpression"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="maxExt">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="min" type="xs:nonNegativeInteger"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="maxExtEntry">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="intercept" type="xs:integer"/>
                  <xs:element name="slope" type="xs:nonNegativeInteger"/>
                  <xs:group ref="maxMonusExpression"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:choice>
  </xs:group>
  <xs:group name="redPair">
    <xs:choice>
      <xs:element name="interpretation">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="type">
              <xs:complexType>
                <xs:choice>
                  <xs:element name="polynomial">
                    <xs:annotation>
                      <xs:documentation>standard polynomial orders over a specified domain (a semiring or something else). Note that if the domain is "matrices of naturals" then everything has to be a matrix, even the constants. This is in contrast to "matrixInterpretations" where the constants are vectors.</xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element ref="domain"/>
                        <xs:element ref="degree">
                          <xs:annotation>
                            <xs:documentation>the maximal degree of the polynomial interpretation (some certifiers only support linear interpretations).
                              all interpretations given should respect this degree.
                            </xs:documentation>
                          </xs:annotation>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="matrixInterpretation">
                    <xs:annotation>
                      <xs:documentation>matrix interpretations where the elements are vectors. Example: if the domain is naturals, then the coefficients in front of variables have to be matrices and the constants should be vectors over the naturals.</xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element ref="domain"/>
                        <xs:element ref="dimension"/>
                        <xs:element ref="strictDimension">
                          <xs:annotation>
                            <xs:documentation>in the upper subvector of this dimension there must be a strict decrease
                              (the lower part of the vector is ignored for strict decreases, only weak decreases are required).</xs:documentation>
                          </xs:annotation>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="coreMatrixInterpretation">
                    <xs:annotation>
                      <xs:documentation>Matrix interpretations where the elements are matrices. Note that not all non-negative matrices are in the domain, but these have to be explicitly defined, as described in "Termination of String Rewriting with Matrix Interpretations" by Hofbauer and Waldmann. For the moment, only integer matrices are supported. The indices I have to be explicitly provided, and the selected domains E_I or M_I can be selected by mode E or M. 

Note that interpretations are still full linear expressions and not just singleton matrices. E.g., if [a] = A for some letter a of an SRS and matrix A (notation in paper), then in CPF, one would have to specify an interpretation such as [a/1] = A * x_1. </xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element ref="domain"/>
                        <xs:element ref="dimension"/>
                        <xs:element name="indices">
                          <xs:annotation>
                            <xs:documentation>specify list of indices I; each index must be between 1 and n, where n is the dimension of the matrices.</xs:documentation>
                          </xs:annotation>
                          <xs:complexType>
                            <xs:sequence maxOccurs="unbounded">
                              <xs:element name="nat" type="xs:nonNegativeInteger"/>
                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>
                        <xs:element name="mode">
                          <xs:complexType>
                            <xs:choice>
                              <xs:element name="E">
                                <xs:annotation>
                                  <xs:documentation>TODO: describe</xs:documentation>
                                </xs:annotation>
                              </xs:element>
                              <xs:element name="M">
                                <xs:annotation>
                                  <xs:documentation>TODO: describe</xs:documentation>
                                </xs:annotation>
                              </xs:element>
                            </xs:choice>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:choice>
              </xs:complexType>
            </xs:element>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="interpret">
              <xs:complexType>
                <xs:sequence>
                  <xs:group ref="symbol"/>
                  <xs:element ref="arity"/>
                  <xs:group ref="function"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="recursivePathOrder">
        <xs:annotation>
          <xs:documentation>recursive path order in its general form, i.e., RPO, MPO, LPO, LPO with status (arbitrary order of arguments), RPO with status</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element name="statusPrecedence">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="statusPrecedenceEntry" maxOccurs="unbounded" minOccurs="0">
                    <xs:annotation>
                      <xs:documentation>Note that the arities within the status precedence entries in combination with argument filters correspond to the unfiltered arities. E.g., if the second argument of f/3 is dropped then the status precedence entry still has to give arity 3 to f.</xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                      <xs:sequence>
                        <xs:group ref="symbol"/>
                        <xs:element ref="arity"/>
                        <xs:element name="precedence" type="xs:nonNegativeInteger">
                          <xs:annotation>
                            <xs:documentation>higher numbers = higher precedence. Unspecified symbols obtain precedence 0.</xs:documentation>
                          </xs:annotation>
                        </xs:element>
                        <xs:choice>
                          <xs:element name="lex">
                            <xs:annotation>
                              <xs:documentation>to realize permutations for lex. comparisons, use an argument filter, which just permutes. Eg., right-to-left precedence of f(x,y,z) where the second argument is dropped, is done by argument filter f -> [3,1]</xs:documentation>
                            </xs:annotation>
                            <xs:complexType> </xs:complexType>
                          </xs:element>
                          <xs:element name="mul"/>
                        </xs:choice>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:element minOccurs="0" ref="argumentFilter">
              <xs:annotation>
                <xs:documentation>To realize permutations for lex. comparisons, one has to use an argument filter, which can just permute. Eg., right-to-left precedence of f(x,y,z) where the second argument is dropped, is done by argument filter f -> [3,1]</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="knuthBendixOrder">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="w0" type="xs:positiveInteger">
              <xs:annotation>
                <xs:documentation/>
              </xs:annotation>
            </xs:element>
            <xs:element name="precedenceWeight">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="precedenceWeightEntry" maxOccurs="unbounded" minOccurs="0">
                    <xs:annotation>
                      <xs:documentation>Note that the arities within the precedence weight entries in combination with argument filters correspond to the unfiltered arities. E.g., if the second argument of f/3 is dropped then the weight precedence entry still has to give arity 3 to f.</xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                      <xs:sequence>
                        <xs:group ref="symbol"/>
                        <xs:element ref="arity"/>
                        <xs:element name="precedence" type="xs:nonNegativeInteger">
                          <xs:annotation>
                            <xs:documentation>higher numbers = higher precedence. Unspecified symbols obtain precedence 0.</xs:documentation>
                          </xs:annotation>
                        </xs:element>
                        <xs:element name="weight" type="xs:nonNegativeInteger">
                          <xs:annotation>
                            <xs:documentation/>
                          </xs:annotation>
                        </xs:element>
                        <xs:element minOccurs="0" name="subtermCoefficientEntries">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element maxOccurs="unbounded" minOccurs="0" name="entry"
                                type="xs:positiveInteger"/>
                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:element minOccurs="0" ref="argumentFilter">
              <xs:annotation>
                <xs:documentation>To realize permutations for lex. comparisons, one has to use an argument filter, which can just permute. Eg., right-to-left precedence of f(x,y,z) where the second argument is dropped, is done by argument filter f -> [3,1]</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>



      <xs:element name="ACKBO">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="w0" type="xs:positiveInteger">
              <xs:annotation>
                <xs:documentation/>
              </xs:annotation>
            </xs:element>
            <xs:element name="precedenceWeight">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="precedenceWeightEntry" maxOccurs="unbounded" minOccurs="0">
                    <xs:annotation>
                      <xs:documentation>Note that the arities within the precedence weight entries in combination with argument filters correspond to the unfiltered arities. E.g., if the second argument of f/3 is dropped then the weight precedence entry still has to give arity 3 to f.</xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                      <xs:sequence>
                        <xs:group ref="symbol"/>
                        <xs:element ref="arity"/>
                        <xs:element name="precedence" type="xs:nonNegativeInteger">
                          <xs:annotation>
                            <xs:documentation>higher numbers = higher precedence. Unspecified symbols obtain precedence 0.</xs:documentation>
                          </xs:annotation>
                        </xs:element>
                        <xs:element name="weight" type="xs:nonNegativeInteger"/>
                        <xs:element minOccurs="0" name="isAC" type="xs:boolean"/>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:element minOccurs="0" ref="argumentFilter">
              <xs:annotation>
                <xs:documentation>To realize permutations for lex. comparisons, one has to use an argument filter, which can just permute. Eg., right-to-left precedence of f(x,y,z) where the second argument is dropped, is done by argument filter f -> [3,1]</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>



      <xs:element name="scnp">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="status">
              <xs:complexType>
                <xs:choice>
                  <xs:element name="ms"/>
                  <xs:element name="min"/>
                  <xs:element name="max"/>
                  <xs:element name="dms"/>
                </xs:choice>
              </xs:complexType>
            </xs:element>
            <xs:element name="levelMapping">
              <xs:complexType>
                <xs:sequence>
                  <xs:element maxOccurs="unbounded" minOccurs="0" name="levelMappingEntry">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:group ref="symbol"/>
                        <xs:element ref="arity"/>
                        <xs:element maxOccurs="unbounded" minOccurs="0" name="positionLevelEntry">
                          <xs:annotation>
                            <xs:documentation>position 0 encodes the argument "full term"</xs:documentation>
                          </xs:annotation>
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="position" type="xs:nonNegativeInteger"/>
                              <xs:element name="level" type="xs:nonNegativeInteger"/>
                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:group ref="redPair"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="weightedPathOrder">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="precedenceStatus">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="precedenceStatusEntry" maxOccurs="unbounded" minOccurs="0">
                    <xs:annotation>
                      <xs:documentation>Note that the arities within the status precedence entries in combination with argument filters correspond to the unfiltered arities. E.g., if the second argument of f/3 is dropped then the status precedence entry still has to give arity 3 to f.
If no lex/mul argument is given, then the default is used: lex.</xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                      <xs:sequence>
                        <xs:group ref="symbol"/>
                        <xs:element ref="arity"/>
                        <xs:element name="precedence" type="xs:nonNegativeInteger">
                          <xs:annotation>
                            <xs:documentation>higher numbers = higher precedence. Unspecified symbols obtain precedence 0.</xs:documentation>
                          </xs:annotation>
                        </xs:element>
                        <xs:choice minOccurs="0">
                          <xs:element name="lex">
                            <xs:annotation>
                              <xs:documentation>to realize permutations for lex. comparisons, use an argument filter, which just permutes. Eg., right-to-left precedence of f(x,y,z) where the second argument is dropped, is done by argument filter f -> [3,1]</xs:documentation>
                            </xs:annotation>
                            <xs:complexType> </xs:complexType>
                          </xs:element>
                          <xs:element name="mul"/>
                        </xs:choice>
                        <xs:element name="status">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element ref="position" maxOccurs="unbounded" minOccurs="0"/>
                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:group ref="redPair"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="coWeightedPathOrder">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="precedenceStatus">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="precedenceStatusEntry" maxOccurs="unbounded" minOccurs="0">
                    <xs:annotation>
                      <xs:documentation>Note that the arities within the status precedence entries in combination with argument filters correspond to the unfiltered arities. E.g., if the second argument of f/3 is dropped then the status precedence entry still has to give arity 3 to f.
For co-WPO only lex is supported.</xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                      <xs:sequence>
                        <xs:group ref="symbol"/>
                        <xs:element ref="arity"/>
                        <xs:element name="precedence" type="xs:nonNegativeInteger">
                          <xs:annotation>
                            <xs:documentation>higher numbers = higher precedence. Unspecified symbols obtain precedence 0.</xs:documentation>
                          </xs:annotation>
                        </xs:element>
                        <xs:element name="status">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element ref="position" maxOccurs="unbounded" minOccurs="0"/>
                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:group ref="redPair"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="generalizedWeightedPathOrder">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="precedenceList">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="precedenceListEntry" maxOccurs="unbounded" minOccurs="0">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:group ref="symbol"/>
                        <xs:element ref="arity"/>
                        <xs:element name="precedence" type="xs:nonNegativeInteger">
                          <xs:annotation>
                            <xs:documentation>higher numbers = higher precedence. Unspecified symbols obtain precedence 0.</xs:documentation>
                          </xs:annotation>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:group ref="redPair"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="monotonicSemanticPathOrder">
        <xs:complexType>
          <xs:sequence>
            <xs:group ref="redPair"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="maxPoly">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="interpret">
              <xs:complexType>
                <xs:sequence>
                  <xs:group ref="symbol"/>
                  <xs:element ref="arity"/>
                  <xs:group ref="maxPolyExpression"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="maxMonus">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="interpret">
              <xs:complexType>
                <xs:sequence>
                  <xs:group ref="symbol"/>
                  <xs:element ref="arity"/>
                  <xs:group ref="maxMonusExpression"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="filteredRedPair">
        <xs:annotation>
          <xs:documentation>Define a reduction pair with the help of an argument filter. 
Note that the arities change, e.g., when the argument filter assigns a ternary f the list [1,3], then in the reduction pair f has arity 2.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="argumentFilter">
              <xs:annotation>
                <xs:documentation>To realize permutations for lex. comparisons, one has to use an argument filter, which can just permute. Eg., right-to-left precedence of f(x,y,z) where the second argument is dropped, is done by argument filter f -> [3,1]</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:group ref="redPair"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:choice>
  </xs:group>
  <xs:element name="reductionOrder">
    <xs:annotation>
      <xs:documentation>reduction orders with a special feature, namely ground joinability testing a la Martin and Nipkow (1990)</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:choice>
        <xs:element name="knuthBendixOrder">
          <xs:annotation>
            <xs:documentation>For Martin and Nipkow's testing, the precedence > must be injective, i.e., f > g or g > f for all different function symbols f, g.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="w0" type="xs:positiveInteger">
                <xs:annotation>
                  <xs:documentation/>
                </xs:annotation>
              </xs:element>
              <xs:element name="precedenceWeight">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="precedenceWeightEntry" maxOccurs="unbounded" minOccurs="0">
                      <xs:annotation>
                        <xs:documentation>Note that the arities within the precedence weight entries in combination with argument filters correspond to the unfiltered arities. E.g., if the second argument of f/3 is dropped then the weight precedence entry still has to give arity 3 to f.</xs:documentation>
                      </xs:annotation>
                      <xs:complexType>
                        <xs:sequence>
                          <xs:group ref="symbol"/>
                          <xs:element ref="arity"/>
                          <xs:element name="precedence" type="xs:nonNegativeInteger">
                            <xs:annotation>
                              <xs:documentation>higher numbers = higher precedence. Unspecified symbols obtain precedence 0.</xs:documentation>
                            </xs:annotation>
                          </xs:element>
                          <xs:element name="weight" type="xs:nonNegativeInteger">
                            <xs:annotation>
                              <xs:documentation/>
                            </xs:annotation>
                          </xs:element>
                          <xs:element minOccurs="0" name="subtermCoefficientEntries">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element maxOccurs="unbounded" minOccurs="0" name="entry"
                                  type="xs:positiveInteger"/>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="arithFunction">
    <xs:complexType>
      <xs:choice>
        <xs:element name="natural" type="xs:nonNegativeInteger"/>
        <xs:element name="variable" type="xs:positiveInteger"/>
        <xs:element name="sum">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" ref="arithFunction"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="product">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" ref="arithFunction"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="min">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" ref="arithFunction"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="max">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" ref="arithFunction"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="ifEqual">
          <xs:annotation>
            <xs:documentation>semantics: ifEqual f1 f2 ft fe checks whether f1 and f2 evaluate to the same element. If so, the result is the one of ft, otherwise it is the result of fe.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="arithFunction"/>
              <xs:element ref="arithFunction"/>
              <xs:element ref="arithFunction"/>
              <xs:element ref="arithFunction"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="model">
    <xs:complexType>
      <xs:choice>
        <xs:element name="finiteModel">
          <xs:annotation>
            <xs:documentation>The carrierSize determines the carrier. A size of n fixes the carrier to {0,1,...,n-1}. If no labeling is given, then every symbol is labeled by the interpretation of the arguments
</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="carrierSize" type="xs:positiveInteger"/>
              <xs:element minOccurs="0" name="tupleOrder">
                <xs:annotation>
                  <xs:documentation>If this element is missing, then one uses semantic labeling in the model version. 

Otherwise, semantic labeling is applied with a quasi-model where one uses a tuple extension of the standard order > on the naturals. However, there can be several such extensions, e.g., point-wise, lexicographic (w.r.t. permutation), ...</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                  <xs:choice>
                    <xs:element name="pointWise">
                      <xs:annotation>
                        <xs:documentation>here, (x1,..,xn) > (y1,...,yn) iff all xi >= yi and for some i: xi > yi</xs:documentation>
                      </xs:annotation>
                    </xs:element>
                  </xs:choice>
                </xs:complexType>
              </xs:element>
              <xs:element maxOccurs="unbounded" minOccurs="0" name="interpret">
                <xs:complexType>
                  <xs:sequence>
                    <xs:group ref="symbol"/>
                    <xs:element ref="arity"/>
                    <xs:element ref="arithFunction"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="labeling" minOccurs="0">
                <xs:annotation>
                  <xs:documentation>labeling domain and functions for semantic labeling. This feature is currently unsupported and not specified. It is only present to state that this entry might come in the future.</xs:documentation>
                </xs:annotation>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="rootLabeling">
          <xs:annotation>
            <xs:documentation>Normally for root-labeling there is no argument. However, if root-labeling is applied in the DP-setting after FC1 has been applied, one might want to treat the blocking symbol in a special way by dropping it from the carrier. If and only if this alternative is chosen, the blocking symbol must be present as argument.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="symbol" minOccurs="0"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="renaming">
    <xs:annotation>
      <xs:documentation>A renaming of symbols. The entries are of the form (old_symbol, new_symbol)</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" minOccurs="0" name="renamingEntry">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="symbol"/>
              <xs:group ref="symbol"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="patternTerm">
    <xs:annotation>
      <xs:documentation>term, pumping subst., closing subst</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="term"/>
        <xs:element ref="substitution"/>
        <xs:element ref="substitution"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="patternRule">
    <xs:annotation>
      <xs:documentation>the pattern terms are the lhs and rhs of the pattern rule. the third argument is the proof how to derive the pattern rule.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="patternTerm"/>
        <xs:element ref="patternTerm"/>
        <xs:choice>
          <xs:element name="originalRule">
            <xs:complexType>
              <xs:sequence>
                <xs:group ref="rule"/>
                <xs:element name="isPair" type="xs:boolean"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="initialPumping">
            <xs:annotation>
              <xs:documentation>first substitution is for lhs, second for rhs.</xs:documentation>
            </xs:annotation>
            <xs:complexType>
              <xs:sequence>
                <xs:element ref="patternRule"/>
                <xs:element ref="substitution"/>
                <xs:element ref="substitution"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="initialPumpingContext">
            <xs:complexType>
              <xs:sequence>
                <xs:element ref="patternRule"/>
                <xs:element ref="substitution"/>
                <xs:element ref="positionInTerm"/>
                <xs:element ref="var"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="equivalence">
            <xs:complexType>
              <xs:sequence>
                <xs:element ref="patternRule"/>
                <xs:choice>
                  <xs:element name="left"/>
                  <xs:element name="right"/>
                </xs:choice>
                <xs:element name="patternEquivalence">
                  <xs:complexType>
                    <xs:choice>
                      <xs:element name="domainRenaming">
                        <xs:complexType>
                          <xs:sequence>
                            <xs:element ref="substitution"/>
                          </xs:sequence>
                        </xs:complexType>
                      </xs:element>
                      <xs:element name="irrelevant">
                        <xs:annotation>
                          <xs:documentation>first substitution is pumping, second is closing</xs:documentation>
                        </xs:annotation>
                        <xs:complexType>
                          <xs:sequence>
                            <xs:element ref="substitution"/>
                            <xs:element ref="substitution"/>
                          </xs:sequence>
                        </xs:complexType>
                      </xs:element>
                      <xs:element name="simplification">
                        <xs:annotation>
                          <xs:documentation>first substituion is for base, second is new closing subst.</xs:documentation>
                        </xs:annotation>
                        <xs:complexType>
                          <xs:sequence>
                            <xs:element ref="substitution"/>
                            <xs:element ref="substitution"/>
                          </xs:sequence>
                        </xs:complexType>
                      </xs:element>
                    </xs:choice>
                  </xs:complexType>
                </xs:element>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="narrowing">
            <xs:annotation>
              <xs:documentation>first pattern rule is rewritten with second pattern rule</xs:documentation>
            </xs:annotation>
            <xs:complexType>
              <xs:sequence>
                <xs:element ref="patternRule"/>
                <xs:element ref="patternRule"/>
                <xs:element ref="positionInTerm"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="instantiation">
            <xs:complexType>
              <xs:sequence>
                <xs:element ref="patternRule"/>
                <xs:element ref="substitution"/>
                <xs:choice>
                  <xs:element name="base"/>
                  <xs:element name="pumping">
                    <xs:complexType/>
                  </xs:element>
                  <xs:element name="closing">
                    <xs:complexType/>
                  </xs:element>
                </xs:choice>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="instantiationPumping">
            <xs:complexType>
              <xs:sequence>
                <xs:element ref="patternRule"/>
                <xs:element name="power" type="xs:positiveInteger"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="rewriting">
            <xs:complexType>
              <xs:sequence>
                <xs:element ref="patternRule"/>
                <xs:element ref="rewriteSequence"/>
                <xs:choice>
                  <xs:element name="base"/>
                  <xs:element name="pumping">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element ref="var"/>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="closing">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element ref="var"/>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:choice>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:choice>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="string">
    <xs:annotation>
      <xs:documentation>a string as used for string rewriting</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="symbol" maxOccurs="unbounded" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="overlapClosureSRS">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="string"/>
        <xs:element ref="string"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="wordPattern">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="string"/>
        <xs:element ref="string"/>
        <xs:element name="factor" type="xs:positiveInteger"/>
        <xs:element name="constant" type="xs:nonNegativeInteger"/>
        <xs:element ref="string"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="derivationPattern">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="wordPattern"/>
        <xs:element ref="wordPattern"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="derivationPatternProof">
    <xs:annotation>
      <xs:documentation>state that u ->+ v.

The strings u v must be provided in combination with a proof.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:choice>
        <xs:element name="OC1">
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="overlapClosureSRS"/>
              <xs:element name="isPair" type="xs:boolean"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="OC2">
          <xs:annotation>
            <xs:documentation>derive w l -> t r
from w -> t x
and  x l -> r

The strings t, x, and l have to be provided (in this order) to ease proof reconstruction. </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="overlapClosureSRS"/>
              <xs:element ref="overlapClosureSRS"/>
              <xs:element ref="overlapClosureSRS"/>
              <xs:element ref="string"/>
              <xs:element ref="string"/>
              <xs:element ref="string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="OC2prime">
          <xs:annotation>
            <xs:documentation>derive l w -> r t
from w -> x t
and  l x -> r

The strings x, t, and l have to be provided (in this order) to ease proof reconstruction. </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="overlapClosureSRS"/>
              <xs:element ref="overlapClosureSRS"/>
              <xs:element ref="overlapClosureSRS"/>
              <xs:element ref="string"/>
              <xs:element ref="string"/>
              <xs:element ref="string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="OC3">
          <xs:annotation>
            <xs:documentation>derive w -> t1 r t2
from w -> t1 x t2
and  x -> r

The strings t1 and t2 have to be provided (in this order) to ease proof reconstruction. </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="overlapClosureSRS"/>
              <xs:element ref="overlapClosureSRS"/>
              <xs:element ref="overlapClosureSRS"/>
              <xs:element ref="string"/>
              <xs:element ref="string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="OC3prime">
          <xs:annotation>
            <xs:documentation>derive t1 w t2 -> r
from t1 x t2 -> r
and  w -> x

The strings t1 and t2 have to be provided (in this order) to ease proof reconstruction. </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="overlapClosureSRS"/>
              <xs:element ref="overlapClosureSRS"/>
              <xs:element ref="overlapClosureSRS"/>
              <xs:element ref="string"/>
              <xs:element ref="string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="OCintoDP1">
          <xs:annotation>
            <xs:documentation>derive l^n c ->+ c r^n from
overlap-closure l c ->+ c r</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="derivationPattern"/>
              <xs:element ref="overlapClosureSRS"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="OCintoDP2">
          <xs:annotation>
            <xs:documentation>derive c l^n ->+ r^n c from
overlap-closure c l ->+ r c</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="derivationPattern"/>
              <xs:element ref="overlapClosureSRS"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="lift">
          <xs:annotation>
            <xs:documentation>derive l1 m1^(f1*n+(c1+f1)) r1 ->+ l2 m2^(f2*n+(c2+f2)) r2
from l1 m1^(f1*n+c1) r1 ->+ l2 m2^(f2*n+c2) r2</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="derivationPattern"/>
              <xs:element ref="derivationPattern"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="DP_OC_1_1">
          <xs:annotation>
            <xs:documentation>derive pat ->+ l v r m^n r'
from   pat ->+ l x r m^n r'
and      x ->+ v

The strings l and r have to be provided.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="derivationPattern"/>
              <xs:element ref="derivationPattern"/>
              <xs:element ref="overlapClosureSRS"/>
              <xs:element ref="string"/>
              <xs:element ref="string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="DP_OC_1_2">
          <xs:annotation>
            <xs:documentation>derive l l1 m1^n r1 ->+ v r m2^n r2
from     l1 m1^n r1 ->+ x r m2^n r2
and             l x ->+ v

The strings l, r, and x have to be provided.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="derivationPattern"/>
              <xs:element ref="derivationPattern"/>
              <xs:element ref="overlapClosureSRS"/>
              <xs:element ref="string"/>
              <xs:element ref="string"/>
              <xs:element ref="string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="DP_OC_2">
          <xs:annotation>
            <xs:documentation>derive pat ->+ l' (l v r)^n r'
from   pat ->+ l' (l x r)^n r'
and      x ->+ v

The strings l and r have to be provided.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="derivationPattern"/>
              <xs:element ref="derivationPattern"/>
              <xs:element ref="overlapClosureSRS"/>
              <xs:element ref="string"/>
              <xs:element ref="string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="DP_OC_3_1">
          <xs:annotation>
            <xs:documentation>derive pat ->+ l' m^n l v r
from   pat ->+ l' m^n l x r
and      x ->+ v

The strings l and r have to be provided.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="derivationPattern"/>
              <xs:element ref="derivationPattern"/>
              <xs:element ref="overlapClosureSRS"/>
              <xs:element ref="string"/>
              <xs:element ref="string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="DP_OC_3_2">
          <xs:annotation>
            <xs:documentation>derive l1 m1^n r1 r ->+ l2 m2 l v
from     l1 m1^n r1 ->+ l2 m2^n l x
and             x r ->+ v

The strings l, r, and x have to be provided.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="derivationPattern"/>
              <xs:element ref="derivationPattern"/>
              <xs:element ref="overlapClosureSRS"/>
              <xs:element ref="string"/>
              <xs:element ref="string"/>
              <xs:element ref="string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="DP_DP_1_1">
          <xs:annotation>
            <xs:documentation>derive pat ->+ l l2 m2^n r2 r
from   pat ->+ l l1 m1^n r1 r
and      l1 m1^n r1 ->+ l2 m2^n r2

The strings l and r have to be provided.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="derivationPattern"/>
              <xs:element ref="derivationPattern"/>
              <xs:element ref="derivationPattern"/>
              <xs:element ref="string"/>
              <xs:element ref="string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="DP_DP_1_2">
          <xs:annotation>
            <xs:documentation>derive l1 m1^n r1' r ->+ l l2' m2^n r2
from   l1 m1^n r1' ->+ l l2 m^n r1
and    l2 m^n r1 r ->+ l2' m2^n r2

The strings l and r have to be provided.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="derivationPattern"/>
              <xs:element ref="derivationPattern"/>
              <xs:element ref="derivationPattern"/>
              <xs:element ref="string"/>
              <xs:element ref="string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="DP_DP_2_1">
          <xs:annotation>
            <xs:documentation>derive l l1' m1^n r1 ->+ l2' m2^n r2' r
from   l1' m1^n r1 ->+ l1 m^n r2 r
and    l l1 m^n r2 -> l2' m2^n r2'

The strings l and r have to be provided.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="derivationPattern"/>
              <xs:element ref="derivationPattern"/>
              <xs:element ref="derivationPattern"/>
              <xs:element ref="string"/>
              <xs:element ref="string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="DP_DP_2_2">
          <xs:annotation>
            <xs:documentation>derive l l1' m'^n r1' r ->+ pat
from   l1' m'^n r1' ->+ l1 m1^n r1
and    l l1 m1^n r1 r ->+ pat

The strings l and r have to be provided.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="derivationPattern"/>
              <xs:element ref="derivationPattern"/>
              <xs:element ref="derivationPattern"/>
              <xs:element ref="string"/>
              <xs:element ref="string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="equivalent">
          <xs:annotation>
            <xs:documentation>derive patl  ->+ patr
from   patl' ->+ patr'
since patl and patl' are equivalent word patterns and patr and patr' are equivalent word patterns.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="derivationPattern"/>
              <xs:element ref="derivationPattern"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="nonterminatingSRS">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="derivationPatterns">
          <xs:annotation>
            <xs:documentation>a list of generated derivation patterns in chronological order,
i.e., the i-th proof step may be based on all derivation patterns that have been generated in steps 1 to i-1.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" ref="derivationPatternProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:choice>
          <xs:element name="selfEmbeddingOC">
            <xs:annotation>
              <xs:documentation>there is a loop, as we have generated an overlap closure m ->+ l m r.

The strings l, m, and r must be given in this order.</xs:documentation>
            </xs:annotation>
            <xs:complexType>
              <xs:sequence>
                <xs:element ref="string"/>
                <xs:element ref="string"/>
                <xs:element ref="string"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="selfEmbeddingDP">
            <xs:annotation>
              <xs:documentation>There is a self-embedding derivation pattern

l m^f1 r ->+ l' l m^f2 r r'

such that f1 and f2 are fitting.

l' and r' have to be provided.</xs:documentation>
            </xs:annotation>
            <xs:complexType>
              <xs:sequence>
                <xs:element ref="derivationPattern"/>
                <xs:element ref="string"/>
                <xs:element ref="string"/>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:choice>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="substitution">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="substEntry" maxOccurs="unbounded" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="var"/>
              <xs:group ref="term"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:group name="context">
    <xs:choice>
      <xs:element name="box"/>
      <xs:element name="funContext">
        <xs:complexType>
          <xs:sequence>
            <xs:group ref="symbol"/>
            <xs:element name="before">
              <xs:complexType>
                <xs:group maxOccurs="unbounded" minOccurs="0" ref="term"/>
              </xs:complexType>
            </xs:element>
            <xs:group ref="context"/>
            <xs:element name="after">
              <xs:complexType>
                <xs:group maxOccurs="unbounded" minOccurs="0" ref="term"/>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:choice>
  </xs:group>
  <xs:element name="rewriteSequence">
    <xs:annotation>
      <xs:documentation>if t_0 is startterm, and there are rewrite-steps p_i, rule_i, t_i (for i = 1..n)
then t_{i-1} ->_{p_i,rule_i} t_i for all i=1..n

If the rewrite sequence is built via two TRSs, where one corresponds to a major step, and the other corresponds to a relative step, then all relative steps have to be marked with the relative-elemnt. (e.g., for loops in relative termination analysis R/S, the S-steps are relative, or for loops in the DP-framework with (P,R), the R-steps are relative).</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="startTerm">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="term"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="rewriteStep"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="rewriteStep">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="positionInTerm"/>
        <xs:group ref="rule"/>
        <xs:element minOccurs="0" name="relative"/>
        <xs:group ref="term"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="state" type="xs:string">
    <xs:annotation>
      <xs:documentation>the state of a tree automation</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element name="treeAutomaton">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="finalStates">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" minOccurs="0" ref="state"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="transitions">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" minOccurs="0" name="transition">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="lhs">
                      <xs:complexType>
                        <xs:choice>
                          <xs:sequence>
                            <xs:group ref="symbol"/>
                            <xs:element minOccurs="0" name="height" type="xs:nonNegativeInteger"/>
                            <xs:element maxOccurs="unbounded" minOccurs="0" ref="state"/>
                          </xs:sequence>
                          <xs:element ref="state"/>
                        </xs:choice>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="rhs">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element ref="state"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="uncurryInformation">
    <xs:annotation>
      <xs:documentation>the uncurrying information consists of:
- the application symbol
- the names of the uncurried symbols
- the uncurrying rules
- the additional rules that are obtained when eta-expanding the TRS
</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="symbol"/>
        <xs:element name="uncurriedSymbols">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="uncurriedSymbolEntry">
                <xs:annotation>
                  <xs:documentation>mark for each original symbols the new uncurried symbols:
if the constant map should now be uncurried up to two levels then
there should be a symbol map entry 
  map (we want to uncurry map)
  0  (the original arity of map)
  map (the new constant)
  map1 (the new unary symbol)
  map2 (the new binary symbol)
 
 Note that the names can be chosen arbitrarily</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                  <xs:sequence>
                    <xs:group ref="symbol"/>
                    <xs:element ref="arity"/>
                    <xs:group ref="symbol" maxOccurs="unbounded"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="uncurryRules">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="rules" type="rules"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="etaRules">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="rules" type="rules"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="loop">
    <xs:annotation>
      <xs:documentation>a loop is given by a (non-empty) rewrite-sequence t0 ->+ tn where additionally tn = C[t0 sigma]</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="rewriteSequence"/>
        <xs:element ref="substitution"/>
        <xs:group ref="context"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="nonLoop">
    <xs:annotation>
      <xs:documentation>first substitution is part of pumping subst., 
second substitution is part of closing subst.,
first natural is for decomposing pumping subst.,
second natural is for getting subterm</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="patternRule"/>
        <xs:element ref="substitution"/>
        <xs:element ref="substitution"/>
        <xs:element name="natural" type="xs:nonNegativeInteger"/>
        <xs:element name="natural" type="xs:nonNegativeInteger"/>
        <xs:element ref="positionInTerm"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="url" type="xs:string"/>
  <xs:element name="forbiddenPattern">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="term"/>
        <xs:element ref="positionInTerm"/>
        <xs:choice>
          <xs:element name="above"/>
          <xs:element name="below"/>
          <xs:element name="here"/>
        </xs:choice>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="trsInput">
    <xs:annotation>
      <xs:documentation>This is the standard problem for the TRS categories of termComp. This input can model (innermost/outermost/...) (relative) termination and complexity problems. 
Note that CeTA only supports relative systems for no strategy or for innermost strategies.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="trs" type="trs"/>
        <xs:element minOccurs="0" ref="strategy"/>
        <xs:element name="relativeRules" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="rules" type="rules"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="dpInput">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="trs" type="trs"/>
        <xs:element name="dps" type="trs"/>
        <xs:element ref="strategy" minOccurs="0"/>
        <xs:element name="minimal" type="xs:boolean"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="strategy">
    <xs:annotation>
      <xs:documentation>no strategy means standard rewriting without restrictions</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:choice>
        <xs:element name="innermost">
          <xs:complexType>
            <xs:sequence>
              <xs:element minOccurs="0" ref="nfs"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="innermostLhss">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="term" maxOccurs="unbounded" minOccurs="0"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="outermost"/>
        <xs:element name="forbiddenPatterns">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" minOccurs="0" ref="forbiddenPattern"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="contextSensitive">
          <xs:complexType>
            <xs:sequence maxOccurs="unbounded" minOccurs="0">
              <xs:element name="replacementMapEntry">
                <xs:complexType>
                  <xs:sequence>
                    <xs:group ref="symbol"/>
                    <xs:element ref="arity"/>
                    <xs:element maxOccurs="unbounded" minOccurs="0" ref="position"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="conversion">
    <xs:annotation>
      <xs:documentation>A conversion of the first term to the last term, with intermediate terms spelled out. CeTA tries to infer parallel  rewrite steps between every two adjacent terms in the list.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="term" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="subsumptionProof">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" minOccurs="0" name="ruleSubsumptionProof">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="rule"/>
              <xs:element ref="conversion"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="convertibleInstance">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="subsumptionProof"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="innermostLhss">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="term" maxOccurs="unbounded" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:group name="complexityMeasure">
    <xs:choice>
      <xs:element name="derivationalComplexity">
        <xs:annotation>
          <xs:documentation>If no sigature is provided, then signature is set of symbols of input TRS. </xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence minOccurs="0">
            <xs:element ref="signature"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="runtimeComplexity">
        <xs:annotation>
          <xs:documentation>first signature defines constructors, second signature the defined symbols; if no signatures are provided, then these are computed implicitly from input TRS R: roots of R will be defined symbols; all other symbols of R will be constructors</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence minOccurs="0">
            <xs:element ref="signature"/>
            <xs:element ref="signature"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:choice>
  </xs:group>

  <xs:group name="equationalProofTree">
    <xs:choice>
      <xs:element name="refl">
        <xs:complexType>
          <xs:sequence>
            <xs:group ref="term"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="sym">
        <xs:complexType>
          <xs:sequence>
            <xs:group ref="equationalProofTree"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="trans">
        <xs:complexType>
          <xs:sequence>
            <xs:group ref="equationalProofTree"/>
            <xs:group ref="equationalProofTree"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="assm">
        <xs:complexType>
          <xs:sequence>
            <xs:group ref="rule"/>
            <xs:element ref="substitution"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="cong">
        <xs:complexType>
          <xs:sequence>
            <xs:group ref="symbol"/>
            <xs:group maxOccurs="unbounded" minOccurs="0" ref="equationalProofTree"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:choice>
  </xs:group>
  <xs:element name="completionAndNormalization">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="trs" type="trs"/>
        <xs:element ref="completionProof"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="approxAndCompletionAndNormalization">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="trs" type="trs"/>
        <xs:element ref="approxCompletionProof"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="approxAndOrderedCompletionAndNormalization">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="trs" type="trs"/>
        <xs:element name="equations" type="trs"/>
        <xs:element ref="reductionOrder"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="signature">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" minOccurs="0" name="symbol">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="symbol"/>
              <xs:element ref="arity"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="conditionalConstraint">
    <xs:complexType>
      <xs:choice>
        <xs:element name="implication">
          <xs:annotation>
            <xs:documentation>a1 -> a2 -> ... -> an
or 
(a1 /\ a2 /\ ... ) -> an</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="conditionalConstraint" maxOccurs="unbounded"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="constraint">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="term"/>
              <xs:choice>
                <xs:element name="rewrite"/>
                <xs:element name="strict"/>
                <xs:element name="nonStrict"/>
              </xs:choice>
              <xs:group ref="term"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="all">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="var" type="xs:string"/>
              <xs:element ref="conditionalConstraint"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="conditionalConstraintProof">
    <xs:complexType>
      <xs:choice>
        <xs:element name="final">
          <xs:annotation>
            <xs:documentation>pass this constraint to the order</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="differentConstructor">
          <xs:annotation>
            <xs:documentation>there is a rewrite constraint in the assumptions (which must be provided) which has different root symbols and the left root symbol is a constructor</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="conditionalConstraint"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="sameConstructor">
          <xs:annotation>
            <xs:documentation>there is a rewrite constraint in the assumptions (which must be provided) which has the same root symbols which are constructors.
Then for all arguments the rewrite constraints are added.
Both the rewrite constraint and the full new constraint must be provided in combination with the proof for the new constraint.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="conditionalConstraint"/>
              <xs:element ref="conditionalConstraint"/>
              <xs:element ref="conditionalConstraintProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="deleteCondition">
          <xs:annotation>
            <xs:documentation>Arbitrary conditions can be dropped. 
The full new constraint must be provided in combination with the proof for the new constraint.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="conditionalConstraint"/>
              <xs:element ref="conditionalConstraintProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="variableEquation">
          <xs:annotation>
            <xs:documentation>There is a rewrite constraint x = t or t = x.
The full new constraint must be provided in combination with the proof for the new constraint.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="var"/>
              <xs:group ref="term"/>
              <xs:element ref="conditionalConstraint"/>
              <xs:element ref="conditionalConstraintProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="funargIntoVar">
          <xs:annotation>
            <xs:documentation>There is a rewrite constraint f(t1,..,tn) = q where ti should be replaced by a fresh variable x + addition of ti = x.
The rewrite constraint, the index, the variable name, and the full new constraint must be provided in combination with the proof for the new constraint.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="conditionalConstraint"/>
              <xs:element ref="position"/>
              <xs:element ref="var"/>
              <xs:element ref="conditionalConstraint"/>
              <xs:element ref="conditionalConstraintProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="simplifyCondition">
          <xs:annotation>
            <xs:documentation>Use a induction hypothesis (a quantified implification in the list of premises).
The quantified formula, the instantiation substitution, and the new total constraint must be provided in combination with the proof for the new constraint.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="conditionalConstraint"/>
              <xs:element ref="substitution"/>
              <xs:element ref="conditionalConstraint"/>
              <xs:element ref="conditionalConstraintProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="induction">
          <xs:annotation>
            <xs:documentation>Use the induction rule. The rewrite condition + the list of conjuncts must be provided (which corresponds to phi in the paper) 
</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="conditionalConstraint"/>
              <xs:element name="conjuncts">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" ref="conditionalConstraint"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="ruleConstraintProofs">
                <xs:annotation>
                  <xs:documentation>for each rule that must be considered, a variable renamed rule has to be provided + the set of subterms of the rhs, for which an IH is generated + the bound variables for building each IH + the new total constraint for that rule + the proof for that new constraint</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="ruleConstraintProof">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:group ref="rule"/>
                          <xs:element name="subtermVarEntries">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element maxOccurs="unbounded" minOccurs="0"
                                  name="subtermVarEntry">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:group ref="term"/>
                                      <xs:element ref="var" maxOccurs="unbounded" minOccurs="0"/>
                                    </xs:sequence>
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                          <xs:element ref="conditionalConstraint"/>
                          <xs:element ref="conditionalConstraintProof"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:group name="complexityClass">
    <xs:choice>
      <xs:element name="polynomial" type="xs:nonNegativeInteger">
        <xs:annotation>
          <xs:documentation>the number is the degree:
0 -> O(1)
1 -> O(n)
2 -> O(n^2) ...</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:choice>
  </xs:group>
  <xs:group name="closedTreeAutomata">
    <xs:sequence>
      <xs:element ref="treeAutomaton"/>
      <xs:group minOccurs="0" ref="closedTreeAutomatonProof"/>
    </xs:sequence>
  </xs:group>
  <xs:group name="closedTreeAutomatonProof">
    <xs:choice>
      <xs:element name="criterion">
        <xs:complexType>
          <xs:choice>
            <xs:element name="compatibility"/>
            <xs:element name="stateCompatibility">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="relation">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element maxOccurs="unbounded" minOccurs="0" name="entry">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element ref="state"/>
                              <xs:element ref="state"/>
                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:element name="decisionProcedure"/>
          </xs:choice>
        </xs:complexType>
      </xs:element>
    </xs:choice>
  </xs:group>
  <xs:element name="bounds">
    <xs:annotation>
      <xs:documentation>The final states are those which are used to accept the initial language like lift_0(T(Sigma)).

In the relative setting, an implicit step from R/S to R u S is done!</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="type">
          <xs:complexType>
            <xs:choice>
              <xs:element name="roof"/>
              <xs:element name="match"/>
            </xs:choice>
          </xs:complexType>
        </xs:element>
        <xs:element name="bound" type="xs:nonNegativeInteger"/>
        <xs:element name="finalStates">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" minOccurs="0" ref="state"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:group ref="closedTreeAutomata">
          <xs:annotation>
            <xs:documentation>One has to provide which criterion was used to ensure closure under rewriting. For backwards-compatibility, the criterion is optional as in former versions there was only compatibility (of Genet). So, if no criterion is provided, this should be interpretet as compatibility. 
It is encouraged to specify the criterion explicitly.
</xs:documentation>
          </xs:annotation>
        </xs:group>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="complexityProof">
    <xs:complexType>
      <xs:choice>
        <xs:element name="rIsEmpty">
          <xs:annotation>
            <xs:documentation>state that the strict TRS is empty and therefore is in O(1).</xs:documentation>
          </xs:annotation>
          <xs:complexType/>
        </xs:element>
        <xs:element name="ruleShifting">
          <xs:annotation>
            <xs:documentation>shifts a set of rules from strict to weak component where all these rules are oriented by some monotone reduction order where the complexity of the order is known. An optional set of usable rules may be provided, then only these rules will have to be oriented.
Since there is no special treatment for dependency-pairs or -tuples, these rules have to be included in the list of usable rules!</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="redPair"/>
              <xs:element name="trs" type="trs"/>
              <xs:element name="usableRules" type="trs" minOccurs="0"/>
              <xs:element ref="complexityProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="removeNonApplicableRules">
          <xs:annotation>
            <xs:documentation>remove those rules, which are not applicable since their lhs has an argument that is not in normal form (for innermost rewriting). The removed rules have to be provided.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="complexityProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="bounds"/>
        <xs:element name="relativeBounds">
          <xs:annotation>
            <xs:documentation>apply relative match-bounds to move some rules from the strict in the weak component. The moved rules have to be provided.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="bounds"/>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="complexityProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="dtTransformation">
          <xs:annotation>
            <xs:documentation>Apply the dependency tuple transformation for complexity.
For each rule one has to provide a corresponding DT.
The strict and weak rules give rise to strict and weak DTs, resp.
The innermost left-hand sides should contain terms with sharp-symbols as root. They will be added to the strategy component, and they can be used to ensure that the resulting problem is again innermost.

Requires innermost runtime complexity problems as input.
Turns the set of starting terms into T#.
Only the strict DTs will be strict afterwards, and all other rules and DTs will be in the weak component.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="strictDTs">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="ruleWithDT">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:group ref="rule"/>
                          <xs:group ref="rule"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="weakDTs">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="ruleWithDT">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:group ref="rule"/>
                          <xs:group ref="rule"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element ref="innermostLhss"/>
              <xs:element ref="complexityProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="wdpTransformation">
          <xs:annotation>
            <xs:documentation>Apply the weak dependency pairs transformation for complexity.
For each rule one has to provide a corresponding WDP.
The strict and weak rules give rise to strict and weak WDPs, resp.
The innermost left-hand sides should contain terms with sharp-symbols as root. They will be added to the strategy component, and they can be used to ensure that the resulting problem is again innermost, if the original problem was innermost.

Requires runtime complexity problems as input.
Turns the set of starting terms into T#.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="compoundSymbols">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="symbol">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:group ref="symbol"/>
                          <xs:element ref="arity"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="strictWDPs">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="ruleWithWDP">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:group ref="rule"/>
                          <xs:group ref="rule"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="weakWDPs">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="ruleWithWDP">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:group ref="rule"/>
                          <xs:group ref="rule"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element ref="innermostLhss"/>
              <xs:element ref="complexityProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="usableRules">
          <xs:annotation>
            <xs:documentation>Only consider usable rules, where usable rules usually are determined via usable symbols. Note that those rules have to be provided which are not usable, and can thus be deleted.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="nonUsableRules">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="rules" type="rules"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element ref="complexityProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="split">
          <xs:annotation>
            <xs:documentation>Split a complexity problem (S1 union S2 / W) into the two problems P1 = (S1 / S2 union W) and P2 = (S2 / S1 union W). The TRS S1 has to be provided as well as the proofs of P1 and P2 (in this order).</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="complexityProof"/>
              <xs:element ref="complexityProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="completionProof">
    <xs:annotation>
      <xs:documentation/>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="wcrProof"/>
        <xs:element ref="trsTerminationProof"/>
        <xs:element name="equivalenceProof">
          <xs:annotation>
            <xs:documentation>Show that a given set of equations E is equivalent to a TRS R,
by showing that all rules can be derived from the equations and vice versa.
The first subsumption proof is mandatory (where the rules have to be derived from the equations), the latter is optional and may be automatically be performed by the certifier.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="subsumptionProof"/>
              <xs:element minOccurs="0" ref="subsumptionProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="approxCompletionProof">
    <xs:annotation>
      <xs:documentation/>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="wcrProof"/>
        <xs:element ref="trsTerminationProof"/>
        <xs:element minOccurs="0" ref="subsumptionProof">
          <xs:annotation>
            <xs:documentation>Show that a given set of equations E is subsumed by a TRS R,
by showing that all equations can be derived from the rules.
This format is more convenient and suitable than completionProof if the purpose is equational disproof.
Subsumption proof is optional and may be automatically be performed by the certifier.</xs:documentation>
          </xs:annotation>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="ruleLabelingFunction">
    <xs:annotation>
      <xs:documentation>Rule labeling function as pairs of rules and natural numbers. Unspecified rules get label 0.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="ruleLabelingFunctionEntry" maxOccurs="unbounded" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="rule"/>
              <xs:element name="label" type="xs:nonNegativeInteger"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="ruleLabeling">
    <xs:annotation>
      <xs:documentation>CR, since the TRS is (left-)linear and all critical peaks are decreasing using rule labeling.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ruleLabelingFunction"/>
        <xs:element ref="joinSequences"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="ruleLabelingConv">
    <xs:annotation>
      <xs:documentation>CR, since the TRS is (left-)linear and all critical peaks are decreasing using rule labeling (conversion version).

Peaks have to be specified in the critical pairs and it is recommended to also provide the labels of a critical peak.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ruleLabelingFunction"/>
        <xs:element ref="joinSequences"/>
        <xs:element minOccurs="0" name="nrSteps" type="xs:nonNegativeInteger">
          <xs:annotation>
            <xs:documentation>Indicates a limit in how many steps the fan property can be shown.</xs:documentation>
          </xs:annotation>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="manySortedSignature">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" name="manySortedFunction">
          <xs:annotation>
            <xs:documentation>A many-sorted signature. Each function symbol is associated with a list of argument types and a result type.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="name"/>
              <xs:element name="args">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element minOccurs="0" maxOccurs="unbounded" name="sort" type="xs:string"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="result">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="sort" type="xs:string"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="critPairInfo">
    <xs:annotation>
      <xs:documentation>We nearly always consider peaks of the form left &lt;- peak -root-> Only exception: for simultaneous critical pairs we consider peaks of the form left &lt;-o- peak -> right, i.e., where the multistep leads to the left and the single step to the right.) The intermediate terms t1, .., tn are those that occur in the joining conversion of form left &lt;-> t1 &lt;-> ... &lt;-> tn &lt;-> right.

All non-trivial peaks must be listed, i.e., where left and right differ.

For rule labeleling, the (maximal) label of the (parallel) step must be indicated (maxLeft) as well as the label of the root step (right).

When using parallel critical pairs, the peaks and the posititions of the overlap have to be specified. </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="left">
          <xs:complexType>
            <xs:group ref="term"/>
          </xs:complexType>
        </xs:element>
        <xs:element name="peak" minOccurs="0">
          <xs:complexType>
            <xs:group ref="term"/>
          </xs:complexType>
        </xs:element>
        <xs:element name="right">
          <xs:complexType>
            <xs:group ref="term"/>
          </xs:complexType>
        </xs:element>
        <xs:element minOccurs="0" name="overlapPositions">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" ref="positionInTerm"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element minOccurs="0" name="labels">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="maxLeft" type="xs:nonNegativeInteger"/>
              <xs:element name="right" type="xs:nonNegativeInteger"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="intermediateTerms">
          <xs:complexType>
            <xs:sequence>
              <xs:group maxOccurs="unbounded" minOccurs="0" ref="term"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="joinAutoBfs" type="xs:integer">
    <xs:annotation>
      <xs:documentation>The joins can be done within a given number of steps. Note that CPF version 2 had the option to specify no number for a default, e.g., try a join with a parallel step or development step. These defaults are still available by using a negative number as limit.

Note that this method is not complete if the TRS(s) contain extra-variables, or if conversions are allowed.</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element name="joinSequences">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="critPairInfo"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:group name="cpJoinHints">
    <xs:choice>
      <xs:element ref="joinAutoBfs"/>
      <xs:element ref="joinSequences"/>
    </xs:choice>
  </xs:group>
  <xs:element name="pcpClosed">
    <xs:annotation>
      <xs:documentation>CR (or commuting), since the TRS (s) satisfy Gramlich's parallel critical pair condition (incl. Toyama's refinement).</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="ordinaryCriticalPairs">
          <xs:complexType>
            <xs:group ref="cpJoinHints"/>
          </xs:complexType>
        </xs:element>
        <xs:element name="parallelCriticalPairs">
          <xs:complexType>
            <xs:group ref="cpJoinHints"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="crProof">
    <xs:complexType>
      <xs:choice>
        <xs:element name="wcrAndSN">
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="wcrProof"/>
              <xs:element ref="trsTerminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="orthogonal"/>

        <xs:element name="stronglyClosed">
          <xs:annotation>
            <xs:documentation>CR, since TRS is strongly closed. The number indicates a limit in how many steps each critical pair can be joined.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:choice>
              <xs:element ref="joinAutoBfs"/>
            </xs:choice>
          </xs:complexType>
        </xs:element>
        <xs:element name="parallelClosed">
          <xs:annotation>
            <xs:documentation>CR, since TRS is parallel closed. The number indicates a limit on the length of the rewrite sequences in the joins.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:choice>
              <xs:element ref="joinAutoBfs"/>
            </xs:choice>
          </xs:complexType>
        </xs:element>
        <xs:element ref="pcpClosed"/>
        <xs:element name="pcpRuleLabeling">
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="ruleLabelingFunction"/>
              <xs:group ref="cpJoinHints"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="compositionalPcpRuleLabeling">
          <xs:annotation>
            <xs:documentation>The first labeling function is phi.
The second one is psi. 
If psi is not provided, psi is set to phi.

Note that two sets of joining operations must be given, one where the phi-labelled-rules are for the parallel steps and psi-rules for root steps (joinsRS), and one where the role of phi and psi is flipped (joinsSR). If psi is not provided (so phi = psi), then the joinsSR element can be omitted.

Only the non-0-0 joins have to be decreasing. And the 0-labeled subsystems must be provided explicitly and will be handled recursively in the child CR-proof.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="ruleLabelingFunction"/>
              <xs:element minOccurs="0" ref="ruleLabelingFunction"/>
              <xs:element name="joinsRS">
                <xs:annotation>
                  <xs:documentation/>
                </xs:annotation>
                <xs:complexType>
                  <xs:group ref="cpJoinHints"/>
                </xs:complexType>
              </xs:element>
              <xs:element name="joinsSR" minOccurs="0">
                <xs:complexType>
                  <xs:group ref="cpJoinHints"/>
                </xs:complexType>
              </xs:element>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="crProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="compositionalPcp">
          <xs:annotation>
            <xs:documentation>Provide the subtrs C and hints for joining the parallel critical pairs of R by conversions of C. In the auto mode with parameter n, it is tried to merge critical pairs (t,u) by joins with n steps from both sides.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="trs" type="trs"/>
              <xs:group ref="cpJoinHints"/>
              <xs:element ref="crProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="compositionalPcps">
          <xs:annotation>
            <xs:documentation>Provide the subtrs C of R and the parallel pair closing system P. Moreover a relative termination proof of P / R is required. 
The second cpJoinHints are used for joining the parallel critical pairs by R, and the first cpJoinHints are for joining these pairs by C, so that they don't have to be added to P.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="trsC" type="trs"/>
              <xs:element name="trsP" type="trs"/>
              <xs:group ref="cpJoinHints"/>
              <xs:group ref="cpJoinHints"/>
              <xs:element ref="trsTerminationProof"/>
              <xs:element ref="crProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="developmentClosed">
          <xs:annotation>
            <xs:documentation>CR, since TRS is development closed.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:choice>
              <xs:element ref="joinAutoBfs"/>
            </xs:choice>
          </xs:complexType>
        </xs:element>
        <xs:element name="simultaneousCriticalPairsClosed">
          <xs:annotation>
            <xs:documentation>CR, since the TRS is simultaneous critical pairs closed (Okui's criterion). In the join hints the step to the right is always the single step. Trivial critical pairs can be omitted.

It is preferred to not use the auto-mode, but instead explicitly list the critical pairs.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:choice>
              <xs:group ref="cpJoinHints"/>
            </xs:choice>
          </xs:complexType>
        </xs:element>
        <xs:element name="criticalPairClosingSystem">
          <xs:annotation>
            <xs:documentation>CR, since there is terminating critical-pair-closing system for the TRS.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="trsTerminationProof"/>
              <xs:choice>
                <xs:element ref="joinAutoBfs"/>
              </xs:choice>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="ruleLabeling"/>
        <xs:element name="decreasingDiagrams">
          <xs:complexType>
            <xs:sequence>
              <xs:element minOccurs="0" ref="trsTerminationProof">
                <xs:annotation>
                  <xs:documentation>Termination of the duplicating rules relative to the non-duplicating ones; required if the TRS is not right-linear.</xs:documentation>
                </xs:annotation>
              </xs:element>
              <xs:choice>
                <xs:element ref="ruleLabeling"/>
                <xs:element ref="ruleLabelingConv"/>
              </xs:choice>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="redundantRules">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="trs" type="trs"/>
              <xs:element name="nrSteps" type="xs:nonNegativeInteger">
                <xs:annotation>
                  <xs:documentation>Indicates a limit in how many steps each rule can be simulated.</xs:documentation>
                </xs:annotation>
              </xs:element>
              <xs:element name="conversions" minOccurs="0">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" ref="conversion"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element ref="crProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="persistentDecomposition">
          <xs:annotation>
            <xs:documentation>A confluence proof by persistent decomposition. Confluence follow from confluence of the maximal systems induced by the sorts of the specified many-sorted signature.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="manySortedSignature"/>
              <xs:element name="component" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="trs" type="trs"/>
                    <xs:element ref="crProof"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="comDisproof">
    <xs:complexType>
      <xs:choice>
        <xs:element name="nonJoinableFork">
          <xs:annotation>
            <xs:documentation>the TRSs R and S are not commuting as there are two rewrite sequences starting from the same term which cannot be joined. 
              The first rewrite sequence is the one of S leading to term s, the second rewrite sequence is the one of R leading to t, 
              and the third argument is the reason why a of join of s and t is not possible via rewriting with R and S.
              </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="rewriteSequence"/>
              <xs:element ref="rewriteSequence"/>
              <xs:group ref="nonJoinProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="swapTRSs">
          <xs:annotation>
            <xs:documentation>Change the role of the two TRSs. 
            </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="comDisproof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="comProof">
    <xs:complexType>
      <xs:choice>
        <xs:element name="parallelClosed">
          <xs:annotation>
            <xs:documentation>the TRSs R and S are commuting as they are (almost)
              parallel closed. Note that the criterion is not symmetric, therefore,
              you might need to swap the role of the two TRSs. 
              
              The number indicates a limit on the length of the rewrite sequences in the joins.
              </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:choice>
              <xs:element ref="joinAutoBfs"/>
            </xs:choice>
          </xs:complexType>
        </xs:element>
        <xs:element name="developmentClosed">
          <xs:annotation>
            <xs:documentation>the TRSs R and S are commuting as they are (almost)
              development closed. Note that the criterion is not symmetric, therefore,
              you might need to swap the role of the two TRSs. 
              
              The number indicates a limit on the length of the rewrite sequences in the joins.
              </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:choice>
              <xs:element ref="joinAutoBfs"/>
            </xs:choice>
          </xs:complexType>
        </xs:element>
        <xs:element name="simultaneousCriticalPairsClosed">
          <xs:annotation>
            <xs:documentation>The TRSs R and S are commuting as they all simultaneous critical
  pairs of R and S are closed, i.e., whenever u &lt;-o,R- . -S-> v is a simultaneous critical pair, then u -S->* . &lt;-o,R- v.

Note that the criterion is not symmetric, therefore,
you might need to swap the role of the two TRSs. 
              
It is recommened to provide explicit joining sequences.     </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:choice>
              <xs:group ref="cpJoinHints"/>
            </xs:choice>
          </xs:complexType>
        </xs:element>
        <xs:element name="pcpRuleLabeling">
          <xs:annotation>
            <xs:documentation>The first labeling function is for TRS R.
The second one is for TRS S.
If the second one is not provided, then the same function is used for both TRSs.

Note that two set of joining operations must be given, one where the R-rules are for the parallel steps and S-rules for root steps (joinsRS), and one where the role of R and S is flipped (joinsSR).</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="ruleLabelingFunction"/>
              <xs:element minOccurs="0" ref="ruleLabelingFunction"/>
              <xs:element name="joinsRS">
                <xs:annotation>
                  <xs:documentation/>
                </xs:annotation>
                <xs:complexType>
                  <xs:group ref="cpJoinHints"/>
                </xs:complexType>
              </xs:element>
              <xs:element name="joinsSR">
                <xs:complexType>
                  <xs:group ref="cpJoinHints"/>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="compositionalPcpRuleLabeling">
          <xs:annotation>
            <xs:documentation>The first labeling function is for TRS R.
The second one is for TRS S.
If the second one is not provided, then the same function is used for both TRSs.

Note that two set of joining operations must be given, one where the R-rules are for the parallel steps and S-rules for root steps (joinsRS), and one where the role of R and S is flipped (joinsSR).

Only the non-0-0 joins have to be decreasing. And the 0-labeled subsystems will be handled recursively. The first "trs"-element is the sub-trs of R, and the second one is the one of S.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="ruleLabelingFunction"/>
              <xs:element minOccurs="0" ref="ruleLabelingFunction"/>
              <xs:element name="joinsRS">
                <xs:annotation>
                  <xs:documentation/>
                </xs:annotation>
                <xs:complexType>
                  <xs:group ref="cpJoinHints"/>
                </xs:complexType>
              </xs:element>
              <xs:element name="joinsSR">
                <xs:complexType>
                  <xs:group ref="cpJoinHints"/>
                </xs:complexType>
              </xs:element>
              <xs:element name="trs" type="trs"/>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="comProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="swapTRSs">
          <xs:annotation>
            <xs:documentation>some commutation criteria are only available 
               in a non-symmetric version, e.g., being almost parallel closed.
               Since commutation is a symmetric property, this technique can
               be used to change the role of the two TRSs before applying an 
               asymmetric criterion. 
            </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="comProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="pcpClosed"/>
        <xs:element name="compositionalPcps">
          <xs:annotation>
            <xs:documentation>Provide the subtrs C of R and D of S and the parallel pair closing system P. Moreover a relative termination proof of P / (R union S) is required. 
The first cpJoinHints are used for joining the parallel critical pairs of R and S by C and D so that they don't have to be added to P.
The second cpJoinHints are similar to the first ones with R and S swapped.
The third cpJoinHints are used for joining the parallel critical pairs of R and S and the forth for the pairs of S and R.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="trsC" type="trs"/>
              <xs:element name="trsD" type="trs"/>
              <xs:element name="trsP" type="trs"/>
              <xs:group ref="cpJoinHints"/>
              <xs:group ref="cpJoinHints"/>
              <xs:group ref="cpJoinHints"/>
              <xs:group ref="cpJoinHints"/>
              <xs:element ref="trsTerminationProof"/>
              <xs:element ref="comProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="switchToCrProof">
          <xs:annotation>
            <xs:documentation>prove commutation by confluence, since R and S are identical</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="crProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="crDisproof">
    <xs:complexType>
      <xs:choice>
        <xs:element name="nonWcrAndSN">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="wcrDisproof">
                <xs:complexType>
                  <xs:choice>
                    <xs:element name="nonJoinableCriticalPairsAuto">
                      <xs:annotation>
                        <xs:documentation>just claim that some critical pair is not joinable.</xs:documentation>
                      </xs:annotation>
                    </xs:element>
                  </xs:choice>
                </xs:complexType>
              </xs:element>
              <xs:element ref="trsTerminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="nonJoinableFork">
          <xs:annotation>
            <xs:documentation>the TRS is not confluent as there are two rewrite sequences starting from the same term which cannot be joined. The third argument is the reason why a join is not possible.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="rewriteSequence"/>
              <xs:element ref="rewriteSequence"/>
              <xs:group ref="nonJoinProof">
                <xs:annotation>
                  <xs:documentation>Considers two terms s and t and shows that s and t are not joinable w.r.t. some TRS. 

Note that in contrast to a nonjoinabilityProof, here no substitution is applied to s and t.</xs:documentation>
                </xs:annotation>
              </xs:group>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="modularityDisjoint">
          <xs:annotation>
            <xs:documentation>the input TRS is a disjoint union R union S. By modularity of confluence, it suffices to disprove confluence of R.
The TRS R has to be given.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="crDisproof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="redundantRules">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="trs" type="trs"/>
              <xs:element name="nrSteps" type="xs:nonNegativeInteger">
                <xs:annotation>
                  <xs:documentation>Indicates a limit in how many steps each rule can be simulated.</xs:documentation>
                </xs:annotation>
              </xs:element>
              <xs:element ref="crDisproof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="persistentDecomposition">
          <xs:annotation>
            <xs:documentation>A non-confluence proof by persistent decomposition. Non-confluence follow from nonconfluence of any of the systems induced by the sorts of the specified many-sorted signature.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="manySortedSignature"/>
              <xs:element name="component">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="trs" type="trs"/>
                    <xs:element ref="crDisproof"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="ruleRemoval">
          <xs:annotation>
            <xs:documentation>the TRS R is not confluent as one can remove some rules and show that the sub-system is not confluent. If S is the subsystem, then for each rule (l,r) in R-S where l only has symbols from S, one has to provide a l ->*S r rewrite sequence. Note that S is obtained from R by providing the list of deleted rules, i.e., R \ S must be part of the certificate.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="removedRules" type="trs"/>
              <xs:element name="simulations">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="ruleSimulation">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:group ref="rule"/>
                          <xs:element ref="rewriteSequence"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element ref="crDisproof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:group name="nonJoinProof">
    <xs:choice>
      <xs:element name="finitelyReachable">
        <xs:annotation>
          <xs:documentation>there are only finitely many terms reachable from both sides, and these sets are disjoint.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="distinctNormalForms">
        <xs:annotation>
          <xs:documentation>the terms are distinct normal forms.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="capNotUnif">
        <xs:annotation>
          <xs:documentation>after applying some cap-functions, the capped terms are not unifiable.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="emptyTreeAutomataIntersection">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="firstAutomaton">
              <xs:complexType>
                <xs:group ref="closedTreeAutomata"/>
              </xs:complexType>
            </xs:element>
            <xs:element name="secondAutomaton">
              <xs:complexType>
                <xs:group ref="closedTreeAutomata"/>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="differentInterpretation">
        <xs:annotation>
          <xs:documentation>Let s and t be two ground terms that should not be non-joinable
w.r.t. TRSs Rs and Rt
This is proved by giving some weakly monotone interpretation 
[.] and >=, such that 
- Rs^-1 and Rt are a quasi-model of the interpretation.
- not [t] >= [s]

This corresponds to Aoto/FroCoS 13/Thm 10, and it can simulate Thm 6 by choosing equality for >=.
Note that the usable restriction to usable rules must be made explicitly before by applying the non-joinability technique usable-rules!

This technique is tried symmetrically, i.e., (Rs,s) and (Rt,t) might be swapped.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="model"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="strictDecrease">
        <xs:annotation>
          <xs:documentation>Let s and t be two ground terms that should not be non-joinable
wrt. to TRSs Rs and Rt.
This is proved by giving some discrimination pair >= and >
(and an optional argument filter pi) such that 
- Rs^-1 and Rt are weakly decreasing
- s > t

This corresponds to Aoto/FroCoS 13/Thm 12 without usable rules.
Note that the restriction to usable rules must be made explicitly before by applying the non-joinability technique usable-rules! 
Similarly, to get Thm 14, one has to also explicitly invoke the
argument filter technique for non-joinability.

This technique is tried symmetrically, i.e., (Rs,s) and (Rt,t) might be swapped.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:group ref="redPair"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="argumentFilterNonJoin">
        <xs:annotation>
          <xs:documentation>To show that s and t are not joinable w.r.t. Rs and Rt, use some argument filter pi and prove that pi(s) and pi(t) are not joinable w.r.t. pi(Rs) and pi(Rt).</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="argumentFilter">
              <xs:annotation>
                <xs:documentation>To realize permutations for lex. comparisons, one has to use an argument filter, which can just permute. Eg., right-to-left precedence of f(x,y,z) where the second argument is dropped, is done by argument filter f -> [3,1]</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:group ref="nonJoinProof"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="usableRulesNonJoin">
        <xs:annotation>
          <xs:documentation>To show that s and t are not joinable w.r.t. Rs and Rt, show that s and t are not joinable w.r.t. U(Rs,t) and U(Rt,t) where U is the set of usable rules w.r.t. reachability (cf. Aoto, FroCoS 13).</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:sequence minOccurs="0">
              <xs:choice>
                <xs:element name="left"/>
                <xs:element name="right"/>
              </xs:choice>
              <xs:element name="usableRules" type="trs"/>
            </xs:sequence>
            <xs:group ref="nonJoinProof"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="grounding">
        <xs:annotation>
          <xs:documentation>Apply some grounding substition on both terms.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="substitution"/>
            <xs:group ref="nonJoinProof"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="subterm">
        <xs:annotation>
          <xs:documentation>Show that two subterms are not joinable. The position must be stable in both terms, i.e., there must not be any rewrite step possible above that position possible.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="positionInTerm"/>
            <xs:group ref="nonJoinProof"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:choice>
  </xs:group>
  <xs:element name="dpNonterminationProof">
    <xs:complexType>
      <xs:choice>
        <xs:element ref="loop"/>
        <xs:element name="dpRuleRemoval">
          <xs:annotation>
            <xs:documentation>Remove some rules and / or DPs to figure out the really nonterminating DP problem (removed rules and DPs are given). 
Note that this element can be used for several termination techniques like the dependency graph processor, or the various reduction pair processors. 
</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="dps" type="trs"/>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="dpNonterminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="nonLoop"/>
        <xs:element name="innermostLhssRemovalProc">
          <xs:annotation>
            <xs:documentation>For innermost termination: remove those lhss from the innermost strategy component which contain symbols that do not occur in the remaining DP problem.
The remaining set of lhss has to be given in the proof.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="innermostLhss"/>
              <xs:element ref="dpNonterminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="innermostLhssIncreaseProc">
          <xs:annotation>
            <xs:documentation>Add new lhss to innermost strategy component.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="innermostLhss"/>
              <xs:element ref="dpNonterminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="switchFullStrategyProc">
          <xs:annotation>
            <xs:documentation>Switch from innermost rewriting to full/unrestricted rewriting for locally confluent TRS where there are no overlaps between pairs and rules.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="wcrProof"/>
              <xs:element ref="dpNonterminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="instantiationProc">
          <xs:annotation>
            <xs:documentation>Instantiate several DPs. The set of new DPs has to be provided.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="dps" type="trs"/>
              <xs:element ref="dpNonterminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="rewritingProc">
          <xs:annotation>
            <xs:documentation>Rewrite the rhs of some DP, if the usable rules of the redex are confluent.
First rule: the original DP s -> t
Rewrite step: the reduction from t to t' at position p
Usable rules of t |_ p (optional)
The second rule is also optional: it can be any variable renamed rule of s -> t' (which may be used in the new DP-problem instead)</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="rule"/>
              <xs:element ref="rewriteStep"/>
              <xs:group ref="rule"/>
              <xs:element name="usableRules" type="trs"/>
              <xs:element ref="dpNonterminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="narrowingProc">
          <xs:annotation>
            <xs:documentation>Narrow some DP by considering all narrowing below position p.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="rule"/>
              <xs:element ref="positionInTerm"/>
              <xs:element name="narrowings">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="rules" type="rules"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element ref="dpNonterminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="dpProof">
    <xs:complexType>
      <xs:choice>
        <xs:element name="pIsEmpty">
          <xs:annotation>
            <xs:documentation>trivial proof by stating that the set of DPs is empty</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="depGraphProc">
          <xs:annotation>
            <xs:documentation>split the current set of DPs into several smaller subproblems by using some DP-graph estimation.
Note that all components of the graph have to be specified, including singleton nodes which do not form an SCC on their own.
For the latter, no dpProof should be provided. The list of components has to be given in topological order, where the components with no incoming edges are listed first.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" minOccurs="0" name="component">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="dps" type="trs"/>
                    <xs:element minOccurs="0" ref="dpProof"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="redPairProc">
          <xs:annotation>
            <xs:documentation>Use a reduction pair where only the non-strict order has to be monotone.
It allows to delete those DPs which are strictly oriented. 
The remaining DPs have to be given. </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="redPair"/>
              <xs:element name="dps" type="trs"/>
              <xs:element ref="dpProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="redPairUrProc">
          <xs:annotation>
            <xs:documentation>Use a Ce-compatible reduction pair where only the non-strict order has to be monotone.
It allows to delete those DPs which are strictly oriented.
Here only the usable rules have to be weakly oriented.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="redPair"/>
              <xs:element name="dps" type="trs"/>
              <xs:element name="usableRules" type="trs"/>
              <xs:element ref="dpProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="monoRedPairProc">
          <xs:annotation>
            <xs:documentation>Use a reduction pair where both the non-strict and the strict order have to be monotone.
It allows to delete those DPs and those rules of the TRSs which are strictly oriented. 
The removed DPs and rules of the TRS have to be given.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="redPair"/>
              <xs:element name="dps" type="trs"/>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="dpProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="innermostMonoRedPairProc">
          <xs:annotation>
            <xs:documentation>Use a reduction pair where the monotonicity requirements are determined by an innermost usable replacement map.
It allows to delete those DPs and those rules of the TRSs which are strictly oriented. The removed DPs and rules need to be provided.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="redPair"/>
              <xs:element name="dps" type="trs"/>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="dpProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="monoRedPairUrProc">
          <xs:annotation>
            <xs:documentation>Use a Ce-compatible reduction pair where both the non-strict and the strict order have to be monotone.
It allows to delete those DPs and those rules of the TRSs which are strictly oriented.
Moreover, all non-usable rules will also be deleted.
Here, only the usable rules instead of all rules of the TRS have to be oriented.
The removed DPs and strictly oriented rules have to be given, as well as the usable rules.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="redPair"/>
              <xs:element name="dps" type="trs"/>
              <xs:element name="trs" type="trs"/>
              <xs:element name="usableRules" type="trs"/>
              <xs:element ref="dpProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="subtermProc">
          <xs:annotation>
            <xs:documentation>Use the subterm criterion to delete some DPs.
Only collapsing argument filters or identity filters may be used.
The removed DPs have to be given. The subterm criterion can also be used in combination with rewrite sequences.

Instead of ar argument filters, one may also use multiset argument filters, where also non-sharp symbols can be projected. Then the projected rewrite sequences are forbidden.

The removed DPs need to be listed.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:choice>
                <xs:sequence>
                  <xs:element ref="argumentFilter"/>
                  <xs:element maxOccurs="unbounded" minOccurs="0" name="projectedRewriteSequence">
                    <xs:annotation>
                      <xs:documentation>The rule specifies the DP for which the rewrite sequence is applied. Here, the rewrite sequence for the projected terms has to be given.

Example: if s -> t is the DP and a rewrite sequence t_1 ->+ t_n is given then it must hold that pi(s) = t_1, and t_n contains pi(t) as a subterm.</xs:documentation>
                    </xs:annotation>
                    <xs:complexType>
                      <xs:sequence>
                        <xs:group ref="rule"/>
                        <xs:element ref="rewriteSequence"/>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
                <xs:element ref="multisetArgumentFilter"/>
              </xs:choice>
              <xs:element name="dps" type="trs"/>
              <xs:element ref="dpProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="semlabProc">
          <xs:annotation>
            <xs:documentation>Use the semantic labeling processor to apply semantic labeling on both the DPs and the TRS. The model element determines the kind (model or quasi-model version, label, root-labeling, etc.).

The decreasing rules should be of the form f_..(x1,..,xn) -> f_..(x1,..,xn), i.e., the variables should be enumerated from x1 onwards.

The labeled system has to be provided where the new innermost strategy in the form of innermost left-hand-sides is only required if one had an innermost problem before. </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="model"/>
              <xs:element name="dps" type="trs"/>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="innermostLhss" minOccurs="0"/>
              <xs:element ref="dpProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="sizeChangeProc">
          <xs:annotation>
            <xs:documentation>the size-change criterion processor.
for each DP, one size-change graph has to be given.
the set of graphs must be size-change terminating.
if the size-change criterion is used in combination with the subterm criterion, then the edges in the graphs have to be built according to the subterm relation, and no rules have to be oriented.
otherwise, for every existing edge in a size-change graph, the corresponding subterm on the rhs is considered as usable, and the corresponding usable rules have to be added to the set of usable rules.
if not all rules are usable, then one has to use a Ce-compatible order.

Example: 
DP: F(s(x),g(x)) -> F(id(x),g(x))
TRS: g(..) -> ..
     id(x) -> x
     
if one builds a size-change graph where only the first arguments are connected, then one only has to add the id-rule to the set of usable rules, but not the g-rule.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:choice>
                <xs:element name="subtermCriterion"/>
                <xs:element name="reductionPair">
                  <xs:annotation>
                    <xs:documentation>The usable rules are optional. If they are used, a Ce-compatible order has to be used.</xs:documentation>
                  </xs:annotation>
                  <xs:complexType>
                    <xs:sequence>
                      <xs:group ref="redPair"/>
                      <xs:element name="usableRules" type="trs" minOccurs="0"/>
                    </xs:sequence>
                  </xs:complexType>
                </xs:element>
              </xs:choice>
              <xs:element maxOccurs="unbounded" minOccurs="0" name="sizeChangeGraph">
                <xs:complexType>
                  <xs:sequence>
                    <xs:group ref="rule"/>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="edge">
                      <xs:annotation>
                        <xs:documentation>an edge in a size change graph is always of the form

left-argument > / >= right-argument
                          
position 0 corresponds to the whole term.</xs:documentation>
                      </xs:annotation>
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="position" type="xs:nonNegativeInteger"/>
                          <xs:element name="strict" type="xs:boolean"/>
                          <xs:element name="position" type="xs:nonNegativeInteger"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="flatContextClosureProc">
          <xs:annotation>
            <xs:documentation>the flat context closure as required for the root labeling technique.

one also has to provide the list of flat contexts which
is used to fix the variable names in the resulting DP problem.

see the flat context closure technique for TRS for more explanations including an example.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element minOccurs="0" name="freshSymbol">
                <xs:complexType>
                  <xs:sequence>
                    <xs:group ref="symbol"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="flatContexts">
                <xs:complexType>
                  <xs:group maxOccurs="unbounded" ref="context"/>
                </xs:complexType>
              </xs:element>
              <xs:element name="dps" type="trs"/>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="dpProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="argumentFilterProc">
          <xs:annotation>
            <xs:documentation>just apply an argument filter and continue on the filtered DP problem</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="argumentFilter">
                <xs:annotation>
                  <xs:documentation>To realize permutations for lex. comparisons, one has to use an argument filter, which can just permute. Eg., right-to-left precedence of f(x,y,z) where the second argument is dropped, is done by argument filter f -> [3,1]</xs:documentation>
                </xs:annotation>
              </xs:element>
              <xs:element name="dps" type="trs"/>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="dpProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="uncurryProc">
          <xs:annotation>
            <xs:documentation>if applicativeTop does not exist, then one
- eta-expands R, 
- uncurries P and R, 
- and adds the uncurrying rules to R
(for the binary application symbol given in the uncurry information)

if applicativeTop is present (some number n), then the intention is that the application symbol is a tuple/marked symbol of arity n. Then
- the eta-expanded rules of R are added to P
- one uncurries P and R
- and adds the uncurrying rules to P</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="applicativeTop" type="xs:positiveInteger" minOccurs="0"/>
              <xs:element ref="uncurryInformation"/>
              <xs:element name="dps" type="trs"/>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="dpProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="usableRulesProc">
          <xs:annotation>
            <xs:documentation>For innermost termination: switch to usable rules</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="usableRules" type="trs"/>
              <xs:element ref="dpProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="innermostLhssRemovalProc">
          <xs:annotation>
            <xs:documentation>For innermost termination: remove those lhss from the innermost strategy component which have a root that does not occur in the remaining DP problem.
The remaining set of lhss has to be given in the proof.
(One can also remove arbitrary lhss from the innermost strategy,
but then minimality is not preserved)</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="innermostLhss"/>
              <xs:element ref="dpProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="switchInnermostProc">
          <xs:annotation>
            <xs:documentation>if R is WCR and has no overlaps with P, then one can switch to innermost</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="wcrProof"/>
              <xs:element ref="dpProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="rewritingProc">
          <xs:annotation>
            <xs:documentation>Rewrite the rhs of some DP, if the usable rules of the redex are confluent.
First rule: the original DP s -> t
Rewrite step: the reduction from t to t' at position p
Second rule: the new DP (can be variable renamed)
Usable rules of t |_ p</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="rule"/>
              <xs:element ref="rewriteStep"/>
              <xs:group ref="rule"/>
              <xs:element name="usableRules" type="trs"/>
              <xs:element ref="dpProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="instantiationProc">
          <xs:annotation>
            <xs:documentation>Instantiate some DP</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="rule"/>
              <xs:element name="instantiations">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="rules" type="rules"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element ref="dpProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="forwardInstantiationProc">
          <xs:annotation>
            <xs:documentation>Instantiate some DP using forward instantiation.
In the innermost case one can optionally give the set of usable rules for that DP which are then used to compute the reversed cap function.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="rule"/>
              <xs:element name="instantiations">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="rules" type="rules"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="usableRules" type="trs" minOccurs="0"/>
              <xs:element ref="dpProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="narrowingProc">
          <xs:annotation>
            <xs:documentation>Narrow some DP by considering all narrowing below position p.
Note that p must be a position of the capped rhs of the pair,
and some other standard application conditions have to be considered.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="rule"/>
              <xs:element ref="positionInTerm"/>
              <xs:element name="narrowings">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="rules" type="rules"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element ref="dpProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="splitProc">
          <xs:annotation>
            <xs:documentation>Split a DP problem (P,R) to show that certain pairs PD and rules RD cannot occur infinitely often. 
PD and RD have to given. 
Then it follows a proof for termination of the relative DP problem (PD, P - PD, RD, R - RD). Finally a termination proof of the DP problem (P - PD, R - RD) has to be given.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="dps" type="trs"/>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="dpProof"/>
              <xs:element ref="dpProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="generalRedPairProc">
          <xs:annotation>
            <xs:documentation>Use a general reduction pair 
It returns two DP problems where once all strict and once all bound DPs are deleted (bound w.r.t. the given symbol). If only one proof is given, then the intersection of the bound and strict DPs are removed. 
</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="redPair"/>
              <xs:element name="strict">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="rules" type="rules"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="bound">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="rules" type="rules"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="condRedPairProof">
                <xs:annotation>
                  <xs:documentation>- symbol is the constant symbol 
- before and after are numbers denoting how many DPs are considered before and after an DP in chain.
- for each sequence of DPs one has to provide the initial constraint and a proof how to derive the final constraints from that.</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                  <xs:sequence>
                    <xs:group ref="symbol"/>
                    <xs:element name="before" type="xs:nonNegativeInteger"/>
                    <xs:element name="after" type="xs:nonNegativeInteger"/>
                    <xs:element name="conditions">
                      <xs:complexType>
                        <xs:sequence maxOccurs="unbounded" minOccurs="0">
                          <xs:element name="condition">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element ref="conditionalConstraint"/>
                                <xs:element name="dpSequence">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:element name="rules" type="rules"/>
                                    </xs:sequence>
                                  </xs:complexType>
                                </xs:element>
                                <xs:element ref="conditionalConstraintProof"/>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element ref="dpProof"/>
              <xs:element ref="dpProof" minOccurs="0"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="complexConstantRemovalProc">
          <xs:annotation>
            <xs:documentation>replace some ground term in rhs of pairs by a fresh variable, which is then added as additional argument to all pairs. Example, replacing 1000 by x may transform

F(a,b,c) -> G(1000,f(1000),1000)

may yield

F'(a,b,c,x) -> G'(1000,f(x),x,x).

In the proof, one has to provide the ground term and a list showing how each old pair is transformed into a new pair.

as new pair. So not every occurrence of the ground term has
to be replaced. For convenient certification, it required, that
the fresh variable is always added as last argument.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="term"/>
              <xs:element name="ruleMap">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="ruleMapEntry">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:group ref="rule"/>
                          <xs:group ref="rule"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element ref="dpProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="switchToTRS">
          <xs:annotation>
            <xs:documentation>just convert DPs into ordinary rewrite rules</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="trsTerminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="subProof">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="input"/>
        <xs:group ref="proof"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="equationalProof">
    <xs:complexType>
      <xs:choice>
        <xs:element ref="completionAndNormalization"/>
        <xs:element name="equationalProofTree">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="equationalProofTree"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="conversion"/>
        <xs:element ref="subsumptionProof"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="equationalDisproof">
    <xs:complexType>
      <xs:choice>
        <xs:element ref="completionAndNormalization"/>
        <xs:element ref="approxAndCompletionAndNormalization"/>
        <xs:element ref="approxAndOrderedCompletionAndNormalization"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="relativeNonterminationProof">
    <xs:complexType>
      <xs:choice>
        <xs:element ref="loop"/>
        <xs:element name="ignoreRelativePart">
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="trsNonterminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="variableConditionViolated">
          <xs:annotation>
            <xs:documentation>there is a rule where the lhs is a variable, or the rhs contains variables not occurring in the lhs.</xs:documentation>
          </xs:annotation>
          <xs:complexType/>
        </xs:element>
        <xs:element name="ruleRemoval">
          <xs:annotation>
            <xs:documentation>Remove some rules to figure out the really nonterminating TRSs. The removed rules of R and of S need to be provided, first for R then for S.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="trs" type="trs"/>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="relativeNonterminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="stringReversal">
          <xs:annotation>
            <xs:documentation>reverse the strings in a TRS, i.e., replace f(g(h(x))) -> f(x) by h(g(f(x))) -> f(x). 
Note that the variable in a reversed rule should be same as the variable in the original rule.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="trs" type="trs"/>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="relativeNonterminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="trsNonterminationProof">
    <xs:complexType>
      <xs:choice>
        <xs:element name="rightGroundNontermination">
          <xs:annotation>
            <xs:documentation>apply the decision procedure for right-ground TRS to detect nontermination.</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="variableConditionViolated">
          <xs:annotation>
            <xs:documentation>there is a rule where the lhs is a variable, or the rhs contains variables not occurring in the lhs.</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="ruleRemoval">
          <xs:annotation>
            <xs:documentation>Remove some rules to figure out the really nonterminating TRS.
The removed rules need to be specified.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="trsNonterminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="stringReversal">
          <xs:annotation>
            <xs:documentation>reverse the strings in a TRS, i.e., replace f(g(h(x))) -> f(x) by h(g(f(x))) -> f(x). 
Note that the variable in a reversed rule should be same as the variable in the original rule.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="trsNonterminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="loop"/>
        <xs:element name="dpTrans">
          <xs:annotation>
            <xs:documentation>switch to DPs as complete termination technique. See dpTrans within dpProof for other details</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="dps" type="trs"/>
              <xs:element ref="dpNonterminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="nonLoop"/>
        <xs:element ref="nonterminatingSRS"/>
        <xs:element name="innermostLhssIncrease">
          <xs:annotation>
            <xs:documentation>Add new lhss to innermost strategy component.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="innermostLhss"/>
              <xs:element ref="trsNonterminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="constantToUnary">
          <xs:annotation>
            <xs:documentation>Transform all constants into unary symbols. A renaming from the constants to the unary symbols has to be provided, in combination with the new TRS. Moreover, one has to provide a unique variable which is used for transforming ground rules.
E.g., for a rule f(a) -> g(b), one needs to know the x in the resulting rule f(a(x)) -> g(b(x)).</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="var"/>
              <xs:element ref="renaming"/>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="trsNonterminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="switchFullStrategy">
          <xs:annotation>
            <xs:documentation>Switch from innermost rewriting to full/unrestricted rewriting for locally confluent overlay TRSs</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="wcrProof"/>
              <xs:element ref="trsNonterminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="uncurry">
          <xs:annotation>
            <xs:documentation>eta-expand the TRS, uncurry it, and add the uncurrying rules
</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="uncurryInformation"/>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="trsNonterminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="notWNTreeAutomaton">
          <xs:annotation>
            <xs:documentation>Show nontermination through a nonempty tree automaton that is closed under rewriting and does not accept normal forms.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="closedTreeAutomata"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="trsTerminationProof">
    <xs:annotation>
      <xs:documentation>An (innermost) (relative) termination proof of R/S.

Some proofs may implicitly turn R/S into R u S, e.g., dependency pairs.

For all elements that require a new TRS, e.g., via transformation T where the natural new problem would be T(R) / T(S), the certificate just lists the new TRS T(R) union T(S), and the certifier will convert this to T(R) / T(S) internally. 
</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:choice>
        <xs:element name="rIsEmpty">
          <xs:annotation>
            <xs:documentation>state that the R/S is relative terminating since R has no rules</xs:documentation>
          </xs:annotation>
          <xs:complexType/>
        </xs:element>
        <xs:element name="ruleRemoval">
          <xs:annotation>
            <xs:documentation>Use a reduction pair where both the weak and the strict ordering are monotone.
Delete all strictly decreasing rules from R and S.
The deleted rules have to be given.
</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="redPair"/>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="trsTerminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="rightGroundTermination">
          <xs:annotation>
            <xs:documentation>termination of the TRS can be proven by the decision procedure for right-ground TRSs</xs:documentation>
          </xs:annotation>
          <xs:complexType/>
        </xs:element>
        <xs:element name="dpTrans">
          <xs:annotation>
            <xs:documentation>Switch to dependency pairs. The dependency pairs have to be given, and one has to use sharped symbols. 

In the relative setting, an implicit step from R/S to R u S is done!</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="dps" type="trs"/>
              <xs:element ref="dpProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="semlab">
          <xs:annotation>
            <xs:documentation>Use semantic labeling. The model element determines the kind (model or quasi-model version, label, root-labeling, etc.). 

The decreasing rules should be of the form f_..(x1,..,xn) -> f_..(x1,..,xn), i.e., the variables should be enumerated from x1 onwards.

The new TRS and if applicable the new innermost strategy in the form of left-hand-sides must be provided.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="model"/>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="innermostLhss" minOccurs="0"/>
              <xs:element ref="trsTerminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="stringReversal">
          <xs:annotation>
            <xs:documentation>reverse the strings in a TRS, i.e., replace f(g(h(x))) -> f(x) by h(g(f(x))) -> f(x). 
Note that the variable in a reversed rule should be same as the variable in the original rule.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="trsTerminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="bounds"/>
        <xs:element name="switchInnermost">
          <xs:annotation>
            <xs:documentation>if R is WCR and overlay, S = {}, then one can switch to innermost</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="wcrProof"/>
              <xs:element ref="trsTerminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="split">
          <xs:annotation>
            <xs:documentation>Proof relative termination of R/S by proving relative termination of D / R u S - D and relative termination of R - D / S - D.
The rules D have to given, then the termination proof of D / R u S - D,
and finally the proof of R - D / S - D.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="trsTerminationProof"/>
              <xs:element ref="trsTerminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="removeNonApplicableRules">
          <xs:annotation>
            <xs:documentation>remove those rules, which are not applicable since their lhs has an argument that is not in normal form (for innermost rewriting). The removed rules have to be provided.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="trsTerminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="uncurry">
          <xs:annotation>
            <xs:documentation>Eta-expand the TRS R, uncurry it, and add the uncurrying rules.
The transformed rules of R have to be provided as TRS, the uncurrying rules are within the uncurryInformation.
</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="uncurryInformation"/>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="trsTerminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="equalityRemoval">
          <xs:annotation>
            <xs:documentation>removes all rules t -> t from S</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="trsTerminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="flatContextClosure">
          <xs:annotation>
            <xs:documentation>the flat context closure as required for the root labeling technique.

one also has to provide the list of flat contexts which
is used to fix the variable names in the resulting TRS.

example: if the flat contexts are 
f(Box,x_1)
f(x_1,Box)
g(Box,u)
g(z,Box)

and the TRS f(x,y) -> g(x,y)

then the resulting TRS is obtained by replacing all boxes
by corresponding left- and right-hand sides of rules:

f(f(x,y),x_1) -> f(g(x,y),x_1)
f(x_1,f(x,y)) -> f(x_1,g(x,y))
g(f(x,y),u) -> g(g(x,y),u)
g(z,f(x,y)) -> g(z,g(x,y))

The reason for this requirement is that 
1) it eases the check whether the given system really consists
   of all rules - where one does not have to bother with 
   variable renamings
2) the flat context closures have to be computed in any way.
3) the overhead in the size is small, since for every 
   flat-context there will be n new rules each being
   larger than the the context.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="flatContexts">
                <xs:complexType>
                  <xs:group maxOccurs="unbounded" ref="context"/>
                </xs:complexType>
              </xs:element>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="trsTerminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="constantToUnary">
          <xs:annotation>
            <xs:documentation>Transform all constants into unary symbols. A renaming from the constants to the unary symbols has to be provided, in combination with the new TRS. Moreover, one has to provide a unique variable which is used for transforming ground rules.
E.g., for a rule f(a) -> g(b), one needs to know the x in the resulting rule f(a(x)) -> g(b(x)).</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="var"/>
              <xs:element ref="renaming"/>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="trsTerminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="wcrProof">
    <xs:complexType>
      <xs:choice>
        <xs:group ref="cpJoinHints"/>
        <xs:element name="joinAutoNF">
          <xs:annotation>
            <xs:documentation>just claim that all critical pairs are joinable, which
can be checked by computing normal forms</xs:documentation>
          </xs:annotation>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="quasiReductiveProof">
    <xs:complexType>
      <xs:choice>
        <xs:element name="unraveling">
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="unravelingInformation"/>
              <xs:element ref="trsTerminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:group name="conditionalRewritingSequence">
    <xs:sequence>
      <xs:element maxOccurs="unbounded" minOccurs="0" name="conditionalRewriteStep">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="rule" type="conditionalRule"/>
            <xs:element ref="positionInTerm"/>
            <xs:element ref="substitution"/>
            <xs:element name="source">
              <xs:complexType>
                <xs:sequence>
                  <xs:group ref="term"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:element name="target">
              <xs:complexType>
                <xs:sequence>
                  <xs:group ref="term"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:element name="conditions">
              <xs:complexType>
                <xs:sequence>
                  <xs:group maxOccurs="unbounded" minOccurs="0" ref="conditionalRewritingSequence"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:element name="constMap">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" minOccurs="0" name="entry">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="symbol">
                <xs:complexType>
                  <xs:sequence>
                    <xs:group ref="symbol"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="const" type="xs:string"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="contextJoinabilityProof">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="term"/>
        <xs:element ref="conditionalRewritingSequence"/>
        <xs:element ref="conditionalRewritingSequence"/>
        <xs:element ref="constMap"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="unfeasibilityProof">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="terms">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="term"/>
              <xs:group ref="term"/>
              <xs:group ref="term"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="conditionalRewritingSequence"/>
        <xs:element ref="conditionalRewritingSequence"/>
        <xs:element name="rules">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="rule" type="conditionalRule"/>
              <xs:element name="rule" type="conditionalRule"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="constMap"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="nonreachabilityProof">
    <xs:annotation>
      <xs:documentation>
        Given '(R, s, t)' where 'R' is a TRS and 's' and 't' are two terms, certifies R-nonreachability of 't' from 's',
       i.e., there is no substitution sigma such that 
       't sigma' rewrites to 's sigma'.
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:choice>
        <xs:element name="nonreachableTcap">
          <xs:annotation>
            <xs:documentation>
              Indicate that 'tcap(s)' does not unify with 't'.
            </xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="nonreachableEtac">
          <xs:annotation>
            <xs:documentation>
              Make sure that 'R' is linear and growing and provide a signature 'F', the names of two
              constants 'a' and 'c' s.t. 'a in F' and 'c not in F', a
              tree automaton 'A' that is an overapproximation of the ancestor automaton
              for the ground-instances automaton of the right-hand side of the reachability
              problem 't', and the language of the intersection of the ground-instances automaton
              of the left-hand side of the reachability problem 's' and 'A' is empty,
              and a 'stateMap' from the states used in 'A' to symbols in 'F'.
            </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="signature"/>
              <xs:element ref="name"/>
              <xs:element ref="name"/>
              <xs:element ref="treeAutomaton"/>
              <xs:element name="stateMap">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="entry">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element ref="state"/>
                          <xs:group ref="term"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="nonreachableSubstApprox">
          <xs:annotation>
            <xs:documentation>
              Has to provide a TRS 'R'' s.t. for each 'l -> r in R' there is 'l' -> r' in R'' and
              a substituion 'sigma' with 'l = l'sigma' and 'r = r'sigma', and a 'nonreachabilityProof' for '(R', s, t)'.
            </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="rules" type="rules"/>
              <xs:element ref="nonreachabilityProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="nonreachableReverse">
          <xs:annotation>
            <xs:documentation>
              Provides a 'nonreachabilityProof' for (R^-1, t, s).
            </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="nonreachabilityProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="nonreachableCorewritePair">
          <xs:annotation>
            <xs:documentation>Such that s sigma does not rewrite to t sigma by providng a cowrite pair such that:
A) R is contained in >= and
B) s &lt; t

Note that the redPair element actually refers to corewrite pairs.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="redPair"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="nonreachableEquationalDisproof">
          <xs:annotation>
            <xs:documentation>
              Provides nonreachability proof by equational disproof. Note that the goal must be ground.
            </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="equationalDisproof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="nonreachableFGCR">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="eqSymbol">
                <xs:complexType>
                  <xs:sequence>
                    <xs:group ref="symbol"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="trueSymbol">
                <xs:complexType>
                  <xs:sequence>
                    <xs:group ref="symbol"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="falseSymbol">
                <xs:complexType>
                  <xs:sequence>
                    <xs:group ref="symbol"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="orderedCompletion">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="orderedCompletionResult">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="trs" type="trs"/>
                          <xs:element name="equations" type="trs"/>
                          <xs:element ref="reductionOrder"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="orderedCompletionProof"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="nonjoinabilityProof">
    <xs:annotation>
      <xs:documentation>
        Given '(R, s, t)' where 'R' is a TRS and 's' and 't' are terms, certifies nonjoinability of 's' and 't' w.r.t. 'R', i.e., 
        there is no substitution sigma such that 's sigma' and 't sigma' are joinable w.r.t. R.
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:choice>
        <xs:element name="nonjoinableTcap">
          <xs:annotation>
            <xs:documentation>
              Indicate that 'tcap(s)' does not unify with 'tcap(t)'.
            </xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="nonjoinableGroundNF">
          <xs:annotation>
            <xs:documentation>
              If at least one of the two terms 's' and 't', say 't', is a ground R-normal form provide a 'nonreachabilityProof'
              for '(R, s, t)'.
            </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="nonreachabilityProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="infeasibilityProof">
    <xs:annotation>
      <xs:documentation>
        Given '(R, c)' where 'R' is a oriented CTRS and 'c' a list of directed pairs '(s_1 ,t_1), ..., (s_k,t_k)' certifies
        infeasibility of 'c' w.r.t. 'R', i.e., there is no substitution sigma such that s_i sigma rewrites to t_i sigma for all i.
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:choice>
        <xs:element name="infeasibleCompoundConditions">
          <xs:annotation>
            <xs:documentation>
              Has to provide a compound symbol 'cs' of arity 'k'  together with a 'nonreachabilityProof' for
              '(R_u, cs(s_1,...,s_k), cs(t_1,...,t_k))'.
            </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="name"/>
              <xs:element ref="nonreachabilityProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="infeasibleEquation">
          <xs:annotation>
            <xs:documentation>
              Has to provide one condition (rule) 's == t in c' and a 'nonreachabilityProof' for '(R_u, s, t)'.
            </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="rule"/>
              <xs:element ref="nonreachabilityProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="infeasibleSubset">
          <xs:annotation>
            <xs:documentation>
              Has to provide a subset of the conditions (rules) ' c' subsetof c ' and an 'infeasibilityProof' for '(R, c')'.
            </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="rules" type="rules"/>
              <xs:element ref="infeasibilityProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="infeasibleRhssEqual">
          <xs:annotation>
            <xs:documentation>
              Has to provide three terms 's', 't', and 'u' s.t. 's = u' and 't = u' are equations in the conditions 'c'
              and a 'nonjoinabilityProof' for '(R_u, s, t)'.
            </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="term"/>
              <xs:group ref="term"/>
              <xs:group ref="term"/>
              <xs:element ref="nonjoinabilityProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="infeasibleTrans">
          <xs:annotation>
            <xs:documentation>
              Has to provide three terms 's', 't', and 't' s.t. 's = t' and 't = u' are equations in the conditions 'c'
              and a 'nonreachabilityProof' for '(R_u, s, u)'.
            </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="term"/>
              <xs:group ref="term"/>
              <xs:group ref="term"/>
              <xs:element ref="nonreachabilityProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="infeasibleSplitIf">
          <xs:annotation>
            <xs:documentation>
              The split-if transformation (Claessen and Smallbone, 2018) for infeasibility of CTRSs via normal unraveling (Marchiori 1996).
            </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="splitIfInformation"/>
              <xs:element ref="nonreachabilityProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="infeasibleGoalLifting">
          <xs:annotation>
            <xs:documentation>
              This transformation lifts infeasibility condtions into a rule. To be precise,
              given two constants T, F
              transforms the infeasibility problem of conditions cs over R
              into the infeasibility problem of the single condition T -> F over R plus the rule T -> F | cs.
            </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="name"/>
              <xs:element ref="name"/>
              <xs:element ref="infeasibilityProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="ifritRules">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="rules" type="conditionalRules"/>
              <xs:element ref="infeasibilityProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="leftInlineConditions">
          <xs:annotation>
            <xs:documentation>
              Corollary 3.32 in Florian Meßner's master thesis
            </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="rules" type="conditionalRules"/>
              <xs:element ref="inlinedRules"/>
              <xs:element ref="infeasibilityProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="rightInlineConditions">
          <xs:annotation>
            <xs:documentation>
              Lemma 3, Sternagel and Sternagel, 2017
            </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="rules" type="conditionalRules">
                <xs:annotation>
                  <xs:documentation>the resulting CTRS after inlining</xs:documentation>
                </xs:annotation>
              </xs:element>
              <xs:element ref="inlinedRules"/>
              <xs:element ref="infeasibilityProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="conditionalCrDisproof">
    <xs:complexType>
      <xs:choice>
        <xs:element name="nonJoinableFork">
          <xs:annotation>
            <xs:documentation>
              The CTRS is not confluent as there are two conditional rewrite sequences starting from the same term which
              cannot be joined. The fourth argument is the reason why a join wrt. the underlying TRS R_u is not possible.
            </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="terms">
                <xs:complexType>
                  <xs:sequence>
                    <xs:group ref="term"/>
                    <xs:group ref="term"/>
                    <xs:group ref="term"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element ref="conditionalRewritingSequence"/>
              <xs:element ref="conditionalRewritingSequence"/>
              <xs:group ref="nonJoinProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="inlineConditions">
          <xs:annotation>
            <xs:documentation>
              Lemma 3, Sternagel and Sternagel, 2017
            </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="rules" type="conditionalRules">
                <xs:annotation>
                  <xs:documentation>
                    the resulting CTRS after inlining
                  </xs:documentation>
                </xs:annotation>
              </xs:element>
              <xs:element ref="inlinedRules"/>
              <xs:element ref="conditionalCrDisproof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="unconditional">
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="crDisproof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="infeasibleRuleRemoval">
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="infeasibleRules"/>
              <xs:element ref="conditionalCrDisproof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="inlinedRules">
    <xs:annotation>
      <xs:documentation>
        information of inlining.
        used by inlineConditions (confluence of CTRSs) and
        right/leftInlineConditions for infeasibility
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" minOccurs="0" name="inlinedRule">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="rule" type="conditionalRule">
                <xs:annotation>
                  <xs:documentation>
                    the original rule before inlining
                  </xs:documentation>
                </xs:annotation>
              </xs:element>
              <xs:element name="inlinedConditions" type="conditions">
                <xs:annotation>
                  <xs:documentation>
                    the conditions to be eliminated (must be a subset of the condtions of the rule above) 
                  </xs:documentation>
                </xs:annotation>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="conditionalCrProof">
    <xs:complexType>
      <xs:choice>
        <xs:element name="inlineConditions">
          <xs:annotation>
            <xs:documentation>
              Lemma 3, Sternagel and Sternagel, 2017
            </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="rules" type="conditionalRules">
                <xs:annotation>
                  <xs:documentation>
                    the resulting CTRS after inlining
                  </xs:documentation>
                </xs:annotation>
              </xs:element>
              <xs:element ref="inlinedRules"/>
              <xs:element ref="conditionalCrProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="al94">
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="quasiReductiveProof"/>
              <xs:element name="contextJoinableCCPs">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="contextJoinableCCP">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:group ref="term"/>
                          <xs:group ref="term"/>
                          <xs:element name="conditions" type="conditions"/>
                          <xs:element ref="contextJoinabilityProof"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="infeasibleConditions">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="infeasibleCondition">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="conditions" type="conditions"/>
                          <xs:element ref="infeasibilityProof"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="unfeasibleCCPs">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="unfeasibleCCP">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element ref="substitution"/>
                          <xs:element ref="unfeasibilityProof"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="unraveling">
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="unravelingInformation"/>
              <xs:element ref="crProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="almostOrthogonal">
          <xs:annotation>
            <xs:documentation>
              Indicates that the CTRS 'R' is almost orthogonal.
            </xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="almostOrthogonalModuloInfeasibility">
          <xs:annotation>
            <xs:documentation>
              Indicates that the CTRS 'R' is almost orthogonal modulo infeasibility.
              So for each CCP coming from an overlap of rules 'l_1 -> r_1 | d_1' and 'l_2 -> r_2 | d_2' with mgu 'sigma'
              we have to certify that its conditions 'c_1, c_2' (where 'c_1 = d_1sigma' and 'c_2 = d_2sigma') are infeasible
              by 'aoInfeasibleConditions'.
            </xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="aoInfeasibleConditions">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="aoInfeasibleCondition">
                      <xs:annotation>
                        <xs:documentation>
                          Has to provide two sequences of conditions 'c_1' and 'c_2' and an 'aoInfeasibilityProof'
                          for '(R, c_1, c_2)'.
                        </xs:documentation>
                      </xs:annotation>
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="conditions" type="conditions"/>
                          <xs:element name="conditions" type="conditions"/>
                          <xs:element name="aoInfeasibilityProof">
                            <xs:annotation>
                              <xs:documentation>
                                Given '(R, c_1, c_2)' where 'R' is a CTRS that is oriented, of type 3, right-stable, extended properly oriented
                                and left-linear and two sequences of conditions 'c_1' and 'c_2' this certifies infeasibility w.r.t. almost orthogonality
                                of 'c_1, c_2' w.r.t. 'R'.
                              </xs:documentation>
                            </xs:annotation>
                            <xs:complexType>
                              <xs:choice>
                                <xs:element ref="infeasibilityProof"/>
                                <xs:element name="aoLhssEqual">
                                  <xs:annotation>
                                    <xs:documentation>
                                      We have to provide three terms 's', 't', 'u' and a 'nonjoinabilityProof' for '(R_u, t, u)'.
                                      's' is the left-hand side of two conditions and 't' and 'u' are two different right-hand sides
                                      s.t. 's == t in c_1' and 's == u in c_2'.
                                    </xs:documentation>
                                  </xs:annotation>
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:group ref="term"/>
                                      <xs:group ref="term"/>
                                      <xs:group ref="term"/>
                                      <xs:element ref="nonjoinabilityProof"/>
                                    </xs:sequence>
                                  </xs:complexType>
                                </xs:element>
                              </xs:choice>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="unconditional">
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="crProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="infeasibleRuleRemoval">
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="infeasibleRules"/>
              <xs:element ref="conditionalCrProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="infeasibleRules">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="infeasibleRule"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="infeasibleRule">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="rule" type="conditionalRule"/>
        <xs:element ref="infeasibilityProof"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="conditionalRewritingSequence">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" minOccurs="0" name="conditionalRewriteStep">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="rule" type="conditionalRule"/>
              <xs:element ref="positionInTerm"/>
              <xs:element ref="substitution"/>
              <xs:element name="source">
                <xs:complexType>
                  <xs:sequence>
                    <xs:group ref="term"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="target">
                <xs:complexType>
                  <xs:sequence>
                    <xs:group ref="term"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="conditions">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0"
                      ref="conditionalRewritingSequence"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="complexityInput">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="trsInput"/>
        <xs:group ref="complexityMeasure"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="unravelingInformation">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" minOccurs="0" name="unravelingEntry">
          <xs:annotation>
            <xs:documentation>For each conditional rule (incl. unconditional rules) one has to provide all unraveled rules. Note that unraveling do not recognize literal similarlity.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="conditionalRule" type="conditionalRule"/>
              <xs:group maxOccurs="unbounded" ref="rule"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="splitIfInformation">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="term"/>
        <xs:group ref="term"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" name="normalUnravelingEntry">
          <xs:annotation>
            <xs:documentation>For each conditional rule (incl. unconditional rules) one can provide all unraveled rules.
            Note that one may omit entries, and unraveling do not recognize literal similarlity.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="rule" type="conditionalRule"/>
              <xs:element ref="name"/>
              <xs:sequence maxOccurs="unbounded" minOccurs="0">
                <xs:group ref="term"/>
              </xs:sequence>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="treeAutomatonClosedProof">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="closedTreeAutomatonProof"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="proof">
    <xs:complexType>
      <xs:group ref="proof"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="ctrs">

    <xs:annotation>
      <xs:documentation>at the moment, CeTA just supports condition-type oriented </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="conditionType">
          <xs:complexType>
            <xs:choice>
              <xs:element name="oriented"/>
            </xs:choice>
          </xs:complexType>
        </xs:element>
        <xs:element name="rules" type="conditionalRules"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:group name="input">
    <xs:choice>
      <xs:element ref="trsInput"/>
      <xs:element name="acRewriteSystem">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="trs" type="trs"/>
            <xs:element name="Asymbols">
              <xs:complexType>
                <xs:sequence>
                  <xs:group ref="symbol" maxOccurs="unbounded" minOccurs="0"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:element name="Csymbols">
              <xs:complexType>
                <xs:sequence>
                  <xs:group ref="symbol" maxOccurs="unbounded" minOccurs="0"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element ref="dpInput"/>
      <xs:element name="trsWithSignature">
        <xs:annotation>
          <xs:documentation>This is the standard problem format for first order TRSs in Cops/ARI/CoCo.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="signature"/>
            <xs:element name="trs" type="trs"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="twoTrsWithSignature">
        <xs:annotation>
          <xs:documentation>This is a commutation problem in Cops/ARI/CoCo.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="signature"/>
            <xs:element name="trs" type="trs"/>
            <xs:element name="trs" type="trs"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="infeasibilityInput">
        <xs:annotation>
          <xs:documentation>This is an infeasibility problem in Cops/ARI/CoCo.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="ctrs"/>
            <xs:element name="infeasibilityQuery" type="rules"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="equations" type="trs"/>
      <xs:element name="equationalReasoningInput">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="equations" type="trs"/>
            <xs:element name="equation">
              <xs:complexType>
                <xs:sequence>
                  <xs:group ref="term"/>
                  <xs:group ref="term"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="equationsAndRedorderInput">
        <xs:annotation>
          <xs:documentation>In principle any reduction order for ordered completion can be used, but currently for ordered completion just KBO is supported by CeTA. This is why not just a link to all possible reduction orders is included.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element name="equations" type="trs"/>
            <xs:choice>
              <xs:element name="knuthBendixOrder">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="w0" type="xs:positiveInteger">
                      <xs:annotation>
                        <xs:documentation/>
                      </xs:annotation>
                    </xs:element>
                    <xs:element name="precedenceWeight">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="precedenceWeightEntry" maxOccurs="unbounded"
                            minOccurs="0">
                            <xs:annotation>
                              <xs:documentation>Note that the arities within the precedence weight entries in combination with argument filters correspond to the unfiltered arities. E.g., if the second argument of f/3 is dropped then the weight precedence entry still has to give arity 3 to f.</xs:documentation>
                            </xs:annotation>
                            <xs:complexType>
                              <xs:sequence>
                                <xs:group ref="symbol"/>
                                <xs:element ref="arity"/>
                                <xs:element name="precedence" type="xs:nonNegativeInteger">
                                  <xs:annotation>
                                    <xs:documentation>higher numbers = higher precedence. Unspecified symbols obtain precedence 0.</xs:documentation>
                                  </xs:annotation>
                                </xs:element>
                                <xs:element name="weight" type="xs:nonNegativeInteger">
                                  <xs:annotation>
                                    <xs:documentation/>
                                  </xs:annotation>
                                </xs:element>
                                <xs:element minOccurs="0" name="subtermCoefficientEntries">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:element maxOccurs="unbounded" minOccurs="0" name="entry"
                                        type="xs:positiveInteger"/>
                                    </xs:sequence>
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:choice>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="ctrsInput">
        <xs:annotation>
          <xs:documentation/>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="ctrs"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="treeAutomatonAndTrs">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="treeAutomaton"/>
            <xs:element name="trs" type="trs"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="lts" type="lts"/>
      <xs:element ref="ltsSafetyInput"/>
    </xs:choice>
  </xs:group>
  <xs:element name="acDPTerminationProof">
    <xs:complexType>
      <xs:choice>
        <xs:element name="acMonoRedPairProc">
          <xs:annotation>
            <xs:documentation>provide dps to delete, rules to delte, and usable rules.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="redPair"/>
              <xs:element name="dps" type="trs"/>
              <xs:element name="trs" type="trs"/>
              <xs:element name="usableRules" type="trs"/>
              <xs:element ref="acDPTerminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="acRedPairProc">
          <xs:annotation>
            <xs:documentation>provide pairs to delete and usable rules</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="redPair"/>
              <xs:element name="dps" type="trs"/>
              <xs:element name="usableRules" type="trs"/>
              <xs:element ref="acDPTerminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="acTrivialProc">
          <xs:annotation>
            <xs:documentation>claim that finiteness is trivial, since no strict pairs and rules are remaining, or no pairs are remaining.</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="acDepGraphProc">
          <xs:annotation>
            <xs:documentation>split the current set of DPs into several smaller subproblems by using some DP-graph estimation.
Note that all components of the graph have to be specified, including singleton nodes which do not form an SCC on their own.
For the latter no sub-proof must be given. The list of components has to be given in topological order, where the components with no incoming edges are listed first.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" minOccurs="0" name="component">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="dps" type="trs"/>
                    <xs:element minOccurs="0" ref="acDPTerminationProof"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="acSubtermProc">
          <xs:annotation>
            <xs:documentation>Use the subterm criterion to delete some DPs.
The removed DPs have to be given.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element ref="multisetArgumentFilter"/>
              <xs:element name="dps" type="trs"/>
              <xs:element ref="acDPTerminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="acTerminationProof">
    <xs:complexType>
      <xs:choice>
        <xs:element name="acDependencyPairs">
          <xs:annotation>
            <xs:documentation>First the equations have to be given,
then the dps for the equations,
then the dps for the TRS,
finally, the extended rules like f(l,x) -> f(r,x)
The two subproofs are first for the DPs of the TRS, and second for the sharped version of the extended rules.
If only one subproof is provided, then the DPs of the TRS and the sharped version of the extended rules are merged.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:element name="equations" type="trs"/>
              <xs:element name="dpEquations" type="trs"/>
              <xs:element name="dps" type="trs"/>
              <xs:element name="extensions" type="trs"/>
              <xs:element ref="acDPTerminationProof"/>
              <xs:element ref="acDPTerminationProof" minOccurs="0"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="acRuleRemoval">
          <xs:annotation>
            <xs:documentation>Use a reduction pair where both the weak and the strict ordering are monotone.
Delete all strictly decreasing rules of the TRS.
The deleted rules have to be provided.</xs:documentation>
          </xs:annotation>
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="redPair"/>
              <xs:element name="trs" type="trs"/>
              <xs:element ref="acTerminationProof"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="acRIsEmpty">
          <xs:annotation>
            <xs:documentation>state that R is AC-terminating since R has no rules.</xs:documentation>
          </xs:annotation>
          <xs:complexType/>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="nfs" type="xs:boolean">
    <xs:annotation>
      <xs:documentation>nfs-flag: does one restrict to normal form substitutions?
important in presence of extra variables in rhss. Default is false.</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element name="orderedCompletionProof">
    <xs:complexType>
      <xs:choice>
        <xs:element name="run">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" minOccurs="0" name="orderedCompletionStep">
                <xs:complexType>
                  <xs:choice>
                    <xs:element name="deduce">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:group ref="term"/>
                          <xs:group ref="term"/>
                          <xs:group ref="term"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="simplifyl">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:group ref="term"/>
                          <xs:group ref="term"/>
                          <xs:group ref="term"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="simplifyr">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:group ref="term"/>
                          <xs:group ref="term"/>
                          <xs:group ref="term"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="compose">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:group ref="term"/>
                          <xs:group ref="term"/>
                          <xs:group ref="term"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="collapse">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:group ref="term"/>
                          <xs:group ref="term"/>
                          <xs:group ref="term"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="orientl">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:group ref="term"/>
                          <xs:group ref="term"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="orientr">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:group ref="term"/>
                          <xs:group ref="term"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="delete">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:group ref="term"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:choice>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:group name="proof">
    <xs:choice>
      <xs:element ref="acTerminationProof"/>
      <xs:element ref="trsTerminationProof"/>
      <xs:element ref="trsNonterminationProof"/>
      <xs:element ref="relativeNonterminationProof"/>
      <xs:element ref="dpProof"/>
      <xs:element ref="dpNonterminationProof"/>
      <xs:element ref="wcrProof"/>
      <xs:element ref="crProof"/>
      <xs:element ref="crDisproof"/>
      <xs:element ref="comDisproof"/>
      <xs:element ref="comProof"/>
      <xs:element ref="completionProof"/>
      <xs:element ref="approxCompletionProof"/>
      <xs:element ref="equationalProof"/>
      <xs:element ref="equationalDisproof"/>
      <xs:element ref="complexityProof"/>
      <xs:element ref="quasiReductiveProof"/>
      <xs:element ref="conditionalCrProof"/>
      <xs:element ref="conditionalCrDisproof"/>
      <xs:element ref="treeAutomatonClosedProof"/>
      <xs:element name="ltsTerminationProof">
        <xs:complexType>
          <xs:group ref="ltsTerminationProof"/>
        </xs:complexType>
      </xs:element>
      <xs:element name="ltsSafetyProof">
        <xs:complexType>
          <xs:group ref="ltsSafetyProof"/>
        </xs:complexType>
      </xs:element>
      <xs:element ref="infeasibilityProof"/>
      <xs:element name="feasibilityProof">
        <xs:complexType>
          <xs:choice>
            <xs:element name="substitutionAndSteps">
              <xs:annotation>
                <xs:documentation>Show feasibility by providing the witness substitution and the steps to satisfy the conditions. The list of steps has to be exactly in the same order as the list of conditions. </xs:documentation>
              </xs:annotation>
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="substitution"/>
                  <xs:element ref="conditionalRewritingSequence" maxOccurs="unbounded" minOccurs="0"
                  />
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:choice>
        </xs:complexType>
      </xs:element>
    </xs:choice>
  </xs:group>
  <xs:element name="input">
    <xs:complexType>
      <xs:group ref="input"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="answer">
    <xs:complexType>
      <xs:choice>
        <xs:element name="yes"/>
        <xs:element name="no"/>
        <xs:element name="upperBound">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="complexityClass"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="completedTrs">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="trs" type="trs"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="orderCompletedSystem">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="equations" type="trs"/>
              <xs:element name="trs" type="trs"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="property">
    <xs:complexType>
      <xs:choice>
        <xs:element name="termination"/>
        <xs:element name="confluence"/>
        <xs:element name="commutation"/>
        <xs:element name="completion"/>
        <xs:element name="safety"/>
        <xs:element name="entailment"/>
        <xs:element name="complexity">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="complexityMeasure"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="infeasibility"/>
        <xs:element name="closedUnderRewriting"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="certificationProblem">
    <xs:annotation>
      <xs:documentation>the root node of the certification problem format.
</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="cpfVersion" type="xs:string">
          <xs:annotation>
            <xs:documentation>current version number: 3.0</xs:documentation>
          </xs:annotation>
        </xs:element>
        <xs:element name="lookupTables">
          <xs:complexType>
            <xs:sequence>
              <xs:element minOccurs="0" name="termIndexTable">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="indexToTerm">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="index" type="xs:string"/>
                          <xs:group ref="term"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element minOccurs="0" name="ruleTable">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0" name="indexToRule">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="index" type="xs:string"/>
                          <xs:element name="rule" type="unindexedRule"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element minOccurs="0" ref="input"/>
        <xs:element minOccurs="0" ref="property"/>
        <xs:element minOccurs="0" ref="answer"/>
        <xs:element ref="proof"/>
        <xs:element minOccurs="0" name="metaInformation">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="inputInfos" minOccurs="0">
                <xs:annotation>
                  <xs:documentation>There might be several infos on the origin of the input, e.g., some COPS/ARI id, some paper reference, some TPDB filename, etc.
It is preferred to list these informations one by one.

The first information should be the major source and is displayed in the HTML-version of CPF.</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="inputInfo" type="xs:string" maxOccurs="unbounded">
                      <xs:annotation>
                        <xs:documentation/>
                      </xs:annotation>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element minOccurs="0" name="toolInfos">
                <xs:annotation>
                  <xs:documentation>There might be several infos on the tool(s) that generated the proof, e.g., the name of major tool, version information, auxiliary tools, etc. 

It is preferred to list these informations one by one.
The first information should be name of the major tool
and this information is displayed in the HTML-version of CPF.</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" name="toolInfo" type="xs:string">
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="competitionInfo" minOccurs="0" type="xs:string">
                <xs:annotation>
                  <xs:documentation>a unique name of a competition, e.g., CoCo 2023, CoCo 2023 full run, termComp 2023, ...</xs:documentation>
                </xs:annotation>
              </xs:element>
              <xs:element minOccurs="0" name="furtherInfos">
                <xs:annotation>
                  <xs:documentation>Further informations of any kind. The first further information is displayed in the HTML-version of CPF.</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="furtherInfo" type="xs:string" maxOccurs="unbounded">
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
