XML Schema Documentation

Schema Document Properties

Target Namespace https://www.atelierb.eu/Formats/bxml
Element and Attribute Namespaces
  • Global element and attribute declarations belong to this schema's target namespace.
  • By default, local element declarations belong to this schema's target namespace.
  • By default, local attribute declarations have no namespace.

The purpose of this document is to describe and illustrate the bxml format: an XML representation of a B or Event-B component.



This documentation corresponds to version 1.0.0 of the format.



Each element corresponding to a node in the abstract syntax tree may have an optional child element "Attr" containing tool-specific information. This element is always the first child element.



For elements corresponding to lists of entities of the same class (identifiers, assertions, etc.), the order of the child elements matches the order in the source file.



Copyright © CLEARSY 2019.

Licensing

© 2019 by CLEARSY Systems Engineering.

Creative Commons License

This work is available under a Creative Commons Attribution-NonCommercial 4.0 International (CC-BY-NC) License.

Prefix Namespace
xml http://www.w3.org/XML/1998/namespace
xs http://www.w3.org/2001/XMLSchema
tns https://www.atelierb.eu/Formats/bxml
<xs:schema targetNamespace="https://www.atelierb.eu/Formats/bxml" elementFormDefault="qualified">
...
</xs:schema>

Global Declarations

Element: ANY_Sub

Name ANY_Sub
Type Locally-defined complex type
Nillable no
Abstract no

Represents an unbounded choice substitution: ANY X WHERE P THEN S END.

<tns:ANY_Sub>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Variables> tns:variables_type </tns:Variables> [1]
   <tns:Pred> tns:predicate_type </tns:Pred> [1]
   <tns:Then> tns:substitution_type </tns:Then> [1]
</tns:ANY_Sub>
<xs:element name="ANY_Sub">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element name="Variables" type="tns:variables_type"/>
         <xs:element name="Pred" type="tns:predicate_type"/>
         <xs:element name="Then" type="tns:substitution_type"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: Abstract_Constants

Name Abstract_Constants
Type tns:identifier_list_type
Nillable no
Abstract no

Represents the ABSTRACT_CONSTANTS clause of a component.

<tns:Abstract_Constants>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Id> ... </tns:Id> [1..*]
</tns:Abstract_Constants>
<xs:element name="Abstract_Constants" type="tns:identifier_list_type"/>

Element: Abstract_Variables

Name Abstract_Variables
Type tns:identifier_list_type
Nillable no
Abstract no

Represents the ABSTRACT_VARIABLES clause of a component.

<tns:Abstract_Variables>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Id> ... </tns:Id> [1..*]
</tns:Abstract_Variables>
<xs:element name="Abstract_Variables" type="tns:identifier_list_type"/>

Element: Abstraction

Name Abstraction
Type xs:string
Nillable no
Abstract no

Element "Abstraction" is a child of a machine element that corresponds to a refinement or an implementation and contains the name of the refined component.

<tns:Abstraction> xs:string </tns:Abstraction>
<xs:element name="Abstraction" type="xs:string"/>

Element: Assert_Sub

Name Assert_Sub
Type Locally-defined complex type
Nillable no
Abstract no

Represents an ASSERTION substitution.

<tns:Assert_Sub>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Guard> tns:predicate_type </tns:Guard> [1]
   <tns:Body> tns:substitution_type </tns:Body> [1]
</tns:Assert_Sub>
<xs:element name="Assert_Sub">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element name="Guard" type="tns:predicate_type"/>
         <xs:element name="Body" type="tns:substitution_type"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: Assertions

Name Assertions
Type Locally-defined complex type
Nillable no
Abstract no

Represents the ASSERTIONS clause of a component.

Each child is an element of type "pred_group" and represents an assertion.

<tns:Assertions>
   <tns:Attr> ... </tns:Attr> [0..1]
   Start Group: tns:pred_group [1..*]
      Start Choice [1]
         <tns:Binary_Pred> ... </tns:Binary_Pred> [1]
         <tns:Exp_Comparison> ... </tns:Exp_Comparison> [1]
         <tns:Quantified_Pred> ... </tns:Quantified_Pred> [1]
         <tns:Unary_Pred> ... </tns:Unary_Pred> [1]
         <tns:Nary_Pred> ... </tns:Nary_Pred> [1]
      End Choice
   End Group: tns:pred_group
</tns:Assertions>
<xs:element name="Assertions">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:group ref="tns:pred_group" minOccurs="1" maxOccurs="unbounded"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: Assignement_Sub

Name Assignement_Sub
Type Locally-defined complex type
Nillable no
Abstract no

Represents a becomes equal substitution: v := E.

<tns:Assignement_Sub>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Variables   > [1] 
      Start Group: tns:Exp [1..*]
         Start Choice [1]
            <tns:Unary_Exp> ... </tns:Unary_Exp> [1]
            <tns:Binary_Exp> ... </tns:Binary_Exp> [1]
            <tns:Ternary_Exp> ... </tns:Ternary_Exp> [1]
            <tns:Nary_Exp> ... </tns:Nary_Exp> [1]
            <tns:Boolean_Literal> ... </tns:Boolean_Literal> [1]
            <tns:Boolean_Exp> ... </tns:Boolean_Exp> [1]
            <tns:EmptySet> ... </tns:EmptySet> [1]
            <tns:EmptySeq> ... </tns:EmptySeq> [1]
            <tns:Id> ... </tns:Id> [1]
            <tns:Integer_Literal> ... </tns:Integer_Literal> [1]
            <tns:Quantified_Exp> ... </tns:Quantified_Exp> [1]
            <tns:Quantified_Set> ... </tns:Quantified_Set> [1]
            <tns:STRING_Literal> ... </tns:STRING_Literal> [1]
            <tns:Struct> ... </tns:Struct> [1]
            <tns:Record> ... </tns:Record> [1]
            <tns:Real_Literal> ... </tns:Real_Literal> [1]
            <tns:Record_Field_Access> ... </tns:Record_Field_Access> [1]
         End Choice
      End Group: tns:Exp
   </tns:Variables>
   <tns:Values   > [1] 
      Start Group: tns:Exp [1..*]
         Start Choice [1]
            <tns:Unary_Exp> ... </tns:Unary_Exp> [1]
            <tns:Binary_Exp> ... </tns:Binary_Exp> [1]
            <tns:Ternary_Exp> ... </tns:Ternary_Exp> [1]
            <tns:Nary_Exp> ... </tns:Nary_Exp> [1]
            <tns:Boolean_Literal> ... </tns:Boolean_Literal> [1]
            <tns:Boolean_Exp> ... </tns:Boolean_Exp> [1]
            <tns:EmptySet> ... </tns:EmptySet> [1]
            <tns:EmptySeq> ... </tns:EmptySeq> [1]
            <tns:Id> ... </tns:Id> [1]
            <tns:Integer_Literal> ... </tns:Integer_Literal> [1]
            <tns:Quantified_Exp> ... </tns:Quantified_Exp> [1]
            <tns:Quantified_Set> ... </tns:Quantified_Set> [1]
            <tns:STRING_Literal> ... </tns:STRING_Literal> [1]
            <tns:Struct> ... </tns:Struct> [1]
            <tns:Record> ... </tns:Record> [1]
            <tns:Real_Literal> ... </tns:Real_Literal> [1]
            <tns:Record_Field_Access> ... </tns:Record_Field_Access> [1]
         End Choice
      End Group: tns:Exp
   </tns:Values>
</tns:Assignement_Sub>
<xs:element name="Assignement_Sub">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element name="Variables">
            <xs:complexType>
               <xs:sequence>
                  <xs:group ref="tns:Exp" minOccurs="1" maxOccurs="unbounded"/>
<-- FIXME on pourrait etre plus précis -->               </xs:sequence>
            </xs:complexType>
         </xs:element>
         <xs:element name="Values">
            <xs:complexType>
               <xs:sequence>
                  <xs:group ref="tns:Exp" minOccurs="1" maxOccurs="unbounded"/>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: Attr

Name Attr
Type Locally-defined complex type
Nillable no
Abstract no

Element to attach optional information to abstract syntax tree nodes for added functionalities.

Two optional informations are available built-in the format:

  1. Child element Pos represents the position of the represented syntactic element in the source file.

  2. Child element B0Type represents the concrete type of the element, if any.

<tns:Attr>
   <tns:Pos> ... </tns:Pos> [1..*]
   <tns:B0Type   > [0..1] 
      Start Choice [1]
         <tns:Id> ... </tns:Id> [1]
         <tns:Integer_Literal> ... </tns:Integer_Literal> [1]
         <tns:Binary_Exp
          op="tns:binary_b0_op" [1]
         > [1] 
            Circular model group reference: tns:B0Type [2..2]
         </tns:Binary_Exp>
         <tns:Struct         > [1] 
            <tns:Record_Item
             label="xs:string" [1]
            > [1..*] 
               Circular model group reference: tns:B0Type [1]
            </tns:Record_Item>
         </tns:Struct>
      End Choice
   </tns:B0Type>
   Allow any elements from any namespace (strict validation). [0..1]
</tns:Attr>
<xs:element name="Attr">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Pos" minOccurs="1" maxOccurs="unbounded"/>
         <xs:element name="B0Type" minOccurs="0">
            <xs:complexType>
               <xs:group ref="tns:B0Type"/>
            </xs:complexType>
         </xs:element>
         <xs:any namespace="##any" minOccurs="0"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: Becomes_In

Name Becomes_In
Type Locally-defined complex type
Nillable no
Abstract no

Represents a becomes element substitution: v :: S.

<tns:Becomes_In>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Variables> tns:variables_type </tns:Variables> [1]
   <tns:Value> tns:expression_type </tns:Value> [1]
</tns:Becomes_In>
<xs:element name="Becomes_In">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element name="Variables" type="tns:variables_type"/>
         <xs:element name="Value" type="tns:expression_type"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: Becomes_Such_That

Name Becomes_Such_That
Type Locally-defined complex type
Nillable no
Abstract no

Represents a becomes such that substitution, i.e. v :( P ).

<tns:Becomes_Such_That>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Variables> tns:variables_type </tns:Variables> [1]
   <tns:Pred> tns:predicate_type </tns:Pred> [1]
</tns:Becomes_Such_That>
<xs:element name="Becomes_Such_That">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element name="Variables" type="tns:variables_type"/>
         <xs:element name="Pred" type="tns:predicate_type"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: Binary_Exp

Name Binary_Exp
Type Locally-defined complex type
Nillable no
Abstract no

Represents a binary expression.

  • Two child elements represent the argument expressions.

  • Attribute op represents the operator.

