Free-choice Petri nets: the algebraic approach