Seq DEFINITIONS IMPLICIT TAGS ::= 

BEGIN

IMPORTS Set1 FROM SeqSetLib;

Seq ::=  SEQUENCE 
{
  bool  BOOLEAN,
  boolCon [20] BOOLEAN,
  boolPri [PRIVATE 21] BOOLEAN,
  boolApp  [APPLICATION 22] BOOLEAN,
  boolExpCon [30] EXPLICIT BOOLEAN,
  boolExpPri [PRIVATE 31] EXPLICIT BOOLEAN,
  boolExpApp  [APPLICATION 32] EXPLICIT BOOLEAN
}

Seq1 ::= SEQUENCE 
{
  bool1  BOOLEAN,
  int1  INTEGER,
  seq1  SeqIn
}

Seq2 ::= SEQUENCE 
{
  seq2  SeqIn,
  bool2  BOOLEAN,
  int2  INTEGER
}

Seq3 ::= SEQUENCE 
{
  bool3  BOOLEAN,
  seq3  SeqIn,
  int3  INTEGER
}

Seq4 ::= SEQUENCE 
{
  seq41  SeqIn,
  seq42  SeqIn,
  seq43  SeqIn
}
SeqDef1 ::= SET 
{
  bool1  BOOLEAN DEFAULT TRUE,
  int1  INTEGER,
  seq1  SeqIn DEFAULT {}
}

SeqDef2 ::= SET 
{
  seq2  SeqIn DEFAULT {},
  bool2  BOOLEAN,
  int2  INTEGER
}

SeqDef3 ::= SET 
{
  bool3  BOOLEAN DEFAULT TRUE,
  seq3  SeqIn DEFAULT {},
  int3  INTEGER DEFAULT 17
}

SeqOpt1 ::= SET 
{
  bool1  BOOLEAN OPTIONAL,
  int1  INTEGER,
  seq1  SeqIn OPTIONAL
}

SeqOpt2 ::= SET 
{
  seq2  SeqIn OPTIONAL,
  bool2  BOOLEAN,
  int2  INTEGER
}

SeqOpt3 ::= SET 
{
  bool3  BOOLEAN OPTIONAL,
  seq3  SeqIn OPTIONAL,
  int3  INTEGER OPTIONAL
}


SeqIn ::= SEQUENCE 
{
  boolIn  BOOLEAN OPTIONAL,
  intIn  INTEGER DEFAULT 12
}


SeqS1 ::= SEQUENCE 
{
  boolS1  BOOLEAN,
  intS1  INTEGER,
  seqS1  SEQUENCE { boolIn BOOLEAN,
                    intIn  INTEGER }
}

SeqS2 ::= SEQUENCE 
{
  seqS2  SEQUENCE { boolIn BOOLEAN,
                    intIn  INTEGER },
  boolS2  BOOLEAN,
  intS2  INTEGER

}

SeqS3 ::= SEQUENCE 
{
  boolS3  BOOLEAN,
  seqS3  SEQUENCE { boolIn BOOLEAN,
                    intIn  INTEGER },
  intS3  INTEGER

}


SeqImp1 ::= SET 
{
  set  Set1,
  bool  BOOLEAN,
  int  INTEGER
}


SeqImp2 ::= SET 
{
  bool  BOOLEAN,
  set  Set1,
  int  INTEGER
}


SeqImp3 ::= SET 
{
  bool  BOOLEAN,
  int  INTEGER,
  set  Set1
}

SeqCompOf ::= SEQUENCE {
  ...,
  COMPONENTS OF SeqS3
}

END