TLA+ has no type declarations. Type correctness means variables have sensible values. We define a formula that asserts type correctness.
The next-state formula describes all permitted steps. It’s usually written as F1 \\/ F2 \\/ … \\/ Fn
, where each Fi allows a different kind of step. The behavior we wrote has 3 kinds of steps:
It’s a formula that’s true for some steps and false for others.
Most people think this shouldn’t be needed. That’s a bad idea! It’s not math.
FillSmall == /\\ small' = 3
/\\ big' = big
EXTENDS Integers
VARIABLES small, big
TypeOk == /\\ small \\in 0..3
/\\ big \\in 0..5
Init == /\\ big = 0
/\\ small = 0
FillSmall == /\\ small' = 3
/\\ big' = big
FillBig == /\\ big' = 5
/\\ small' = small
EmptySmall == /\\ small' = 0
/\\ big' = big
EmptyBig == /\\ big' = 0
/\\ small' = small