17. Isomorphisms, invertible linear maps

📖 Reading · 9 min
💡 Every code box below is live — edit it and hit Run.

§18.3 closed with a sharp fact: when \dim V=\dim W, injective and surjective become the same condition. This lesson names a transformation with both properties an isomorphism, and shows it means something stronger than it might first appear — two vector spaces linked by one are, for every algebraic purpose, the same space wearing different labels.

Definition

T:V\to W is an isomorphism if it is linear and bijective (both injective and surjective — §18.3). If an isomorphism V\to W exists, V and W are called isomorphic, written V\cong W.

Isomorphisms are exactly the invertible linear transformations. If T is bijective, its inverse function T^{-1}:W\to V exists (as a function, from ordinary bijectivity), and T^{-1} is automatically linear too: T^{-1}(\vec w_1+\vec w_2)=T^{-1}(\vec w_1)+T^{-1}(\vec w_2) follows by applying T to both sides and using T's own linearity plus bijectivity to cancel. For T(\vec x)=A\vec x between Euclidean spaces, this matches §16.3 exactly: T is an isomorphism \iff A is invertible, and T^{-1}(\vec x)=A^{-1}\vec x.

Isomorphism theorem for dimension

V\cong W\iff\dim V=\dim W

(\Rightarrow) An isomorphism is in particular a bijective linear map, so by §18.3's rank-nullity consequence, \dim V=\dim\ker T+\dim\operatorname{im}T=0+\dim W (kernel trivial from injectivity, image all of W from surjectivity).

