Concretely, I would claim the following is valid pyop2, but would result in the halo exchanges not being completed correctly:

````python

from pyop2 import op2

node = op2.Set(4)
elem = op2.Set(2)
elem_node = op2.Map(elem, node, 3, [0,1,2, 1,2,3])

node_d = op2.Dat(node, [0,0,0,0])
elem_d = op2.Dat(elem, [0,0])

k = op2.Kernel('foo', 'foo')
op2.par_loop(k, elem, elem_d(op2.IdentityMap, op2.WRITE), node_d(elem_node, op2.READ))

# to test
from pyop2 import device
plan = device.Plan(k, elem, elem_d(op2.IdentityMap, op2.WRITE), node_d(elem_node[0], op2.READ), node_d(elem_node[1], op2.READ), node_d(elem_node[2], op2.READ), partition_size=96, refresh_cache='True')

print plan
PPlan
nblocks: 1
nelems: [2]
offset: [0]
ncolors / core / owned: 1 / 1 / 1
pcolors: [0]
blkmap: [0]
ncolblk: [1]
````

I think core and owned should both be 0 here.