[proofplan]
We perform Gaussian elimination with partial pivoting constructively. At each step, we find the row with largest entry in the current column, swap it to the pivot position via a permutation matrix, then eliminate below the pivot. After $n-1$ steps, the product of permutations gives $P$ and the accumulated multipliers give $L$.
[/proofplan]
[step:Perform Gaussian elimination with partial pivoting]
At step 1, find $i_1$ with $|A_{i_1,1}| = \max_i |A_{i,1}|$.
If all entries in column 1 are zero, proceed to column 2.
Otherwise, let $P_1$ swap rows 1 and $i_1$, define multipliers $(\ell_1)_i = (P_1 A)_{i1}/(P_1 A)_{11}$ for $i \geq 2$, and set $L_1 = I - \ell_1 e_1^\top$.
Then $L_1 P_1 A$ has zeros below the $(1,1)$ entry.
At step $k$, apply the same procedure to the $(n-k+1) \times (n-k+1)$ submatrix in the lower-right corner: pivot, permute, and eliminate.
[/step]
[step:Assemble the factorisation]
After $n-1$ steps: $L_{n-1}P_{n-1}\cdots L_1 P_1 A = U$ (upper triangular).
Rearranging: $PA = LU$ where $P = P_{n-1}\cdots P_1$ is a permutation matrix and $L$ is unit lower triangular with entries $|L_{ij}| \leq 1$ (ensured by partial pivoting).
[/step]