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)