2 module R = RecommPccFor
4 let step k st outs ins =
5 if st <> T.OO then k st outs ins else
7 | "CONCATENATION" :: tl -> k T.OK ("CONCATENATION" :: outs) tl
8 | "APPEND" :: tl -> k T.OK ("CONCATENATION" :: outs) tl
9 | "LENGTH" :: tl -> k T.OK ("LENGTH" :: outs) tl
10 | "ITERATED" :: "TAIL" :: tl -> k T.OK ("TAIL" :: "ITERATED" :: outs) tl
11 | "TAIL" :: tl -> k T.OK ("TAIL" :: outs) tl
12 | "HEAD" :: "AND" :: "TAIL" :: tl -> k T.OK ("TAIL" :: "AND" :: "HEAD" :: outs) tl
13 | "NAT-LABELED" :: "REFLEXIVE" :: "AND" :: "TRANSITIVE" :: "CLOSURE" :: tl -> k T.OK ("CLOSURE" :: "TRANSITIVE" :: "AND" :: "REFLEXIVE" :: "NAT-LABELED" :: outs) tl
14 | "LABELLED" :: "TRANSITIVE" :: "CLOSURE" :: tl -> k T.OK ("CLOSURE" :: "TRANSITIVE" :: "LABELLED" :: outs) tl
15 | "TRANSITIVE" :: "CLOSURE" :: tl -> k T.OK ("CLOSURE" :: "TRANSITIVE" :: outs) tl
16 | "EXTENSIONAL" :: "EQUIVALENCE" :: tl -> k T.OK ("EQUIVALENCE" :: "EXTENSIONAL" :: outs) tl
17 | "DISJUNCTION" :: tl -> k T.OK ("DISJUNCTION" :: outs) tl
18 | "CONJUNCTION" :: tl -> k T.OK ("CONJUNCTION" :: outs) tl
19 | _ -> k T.OO outs ins