Solution:
Without loss of generality, let's define the translation vector be to the c-basis vector (note that we can always redefine basis vectors to make this the case).
The mirror operation is therefore given by:
import numpy as np
M = np.eye(4).astype(np.int)
M[2, 2] = -1
print M
[[ 1 0 0 0] [ 0 1 0 0] [ 0 0 -1 0] [ 0 0 0 1]]
The translation operation is given by:
from sympy import symbols
t = symbols("t")
T = [[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, t],
[0, 0, 0, 1]]
Consider the relationship between a reflected point and a translated point. The operation that maps the reflected point to the translated point is given by:
$Op_m = p_t$
$OMp = Tp$
$OM = T$
=> $O = TM^{-1}$
O = np.dot(T, np.linalg.inv(M))
print "O = %s" % str(O)
O = [[1.0 0.0 0.0 0.0] [0.0 1.0 0.0 0.0] [0 0 -1.00000000000000 1.0*t] [0.0 0.0 0.0 1.0]]
Now consider a mirror plane at t/2. The symmetry operation is given by:
$O' = T_{t/2}MT_{-t/2}$
T__t2 = [[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, -t/2],
[0, 0, 0, 1]]
T_t2 = [[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, t/2],
[0, 0, 0, 1]]
O = np.dot(T_t2, np.dot(M, T__t2))
print "O' = %s" % str(O)
O' = [[1 0 0 0] [0 1 0 0] [0 0 -1 t] [0 0 0 1]]
We may observe that $O' = O$, i.e., a reflection with a perpendicular translation t implies the existence of a mirror plane at t/2.