тут работа производится с матрицей A (основная) и матрицей B (результат, уже с вычеркнутыми строкой и столбцом).
Алгоритм такой: curr_i - это номер строки, с которым мы работаем в данный момент, curr_j , соответственно - номер столбца. Что делаем? В цикле перебираем ВСЕ строки (для этого нам и нужно ki) и только если очередной ki (то есть номер очередной выбранной строки) не равен номеру строки, которую надо вычеркнуть (у нас это: i) продолжаем работу с элементами этой строки (работа с элементами строки построена на таком же принципе: проверяем, не нужно ли вычеркнуть очередной столбец, и если нет, записываем элемент из исходной матрицы в результат).
Почему элементы строки i и столбца j не попадают в результирующую матрицу? Дело в том, что curr_j и curr_j увеличиваются только тогда, когда строка или столбец не является вычеркиваемым. А ki и kj (при переборе) увеличиваются всегда, таким образом мы добиваемся игнорирования ненужных строки и столбца...
А вот "равенство матриц" - совсем не то, что Вы подумали...
Код
b[curr_i, curr_j] := a[ki, kj];
значит взять элемент a[ki, kj] и поместить его значение в b[curr_i, curr_j] ...
Попробуйте на листе бумаги нарисовать две матрицы 3х3 и произвести те действия, которые должна производить эта процедура (записывая промежуточные значения переменных)...