| Constant | Type |
|---|---|
| ReachableRec | :('a # 'a -> bool) -> ('a -> bool) -> num -> 'a -> bool |
| Reachable | :('a # 'a -> bool) -> ('a -> bool) -> 'a -> bool |
| ReachNext | :('b # 'c -> 'a) -> 'b -> 'c -> 'a |
|- !R s s'. ReachNext R s s' = R (s,s')
|- (!R s. ReachableRec R s 0 = s) /\
!R s n.
ReachableRec R s (SUC n) =
{s' |
s' IN ReachableRec R s n \/
?s''. ReachNext R s'' s' /\ s'' IN ReachableRec R s n}
|- !R s. Reachable R s = BIGUNION {P | ?n. P = ReachableRec R s n}
|- !R s n state.
ReachableRec R s (SUC n) state =
ReachableRec R s n state \/
?state'. R (state',state) /\ ReachableRec R s n state'
|- !R s n'.
(ReachableRec R s n' = ReachableRec R s (SUC n')) ==>
(Reachable R s = ReachableRec R s n')