constructive abstract algebra