以下では行列を「列ベクトルを成分とする行ベクトル」として表記します.列ベクトルは()で、行ベクトルは[] で表します.
というわけで、11成分が p, 12成分が q, 21成分が r, 22成分が s の行列は [(p, r), (q, s)]  と表すことにします.では証明に入ります.a, b, c を n 次元実数ベクトルとし、<x, y> を標準内積、|x| := \sqrt(<x, x>) とし、行列 A を次のように定義する:

A := [(<a,a>, <a,b>, <a,c>), (<b,a>, <b,b>, <b,c>), (<c,a>, <c,b>, <c,c>)].

このとき

det(A) =det([(Σ a_i*a_i, Σ a_i*b_i, Σ a_i*c_i),
(Σ b_j*a_j, Σ b_j*b_j, Σ b_j*c_j),
(Σ c_k*a_k, Σ c_k*b_k, Σ c_k*c_k)])

= Σ_{i,j,k} a_i * b_j * c_k
det([(a_i, b_i, c_i), (a_j, b_j, c_j), (a_k, b_k, c_k)]).

i,j,k が重複している項は det因子が消えるので、#{i,j,k}=3 となる項だけが残る.
detを列ベクトル 3 個を引き数とする関数とみなすと、列の置換σによって sgn(σ)だけ
変化するので

   = Σ_{1≦i<j<k≦n} det(Pi, Pj, Pk) Σ_{σ∈S(i,j,k)} sgn(σ) a_σ(i) * b_σ(j) * c_σ(k),(※)
ただし Pi := (a_i, b_i, c_i), etc.


(※) = Σ_{1≦i<j<k≦n} {det(Pi, Pj, Pk)}^2 ≧ 0.

次に等号成立条件を考える.n×3行列Bを次のように定義する:

B := [(a_1, ... ,a_n), (b_1, ... ,b_n), (c_1, ... ,c_n)].

すると A = B^T ・ B. そして rank(A) = rank(B). よって det(A) = 0 ⇔ rank(A) < 3 ⇔ rank(B) < 3
⇔ (a_1, ... ,a_n), (b_1, ... ,b_n), (c_1, ... ,c_n) が一次従属.

よって等号成立は a, b, c が一次従属のとき.