On the third paragraph, if Z[i, j] = X[i, j + 1] then isn’t Z the result of shifting X one pixel to the left? Z[i, 0] = X[i, 1] so the second column of X becomes the first column of Z.
the textbook is correct in fact
Is there a possibility that for 6.5.5 1), you can actually create a different convolutional layer which gives the same results as an average pooling? If so, how can we do this?