private void ReduceColumn(int i, ICollection<Row> rows) { if (rows.Count <= 1) return; var head = rows.Head(); if (head.Xs[i] == 0) return; var tail = rows.Tail(); var r = FindRow(i, head, tail); if (r != null) { head.AddMult(r, head.Xs[i] / -r.Xs[i]); LogStep(); } ReduceColumn(i, tail); }