Considering object completion on:
  rl [get-hungry] : < p(I) : Philosopher | status : thinking, timer : 0 > => <
    p(I) : Philosopher | status : hungry > .
Transformed rule:
  rl [get-hungry] : < p(I) : V:Philosopher | status : thinking, timer : 0, Atts
    > => < p(I) : V:Philosopher | timer : 0, status : hungry, Atts > .

Considering object completion on:
  crl [grab-stick] : < p(I) : Philosopher | status : hungry, chopsticks : N > <
    c(J) : Chopstick | none > => < p(I) : Philosopher | chopsticks : s N > if I
    == J or s I == J or I == 4 and J == 0 = true .
Transformed rule:
  crl [grab-stick] : < p(I) : V:Philosopher | status : hungry, chopsticks : N,
    Atts > < c(J) : V2:Chopstick | Atts2 > => < p(I) : V:Philosopher | status :
    hungry, chopsticks : s N, Atts > if I == J or s I == J or I == 4 and J == 0
    = true .

Considering object completion on:
  rl [eat] : < p(I) : Philosopher | status : hungry, chopsticks : 2 > => < p(I)
    : Philosopher | status : eating, timer : EATING-TIME > .
Transformed rule:
  rl [eat] : < p(I) : V:Philosopher | status : hungry, chopsticks : 2, timer :
    A:[Rat,TimeInf], Atts > => < p(I) : V:Philosopher | chopsticks : 2, status
    : eating, timer : EATING-TIME, Atts > .

Considering object completion on:
  eq mte(< p(I) : Philosopher | timer : T, Atts1 > Conf) = minimum(T, mte(
    Conf)) .
Transformed equation:
  eq mte(< p(I) : V:Philosopher | timer : T, Atts1 > Conf) = minimum(T, mte(
    Conf)) .

