Skip to content

abstract and extends

Single sig extends

extends an abstract sig

abstract sig A{}
sig A_extends extends A{}

check {
  no a : A  |  not a in A_extends
  all a : A |   a in A_extends
  all a : univ | a in A <=> a in A_extends
  A = A_extends
}

extends a non-abstract sig

sig A{}
sig A_extends extends A{}

fact {
  some a : A | not a in A_extends
}

check {
  some a : A | not a in A_extends
  A != A_extends
}

Multiple sig extends

extends an abstract sig

abstract sig A{}
sig A1_extends, A2_extends extends A{}

check {
  A = ( A1_extends + A2_extends)
}

extends a non-abstract sig

sig A{}
sig A1_extends, A2_extends extends A{}

fact {
  some a : A | not a in  ( A1_extends + A2_extends )
}

check {
  A != ( A1_extends + A2_extends)
}