groupoid pregroupoid subsemigroup subgroup rackoid derived subgroup submonoid group semigroupoid loopoid