String.concat "," (List.map print_machine s) ^ "]"
;; *)
+ let omega = let delta = L(A(V 0, V 0)) in A(delta,delta)
+
+ let rec is_divergent =
+ function
+ t when t = omega -> true
+ | A(t,_) -> is_divergent t
+ | L(t) -> is_divergent t
+ | _ -> false
+
let mwhd m =
let rec aux g =
function
(* mmm -> print_endline (print_machine mmm); match mmm with *)
- m when unwind m = let d = L(A(V 0, V 0)) in A(d,d) -> [], B, []
+ m when is_divergent (unwind m) -> [], B, []
| (e,A(t1,t2),s) ->
let t2' = aux g (e,t2,[]) in
let (_,t,_) = t2' in