Considering object completion on:
  eq delta(< p(I) : Philosopher | timer : T > Conf, T') = < p(I) : Philosopher
    | timer : (T - T') > delta(Conf, T') .
Transformed equation:
  eq delta(< p(I) : V:Philosopher | timer : T, Atts > Conf, T') = < p(I) :
    V:Philosopher | timer : (T - T'), Atts > delta(Conf, T') .

op _`,_ left-identity collapse from AttributeSet to Attribute is unequal.
op __ left-identity collapse from Configuration to Object is unequal.
==========================================
reduce in DINING-PHILOSOPHERS : initState .
rewrites: 7
result System: {< p(0) : Philosopher | status : thinking, chopsticks : 0, timer
    : 0 > < p(1) : Philosopher | status : thinking, chopsticks : 0, timer : 0 >
    < p(2) : Philosopher | status : thinking, chopsticks : 0, timer : 0 > < p(
    3) : Philosopher | status : thinking, chopsticks : 0, timer : 0 > < p(4) :
    Philosopher | status : thinking, chopsticks : 0, timer : 0 > < c(0) :
    Chopstick | none > < c(1) : Chopstick | none > < c(2) : Chopstick | none >
    < c(3) : Chopstick | none > < c(4) : Chopstick | none >, 0}
==========================================
search [1] in DINING-PHILOSOPHERS : initState =>! S:System .

Solution 1 (state 1987)
states: 2120  rewrites: 284085
S:System --> {< p(0) : Philosopher | status : hungry, chopsticks : 1, timer : 0
    > < p(1) : Philosopher | status : hungry, chopsticks : 1, timer : 0 > < p(
    2) : Philosopher | status : hungry, chopsticks : 1, timer : 0 > < p(3) :
    Philosopher | status : hungry, chopsticks : 1, timer : 0 > < p(4) :
    Philosopher | status : hungry, chopsticks : 1, timer : 0 >, 0}
Considering object completion on:
  eq {< p(P) : Philosopher | status : St > Conf, T} |= phil-status(p(P), St) =
    true .
Transformed equation:
  eq {< p(P) : V:Philosopher | status : St, Atts > Conf, T} |= phil-status(p(
    P), St) = true .

Considering object completion on:
  eq {< p(P) : Philosopher | chopsticks : N > Conf, T} |= phil-sticks(p(P), N)
    = true .
Transformed equation:
  eq {< p(P) : V:Philosopher | chopsticks : N, Atts > Conf, T} |= phil-sticks(
    p(P), N) = true .

op _`,_ left-identity collapse from AttributeSet to Attribute is unequal.
op __ left-identity collapse from Configuration to Object is unequal.
op __ left-identity collapse from TransitionList to Transition is unequal.
op __ right-identity collapse from TransitionList to Transition is unequal.
==========================================
reduce in DINING-PHILOSOPHERS-5-CHECK : modelCheck(initState, []~ (phil-sticks(
    p(4), 1) /\ (phil-sticks(p(3), 1) /\ (phil-sticks(p(2), 1) /\ (phil-sticks(
    p(0), 1) /\ phil-sticks(p(1), 1)))))) .
ModelChecker: Property automaton has 2 states.
ModelCheckerSymbol: Examined 459 system states.
rewrites: 48194
result ModelCheckResult: counterexample({{< p(0) : Philosopher | status :
    thinking, chopsticks : 0, timer : 0 > < p(1) : Philosopher | status :
    thinking, chopsticks : 0, timer : 0 > < p(2) : Philosopher | status :
    thinking, chopsticks : 0, timer : 0 > < p(3) : Philosopher | status :
    thinking, chopsticks : 0, timer : 0 > < p(4) : Philosopher | status :
    thinking, chopsticks : 0, timer : 0 > < c(0) : Chopstick | none > < c(1) :
    Chopstick | none > < c(2) : Chopstick | none > < c(3) : Chopstick | none >
    < c(4) : Chopstick | none >, 0}, 'get-hungry} {{< p(0) : Philosopher |
    status : hungry, chopsticks : 0, timer : 0 > < p(1) : Philosopher | status
    : thinking, chopsticks : 0, timer : 0 > < p(2) : Philosopher | status :
    thinking, chopsticks : 0, timer : 0 > < p(3) : Philosopher | status :
    thinking, chopsticks : 0, timer : 0 > < p(4) : Philosopher | status :
    thinking, chopsticks : 0, timer : 0 > < c(0) : Chopstick | none > < c(1) :
    Chopstick | none > < c(2) : Chopstick | none > < c(3) : Chopstick | none >
    < c(4) : Chopstick | none >, 0}, 'grab-stick} {{< p(0) : Philosopher |
    status : hungry, chopsticks : 1, timer : 0 > < p(1) : Philosopher | status
    : thinking, chopsticks : 0, timer : 0 > < p(2) : Philosopher | status :
    thinking, chopsticks : 0, timer : 0 > < p(3) : Philosopher | status :
    thinking, chopsticks : 0, timer : 0 > < p(4) : Philosopher | status :
    thinking, chopsticks : 0, timer : 0 > < c(1) : Chopstick | none > < c(2) :
    Chopstick | none > < c(3) : Chopstick | none > < c(4) : Chopstick | none >,
    0}, 'get-hungry} {{< p(0) : Philosopher | status : hungry, chopsticks : 1,
    timer : 0 > < p(1) : Philosopher | status : hungry, chopsticks : 0, timer :
    0 > < p(2) : Philosopher | status : thinking, chopsticks : 0, timer : 0 > <
    p(3) : Philosopher | status : thinking, chopsticks : 0, timer : 0 > < p(4)
    : Philosopher | status : thinking, chopsticks : 0, timer : 0 > < c(1) :
    Chopstick | none > < c(2) : Chopstick | none > < c(3) : Chopstick | none >
    < c(4) : Chopstick | none >, 0}, 'grab-stick} {{< p(0) : Philosopher |
    status : hungry, chopsticks : 1, timer : 0 > < p(1) : Philosopher | status
    : hungry, chopsticks : 1, timer : 0 > < p(2) : Philosopher | status :
    thinking, chopsticks : 0, timer : 0 > < p(3) : Philosopher | status :
    thinking, chopsticks : 0, timer : 0 > < p(4) : Philosopher | status :
    thinking, chopsticks : 0, timer : 0 > < c(2) : Chopstick | none > < c(3) :
    Chopstick | none > < c(4) : Chopstick | none >, 0}, 'get-hungry} {{< p(0) :
    Philosopher | status : hungry, chopsticks : 1, timer : 0 > < p(1) :
    Philosopher | status : hungry, chopsticks : 1, timer : 0 > < p(2) :
    Philosopher | status : hungry, chopsticks : 0, timer : 0 > < p(3) :
    Philosopher | status : thinking, chopsticks : 0, timer : 0 > < p(4) :
    Philosopher | status : thinking, chopsticks : 0, timer : 0 > < c(2) :
    Chopstick | none > < c(3) : Chopstick | none > < c(4) : Chopstick | none >,
    0}, 'grab-stick} {{< p(0) : Philosopher | status : hungry, chopsticks : 1,
    timer : 0 > < p(1) : Philosopher | status : hungry, chopsticks : 1, timer :
    0 > < p(2) : Philosopher | status : hungry, chopsticks : 1, timer : 0 > <
    p(3) : Philosopher | status : thinking, chopsticks : 0, timer : 0 > < p(4)
    : Philosopher | status : thinking, chopsticks : 0, timer : 0 > < c(3) :
    Chopstick | none > < c(4) : Chopstick | none >, 0}, 'get-hungry} {{< p(0) :
    Philosopher | status : hungry, chopsticks : 1, timer : 0 > < p(1) :
    Philosopher | status : hungry, chopsticks : 1, timer : 0 > < p(2) :
    Philosopher | status : hungry, chopsticks : 1, timer : 0 > < p(3) :
    Philosopher | status : hungry, chopsticks : 0, timer : 0 > < p(4) :
    Philosopher | status : thinking, chopsticks : 0, timer : 0 > < c(3) :
    Chopstick | none > < c(4) : Chopstick | none >, 0}, 'grab-stick} {{< p(0) :
    Philosopher | status : hungry, chopsticks : 1, timer : 0 > < p(1) :
    Philosopher | status : hungry, chopsticks : 1, timer : 0 > < p(2) :
    Philosopher | status : hungry, chopsticks : 1, timer : 0 > < p(3) :
    Philosopher | status : hungry, chopsticks : 1, timer : 0 > < p(4) :
    Philosopher | status : thinking, chopsticks : 0, timer : 0 > < c(4) :
    Chopstick | none >, 0}, 'get-hungry} {{< p(0) : Philosopher | status :
    hungry, chopsticks : 1, timer : 0 > < p(1) : Philosopher | status : hungry,
    chopsticks : 1, timer : 0 > < p(2) : Philosopher | status : hungry,
    chopsticks : 1, timer : 0 > < p(3) : Philosopher | status : hungry,
    chopsticks : 1, timer : 0 > < p(4) : Philosopher | status : hungry,
    chopsticks : 0, timer : 0 > < c(4) : Chopstick | none >, 0}, 'grab-stick},
    {{< p(0) : Philosopher | status : hungry, chopsticks : 1, timer : 0 > < p(
    1) : Philosopher | status : hungry, chopsticks : 1, timer : 0 > < p(2) :
    Philosopher | status : hungry, chopsticks : 1, timer : 0 > < p(3) :
    Philosopher | status : hungry, chopsticks : 1, timer : 0 > < p(4) :
    Philosopher | status : hungry, chopsticks : 1, timer : 0 >, 0}, deadlock})
Bye.