(\Leftarrow) If \dim V=\dim W=n, pick any bases \{\vec v_1,\dots,\vec v_n\} of V and \{\vec w_1,\dots,\vec w_n\} of W, and define T(\vec v_i)=\vec w_i (extended linearly — §18.0's basis-determination fact makes this a well-defined linear map). T sends a basis to a basis, so it's automatically bijective.

The consequence worth sitting with: \dim V=n\implies V\cong\mathbb{R}^nevery n-dimensional vector space, no matter how it's built (polynomials, matrices, abstract axiomatic constructions), is isomorphic to plain old \mathbb{R}^n. P_3\cong\mathbb{R}^4 via a_0+a_1x+a_2x^2+a_3x^3\mapsto(a_0,a_1,a_2,a_3) — literally §17.3's coordinate-vector map relative to the standard basis \{1,x,x^2,x^3\}, which is itself always an isomorphism V\to\mathbb{R}^n for any n-dimensional V. M_{2\times2}\cong\mathbb{R}^4 the same way, flattening a matrix's four entries into a vector.

What this buys: every theorem in this course proved for \mathbb{R}^n — rank-nullity, the existence of a basis, determinant properties — automatically transfers to any finite-dimensional vector space via its coordinate isomorphism, without needing to be re-proved from scratch in each new setting.

Doing it in Python

import numpy as np

A = np.array([[2., 1.], [1., 3.]])  # standard matrix of T: R^2 -> R^2

print("det(A) =", round(float(np.linalg.det(A)), 4), " (nonzero -> isomorphism)")

Ainv = np.linalg.inv(A)
v = np.array([5., 4.])
Tv = A @ v
back = Ainv @ Tv
print("T(v)        =", list(Tv))
print("T^-1(T(v))  =", [round(x, 10) or 0.0 for x in back.tolist()], " (recovers v)")
det(A) = 5.0  (nonzero -> isomorphism)
T(v)        = [14.0, 17.0]
T^-1(T(v))  = [5.0, 4.0]  (recovers v)

The coordinate-vector isomorphism P_2\cong\mathbb{R}^3, made explicit:

import numpy as np

def to_coords(a0, a1, a2):        # p = a0 + a1 x + a2 x^2  -->  (a0, a1, a2)
    return np.array([a0, a1, a2])

p = (3, -2, 1)   # 3 - 2x + x^2
q = (1,  4, 0)   # 1 + 4x

p_vec, q_vec = to_coords(*p), to_coords(*q)
sum_vec = to_coords(*(a + b for a, b in zip(p, q)))   # coefficients of p + q directly

print("[p]  =", list(p_vec))
print("[q]  =", list(q_vec))
print("[p+q] via polynomial addition:", list(sum_vec))
print("[p]+[q] via vector addition:  ", list(p_vec + q_vec))
print("agree:", np.array_equal(sum_vec, p_vec + q_vec))
[p]  = [3, -2, 1]
[q]  = [1, 4, 0]
[p+q] via polynomial addition: [4, 2, 1]
[p]+[q] via vector addition:   [4, 2, 1]
agree: True

Worked example

Is T(x,y)=(2x+y,\,x-y) an isomorphism of \mathbb{R}^2? If so, find T^{-1}.

A=\begin{pmatrix}2&1\\1&-1\end{pmatrix}. \det A=2(-1)-1(1)=-3\neq0, so A is invertible (§16.3) \Rightarrow T is an isomorphism.

A^{-1}=\frac1{-3}\begin{pmatrix}-1&-1\\-1&2\end{pmatrix}=\begin{pmatrix}\frac13&\frac13\\\frac13&-\frac23\end{pmatrix}

\boxed{T^{-1}(x,y)=\left(\frac{x+y}3,\ \frac{x-2y}3\right)}

Sanity check. T(1,2)=(2(1)+2,\,1-2)=(4,-1). Apply T^{-1}: T^{-1}(4,-1)=\left(\frac{4-1}3,\frac{4+2}3\right)=(1,2) ✓ — recovers the original input exactly, confirming T^{-1} genuinely undoes T.

Your turn

1. Is T(x,y,z)=(x+y,\,y+z) (mapping \mathbb{R}^3\to\mathbb{R}^2) ever an isomorphism? Why or why not, without computing anything?

2. Show T(x,y)=(x+y,\,x-y) is an isomorphism of \mathbb{R}^2 by computing \det A.

3. True or false: P_2 (polynomials of degree \le2) is isomorphic to \mathbb{R}^3.

Solutions

1. No, never. \dim\mathbb{R}^3=3\neq2=\dim\mathbb{R}^2, and the isomorphism theorem requires equal dimensions — no linear map between spaces of different dimension can be bijective (by §18.3's rank-nullity argument used there: the larger space always forces a nontrivial kernel). The specific formula for T is irrelevant; dimension mismatch alone rules it out.

2. A=\begin{pmatrix}1&1\\1&-1\end{pmatrix}, \det A=1(-1)-1(1)=-2\neq0 — invertible, so T is an isomorphism.

3. True. \dim P_2=3 (basis \{1,x,x^2\}, §17.2) and \dim\mathbb{R}^3=3 — equal dimensions, so by the isomorphism theorem they're isomorphic, via the coordinate map a_0+a_1x+a_2x^2\mapsto(a_0,a_1,a_2).

Check yourself in code

Determine whether A=\begin{pmatrix}1&2\\2&4\end{pmatrix} defines an isomorphism of \mathbb{R}^2, and separately whether B=\begin{pmatrix}1&2\\3&5\end{pmatrix} does.

Print exactly this:

det(A) = 0.0 -> isomorphism: False
det(B) = -1.0 -> isomorphism: True
import numpy as np

A = np.array([[1., 2.], [2., 4.]])
B = np.array([[1., 2.], [3., 5.]])

detA = np.linalg.det(A)
print(f"det(A) = {round(detA, 4)} -> isomorphism: {not np.isclose(detA, 0)}")
# print the same for B
import numpy as np

A = np.array([[1., 2.], [2., 4.]])
B = np.array([[1., 2.], [3., 5.]])

detA = np.linalg.det(A)
detB = np.linalg.det(B)
print(f"det(A) = {round(detA, 4)} -> isomorphism: {not np.isclose(detA, 0)}")
print(f"det(B) = {round(detB, 4)} -> isomorphism: {not np.isclose(detB, 0)}")

An isomorphism is a bijective linear map, equivalently an invertible one, and V\cong W exactly when \dim V=\dim W. The single biggest consequence: every n-dimensional vector space is isomorphic to \mathbb{R}^n via its coordinate map, which is why theorems proved for \mathbb{R}^n transfer automatically to polynomials, matrices, or any other finite-dimensional space.

Next: composition of linear transformations — how chaining two maps together corresponds to matrix multiplication, tying §16.2's noncommutativity directly to functions applied one after another.