We need an explicit embedding of GF(4) into GF(16). Viewing GF(16) as an extension of GF(4), we can create a list of elements from GF(16)\GF(4) as follows:
F.<z> = GF(4) # GF(4)
R.<x> = F[] # polynomials in x over GF(4)
p = R.irreducible_element(2) # some irreducible polynomial over GF(4) of degree 2
K = R.quotient_ring(p, 'a') # GF(16) as a factor ring GF(4)[x] / (p(x))
[t for t in K if t.lift().degree() > 0]
It gives the following 12 elements:
[z*a,
z*a + z,
z*a + z + 1,
z*a + 1,
(z + 1)*a,
(z + 1)*a + z,
(z + 1)*a + z + 1,
(z + 1)*a + 1,
a,
a + z,
a + z + 1,
a + 1]
where $\{0,1,z,1+z\}$ form GF(4) (and polynomials of degree $\leq 0$ in R
), and a
is a zero of the polynomial p
($=x^2 + (z + 1)x + 1$ in the above example).
P.S. You may find this answer also relevant to your question.