code: function TypeLattice(options) {
    this.implicitTypes = options.implicitTypes;
    // least specific, smallest type
    this.bottom = new Type("BOTTOM");
    // undefined, result of two types that cannot be unified
    this.top = new Type("TOP");
    this.lubMatrix = new Array(2);
    this.bottom.index = 0;
    this.top.index = 1;
    this.lubMatrix[0] = [this.bottom.index];
    this.lubMatrix[1] = [this.top.index, this.top.index];
    this.types = [this.bottom, this.top];
    this.number_of_types = 2;
  
    // Add a type for feature structure that belong to rules
    this.rule = new Type('RULE', [this.bottom]);
    this.addType(this.rule);
  
    // Add a type for feature structures that belong to consituents of the
    // context-free backbone
    this.constituent = new Type('CONSTITUENT', [this.rule]);
    this.addType(this.constituent);
  
    // Add a type for lists of cross references in feature structures
    this.list = new Type('LIST', [this.bottom]);
    this.addType(this.list);
  
    // Add a type for concatenation of lists
    this.concatlist = new Type('CONCATLIST', [this.bottom]);
    this.addType(this.concatlist);
  
    // Add a type for strings
    this.string = new Type('STRING', [this.bottom]);
    this.addType(this.string);
  }
docs: Initialises the lattice Creates top and bottom and initialises the list of types and the lubMatrix options: implicitTypes configures if types can be implicitly introduced