let rec cposition = function
| CTrue pos ->
pos
| CDump pos ->
pos
| CLet ([], c) ->
cposition c
| (CConjunction [] | CDisjunction []) ->
undefined_position
| (CConjunction l | CDisjunction l) ->
join (cposition (List.hd l)) (cposition (last l))
| CLet (l, _) ->
join (sposition (List.hd l)) (sposition (last l))
| CEquation (p, _, _) ->
p
| CInstance (p, _, _) ->
p
and sposition = function
| Scheme (p, _, _, _, _) ->
p