Many-sorted first-order logic