Signatures/Assinaturas são conjuntos.
Exemplos: sig Object {} sig Entry {} sig Name {}
Uma assinatura pode ser declarada como um subconjunto de mais de uma assinatura. As assinaturas do subconjunto não podem ser estendidas.
Exemplos: sig Dir in Object {} sig File in Object {}
Assinaturas de extensão indicam características adicionais ou especializações dentro desses subtipos.
Exemplos: sig Dir extends Object { contains : set Entry } sig File extends Object {} sig Root extends Dir {}
Assinaturas abstratas referem-se a características genéricas ou essenciais que definem uma categoria, sem se ater a detalhes específicos.
abstract sig Object {}
Fields/Campos são relações.
Exemplos: sig Objecto { contains : set Entry } sig Entry { refersTo : set Object, name : set Name }
Exemplo: abstract sig ****Object {} sig Dir extends Object { contents : Name -> lone ****Object }
Um diretório (Dir) tem um campo chamado "contents" que mapeia nomes (da assinatura "Name") para objetos (da assinatura "Object"). O modificador lone indica que cada nome está associado a no máximo um objeto.