On the correctness and efficiency of independent and-parallelism in logic programs