<tns:Binary_Exp
 op="tns:binary_exp_op" [1]
 typref="xs:integer" [0..1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
   Start Group: tns:Exp [2..2]
      Start Choice [1]
         <tns:Unary_Exp> ... </tns:Unary_Exp> [1]
         <tns:Binary_Exp> ... </tns:Binary_Exp> [1]
         <tns:Ternary_Exp> ... </tns:Ternary_Exp> [1]
         <tns:Nary_Exp> ... </tns:Nary_Exp> [1]
         <tns:Boolean_Literal> ... </tns:Boolean_Literal> [1]
         <tns:Boolean_Exp> ... </tns:Boolean_Exp> [1]
         <tns:EmptySet> ... </tns:EmptySet> [1]
         <tns:EmptySeq> ... </tns:EmptySeq> [1]
         <tns:Id> ... </tns:Id> [1]
         <tns:Integer_Literal> ... </tns:Integer_Literal> [1]
         <tns:Quantified_Exp> ... </tns:Quantified_Exp> [1]
         <tns:Quantified_Set> ... </tns:Quantified_Set> [1]
         <tns:STRING_Literal> ... </tns:STRING_Literal> [1]
         <tns:Struct> ... </tns:Struct> [1]
         <tns:Record> ... </tns:Record> [1]
         <tns:Real_Literal> ... </tns:Real_Literal> [1]
         <tns:Record_Field_Access> ... </tns:Record_Field_Access> [1]
      End Choice
   End Group: tns:Exp
</tns:Binary_Exp>
<xs:element name="Binary_Exp">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:group ref="tns:Exp" minOccurs="2" maxOccurs="2"/>
      </xs:sequence>
      <xs:attribute name="op" type="tns:binary_exp_op" use="required"/>
      <xs:attribute name="typref" type="xs:integer"/>
   </xs:complexType>
</xs:element>

Element: Binary_Pred

Name Binary_Pred
Type Locally-defined complex type
Nillable no
Abstract no

Represent either an implication (attribute op="=>") or an equivalence (op="<=>").

Has two child elements that represent predicate arguments.

<tns:Binary_Pred
 op="tns:binary_pred_op" [1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
   Start Group: tns:pred_group [2..2]
      Start Choice [1]
         <tns:Binary_Pred> ... </tns:Binary_Pred> [1]
         <tns:Exp_Comparison> ... </tns:Exp_Comparison> [1]
         <tns:Quantified_Pred> ... </tns:Quantified_Pred> [1]
         <tns:Unary_Pred> ... </tns:Unary_Pred> [1]
         <tns:Nary_Pred> ... </tns:Nary_Pred> [1]
      End Choice
   End Group: tns:pred_group
</tns:Binary_Pred>
<xs:element name="Binary_Pred">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:group ref="tns:pred_group" minOccurs="2" maxOccurs="2"/>
      </xs:sequence>
      <xs:attribute name="op" type="tns:binary_pred_op" use="required"/>
   </xs:complexType>
</xs:element>

Element: Bloc_Sub

Name Bloc_Sub
Type Locally-defined complex type
Nillable no
Abstract no

Represents a BLOCK substitution.

<tns:Bloc_Sub>
   <tns:Attr> ... </tns:Attr> [0..1]
   Start Choice [1]
      <tns:Bloc_Sub> ... </tns:Bloc_Sub> [1]
      <tns:Skip> ... </tns:Skip> [1]
      <tns:Assert_Sub> ... </tns:Assert_Sub> [1]
      <tns:If_Sub> ... </tns:If_Sub> [1]
      <tns:Becomes_Such_That> ... </tns:Becomes_Such_That> [1]
      <tns:Assignement_Sub> ... </tns:Assignement_Sub> [1]
      <tns:Select> ... </tns:Select> [1]
      <tns:Case_Sub> ... </tns:Case_Sub> [1]
      <tns:ANY_Sub> ... </tns:ANY_Sub> [1]
      <tns:LET_Sub> ... </tns:LET_Sub> [1]
      <tns:VAR_IN> ... </tns:VAR_IN> [1]
      <tns:Nary_Sub> ... </tns:Nary_Sub> [1]
      <tns:Operation_Call> ... </tns:Operation_Call> [1]
      <tns:Becomes_In> ... </tns:Becomes_In> [1]
      <tns:While> ... </tns:While> [1]
      <tns:Witness> ... </tns:Witness> [1]
   End Choice
</tns:Bloc_Sub>
<xs:element name="Bloc_Sub">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:group ref="tns:Sub"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: Boolean_Exp

Name Boolean_Exp
Type Locally-defined complex type
Nillable no
Abstract no

Represents a bool expression, that yields the Boolean value of a predicate.

  • There is a child element that represents the predicate argument.
<tns:Boolean_Exp
 typref="xs:integer" [0..1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
   Start Choice [1]
      <tns:Binary_Pred> ... </tns:Binary_Pred> [1]
      <tns:Exp_Comparison> ... </tns:Exp_Comparison> [1]
      <tns:Quantified_Pred> ... </tns:Quantified_Pred> [1]
      <tns:Unary_Pred> ... </tns:Unary_Pred> [1]
      <tns:Nary_Pred> ... </tns:Nary_Pred> [1]
   End Choice
</tns:Boolean_Exp>
<xs:element name="Boolean_Exp">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:group ref="tns:pred_group"/>
      </xs:sequence>
      <xs:attribute name="typref" type="xs:integer"/>
   </xs:complexType>
</xs:element>

Element: Boolean_Literal

Name Boolean_Literal
Type Locally-defined complex type
Nillable no
Abstract no

Represents a Boolean literal (i.e. TRUE or FALSE).

  • Attribute value represents which of TRUE or FALSE the literal is.
<tns:Boolean_Literal
 value="tns:boolean_literal_type" [1]
 typref="xs:integer" [0..1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
</tns:Boolean_Literal>
<xs:element name="Boolean_Literal">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
      <xs:attribute name="value" type="tns:boolean_literal_type" use="required"/>
      <xs:attribute name="typref" type="xs:integer"/>
   </xs:complexType>
</xs:element>

Element: Case_Sub

Name Case_Sub
Type Locally-defined complex type
Nillable no
Abstract no

Represents a CASE conditional substitution.

<tns:Case_Sub>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Value> tns:expression_type </tns:Value> [1]
   <tns:Choices   > [1] 
      <tns:Choice      > [1..*] 
         <tns:Attr> ... </tns:Attr> [0..1]
         <tns:Value> tns:expression_type </tns:Value> [1..*]
         <tns:Then> tns:substitution_type </tns:Then> [1]
      </tns:Choice>
   </tns:Choices>
   <tns:Else> tns:substitution_type </tns:Else> [0..1]
</tns:Case_Sub>
<xs:element name="Case_Sub">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element name="Value" type="tns:expression_type"/>
         <xs:element name="Choices">
            <xs:complexType>
               <xs:sequence>
                  <xs:element name="Choice" minOccurs="1" maxOccurs="unbounded">
                     <xs:complexType>
                        <xs:sequence>
                           <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
                           <xs:element name="Value" type="tns:expression_type" minOccurs="1" maxOccurs="unbounded"/>
                           <xs:element name="Then" type="tns:substitution_type"/>
                        </xs:sequence>
                     </xs:complexType>
                  </xs:element>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
         <xs:element name="Else" type="tns:substitution_type" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: Concrete_Constants

Name Concrete_Constants
Type tns:identifier_list_type
Nillable no
Abstract no

Represents the CONCRETE_CONSTANTS clause of a component.

<tns:Concrete_Constants>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Id> ... </tns:Id> [1..*]
</tns:Concrete_Constants>
<xs:element name="Concrete_Constants" type="tns:identifier_list_type"/>

Element: Concrete_Variables

Name Concrete_Variables
Type tns:identifier_list_type
Nillable no
Abstract no

Represents the CONCRETE_VARIABLES clause of a component.

<tns:Concrete_Variables>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Id> ... </tns:Id> [1..*]
</tns:Concrete_Variables>
<xs:element name="Concrete_Variables" type="tns:identifier_list_type"/>

Element: Constraints

Name Constraints
Type Locally-defined complex type
Nillable no
Abstract no

Represents the CONSTRAINTS clause of a component.

It has a single child element for the constraint predicate.

<tns:Constraints>
   <tns:Attr> ... </tns:Attr> [0..1]
   Start Choice [1]
      <tns:Binary_Pred> ... </tns:Binary_Pred> [1]
      <tns:Exp_Comparison> ... </tns:Exp_Comparison> [1]
      <tns:Quantified_Pred> ... </tns:Quantified_Pred> [1]
      <tns:Unary_Pred> ... </tns:Unary_Pred> [1]
      <tns:Nary_Pred> ... </tns:Nary_Pred> [1]
   End Choice
</tns:Constraints>
<xs:element name="Constraints">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:group ref="tns:pred_group"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: EmptySeq

Name EmptySeq
Type Locally-defined complex type
Nillable no
Abstract no

Represents an empty sequence expression.

<tns:EmptySeq
 typref="xs:integer" [0..1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
</tns:EmptySeq>
<xs:element name="EmptySeq">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
      <xs:attribute name="typref" type="xs:integer"/>
   </xs:complexType>
</xs:element>

Element: EmptySet

Name EmptySet
Type Locally-defined complex type
Nillable no
Abstract no

Represents an empty set expression.

<tns:EmptySet
 typref="xs:integer" [0..1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
</tns:EmptySet>
<xs:element name="EmptySet">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
      <xs:attribute name="typref" type="xs:integer"/>
   </xs:complexType>
</xs:element>

Element: Enumerated_Values

Name Enumerated_Values
Type Locally-defined complex type
Nillable no
Abstract no
No documentation provided.
<tns:Enumerated_Values>
   <tns:Id> ... </tns:Id> [1..*]
</tns:Enumerated_Values>
<xs:element name="Enumerated_Values">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Id" minOccurs="1" maxOccurs="unbounded"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: Exp_Comparison

Name Exp_Comparison
Type Locally-defined complex type
Nillable no
Abstract no

Represent a comparison, identified by attribute op.

Has two child elements that represent expression arguments.

<tns:Exp_Comparison
 op="tns:comparison_op" [1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
   Start Group: tns:Exp [2..2]
      Start Choice [1]
         <tns:Unary_Exp> ... </tns:Unary_Exp> [1]
         <tns:Binary_Exp> ... </tns:Binary_Exp> [1]
         <tns:Ternary_Exp> ... </tns:Ternary_Exp> [1]
         <tns:Nary_Exp> ... </tns:Nary_Exp> [1]
         <tns:Boolean_Literal> ... </tns:Boolean_Literal> [1]
         <tns:Boolean_Exp> ... </tns:Boolean_Exp> [1]
         <tns:EmptySet> ... </tns:EmptySet> [1]
         <tns:EmptySeq> ... </tns:EmptySeq> [1]
         <tns:Id> ... </tns:Id> [1]
         <tns:Integer_Literal> ... </tns:Integer_Literal> [1]
         <tns:Quantified_Exp> ... </tns:Quantified_Exp> [1]
         <tns:Quantified_Set> ... </tns:Quantified_Set> [1]
         <tns:STRING_Literal> ... </tns:STRING_Literal> [1]
         <tns:Struct> ... </tns:Struct> [1]
         <tns:Record> ... </tns:Record> [1]
         <tns:Real_Literal> ... </tns:Real_Literal> [1]
         <tns:Record_Field_Access> ... </tns:Record_Field_Access> [1]
      End Choice
   End Group: tns:Exp
</tns:Exp_Comparison>
<xs:element name="Exp_Comparison">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:group ref="tns:Exp" minOccurs="2" maxOccurs="2"/>
      </xs:sequence>
      <xs:attribute name="op" type="tns:comparison_op" use="required"/>
   </xs:complexType>
</xs:element>

Element: Extends

Represents the EXTENDS clause of a component.

A non-empty list of elements represent the extended component instances.

<tns:Extends>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Referenced_Machine> ... </tns:Referenced_Machine> [1..*]
</tns:Extends>
<xs:element name="Extends" type="tns:instance_list_type"/>

Element: Id

Name Id
Type Locally-defined complex type
Nillable no
Abstract no

Represents the occurence of an identifier.

  • Attribute "value" is the identifier string.

  • Attribute "typref" is the type of the element identified. If the element is not used (e.g., an unused local variable), then this attribute is omitted.

  • Optional attribute "suffix" applies to identifiers for the previous value of a variable (e.g. "var$0").

<tns:Id
 value="xs:string" [1]
 suffix="xs:nonNegativeInteger" [0..1]
 typref="xs:integer" [0..1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
</tns:Id>
<xs:element name="Id">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
      <xs:attribute name="value" type="xs:string" use="required"/>
      <xs:attribute name="suffix" type="xs:nonNegativeInteger"/>
      <xs:attribute name="typref" type="xs:integer"/>
   </xs:complexType>
</xs:element>

Element: If_Sub

Name If_Sub
Type Locally-defined complex type
Nillable no
Abstract no

Represents an IF conditional substitution.

<tns:If_Sub
 elseif="xs:string" [1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Condition> tns:predicate_type </tns:Condition> [1]
   <tns:Then> tns:substitution_type </tns:Then> [1]
   <tns:Else> tns:substitution_type </tns:Else> [0..1]
</tns:If_Sub>
<xs:element name="If_Sub">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element name="Condition" type="tns:predicate_type"/>
         <xs:element name="Then" type="tns:substitution_type"/>
         <xs:element name="Else" type="tns:substitution_type" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
      <xs:attribute name="elseif" type="xs:string" use="required"/>
   </xs:complexType>
</xs:element>

Element: Imports

Represents the imports clause of a component.

Then, a non-empty list of elements represent the imported component instances.

<tns:Imports>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Referenced_Machine> ... </tns:Referenced_Machine> [1..*]
</tns:Imports>
<xs:element name="Imports" type="tns:instance_list_type"/>

Element: Includes

Represents the INCLUDES clause of a component.

Then, a non-empty list of elements represent the included component instances.

<tns:Includes>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Referenced_Machine> ... </tns:Referenced_Machine> [1..*]
</tns:Includes>
<xs:element name="Includes" type="tns:instance_list_type"/>

Element: Initialisation

Name Initialisation
Type Locally-defined complex type
Nillable no
Abstract no

Represents the INITIALISATION clause of a component.

Then a unique child element of type "Sub" represents the initialisation substitution.

<tns:Initialisation>
   <tns:Attr> ... </tns:Attr> [0..1]
   Start Choice [1]
      <tns:Bloc_Sub> ... </tns:Bloc_Sub> [1]
      <tns:Skip> ... </tns:Skip> [1]
      <tns:Assert_Sub> ... </tns:Assert_Sub> [1]
      <tns:If_Sub> ... </tns:If_Sub> [1]
      <tns:Becomes_Such_That> ... </tns:Becomes_Such_That> [1]
      <tns:Assignement_Sub> ... </tns:Assignement_Sub> [1]
      <tns:Select> ... </tns:Select> [1]
      <tns:Case_Sub> ... </tns:Case_Sub> [1]
      <tns:ANY_Sub> ... </tns:ANY_Sub> [1]
      <tns:LET_Sub> ... </tns:LET_Sub> [1]
      <tns:VAR_IN> ... </tns:VAR_IN> [1]
      <tns:Nary_Sub> ... </tns:Nary_Sub> [1]
      <tns:Operation_Call> ... </tns:Operation_Call> [1]
      <tns:Becomes_In> ... </tns:Becomes_In> [1]
      <tns:While> ... </tns:While> [1]
      <tns:Witness> ... </tns:Witness> [1]
   End Choice
</tns:Initialisation>
<xs:element name="Initialisation">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:group ref="tns:Sub"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: Integer_Literal

Name Integer_Literal
Type Locally-defined complex type
Nillable no
Abstract no

Represents an integer literal.

  • Attribute value represents which number the literal is.
<tns:Integer_Literal
 value="xs:integer" [1]
 typref="xs:integer" [0..1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
</tns:Integer_Literal>
<xs:element name="Integer_Literal">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
      <xs:attribute name="value" type="xs:integer" use="required"/>
      <xs:attribute name="typref" type="xs:integer"/>
   </xs:complexType>
</xs:element>

Element: Invariant

Name Invariant
Type Locally-defined complex type
Nillable no
Abstract no

Represents the INVARIANT clause of a component.

A child element of type Pred represents the invariant predicate.

<tns:Invariant>
   <tns:Attr> ... </tns:Attr> [0..1]
   Start Choice [1]
      <tns:Binary_Pred> ... </tns:Binary_Pred> [1]
      <tns:Exp_Comparison> ... </tns:Exp_Comparison> [1]
      <tns:Quantified_Pred> ... </tns:Quantified_Pred> [1]
      <tns:Unary_Pred> ... </tns:Unary_Pred> [1]
      <tns:Nary_Pred> ... </tns:Nary_Pred> [1]
   End Choice
</tns:Invariant>
<xs:element name="Invariant">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:group ref="tns:pred_group"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: LET_Sub

Name LET_Sub
Type Locally-defined complex type
Nillable no
Abstract no

Represents a local definition substitution: LET id BE id = E IN S END.

<tns:LET_Sub>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Variables> tns:variables_type </tns:Variables> [1]
   <tns:Values   > [1] 
      <tns:Attr> ... </tns:Attr> [0..1]
      <tns:Valuation> ... </tns:Valuation> [1..*]
   </tns:Values>
   <tns:Then> tns:substitution_type </tns:Then> [1]
</tns:LET_Sub>
<xs:element name="LET_Sub">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element name="Variables" type="tns:variables_type"/>
         <xs:element name="Values">
            <xs:complexType>
               <xs:sequence>
                  <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
                  <xs:element ref="tns:Valuation" minOccurs="1" maxOccurs="unbounded"/>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
         <xs:element name="Then" type="tns:substitution_type"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: Local_Operations

Name Local_Operations
Type Locally-defined complex type
Nillable no
Abstract no

Represents the LOCAL_OPERATIONS clause of a component.

Each child element is named "Operation" and represent the local operations of the component.

<tns:Local_Operations>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Operation> ... </tns:Operation> [1..*]
</tns:Local_Operations>
<xs:element name="Local_Operations">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="tns:Operation" minOccurs="1" maxOccurs="unbounded"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: Machine

Name Machine
Type Locally-defined complex type
Nillable no
Abstract no

This is the main element of a BXml document. It represents a unique B component.

      The attribute `version` represents the version of the format
      used. 
<tns:Machine
 version="tns:version_type" [1]
 name="xs:string" [1]
 type="tns:machine_type" [1]
 semantic="xs:boolean" [1]
 b0check="xs:boolean" [1]
 position="xs:boolean" [1]
>
   <tns:Abstraction> ... </tns:Abstraction> [0..1]
   <tns:Parameters> ... </tns:Parameters> [0..1]
   <tns:Constraints> ... </tns:Constraints> [0..1]
   <tns:Includes> ... </tns:Includes> [0..1]
   <tns:Imports> ... </tns:Imports> [0..1]
   <tns:Uses> ... </tns:Uses> [0..1]
   <tns:Sees> ... </tns:Sees> [0..1]
   <tns:Extends> ... </tns:Extends> [0..1]
   <tns:Promotes> ... </tns:Promotes> [0..1]
   <tns:Values   > [0..1]  
      <tns:Attr> ... </tns:Attr> [0..1]
      <tns:Valuation> ... </tns:Valuation> [1..*]
   </tns:Values>
   <tns:Sets> ... </tns:Sets> [0..1]
   <tns:Abstract_Constants> ... </tns:Abstract_Constants> [0..1]
   <tns:Concrete_Constants> ... </tns:Concrete_Constants> [0..1]
   <tns:Abstract_Variables> ... </tns:Abstract_Variables> [0..1]
   <tns:Concrete_Variables> ... </tns:Concrete_Variables> [0..1]
   <tns:Properties> ... </tns:Properties> [0..1]
   <tns:Invariant> ... </tns:Invariant> [0..1]
   <tns:Variant> ... </tns:Variant> [0..1]
   <tns:Initialisation> ... </tns:Initialisation> [0..1]
   <tns:Assertions> ... </tns:Assertions> [0..1]
   <tns:Local_Operations> ... </tns:Local_Operations> [0..1]
   <tns:Operations> ... </tns:Operations> [0..1]
   <tns:TypeInfos> ... </tns:TypeInfos> [0..1]
</tns:Machine>
<xs:element name="Machine">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Abstraction" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="tns:Parameters" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="tns:Constraints" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="tns:Includes" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="tns:Imports" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="tns:Uses" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="tns:Sees" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="tns:Extends" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="tns:Promotes" minOccurs="0" maxOccurs="1"/>
         <xs:element name="Values" minOccurs="0" maxOccurs="1">
            <xs:complexType>
               <xs:sequence>
                  <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
                  <xs:element ref="tns:Valuation" minOccurs="1" maxOccurs="unbounded"/>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
         <xs:element ref="tns:Sets" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="tns:Abstract_Constants" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="tns:Concrete_Constants" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="tns:Abstract_Variables" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="tns:Concrete_Variables" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="tns:Properties" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="tns:Invariant" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="tns:Variant" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="tns:Initialisation" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="tns:Assertions" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="tns:Local_Operations" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="tns:Operations" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="tns:TypeInfos" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
      <xs:attribute name="version" type="tns:version_type" use="required"/>
      <xs:attribute name="name" type="xs:string" use="required"/>
      <xs:attribute name="type" type="tns:machine_type" use="required"/>
      <xs:attribute name="semantic" type="xs:boolean" use="required"/>
      <xs:attribute name="b0check" type="xs:boolean" use="required"/>
      <xs:attribute name="position" type="xs:boolean" use="required"/>
   </xs:complexType>
</xs:element>

Element: Nary_Exp

Name Nary_Exp
Type Locally-defined complex type
Nillable no
Abstract no

Represents a nary expression (essentially, either a set enumeration or a sequence).

  • Child elements represent the argument expressions.

  • Attribute op represents the operator.

<tns:Nary_Exp
 op="tns:nary_exp_op" [1]
 typref="xs:integer" [0..1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
   Start Group: tns:Exp [1..*]
      Start Choice [1]
         <tns:Unary_Exp> ... </tns:Unary_Exp> [1]
         <tns:Binary_Exp> ... </tns:Binary_Exp> [1]
         <tns:Ternary_Exp> ... </tns:Ternary_Exp> [1]
         <tns:Nary_Exp> ... </tns:Nary_Exp> [1]
         <tns:Boolean_Literal> ... </tns:Boolean_Literal> [1]
         <tns:Boolean_Exp> ... </tns:Boolean_Exp> [1]
         <tns:EmptySet> ... </tns:EmptySet> [1]
         <tns:EmptySeq> ... </tns:EmptySeq> [1]
         <tns:Id> ... </tns:Id> [1]
         <tns:Integer_Literal> ... </tns:Integer_Literal> [1]
         <tns:Quantified_Exp> ... </tns:Quantified_Exp> [1]
         <tns:Quantified_Set> ... </tns:Quantified_Set> [1]
         <tns:STRING_Literal> ... </tns:STRING_Literal> [1]
         <tns:Struct> ... </tns:Struct> [1]
         <tns:Record> ... </tns:Record> [1]
         <tns:Real_Literal> ... </tns:Real_Literal> [1]
         <tns:Record_Field_Access> ... </tns:Record_Field_Access> [1]
      End Choice
   End Group: tns:Exp
</tns:Nary_Exp>
<xs:element name="Nary_Exp">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:group ref="tns:Exp" minOccurs="1" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="op" type="tns:nary_exp_op" use="required"/>
      <xs:attribute name="typref" type="xs:integer"/>
   </xs:complexType>
</xs:element>

Element: Nary_Pred

Name Nary_Pred
Type Locally-defined complex type
Nillable no
Abstract no

Represent either a conjunction (attribute op="&") or a disjunction (op="or").

Has child elements that represent argument predicates.

<tns:Nary_Pred
 op="tns:nary_pred_op" [0..1]
>
   Start Group: tns:pred_group [0..*]
      Start Choice [1]
         <tns:Binary_Pred> ... </tns:Binary_Pred> [1]
         <tns:Exp_Comparison> ... </tns:Exp_Comparison> [1]
         <tns:Quantified_Pred> ... </tns:Quantified_Pred> [1]
         <tns:Unary_Pred> ... </tns:Unary_Pred> [1]
         <tns:Nary_Pred> ... </tns:Nary_Pred> [1]
      End Choice
   End Group: tns:pred_group
</tns:Nary_Pred>
<xs:element name="Nary_Pred">
   <xs:complexType>
      <xs:group ref="tns:pred_group" minOccurs="0" maxOccurs="unbounded"/>
      <xs:attribute name="op" type="tns:nary_pred_op"/>
   </xs:complexType>
</xs:element>

Element: Nary_Sub

Name Nary_Sub
Type Locally-defined complex type
Nillable no
Abstract no
  • If attribute op is ";", then represents a sequencing substitution.
  • If attribute op is "||", then represents a simultaneous substitution.
  • If attribute op is "CHOICE", then represents a bounded CHOICE substitution.

All child elements other than optional Attr are substitutions.

<tns:Nary_Sub
 op="tns:nary_sub_op" [1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
   Start Group: tns:Sub [0..*]
      Start Choice [1]
         <tns:Bloc_Sub> ... </tns:Bloc_Sub> [1]
         <tns:Skip> ... </tns:Skip> [1]
         <tns:Assert_Sub> ... </tns:Assert_Sub> [1]
         <tns:If_Sub> ... </tns:If_Sub> [1]
         <tns:Becomes_Such_That> ... </tns:Becomes_Such_That> [1]
         <tns:Assignement_Sub> ... </tns:Assignement_Sub> [1]
         <tns:Select> ... </tns:Select> [1]
         <tns:Case_Sub> ... </tns:Case_Sub> [1]
         <tns:ANY_Sub> ... </tns:ANY_Sub> [1]
         <tns:LET_Sub> ... </tns:LET_Sub> [1]
         <tns:VAR_IN> ... </tns:VAR_IN> [1]
         <tns:Nary_Sub> ... </tns:Nary_Sub> [1]
         <tns:Operation_Call> ... </tns:Operation_Call> [1]
         <tns:Becomes_In> ... </tns:Becomes_In> [1]
         <tns:While> ... </tns:While> [1]
         <tns:Witness> ... </tns:Witness> [1]
      End Choice
   End Group: tns:Sub
</tns:Nary_Sub>
<xs:element name="Nary_Sub">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:group ref="tns:Sub" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="op" type="tns:nary_sub_op" use="required"/>
   </xs:complexType>
</xs:element>

Element: Operation

Name Operation
Type Locally-defined complex type
Nillable no
Abstract no

Represent an operation or an event.

  • Optional element Refines is optional and is a list. The list has a single element in case of an operation in a software component. It may have multiple elements in case of an event in a system component.

  • Optional element Output_Parameters represents the list of output parameters of the operation.

  • Optional element Input_Parameters represents the list of input parameters of the operation.

  • Optional element Precondition represents the precondition of the operation and is a predicate.

  • Mandatory element Body represents the body of the operation and is a substitution.

  • Attribute name is the name of the operation.

<tns:Operation
 name="xs:string" [1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Refines   > [0..1] 
      <tns:Attr> ... </tns:Attr> [0..1]
      <tns:Id> ... </tns:Id> [1..*]
   </tns:Refines>
   <tns:Output_Parameters   > [0..1] 
      <tns:Id> ... </tns:Id> [1..*]
   </tns:Output_Parameters>
   <tns:Input_Parameters   > [0..1] 
      <tns:Id> ... </tns:Id> [1..*]
   </tns:Input_Parameters>
   <tns:Precondition   > [0..1] 
      <tns:Attr> ... </tns:Attr> [0..1]
      Start Choice [1]
         <tns:Binary_Pred> ... </tns:Binary_Pred> [1]
         <tns:Exp_Comparison> ... </tns:Exp_Comparison> [1]
         <tns:Quantified_Pred> ... </tns:Quantified_Pred> [1]
         <tns:Unary_Pred> ... </tns:Unary_Pred> [1]
         <tns:Nary_Pred> ... </tns:Nary_Pred> [1]
      End Choice
   </tns:Precondition>
   <tns:Body   > [1] 
      <tns:Attr> ... </tns:Attr> [0..1]
      Start Choice [1]
         <tns:Bloc_Sub> ... </tns:Bloc_Sub> [1]
         <tns:Skip> ... </tns:Skip> [1]
         <tns:Assert_Sub> ... </tns:Assert_Sub> [1]
         <tns:If_Sub> ... </tns:If_Sub> [1]
         <tns:Becomes_Such_That> ... </tns:Becomes_Such_That> [1]
         <tns:Assignement_Sub> ... </tns:Assignement_Sub> [1]
         <tns:Select> ... </tns:Select> [1]
         <tns:Case_Sub> ... </tns:Case_Sub> [1]
         <tns:ANY_Sub> ... </tns:ANY_Sub> [1]
         <tns:LET_Sub> ... </tns:LET_Sub> [1]
         <tns:VAR_IN> ... </tns:VAR_IN> [1]
         <tns:Nary_Sub> ... </tns:Nary_Sub> [1]
         <tns:Operation_Call> ... </tns:Operation_Call> [1]
         <tns:Becomes_In> ... </tns:Becomes_In> [1]
         <tns:While> ... </tns:While> [1]
         <tns:Witness> ... </tns:Witness> [1]
      End Choice
   </tns:Body>
</tns:Operation>
<xs:element name="Operation">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element name="Refines" minOccurs="0" maxOccurs="1">
            <xs:complexType>
               <xs:sequence>
                  <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
                  <xs:element ref="tns:Id" minOccurs="1" maxOccurs="unbounded"/>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
         <xs:element name="Output_Parameters" minOccurs="0" maxOccurs="1">
            <xs:complexType>
               <xs:sequence>
                  <xs:element ref="tns:Id" minOccurs="1" maxOccurs="unbounded"/>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
         <xs:element name="Input_Parameters" minOccurs="0" maxOccurs="1">
            <xs:complexType>
               <xs:sequence>
                  <xs:element ref="tns:Id" minOccurs="1" maxOccurs="unbounded"/>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
         <xs:element name="Precondition" minOccurs="0" maxOccurs="1">
            <xs:complexType>
               <xs:sequence>
                  <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
                  <xs:group ref="tns:pred_group"/>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
         <xs:element name="Body">
            <xs:complexType>
               <xs:sequence>
                  <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
                  <xs:group ref="tns:Sub"/>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
      </xs:sequence>
      <xs:attribute name="name" type="xs:string" use="required"/>
   </xs:complexType>
</xs:element>

Element: Operation_Call

Name Operation_Call
Type Locally-defined complex type
Nillable no
Abstract no

Represents an operation call substitution.

If the called operation is named op, the attributes are as follows

  • if op is prefixed by an instance name inst, then value="inst.op", instance="inst" and `componente="op";

  • otherwise, value="op" and the remaining attributes are not present.

<tns:Operation_Call>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Name   > [1] 
      <tns:Id
       value="xs:string" [1]
       instance="xs:string" [0..1]
       component="xs:string" [0..1]
      > [1] 
         <tns:Attr> ... </tns:Attr> [0..1]
      </tns:Id>
   </tns:Name>
   <tns:Input_Parameters   > [0..1] 
      Start Group: tns:Exp [1..*]
         Start Choice [1]
            <tns:Unary_Exp> ... </tns:Unary_Exp> [1]
            <tns:Binary_Exp> ... </tns:Binary_Exp> [1]
            <tns:Ternary_Exp> ... </tns:Ternary_Exp> [1]
            <tns:Nary_Exp> ... </tns:Nary_Exp> [1]
            <tns:Boolean_Literal> ... </tns:Boolean_Literal> [1]
            <tns:Boolean_Exp> ... </tns:Boolean_Exp> [1]
            <tns:EmptySet> ... </tns:EmptySet> [1]
            <tns:EmptySeq> ... </tns:EmptySeq> [1]
            <tns:Id> ... </tns:Id> [1]
            <tns:Integer_Literal> ... </tns:Integer_Literal> [1]
            <tns:Quantified_Exp> ... </tns:Quantified_Exp> [1]
            <tns:Quantified_Set> ... </tns:Quantified_Set> [1]
            <tns:STRING_Literal> ... </tns:STRING_Literal> [1]
            <tns:Struct> ... </tns:Struct> [1]
            <tns:Record> ... </tns:Record> [1]
            <tns:Real_Literal> ... </tns:Real_Literal> [1]
            <tns:Record_Field_Access> ... </tns:Record_Field_Access> [1]
         End Choice
      End Group: tns:Exp
   </tns:Input_Parameters>
   <tns:Output_Parameters   > [0..1] 
      Start Group: tns:Exp [1..*]
         Start Choice [1]
            <tns:Unary_Exp> ... </tns:Unary_Exp> [1]
            <tns:Binary_Exp> ... </tns:Binary_Exp> [1]
            <tns:Ternary_Exp> ... </tns:Ternary_Exp> [1]
            <tns:Nary_Exp> ... </tns:Nary_Exp> [1]
            <tns:Boolean_Literal> ... </tns:Boolean_Literal> [1]
            <tns:Boolean_Exp> ... </tns:Boolean_Exp> [1]
            <tns:EmptySet> ... </tns:EmptySet> [1]
            <tns:EmptySeq> ... </tns:EmptySeq> [1]
            <tns:Id> ... </tns:Id> [1]
            <tns:Integer_Literal> ... </tns:Integer_Literal> [1]
            <tns:Quantified_Exp> ... </tns:Quantified_Exp> [1]
            <tns:Quantified_Set> ... </tns:Quantified_Set> [1]
            <tns:STRING_Literal> ... </tns:STRING_Literal> [1]
            <tns:Struct> ... </tns:Struct> [1]
            <tns:Record> ... </tns:Record> [1]
            <tns:Real_Literal> ... </tns:Real_Literal> [1]
            <tns:Record_Field_Access> ... </tns:Record_Field_Access> [1]
         End Choice
      End Group: tns:Exp
   </tns:Output_Parameters>
</tns:Operation_Call>
<xs:element name="Operation_Call">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element name="Name">
            <xs:complexType>
               <xs:sequence>
                  <xs:element name="Id" minOccurs="1" maxOccurs="1">
                     <xs:complexType>
                        <xs:sequence>
                           <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
                        </xs:sequence>
                        <xs:attribute name="value" type="xs:string" use="required"/>
                        <xs:attribute name="instance" type="xs:string" use="optional"/>
                        <xs:attribute name="component" type="xs:string" use="optional"/>
                     </xs:complexType>
                  </xs:element>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
         <xs:element name="Input_Parameters" minOccurs="0">
            <xs:complexType>
               <xs:sequence>
                  <xs:group ref="tns:Exp" minOccurs="1" maxOccurs="unbounded"/>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
         <xs:element name="Output_Parameters" minOccurs="0">
            <xs:complexType>
               <xs:sequence>
                  <xs:group ref="tns:Exp" minOccurs="1" maxOccurs="unbounded"/>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: Operations

Name Operations
Type Locally-defined complex type
Nillable no
Abstract no

Represents the OPERATIONS clause of a component.

Each child element is named "Operation" and represent the local operations of the component.

<tns:Operations>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Operation> ... </tns:Operation> [1..*]
</tns:Operations>
<xs:element name="Operations">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="tns:Operation" minOccurs="1" maxOccurs="unbounded"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: Parameters

Name Parameters
Type Locally-defined complex type
Nillable no
Abstract no

Represents the parameters of a component.

Child elements "Id" represent the name of the parameters.

<tns:Parameters>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Id> ... </tns:Id> [1..*]
</tns:Parameters>
<xs:element name="Parameters">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="tns:Id" minOccurs="1" maxOccurs="unbounded"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: Pos

Name Pos
Type Locally-defined complex type
Nillable no
Abstract no

Represents the position of a syntactic element in a source file. Attributes "c", "l", "s" represent respectively the column, line and span.

<tns:Pos
 c="xs:integer" [1]
 l="xs:integer" [1]
 s="xs:integer" [1]
 endLine="xs:integer" [0..1]
 expanded="xs:string" [0..1]
 f="xs:string" [0..1]
/> 

<xs:element name="Pos">
   <xs:complexType>
      <xs:attribute name="c" type="xs:integer" use="required"/>
      <xs:attribute name="l" type="xs:integer" use="required"/>
      <xs:attribute name="s" type="xs:integer" use="required"/>
      <xs:attribute name="endLine" type="xs:integer" use="optional"/>
      <xs:attribute name="expanded" type="xs:string" use="optional"/>
      <xs:attribute name="f" type="xs:string" use="optional"/>
   </xs:complexType>
</xs:element>

Element: Promotes

Name Promotes
Type Locally-defined complex type
Nillable no
Abstract no

Represents the PROMOTES clause of a component.

  • Non-empty list of "Promoted_Operation" child elements represents the promoted operations.
<tns:Promotes>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Promoted_Operation> tns:promoted_operation_type </tns:Promoted_Operation> [1..*]
</tns:Promotes>
<xs:element name="Promotes">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element name="Promoted_Operation" type="tns:promoted_operation_type" minOccurs="1" maxOccurs="unbounded"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: Properties

Name Properties
Type Locally-defined complex type
Nillable no
Abstract no

Represents the PROPERTIES clause of a component.

<tns:Properties>
   <tns:Attr> ... </tns:Attr> [0..1]
   Start Choice [1]
      <tns:Binary_Pred> ... </tns:Binary_Pred> [1]
      <tns:Exp_Comparison> ... </tns:Exp_Comparison> [1]
      <tns:Quantified_Pred> ... </tns:Quantified_Pred> [1]
      <tns:Unary_Pred> ... </tns:Unary_Pred> [1]
      <tns:Nary_Pred> ... </tns:Nary_Pred> [1]
   End Choice
</tns:Properties>
<xs:element name="Properties">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:group ref="tns:pred_group"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: Quantified_Exp

Name Quantified_Exp
Type Locally-defined complex type
Nillable no
Abstract no

Represents a quantified expression (essentially, a lambda expression or a generalizes sum, product, intersection or union).

  • Child element Variables represents the list of quantified variables.

  • Child element Pred represents the characterizing predicate.

  • Child element Body represent the list of quantified variables.

  • Attribute type represents the operator.

<tns:Quantified_Exp
 type="tns:quantified_exp_op" [1]
 typref="xs:integer" [0..1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Variables> tns:variables_type </tns:Variables> [1]
   <tns:Pred> tns:predicate_type </tns:Pred> [1]
   <tns:Body> tns:expression_type </tns:Body> [1]
</tns:Quantified_Exp>
<xs:element name="Quantified_Exp">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element name="Variables" type="tns:variables_type"/>
         <xs:element name="Pred" type="tns:predicate_type"/>
         <xs:element name="Body" type="tns:expression_type"/>
      </xs:sequence>
      <xs:attribute name="type" type="tns:quantified_exp_op" use="required"/>
      <xs:attribute name="typref" type="xs:integer"/>
   </xs:complexType>
</xs:element>

Element: Quantified_Pred

Name Quantified_Pred
Type Locally-defined complex type
Nillable no
Abstract no

Represent either an existential quantification (attribute type="#") or a universal quantification (attribute type="!").

  • Child element Variables represents the list of quantified variables;

  • Child element Body represents the quantified predcate.

<tns:Quantified_Pred
 type="tns:quantified_pred_op" [1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Variables> tns:variables_type </tns:Variables> [1]
   <tns:Body> tns:predicate_type </tns:Body> [1]
</tns:Quantified_Pred>
<xs:element name="Quantified_Pred">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element name="Variables" type="tns:variables_type"/>
         <xs:element name="Body" type="tns:predicate_type"/>
      </xs:sequence>
      <xs:attribute name="type" type="tns:quantified_pred_op" use="required"/>
   </xs:complexType>
</xs:element>

Element: Quantified_Set

Name Quantified_Set
Type Locally-defined complex type
Nillable no
Abstract no

Represents a set defined in comprehension.

  • Child element Variables represents the list of quantified variables.

  • Child element Body represents the characterizing predicate.

<tns:Quantified_Set
 typref="xs:integer" [0..1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Variables> tns:variables_type </tns:Variables> [1]
   <tns:Body> tns:predicate_type </tns:Body> [1]
</tns:Quantified_Set>
<xs:element name="Quantified_Set">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element name="Variables" type="tns:variables_type"/>
         <xs:element name="Body" type="tns:predicate_type"/>
      </xs:sequence>
      <xs:attribute name="typref" type="xs:integer"/>
   </xs:complexType>
</xs:element>

Element: Real_Literal

Name Real_Literal
Type Locally-defined complex type
Nillable no
Abstract no

Represents a real literal (i.e. a decimal number).

  • Attribute value represents which number the literal is.
<tns:Real_Literal
 value="xs:decimal" [1]
 typref="xs:integer" [0..1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
</tns:Real_Literal>
<xs:element name="Real_Literal">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
      <xs:attribute name="value" type="xs:decimal" use="required"/>
      <xs:attribute name="typref" type="xs:integer"/>
   </xs:complexType>
</xs:element>

Element: Record

Name Record
Type Locally-defined complex type
Nillable no
Abstract no

Represents a record.

  • Child elements represent the record fields.
<tns:Record
 typref="xs:integer" [0..1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Record_Item> tns:record_item_type </tns:Record_Item> [1..*]
</tns:Record>
<xs:element name="Record">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element name="Record_Item" type="tns:record_item_type" minOccurs="1" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="typref" type="xs:integer"/>
   </xs:complexType>
</xs:element>

Element: Record_Field_Access

Name Record_Field_Access
Type Locally-defined complex type
Nillable no
Abstract no

Represents the value of a field in a record.

  • Child element represents the record.
<tns:Record_Field_Access
 typref="xs:integer" [0..1]
 label="xs:string" [1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
   Start Choice [1]
      <tns:Unary_Exp> ... </tns:Unary_Exp> [1]
      <tns:Binary_Exp> ... </tns:Binary_Exp> [1]
      <tns:Ternary_Exp> ... </tns:Ternary_Exp> [1]
      <tns:Nary_Exp> ... </tns:Nary_Exp> [1]
      <tns:Boolean_Literal> ... </tns:Boolean_Literal> [1]
      <tns:Boolean_Exp> ... </tns:Boolean_Exp> [1]
      <tns:EmptySet> ... </tns:EmptySet> [1]
      <tns:EmptySeq> ... </tns:EmptySeq> [1]
      <tns:Id> ... </tns:Id> [1]
      <tns:Integer_Literal> ... </tns:Integer_Literal> [1]
      <tns:Quantified_Exp> ... </tns:Quantified_Exp> [1]
      <tns:Quantified_Set> ... </tns:Quantified_Set> [1]
      <tns:STRING_Literal> ... </tns:STRING_Literal> [1]
      <tns:Struct> ... </tns:Struct> [1]
      <tns:Record> ... </tns:Record> [1]
      <tns:Real_Literal> ... </tns:Real_Literal> [1]
      <tns:Record_Field_Access> ... </tns:Record_Field_Access> [1]
   End Choice
</tns:Record_Field_Access>
<xs:element name="Record_Field_Access">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:group ref="tns:Exp" minOccurs="1" maxOccurs="1"/>
      </xs:sequence>
      <xs:attribute name="typref" type="xs:integer"/>
      <xs:attribute name="label" type="xs:string" use="required"/>
   </xs:complexType>
</xs:element>

Element: Referenced_Machine

Name Referenced_Machine
Type Locally-defined complex type
Nillable no
Abstract no

Represents an instance of (or reference to) a component. Optional child element "Attr" contains tool-specific information. Child element "Name" represents the name of the component. Optional child element "Instance" is for the renaming prefix. Optional element "Parameters" is the list of actual parameters.

<tns:Referenced_Machine>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Name> xs:string </tns:Name> [1]
   <tns:Instance> xs:string </tns:Instance> [0..1]
   <tns:Parameters   > [0..1] 
      Start Group: tns:Exp [1..*]
         Start Choice [1]
            <tns:Unary_Exp> ... </tns:Unary_Exp> [1]
            <tns:Binary_Exp> ... </tns:Binary_Exp> [1]
            <tns:Ternary_Exp> ... </tns:Ternary_Exp> [1]
            <tns:Nary_Exp> ... </tns:Nary_Exp> [1]
            <tns:Boolean_Literal> ... </tns:Boolean_Literal> [1]
            <tns:Boolean_Exp> ... </tns:Boolean_Exp> [1]
            <tns:EmptySet> ... </tns:EmptySet> [1]
            <tns:EmptySeq> ... </tns:EmptySeq> [1]
            <tns:Id> ... </tns:Id> [1]
            <tns:Integer_Literal> ... </tns:Integer_Literal> [1]
            <tns:Quantified_Exp> ... </tns:Quantified_Exp> [1]
            <tns:Quantified_Set> ... </tns:Quantified_Set> [1]
            <tns:STRING_Literal> ... </tns:STRING_Literal> [1]
            <tns:Struct> ... </tns:Struct> [1]
            <tns:Record> ... </tns:Record> [1]
            <tns:Real_Literal> ... </tns:Real_Literal> [1]
            <tns:Record_Field_Access> ... </tns:Record_Field_Access> [1]
         End Choice
      End Group: tns:Exp
   </tns:Parameters>
</tns:Referenced_Machine>
<xs:element name="Referenced_Machine">
   <xs:complexType>
      <xs:sequence>
<--	  <xs:element name="Path" minOccurs="1" maxOccurs="1" type="xs:string"/> -->         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element name="Name" type="xs:string" minOccurs="1" maxOccurs="1"/>
         <xs:element name="Instance" type="xs:string" minOccurs="0" maxOccurs="1"/>
         <xs:element name="Parameters" minOccurs="0" maxOccurs="1">
            <xs:complexType>
               <xs:sequence>
                  <xs:group ref="tns:Exp" minOccurs="1" maxOccurs="unbounded"/>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: STRING_Literal

Name STRING_Literal
Type Locally-defined complex type
Nillable no
Abstract no

Represents a character string literal.

  • Attribute value represents the string itself.
<tns:STRING_Literal
 value="xs:string" [1]
 typref="xs:integer" [0..1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
</tns:STRING_Literal>
<xs:element name="STRING_Literal">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
      <xs:attribute name="value" type="xs:string" use="required"/>
      <xs:attribute name="typref" type="xs:integer"/>
   </xs:complexType>
</xs:element>

Element: Sees

Name Sees
Type Locally-defined complex type
Nillable no
Abstract no

Represents the SEES clause of a component.

  • Has a non-empty list of child elements Referenced_Machine to represent the seen components.
<tns:Sees>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Referenced_Machine> tns:seen_machine_type </tns:Referenced_Machine> [1..*]
</tns:Sees>
<xs:element name="Sees">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element name="Referenced_Machine" type="tns:seen_machine_type" minOccurs="1" maxOccurs="unbounded"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: Select

Name Select
Type Locally-defined complex type
Nillable no
Abstract no

Represents a conditional bounded substitution, i.e. SELECT P THEN S ... END.

<tns:Select>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:When_Clauses   > [1] 
      <tns:When      > [1..*] 
         <tns:Condition> tns:predicate_type </tns:Condition> [1]
         <tns:Then> tns:substitution_type </tns:Then> [1]
      </tns:When>
   </tns:When_Clauses>
   <tns:Else> tns:substitution_type </tns:Else> [0..1]
</tns:Select>
<xs:element name="Select">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element name="When_Clauses">
            <xs:complexType>
               <xs:sequence>
                  <xs:element name="When" minOccurs="1" maxOccurs="unbounded">
                     <xs:complexType>
                        <xs:sequence>
                           <xs:element name="Condition" type="tns:predicate_type"/>
                           <xs:element name="Then" type="tns:substitution_type"/>
                        </xs:sequence>
                     </xs:complexType>
                  </xs:element>
               </xs:sequence>
            </xs:complexType>
         </xs:element>
         <xs:element name="Else" type="tns:substitution_type" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: Set

Name Set
Type Locally-defined complex type
Nillable no
Abstract no

Represents a set introduced in the SET clause of a B component. Child element "Id" corresponds to the name of the set. Optional element "Enumerated_Values" is present for enumerations and represents the list of enumerated values.

<tns:Set>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Id> ... </tns:Id> [1]
   <tns:Enumerated_Values> ... </tns:Enumerated_Values> [0..1]
</tns:Set>
<xs:element name="Set">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="tns:Id" minOccurs="1" maxOccurs="1"/>
         <xs:element ref="tns:Enumerated_Values" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: Sets

Name Sets
Type Locally-defined complex type
Nillable no
Abstract no

Represents the SETS clause of a component.

Each child element "Set" represents the declaration of a set (enumerated or deferred).

<tns:Sets>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Set> ... </tns:Set> [1..*]
</tns:Sets>
<xs:element name="Sets">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element ref="tns:Set" minOccurs="1" maxOccurs="unbounded"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: Skip

Name Skip
Type Locally-defined complex type
Nillable no
Abstract no

Represents an identical (skip) substitution.

<tns:Skip>
   <tns:Attr> ... </tns:Attr> [0..1]
</tns:Skip>
<xs:element name="Skip">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: Struct

Name Struct
Type Locally-defined complex type
Nillable no
Abstract no

Represents a set of records.

  • Child elements represent the record fields.
<tns:Struct
 typref="xs:integer" [0..1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Record_Item> tns:record_item_type </tns:Record_Item> [1..*]
</tns:Struct>
<xs:element name="Struct">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element name="Record_Item" type="tns:record_item_type" minOccurs="1" maxOccurs="unbounded"/>
      </xs:sequence>
      <xs:attribute name="typref" type="xs:integer"/>
   </xs:complexType>
</xs:element>

Element: Ternary_Exp

Name Ternary_Exp
Type Locally-defined complex type
Nillable no
Abstract no

Represents a ternary expression (essentially, a tree expression).

  • Three children elements represent the argument expressions.

  • Attribute op represents the operator.

<tns:Ternary_Exp
 op="tns:ternary_exp_op" [1]
 typref="xs:integer" [0..1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
   Start Group: tns:Exp [3..3]
      Start Choice [1]
         <tns:Unary_Exp> ... </tns:Unary_Exp> [1]
         <tns:Binary_Exp> ... </tns:Binary_Exp> [1]
         <tns:Ternary_Exp> ... </tns:Ternary_Exp> [1]
         <tns:Nary_Exp> ... </tns:Nary_Exp> [1]
         <tns:Boolean_Literal> ... </tns:Boolean_Literal> [1]
         <tns:Boolean_Exp> ... </tns:Boolean_Exp> [1]
         <tns:EmptySet> ... </tns:EmptySet> [1]
         <tns:EmptySeq> ... </tns:EmptySeq> [1]
         <tns:Id> ... </tns:Id> [1]
         <tns:Integer_Literal> ... </tns:Integer_Literal> [1]
         <tns:Quantified_Exp> ... </tns:Quantified_Exp> [1]
         <tns:Quantified_Set> ... </tns:Quantified_Set> [1]
         <tns:STRING_Literal> ... </tns:STRING_Literal> [1]
         <tns:Struct> ... </tns:Struct> [1]
         <tns:Record> ... </tns:Record> [1]
         <tns:Real_Literal> ... </tns:Real_Literal> [1]
         <tns:Record_Field_Access> ... </tns:Record_Field_Access> [1]
      End Choice
   End Group: tns:Exp
</tns:Ternary_Exp>
<xs:element name="Ternary_Exp">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:group ref="tns:Exp" minOccurs="3" maxOccurs="3"/>
      </xs:sequence>
      <xs:attribute name="op" type="tns:ternary_exp_op" use="required"/>
      <xs:attribute name="typref" type="xs:integer"/>
   </xs:complexType>
</xs:element>

Element: TypeInfos

Name TypeInfos
Type Locally-defined complex type
Nillable no
Abstract no

Represents the types of the expressions found in the component. Each child element is named Type and represents a different type.

<tns:TypeInfos>
   <tns:Type> tns:typeinfos_type </tns:Type> [0..*]
</tns:TypeInfos>
<xs:element name="TypeInfos">
   <xs:complexType>
      <xs:sequence>
         <xs:element name="Type" type="tns:typeinfos_type" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: Unary_Exp

Name Unary_Exp
Type Locally-defined complex type
Nillable no
Abstract no

Represents a unary expression.

  • A child element represents the argument expression.

  • Attribute op represents the operator.

<tns:Unary_Exp
 op="tns:unary_exp_op" [1]
 typref="xs:integer" [0..1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
   Start Choice [1]
      <tns:Unary_Exp> ... </tns:Unary_Exp> [1]
      <tns:Binary_Exp> ... </tns:Binary_Exp> [1]
      <tns:Ternary_Exp> ... </tns:Ternary_Exp> [1]
      <tns:Nary_Exp> ... </tns:Nary_Exp> [1]
      <tns:Boolean_Literal> ... </tns:Boolean_Literal> [1]
      <tns:Boolean_Exp> ... </tns:Boolean_Exp> [1]
      <tns:EmptySet> ... </tns:EmptySet> [1]
      <tns:EmptySeq> ... </tns:EmptySeq> [1]
      <tns:Id> ... </tns:Id> [1]
      <tns:Integer_Literal> ... </tns:Integer_Literal> [1]
      <tns:Quantified_Exp> ... </tns:Quantified_Exp> [1]
      <tns:Quantified_Set> ... </tns:Quantified_Set> [1]
      <tns:STRING_Literal> ... </tns:STRING_Literal> [1]
      <tns:Struct> ... </tns:Struct> [1]
      <tns:Record> ... </tns:Record> [1]
      <tns:Real_Literal> ... </tns:Real_Literal> [1]
      <tns:Record_Field_Access> ... </tns:Record_Field_Access> [1]
   End Choice
</tns:Unary_Exp>
<xs:element name="Unary_Exp">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:group ref="tns:Exp"/>
      </xs:sequence>
      <xs:attribute name="op" type="tns:unary_exp_op" use="required"/>
      <xs:attribute name="typref" type="xs:integer"/>
   </xs:complexType>
</xs:element>

Element: Unary_Pred

Name Unary_Pred
Type Locally-defined complex type
Nillable no
Abstract no

Represent a negation.

A child element represents the argument predicate.

<tns:Unary_Pred
 op="tns:unary_pred_op" [1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
   Start Choice [1]
      <tns:Binary_Pred> ... </tns:Binary_Pred> [1]
      <tns:Exp_Comparison> ... </tns:Exp_Comparison> [1]
      <tns:Quantified_Pred> ... </tns:Quantified_Pred> [1]
      <tns:Unary_Pred> ... </tns:Unary_Pred> [1]
      <tns:Nary_Pred> ... </tns:Nary_Pred> [1]
   End Choice
</tns:Unary_Pred>
<xs:element name="Unary_Pred">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:group ref="tns:pred_group"/>
      </xs:sequence>
      <xs:attribute name="op" type="tns:unary_pred_op" use="required"/>
   </xs:complexType>
</xs:element>

Element: Uses

Represents the USES clause of a component.

Then, a non-empty list of elements represent the used component instances.


Element: VAR_IN

Name VAR_IN
Type Locally-defined complex type
Nillable no
Abstract no

Represents a local variable substitution: VAR v IN S END.

<tns:VAR_IN>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Variables> tns:variables_type </tns:Variables> [1]
   <tns:Body> tns:substitution_type </tns:Body> [1]
</tns:VAR_IN>
<xs:element name="VAR_IN">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element name="Variables" type="tns:variables_type"/>
         <xs:element name="Body" type="tns:substitution_type"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: Valuation

Name Valuation
Type Locally-defined complex type
Nillable no
Abstract no
No documentation provided.
<tns:Valuation
 ident="xs:string" [1]
 typref="xs:integer" [0..1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
   Start Choice [1]
      <tns:Unary_Exp> ... </tns:Unary_Exp> [1]
      <tns:Binary_Exp> ... </tns:Binary_Exp> [1]
      <tns:Ternary_Exp> ... </tns:Ternary_Exp> [1]
      <tns:Nary_Exp> ... </tns:Nary_Exp> [1]
      <tns:Boolean_Literal> ... </tns:Boolean_Literal> [1]
      <tns:Boolean_Exp> ... </tns:Boolean_Exp> [1]
      <tns:EmptySet> ... </tns:EmptySet> [1]
      <tns:EmptySeq> ... </tns:EmptySeq> [1]
      <tns:Id> ... </tns:Id> [1]
      <tns:Integer_Literal> ... </tns:Integer_Literal> [1]
      <tns:Quantified_Exp> ... </tns:Quantified_Exp> [1]
      <tns:Quantified_Set> ... </tns:Quantified_Set> [1]
      <tns:STRING_Literal> ... </tns:STRING_Literal> [1]
      <tns:Struct> ... </tns:Struct> [1]
      <tns:Record> ... </tns:Record> [1]
      <tns:Real_Literal> ... </tns:Real_Literal> [1]
      <tns:Record_Field_Access> ... </tns:Record_Field_Access> [1]
   End Choice
</tns:Valuation>
<xs:element name="Valuation">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:group ref="tns:Exp"/>
      </xs:sequence>
      <xs:attribute name="ident" type="xs:string" use="required"/>
      <xs:attribute name="typref" type="xs:integer"/>
   </xs:complexType>
</xs:element>

Element: Variant

Name Variant
Type Locally-defined complex type
Nillable no
Abstract no

Represents the VARIANT clause of a component.

Then a unique child element of type "Exp" represents the variant expression.

<tns:Variant>
   <tns:Attr> ... </tns:Attr> [0..1]
   Start Choice [1]
      <tns:Unary_Exp> ... </tns:Unary_Exp> [1]
      <tns:Binary_Exp> ... </tns:Binary_Exp> [1]
      <tns:Ternary_Exp> ... </tns:Ternary_Exp> [1]
      <tns:Nary_Exp> ... </tns:Nary_Exp> [1]
      <tns:Boolean_Literal> ... </tns:Boolean_Literal> [1]
      <tns:Boolean_Exp> ... </tns:Boolean_Exp> [1]
      <tns:EmptySet> ... </tns:EmptySet> [1]
      <tns:EmptySeq> ... </tns:EmptySeq> [1]
      <tns:Id> ... </tns:Id> [1]
      <tns:Integer_Literal> ... </tns:Integer_Literal> [1]
      <tns:Quantified_Exp> ... </tns:Quantified_Exp> [1]
      <tns:Quantified_Set> ... </tns:Quantified_Set> [1]
      <tns:STRING_Literal> ... </tns:STRING_Literal> [1]
      <tns:Struct> ... </tns:Struct> [1]
      <tns:Record> ... </tns:Record> [1]
      <tns:Real_Literal> ... </tns:Real_Literal> [1]
      <tns:Record_Field_Access> ... </tns:Record_Field_Access> [1]
   End Choice
</tns:Variant>
<xs:element name="Variant">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:group ref="tns:Exp"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: While

Name While
Type Locally-defined complex type
Nillable no
Abstract no

Represents a WHILE loop substitution.

<tns:While>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Condition> tns:predicate_type </tns:Condition> [1]
   <tns:Body> tns:substitution_type </tns:Body> [1]
   <tns:Invariant> tns:predicate_type </tns:Invariant> [1]
   <tns:Variant> tns:expression_type </tns:Variant> [1]
</tns:While>
<xs:element name="While">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element name="Condition" type="tns:predicate_type"/>
         <xs:element name="Body" type="tns:substitution_type"/>
         <xs:element name="Invariant" type="tns:predicate_type"/>
         <xs:element name="Variant" type="tns:expression_type"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Element: Witness

Name Witness
Type Locally-defined complex type
Nillable no
Abstract no

Represents a WITNESS clause in an operation.

<tns:Witness>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Witnesses> tns:witnesses_type </tns:Witnesses> [1]
   <tns:Body> tns:substitution_type </tns:Body> [1]
</tns:Witness>
<xs:element name="Witness">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
         <xs:element name="Witnesses" type="tns:witnesses_type"/>
         <xs:element name="Body" type="tns:substitution_type"/>
      </xs:sequence>
   </xs:complexType>
</xs:element>

Global Definitions

Complex Type: expression_type

Super-types: None
Sub-types: None
Name expression_type
Abstract no
No documentation provided.
<xs:complexType name="expression_type">
   <xs:group ref="tns:Exp"/>
</xs:complexType>

Complex Type: identifier_list_type

Super-types: None
Sub-types: None
Name identifier_list_type
Abstract no

Optional child element "Attr" contains tool-specific information. Then, a non-empty list of elements represent the listed identifiers.

<...>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Id> ... </tns:Id> [1..*]
</...>
<xs:complexType name="identifier_list_type">
   <xs:sequence>
      <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
      <xs:element ref="tns:Id" minOccurs="1" maxOccurs="unbounded"/>
   </xs:sequence>
</xs:complexType>

Complex Type: instance_list_type

Super-types: None
Sub-types: None
Name instance_list_type
Abstract no

A non-empty list of elements representing component instances.

<xs:complexType name="instance_list_type">
   <xs:sequence>
      <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
      <xs:element ref="tns:Referenced_Machine" minOccurs="1" maxOccurs="unbounded"/>
   </xs:sequence>
</xs:complexType>

Complex Type: predicate_type

Super-types: None
Sub-types: None
Name predicate_type
Abstract no
No documentation provided.
<...>
   Start Choice [1]
      <tns:Binary_Pred> ... </tns:Binary_Pred> [1]
      <tns:Exp_Comparison> ... </tns:Exp_Comparison> [1]
      <tns:Quantified_Pred> ... </tns:Quantified_Pred> [1]
      <tns:Unary_Pred> ... </tns:Unary_Pred> [1]
      <tns:Nary_Pred> ... </tns:Nary_Pred> [1]
   End Choice
</...>
<xs:complexType name="predicate_type">
   <xs:group ref="tns:pred_group"/>
</xs:complexType>

Complex Type: promoted_operation_type

Super-types: None
Sub-types: None
Name promoted_operation_type
Abstract no
No documentation provided.
<...>
   <!-- Mixed content -->
   <tns:Attr> ... </tns:Attr> [0..1]
</...>
<xs:complexType name="promoted_operation_type" mixed="true">
   <xs:sequence>
      <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
   </xs:sequence>
</xs:complexType>

Complex Type: record_item_type

Super-types: None
Sub-types: None
Name record_item_type
Abstract no
No documentation provided.
<...
 label="xs:string" [1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
   Start Choice [1]
      <tns:Unary_Exp> ... </tns:Unary_Exp> [1]
      <tns:Binary_Exp> ... </tns:Binary_Exp> [1]
      <tns:Ternary_Exp> ... </tns:Ternary_Exp> [1]
      <tns:Nary_Exp> ... </tns:Nary_Exp> [1]
      <tns:Boolean_Literal> ... </tns:Boolean_Literal> [1]
      <tns:Boolean_Exp> ... </tns:Boolean_Exp> [1]
      <tns:EmptySet> ... </tns:EmptySet> [1]
      <tns:EmptySeq> ... </tns:EmptySeq> [1]
      <tns:Id> ... </tns:Id> [1]
      <tns:Integer_Literal> ... </tns:Integer_Literal> [1]
      <tns:Quantified_Exp> ... </tns:Quantified_Exp> [1]
      <tns:Quantified_Set> ... </tns:Quantified_Set> [1]
      <tns:STRING_Literal> ... </tns:STRING_Literal> [1]
      <tns:Struct> ... </tns:Struct> [1]
      <tns:Record> ... </tns:Record> [1]
      <tns:Real_Literal> ... </tns:Real_Literal> [1]
      <tns:Record_Field_Access> ... </tns:Record_Field_Access> [1]
   End Choice
</...>
<xs:complexType name="record_item_type">
   <xs:sequence>
      <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
      <xs:group ref="tns:Exp"/>
   </xs:sequence>
   <xs:attribute name="label" type="xs:string" use="required"/>
</xs:complexType>

Complex Type: seen_machine_type

Super-types: None
Sub-types: None
Name seen_machine_type
Abstract no

A non-empty list of elements representing seen component instances.

<...>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Name> xs:string </tns:Name> [1]
   <tns:Rename> xs:string </tns:Rename> [0..1]
</...>
<xs:complexType name="seen_machine_type">
   <xs:sequence>
      <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
      <xs:element name="Name" type="xs:string" minOccurs="1" maxOccurs="1"/>
      <xs:element name="Rename" type="xs:string" minOccurs="0" maxOccurs="1"/>
<--
                TODO La valeur de rename peut être r1.r2.r3, cela devrait être une liste
                cf. MRLB:7.8
            -->   </xs:sequence>
</xs:complexType>

Complex Type: substitution_type

Super-types: None
Sub-types: None
Name substitution_type
Abstract no
No documentation provided.
<...>
   Start Choice [1]
      <tns:Bloc_Sub> ... </tns:Bloc_Sub> [1]
      <tns:Skip> ... </tns:Skip> [1]
      <tns:Assert_Sub> ... </tns:Assert_Sub> [1]
      <tns:If_Sub> ... </tns:If_Sub> [1]
      <tns:Becomes_Such_That> ... </tns:Becomes_Such_That> [1]
      <tns:Assignement_Sub> ... </tns:Assignement_Sub> [1]
      <tns:Select> ... </tns:Select> [1]
      <tns:Case_Sub> ... </tns:Case_Sub> [1]
      <tns:ANY_Sub> ... </tns:ANY_Sub> [1]
      <tns:LET_Sub> ... </tns:LET_Sub> [1]
      <tns:VAR_IN> ... </tns:VAR_IN> [1]
      <tns:Nary_Sub> ... </tns:Nary_Sub> [1]
      <tns:Operation_Call> ... </tns:Operation_Call> [1]
      <tns:Becomes_In> ... </tns:Becomes_In> [1]
      <tns:While> ... </tns:While> [1]
      <tns:Witness> ... </tns:Witness> [1]
   End Choice
</...>
<xs:complexType name="substitution_type">
   <xs:group ref="tns:Sub"/>
</xs:complexType>

Complex Type: typeinfos_type

Super-types: None
Sub-types: None
Name typeinfos_type
Abstract no
No documentation provided.
<...
 id="xs:integer" [1]
>
   Start Choice [1]
      <tns:Binary_Exp
       op="*" [1]
      > [1] 
         Circular model group reference: tns:Type [2..2]
      </tns:Binary_Exp>
      <tns:Id
       value="xs:string" [1]
/>  [1]

      <tns:Unary_Exp
       op="POW" [1]
      > [1] 
         Circular model group reference: tns:Type [1]
      </tns:Unary_Exp>
      <tns:Struct      > [1] 
         <tns:Record_Item
          label="xs:string" [1]
         > [1..*] 
            Circular model group reference: tns:Type [1]
         </tns:Record_Item>
      </tns:Struct>
      <tns:Generic_Type/>  [1]

   End Choice
</...>
<xs:complexType name="typeinfos_type">
   <xs:sequence>
      <xs:group ref="tns:Type"/>
   </xs:sequence>
   <xs:attribute name="id" type="xs:integer" use="required"/>
</xs:complexType>

Complex Type: variables_type

Super-types: None
Sub-types: None
Name variables_type
Abstract no
No documentation provided.
<...>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Id> ... </tns:Id> [1..*]
</...>
<xs:complexType name="variables_type">
   <xs:sequence>
      <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
      <xs:element ref="tns:Id" minOccurs="1" maxOccurs="unbounded"/>
   </xs:sequence>
</xs:complexType>

Complex Type: witness_type

Super-types: None
Sub-types: None
Name witness_type
Abstract no

Represents a WITNESS clause in an operation.

<...
 op="=" [1]
>
   <tns:Attr> ... </tns:Attr> [0..1]
   <tns:Id> ... </tns:Id> [1]
   Start Choice [1]
      <tns:Unary_Exp> ... </tns:Unary_Exp> [1]
      <tns:Binary_Exp> ... </tns:Binary_Exp> [1]
      <tns:Ternary_Exp> ... </tns:Ternary_Exp> [1]
      <tns:Nary_Exp> ... </tns:Nary_Exp> [1]
      <tns:Boolean_Literal> ... </tns:Boolean_Literal> [1]
      <tns:Boolean_Exp> ... </tns:Boolean_Exp> [1]
      <tns:EmptySet> ... </tns:EmptySet> [1]
      <tns:EmptySeq> ... </tns:EmptySeq> [1]
      <tns:Id> ... </tns:Id> [1]
      <tns:Integer_Literal> ... </tns:Integer_Literal> [1]
      <tns:Quantified_Exp> ... </tns:Quantified_Exp> [1]
      <tns:Quantified_Set> ... </tns:Quantified_Set> [1]
      <tns:STRING_Literal> ... </tns:STRING_Literal> [1]
      <tns:Struct> ... </tns:Struct> [1]
      <tns:Record> ... </tns:Record> [1]
      <tns:Real_Literal> ... </tns:Real_Literal> [1]
      <tns:Record_Field_Access> ... </tns:Record_Field_Access> [1]
   End Choice
</...>
<xs:complexType name="witness_type">
   <xs:sequence>
      <xs:element ref="tns:Attr" minOccurs="0" maxOccurs="1"/>
      <xs:element ref="tns:Id"/>
      <xs:group ref="tns:Exp"/>
   </xs:sequence>
   <xs:attribute name="op" type="xs:string" use="required" fixed="="/>
</xs:complexType>

Complex Type: witnesses_type

Super-types: None
Sub-types: None
Name witnesses_type
Abstract no
No documentation provided.
<...>
   Start Choice [1]
      <tns:Exp_Comparison> tns:witness_type </tns:Exp_Comparison> [1]
      <tns:Nary_Pred
       op="&" [1]
      > [1] 
         <tns:Exp_Comparison> tns:witness_type </tns:Exp_Comparison> [0..*]
      </tns:Nary_Pred>
   End Choice
</...>
<xs:complexType name="witnesses_type">
   <xs:choice>
      <xs:element name="Exp_Comparison" type="tns:witness_type"/>
      <xs:element name="Nary_Pred">
         <xs:complexType>
            <xs:sequence>
               <xs:element name="Exp_Comparison" type="tns:witness_type" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:attribute name="op" type="xs:string" use="required" fixed="&"/>
         </xs:complexType>
      </xs:element>
   </xs:choice>
</xs:complexType>

Model Group: B0Type

Name B0Type

Elements that represent types for B0 expressions.

These are expression types and are built recursively using selected B expression elements, restricted so that their arguments are B0 type representations.

Start Choice [1]
   <tns:Id> ... </tns:Id> [1]
   <tns:Integer_Literal> ... </tns:Integer_Literal> [1]
   <tns:Binary_Exp
    op="tns:binary_b0_op" [1]
   > [1] 
      Circular model group reference: tns:B0Type [2..2]
   </tns:Binary_Exp>
   <tns:Struct   > [1] 
      <tns:Record_Item
       label="xs:string" [1]
      > [1..*] 
         Circular model group reference: tns:B0Type [1]
      </tns:Record_Item>
   </tns:Struct>
End Choice
<xs:group name="B0Type">
   <xs:choice>
      <xs:element ref="tns:Id"/>
      <xs:element ref="tns:Integer_Literal"/>
<-- FIXME as interval bounds only -->      <xs:element name="Binary_Exp">
         <xs:complexType>
            <xs:sequence>
               <xs:group ref="tns:B0Type" minOccurs="2" maxOccurs="2"/>
            </xs:sequence>
            <xs:attribute name="op" type="tns:binary_b0_op" use="required"/>
         </xs:complexType>
      </xs:element>
      <xs:element name="Struct">
         <xs:complexType>
            <xs:sequence>
               <xs:element name="Record_Item" minOccurs="1" maxOccurs="unbounded">
                  <xs:complexType>
                     <xs:group ref="tns:B0Type"/>
                     <xs:attribute name="label" type="xs:string" use="required"/>
                  </xs:complexType>
               </xs:element>
            </xs:sequence>
         </xs:complexType>
      </xs:element>
   </xs:choice>
</xs:group>

Model Group: Exp

Name Exp

The elements of this group represent expressions.

  • Elements of this group have an attribute typref; its value is an integer that represents the index of the Type element for the type of this expression.

  • All such Type elements are gathered under a TypeInfos element, which is a child of the document root element.

<xs:group name="Exp">
   <xs:choice>
      <xs:element ref="tns:Unary_Exp"/>
      <xs:element ref="tns:Binary_Exp"/>
      <xs:element ref="tns:Ternary_Exp"/>
      <xs:element ref="tns:Nary_Exp"/>
      <xs:element ref="tns:Boolean_Literal"/>
      <xs:element ref="tns:Boolean_Exp"/>
      <xs:element ref="tns:EmptySet"/>
      <xs:element ref="tns:EmptySeq"/>
      <xs:element ref="tns:Id"/>
      <xs:element ref="tns:Integer_Literal"/>
      <xs:element ref="tns:Quantified_Exp"/>
      <xs:element ref="tns:Quantified_Set"/>
      <xs:element ref="tns:STRING_Literal"/>
      <xs:element ref="tns:Struct"/>
      <xs:element ref="tns:Record"/>
      <xs:element ref="tns:Real_Literal"/>
      <xs:element ref="tns:Record_Field_Access"/>
   </xs:choice>
</xs:group>

Model Group: Sub

Name Sub
No documentation provided.
Start Choice [1]
   <tns:Bloc_Sub> ... </tns:Bloc_Sub> [1]
   <tns:Skip> ... </tns:Skip> [1]
   <tns:Assert_Sub> ... </tns:Assert_Sub> [1]
   <tns:If_Sub> ... </tns:If_Sub> [1]
   <tns:Becomes_Such_That> ... </tns:Becomes_Such_That> [1]
   <tns:Assignement_Sub> ... </tns:Assignement_Sub> [1]
   <tns:Select> ... </tns:Select> [1]
   <tns:Case_Sub> ... </tns:Case_Sub> [1]
   <tns:ANY_Sub> ... </tns:ANY_Sub> [1]
   <tns:LET_Sub> ... </tns:LET_Sub> [1]
   <tns:VAR_IN> ... </tns:VAR_IN> [1]
   <tns:Nary_Sub> ... </tns:Nary_Sub> [1]
   <tns:Operation_Call> ... </tns:Operation_Call> [1]
   <tns:Becomes_In> ... </tns:Becomes_In> [1]
   <tns:While> ... </tns:While> [1]
   <tns:Witness> ... </tns:Witness> [1]
End Choice
<xs:group name="Sub">
   <xs:choice>
      <xs:element ref="tns:Bloc_Sub"/>
      <xs:element ref="tns:Skip"/>
      <xs:element ref="tns:Assert_Sub"/>
      <xs:element ref="tns:If_Sub"/>
      <xs:element ref="tns:Becomes_Such_That"/>
      <xs:element ref="tns:Assignement_Sub"/>
      <xs:element ref="tns:Select"/>
      <xs:element ref="tns:Case_Sub"/>
      <xs:element ref="tns:ANY_Sub"/>
      <xs:element ref="tns:LET_Sub"/>
      <xs:element ref="tns:VAR_IN"/>
      <xs:element ref="tns:Nary_Sub"/>
      <xs:element ref="tns:Operation_Call"/>
      <xs:element ref="tns:Becomes_In"/>
      <xs:element ref="tns:While"/>
      <xs:element ref="tns:Witness"/>
   </xs:choice>
</xs:group>

Model Group: Type

Name Type

Elements that represent types for B expressions.

These are expression types and are built recursively using selected B expression elements, restricted so that their arguments are type representations.

Start Choice [1]
   <tns:Binary_Exp
    op="*" [1]
   > [1] 
      Circular model group reference: tns:Type [2..2]
   </tns:Binary_Exp>
   <tns:Id
    value="xs:string" [1]
/>  [1]

   <tns:Unary_Exp
    op="POW" [1]
   > [1] 
      Circular model group reference: tns:Type [1]
   </tns:Unary_Exp>
   <tns:Struct   > [1] 
      <tns:Record_Item
       label="xs:string" [1]
      > [1..*] 
         Circular model group reference: tns:Type [1]
      </tns:Record_Item>
   </tns:Struct>
   <tns:Generic_Type/>  [1]

End Choice
<xs:group name="Type">
   <xs:choice>
      <xs:element name="Binary_Exp">
         <xs:complexType>
            <xs:group ref="tns:Type" minOccurs="2" maxOccurs="2"/>
            <xs:attribute name="op" type="xs:string" use="required" fixed="*"/>
         </xs:complexType>
      </xs:element>
      <xs:element name="Id">
         <xs:complexType>
            <xs:attribute name="value" type="xs:string" use="required"/>
         </xs:complexType>
      </xs:element>
      <xs:element name="Unary_Exp">
         <xs:complexType>
            <xs:group ref="tns:Type"/>
            <xs:attribute name="op" type="xs:string" use="required" fixed="POW"/>
         </xs:complexType>
      </xs:element>
      <xs:element name="Struct">
         <xs:complexType>
            <xs:sequence>
               <xs:element name="Record_Item" minOccurs="1" maxOccurs="unbounded">
                  <xs:complexType>
                     <xs:group ref="tns:Type"/>
                     <xs:attribute name="label" type="xs:string" use="required"/>
                  </xs:complexType>
               </xs:element>
            </xs:sequence>
         </xs:complexType>
      </xs:element>
      <xs:element name="Generic_Type">
         <xs:complexType/>
      </xs:element>
   </xs:choice>
</xs:group>

Model Group: pred_group

Name pred_group

Elements of this group represent predicates.

<xs:group name="pred_group">
   <xs:choice>
      <xs:element ref="tns:Binary_Pred"/>
      <xs:element ref="tns:Exp_Comparison"/>
      <xs:element ref="tns:Quantified_Pred"/>
      <xs:element ref="tns:Unary_Pred"/>
      <xs:element ref="tns:Nary_Pred"/>
   </xs:choice>
</xs:group>

Simple Type: binary_b0_op

Super-types: xs:string < binary_b0_op (by restriction)
Sub-types: None
Name binary_b0_op
Content
  • Base XSD Type: string
  • value comes from list: {'-->'|'..'|'*'}
No documentation provided.
<xs:simpleType name="binary_b0_op">
   <xs:restriction base="xs:string">
      <xs:enumeration value="-->"/>
      <xs:enumeration value=".."/>
      <xs:enumeration value="*"/>
   </xs:restriction>
</xs:simpleType>

Simple Type: binary_exp_op

Super-types: xs:string < binary_exp_op (by restriction)
Sub-types: None
Name binary_exp_op
Content
  • Base XSD Type: string
  • value comes from list: {','|'*'|'*i'|'*r'|'*f'|'*s'|'**'|'**i'|'**r'|'+'|'+i'|'+r'|'+f'|'+->'|'+->>'|'-'|'-i'|'-r'|'-f'|'-s'|'-->'|'-->>'|'->'|'..'|'/'|'/i'|'/r'|'/f'|'/\'|'/|\'|';'|'<+'|'<->'|'<-'|'<<|'|'<|'|'>+>'|'>->'|'>+>>'|'>->>'|'><'|'||'|'\/'|'\|/'|'^'|'mod'|'|->'|'|>'|'|>>'|'['|'('|'<''|'prj1'|'prj2'|'iterate'|'const'|'rank'|'father'|'subtree'|'arity'}
No documentation provided.
<xs:simpleType name="binary_exp_op">
   <xs:restriction base="xs:string">
      <xs:enumeration value=","/>
      <xs:enumeration value="*"/>
      <xs:enumeration value="*i"/>
      <xs:enumeration value="*r"/>
      <xs:enumeration value="*f"/>
      <xs:enumeration value="*s"/>
      <xs:enumeration value="**"/>
      <xs:enumeration value="**i"/>
      <xs:enumeration value="**r"/>
      <xs:enumeration value="+"/>
      <xs:enumeration value="+i"/>
      <xs:enumeration value="+r"/>
      <xs:enumeration value="+f"/>
      <xs:enumeration value="+->"/>
      <xs:enumeration value="+->>"/>
      <xs:enumeration value="-"/>
      <xs:enumeration value="-i"/>
      <xs:enumeration value="-r"/>
      <xs:enumeration value="-f"/>
      <xs:enumeration value="-s"/>
      <xs:enumeration value="-->"/>
      <xs:enumeration value="-->>"/>
      <xs:enumeration value="->"/>
      <xs:enumeration value=".."/>
      <xs:enumeration value="/"/>
      <xs:enumeration value="/i"/>
      <xs:enumeration value="/r"/>
      <xs:enumeration value="/f"/>
      <xs:enumeration value="/\"/>
      <xs:enumeration value="/|\"/>
      <xs:enumeration value=";"/>
      <xs:enumeration value="<+"/>
      <xs:enumeration value="<->"/>
      <xs:enumeration value="<-"/>
      <xs:enumeration value="<<|"/>
      <xs:enumeration value="<|"/>
      <xs:enumeration value=">+>"/>
      <xs:enumeration value=">->"/>
      <xs:enumeration value=">+>>"/>
      <xs:enumeration value=">->>"/>
      <xs:enumeration value="><"/>
      <xs:enumeration value="||"/>
      <xs:enumeration value="\/"/>
      <xs:enumeration value="\|/"/>
      <xs:enumeration value="^"/>
      <xs:enumeration value="mod"/>
      <xs:enumeration value="|->"/>
      <xs:enumeration value="|>"/>
      <xs:enumeration value="|>>"/>
      <xs:enumeration value="["/>
      <xs:enumeration value="("/>
      <xs:enumeration value="<'"/>
      <xs:enumeration value="prj1"/>
      <xs:enumeration value="prj2"/>
      <xs:enumeration value="iterate"/>
      <xs:enumeration value="const"/>
      <xs:enumeration value="rank"/>
      <xs:enumeration value="father"/>
      <xs:enumeration value="subtree"/>
      <xs:enumeration value="arity"/>
   </xs:restriction>
</xs:simpleType>

Simple Type: binary_pred_op

Super-types: xs:string < binary_pred_op (by restriction)
Sub-types: None
Name binary_pred_op
Content
  • Base XSD Type: string
  • value comes from list: {'=>'|'<=>'}
No documentation provided.
<xs:simpleType name="binary_pred_op">
   <xs:restriction base="xs:string">
      <xs:enumeration value="=>"/>
      <xs:enumeration value="<=>"/>
<-- <xs:enumeration value="cand" /> used by BART? -->   </xs:restriction>
</xs:simpleType>

Simple Type: boolean_literal_type

Super-types: xs:string < boolean_literal_type (by restriction)
Sub-types: None
Name boolean_literal_type
Content
  • Base XSD Type: string
  • value comes from list: {'TRUE'|'FALSE'}
No documentation provided.
<xs:simpleType name="boolean_literal_type">
   <xs:restriction base="xs:string">
      <xs:enumeration value="TRUE"/>
      <xs:enumeration value="FALSE"/>
   </xs:restriction>
</xs:simpleType>

Simple Type: comparison_op

Super-types: xs:string < comparison_op (by restriction)
Sub-types: None
Name comparison_op
Content
  • Base XSD Type: string
  • value comes from list: {':'|'/:'|'<:'|'/<:'|'<<:'|'/<<:'|'='|'/='|'>='|'>'|'<'|'<='|'>=i'|'>i'|'<i'|'<=i'|'>=r'|'>r'|'<r'|'<=r'|'>=f'|'>f'|'<f'|'<=f'}
No documentation provided.
<xs:simpleType name="comparison_op">
   <xs:restriction base="xs:string">
      <xs:enumeration value=":"/>
      <xs:enumeration value="/:"/>
      <xs:enumeration value="<:"/>
      <xs:enumeration value="/<:"/>
      <xs:enumeration value="<<:"/>
      <xs:enumeration value="/<<:"/>
      <xs:enumeration value="="/>
      <xs:enumeration value="/="/>
<-- untyped comparison -->      <xs:enumeration value=">="/>
      <xs:enumeration value=">"/>
      <xs:enumeration value="<"/>
      <xs:enumeration value="<="/>
<-- integer comparison -->      <xs:enumeration value=">=i"/>
      <xs:enumeration value=">i"/>
      <xs:enumeration value="<i"/>
      <xs:enumeration value="<=i"/>
<-- real comparison -->      <xs:enumeration value=">=r"/>
      <xs:enumeration value=">r"/>
      <xs:enumeration value="<r"/>
      <xs:enumeration value="<=r"/>
<-- float comparison -->      <xs:enumeration value=">=f"/>
      <xs:enumeration value=">f"/>
      <xs:enumeration value="<f"/>
      <xs:enumeration value="<=f"/>
   </xs:restriction>
</xs:simpleType>

Simple Type: machine_type

Super-types: xs:string < machine_type (by restriction)
Sub-types: None
Name machine_type
Content
  • Base XSD Type: string
  • value comes from list: {'abstraction'|'refinement'|'implementation'}

Represents the type of a B component. The value "abstraction" corresponds either to a MACHINE or a SYSTEM component.

<xs:simpleType name="machine_type">
   <xs:restriction base="xs:string">
      <xs:enumeration value="abstraction"/>
      <xs:enumeration value="refinement"/>
      <xs:enumeration value="implementation"/>
   </xs:restriction>
</xs:simpleType>

Simple Type: nary_exp_op

Super-types: xs:string < nary_exp_op (by restriction)
Sub-types: None
Name nary_exp_op
Content
  • Base XSD Type: string
  • value comes from list: {'['|'{'}
No documentation provided.
<xs:simpleType name="nary_exp_op">
   <xs:restriction base="xs:string">
      <xs:enumeration value="["/>
      <xs:enumeration value="{"/>
   </xs:restriction>
</xs:simpleType>

Simple Type: nary_pred_op

Super-types: xs:string < nary_pred_op (by restriction)
Sub-types: None
Name nary_pred_op
Content
  • Base XSD Type: string
  • value comes from list: {'&'|'or'}
No documentation provided.
<xs:simpleType name="nary_pred_op">
   <xs:restriction base="xs:string">
      <xs:enumeration value="&"/>
      <xs:enumeration value="or"/>
   </xs:restriction>
</xs:simpleType>

Simple Type: nary_sub_op

Super-types: xs:string < nary_sub_op (by restriction)
Sub-types: None
Name nary_sub_op
Content
  • Base XSD Type: string
  • value comes from list: {'||'|';'|'CHOICE'}

Either ";" or "||" or CHOICE.

<xs:simpleType name="nary_sub_op">
   <xs:restriction base="xs:string">
      <xs:enumeration value="||"/>
      <xs:enumeration value=";"/>
      <xs:enumeration value="CHOICE"/>
   </xs:restriction>
</xs:simpleType>

Simple Type: quantified_exp_op

Super-types: xs:string < quantified_exp_op (by restriction)
Sub-types: None
Name quantified_exp_op
Content
  • Base XSD Type: string
  • value comes from list: {'%'|'SIGMA'|'iSIGMA'|'rSIGMA'|'PI'|'iPI'|'rPI'|'INTER'|'UNION'}
No documentation provided.
<xs:simpleType name="quantified_exp_op">
   <xs:restriction base="xs:string">
      <xs:enumeration value="%"/>
      <xs:enumeration value="SIGMA"/>
      <xs:enumeration value="iSIGMA"/>
      <xs:enumeration value="rSIGMA"/>
      <xs:enumeration value="PI"/>
      <xs:enumeration value="iPI"/>
      <xs:enumeration value="rPI"/>
      <xs:enumeration value="INTER"/>
      <xs:enumeration value="UNION"/>
   </xs:restriction>
</xs:simpleType>

Simple Type: quantified_pred_op

Super-types: xs:string < quantified_pred_op (by restriction)
Sub-types: None
Name quantified_pred_op
Content
  • Base XSD Type: string
  • value comes from list: {'!'|'#'}
No documentation provided.
<xs:simpleType name="quantified_pred_op">
   <xs:restriction base="xs:string">
      <xs:enumeration value="!"/>
      <xs:enumeration value="#"/>
   </xs:restriction>
</xs:simpleType>

Simple Type: ternary_exp_op

Super-types: xs:string < ternary_exp_op (by restriction)
Sub-types: None
Name ternary_exp_op
Content
  • Base XSD Type: string
  • value comes from list: {'son'|'bin'}
No documentation provided.
<xs:simpleType name="ternary_exp_op">
   <xs:restriction base="xs:string">
      <xs:enumeration value="son"/>
      <xs:enumeration value="bin"/>
   </xs:restriction>
</xs:simpleType>

Simple Type: unary_exp_op

Super-types: xs:string < unary_exp_op (by restriction)
Sub-types: None
Name unary_exp_op
Content
  • Base XSD Type: string
  • value comes from list: {'max'|'imax'|'rmax'|'min'|'imin'|'rmin'|'card'|'dom'|'ran'|'POW'|'POW1'|'FIN'|'FIN1'|'union'|'inter'|'seq'|'seq1'|'iseq'|'iseq1'|'-'|'-i'|'-r'|'~'|'size'|'perm'|'first'|'last'|'id'|'closure'|'closure1'|'tail'|'front'|'rev'|'conc'|'succ'|'pred'|'rel'|'fnc'|'real'|'floor'|'ceiling'|'tree'|'btree'|'top'|'sons'|'prefix'|'postfix'|'sizet'|'mirror'|'left'|'right'|'infix'|'bin'}
No documentation provided.
<xs:simpleType name="unary_exp_op">
   <xs:restriction base="xs:string">
      <xs:enumeration value="max"/>
      <xs:enumeration value="imax"/>
      <xs:enumeration value="rmax"/>
      <xs:enumeration value="min"/>
      <xs:enumeration value="imin"/>
      <xs:enumeration value="rmin"/>
      <xs:enumeration value="card"/>
      <xs:enumeration value="dom"/>
      <xs:enumeration value="ran"/>
      <xs:enumeration value="POW"/>
      <xs:enumeration value="POW1"/>
      <xs:enumeration value="FIN"/>
      <xs:enumeration value="FIN1"/>
      <xs:enumeration value="union"/>
      <xs:enumeration value="inter"/>
      <xs:enumeration value="seq"/>
      <xs:enumeration value="seq1"/>
      <xs:enumeration value="iseq"/>
      <xs:enumeration value="iseq1"/>
      <xs:enumeration value="-"/>
      <xs:enumeration value="-i"/>
      <xs:enumeration value="-r"/>
      <xs:enumeration value="~"/>
      <xs:enumeration value="size"/>
      <xs:enumeration value="perm"/>
      <xs:enumeration value="first"/>
      <xs:enumeration value="last"/>
      <xs:enumeration value="id"/>
      <xs:enumeration value="closure"/>
      <xs:enumeration value="closure1"/>
      <xs:enumeration value="tail"/>
      <xs:enumeration value="front"/>
      <xs:enumeration value="rev"/>
      <xs:enumeration value="conc"/>
      <xs:enumeration value="succ"/>
      <xs:enumeration value="pred"/>
      <xs:enumeration value="rel"/>
      <xs:enumeration value="fnc"/>
      <xs:enumeration value="real"/>
      <xs:enumeration value="floor"/>
      <xs:enumeration value="ceiling"/>
      <xs:enumeration value="tree"/>
      <xs:enumeration value="btree"/>
      <xs:enumeration value="top"/>
      <xs:enumeration value="sons"/>
      <xs:enumeration value="prefix"/>
      <xs:enumeration value="postfix"/>
      <xs:enumeration value="sizet"/>
      <xs:enumeration value="mirror"/>
      <xs:enumeration value="left"/>
      <xs:enumeration value="right"/>
      <xs:enumeration value="infix"/>
      <xs:enumeration value="bin"/>
   </xs:restriction>
</xs:simpleType>

Simple Type: unary_pred_op

Super-types: xs:string < unary_pred_op (by restriction)
Sub-types: None
Name unary_pred_op
Content
  • Base XSD Type: string
  • value comes from list: {'not'}
No documentation provided.
<xs:simpleType name="unary_pred_op">
   <xs:restriction base="xs:string">
      <xs:enumeration value="not"/>
   </xs:restriction>
</xs:simpleType>

Simple Type: version_type

Super-types: xs:string < version_type (by restriction)
Sub-types: None
Name version_type
Content
  • Base XSD Type: string
  • value comes from list: {'1.0'}

Represents the possible values for the version attribute for the root element. Currently a unique value is possible, but if the format evolves then new values will be created here.

<xs:simpleType name="version_type">
   <xs:restriction base="xs:string">
      <xs:enumeration value="1.0"/>
   </xs:restriction>
</xs:simpleType>

Glossary

Abstract (Applies to complex type definitions and element declarations). An abstract element or complex type cannot used to validate an element instance. If there is a reference to an abstract element, only element declarations that can substitute the abstract element can be used to validate the instance. For references to abstract type definitions, only derived types can be used.

All Model Group Child elements can be provided in any order in instances. See: http://www.w3.org/TR/xmlschema-1/#element-all.

Choice Model Group Only one from the list of child elements and model groups can be provided in instances. See: http://www.w3.org/TR/xmlschema-1/#element-choice.

Collapse Whitespace Policy Replace tab, line feed, and carriage return characters with space character (Unicode character 32). Then, collapse contiguous sequences of space characters into single space character, and remove leading and trailing space characters.

Disallowed Substitutions (Applies to element declarations). If substitution is specified, then substitution group members cannot be used in place of the given element declaration to validate element instances. If derivation methods, e.g. extension, restriction, are specified, then the given element declaration will not validate element instances that have types derived from the element declaration's type using the specified derivation methods. Normally, element instances can override their declaration's type by specifying an xsi:type attribute.

Key Constraint Like Uniqueness Constraint, but additionally requires that the specified value(s) must be provided. See: http://www.w3.org/TR/xmlschema-1/#cIdentity-constraint_Definitions.

Key Reference Constraint Ensures that the specified value(s) must match value(s) from a Key Constraint or Uniqueness Constraint. See: http://www.w3.org/TR/xmlschema-1/#cIdentity-constraint_Definitions.

Model Group Groups together element content, specifying the order in which the element content can occur and the number of times the group of element content may be repeated. See: http://www.w3.org/TR/xmlschema-1/#Model_Groups.

Nillable (Applies to element declarations). If an element declaration is nillable, instances can use the xsi:nil attribute. The xsi:nil attribute is the boolean attribute, nil, from the http://www.w3.org/2001/XMLSchema-instance namespace. If an element instance has an xsi:nil attribute set to true, it can be left empty, even though its element declaration may have required content.

Notation A notation is used to identify the format of a piece of data. Values of elements and attributes that are of type, NOTATION, must come from the names of declared notations. See: http://www.w3.org/TR/xmlschema-1/#cNotation_Declarations.

Preserve Whitespace Policy Preserve whitespaces exactly as they appear in instances.

Prohibited Derivations (Applies to type definitions). Derivation methods that cannot be used to create sub-types from a given type definition.

Prohibited Substitutions (Applies to complex type definitions). Prevents sub-types that have been derived using the specified derivation methods from validating element instances in place of the given type definition.

Replace Whitespace Policy Replace tab, line feed, and carriage return characters with space character (Unicode character 32).

Sequence Model Group Child elements and model groups must be provided in the specified order in instances. See: http://www.w3.org/TR/xmlschema-1/#element-sequence.

Substitution Group Elements that are members of a substitution group can be used wherever the head element of the substitution group is referenced.

Substitution Group Exclusions (Applies to element declarations). Prohibits element declarations from nominating themselves as being able to substitute a given element declaration, if they have types that are derived from the original element's type using the specified derivation methods.

Target Namespace The target namespace identifies the namespace that components in this schema belongs to. If no target namespace is provided, then the schema components do not belong to any namespace.

Uniqueness Constraint Ensures uniqueness of an element/attribute value, or a combination of values, within a specified scope. See: http://www.w3.org/TR/xmlschema-1/#cIdentity-constraint_Definitions.