let range_disjoint p q =
match p , q with
| Block , _ | _ , Block -> F.p_false
| Index k1 , Index k2 -> F.p_neq k1 k2
| Index k1 , Range(k2,n2) | Range(k2,n2) , Index k1 ->
F.p_or
(F.p_icmp Clt k1 k2)
(F.p_icmp Cleq (F.e_iop Iadd k2 n2) k1)
| Range(k1,n1) , Range(k2,n2) ->
F.p_or
(F.p_icmp Cleq (F.e_iop Iadd k1 n1) k2)
(F.p_icmp Cleq (F.e_iop Iadd k2 n2) k1)