%I #66 May 27 2023 22:38:41
%S 1,1,2,4,12,37,164,849,6081,56164,698921
%N Number of nonisomorphic right involutory Płonka magmas with n elements.
%C Alexandrul Chirvasitu and Gigel Militaru introduced the notion of a right Płonka magma as a magma X that satisfies (xy)z = (xz)y and x(yz) = xy for all x,y,z in X. It is called involutory, if it satisfies the additional property (xy)y = x for all x,y in X.
%C A right Płonka magma (X,*) is associative if and only if there exists an idempotent self-map f = f^2: X -> X such that x*y = f(x) for all x,y in X (the rows of the corresponding Cayley table must necessarily be constant). Thus the total number of associative right Płonka magmas on a given set of n elements is A000248 with A000041 as the corresponding number of isomorphism classes.
%D J. Płonka, "On k-cyclic groupoids", Math. Japon. 30 (3), 371-382 (1985).
%H A. Chirvasitu and G. Militaru, <a href="https://arxiv.org/abs/2305.14138">A universal-algebra and combinatorial approach to the set-theoretic Yang-Baxter equation</a>, arXiv:2305.14138 [math.QA], 2023.
%H Anna Romanowska and Barbara Roszkowska, <a href="https://doi.org/10.1515/dema-1987-1-224">On Some Groupoid Modes</a>, Demonstratio Mathematica, vol. 20, no. 1-2, 1987, pp. 277-290.
%o (Sage)
%o def right_involutory_plonka(n):
%o G = Integers(n)
%o Perm = SymmetricGroup(list(G))
%o M = [sigma for sigma in Perm if sigma == ~sigma]
%o def is_compatible(r):
%o return all([ r[i]*r[j] == r[j]*r[i] and r[r[i](j)] == r[j] for i in range(len(r)) for j in range(len(r)) if ZZ(r[i](j)) < len(r) ])
%o def possible_extensions(r):
%o R = []
%o for m in M:
%o r_new = r+[m]
%o if is_compatible(r_new):
%o R += [r_new]
%o return R
%o def extend(R):
%o R_new = []
%o for r in R:
%o R_new += possible_extensions(r)
%o return R_new
%o i = 0
%o R = [[]]
%o while i < n:
%o R = extend(R)
%o i += 1
%o act = lambda sigma,r: [(~sigma)*r[(~sigma)(i)]*sigma for i in range(len(r))] # In Sage, the composition of permutations is reversed.
%o orbits = []
%o while R:
%o r = R.pop()
%o orb = []
%o for sigma in Perm:
%o orb += [tuple(act(sigma,r))]
%o try: R.remove(act(sigma,r))
%o except: pass
%o orbits += [set(orb)]
%o return len(orbits)
%o (Sage)
%o def right_involutory_plonka(n):
%o N = range(n)
%o Perm = SymmetricGroup(N)
%o M = [sigma for sigma in Perm if sigma == ~sigma]
%o def is_compatible(r,r_new):
%o length = len(r)
%o inds = range(length)
%o for i in inds:
%o if not r[i]*r_new == r_new*r[i]:
%o return [false]
%o for i in inds:
%o rni = r_new(i)
%o if i < rni < length:
%o if not r[rni] == r[i]:
%o return [false]
%o if rni == length:
%o if not r_new == r[i]:
%o return [false]
%o for i in inds:
%o for j in inds:
%o if r[i](j) == length:
%o if not r_new == r[j]:
%o return [false]
%o return true, r+[r_new]
%o def possible_extensions(r):
%o R = []
%o for m in M:
%o r_potential = is_compatible(r,m)
%o if r_potential[0]:
%o R += [r_potential[1]]
%o return R
%o def extend(R):
%o R_new = []
%o for r in R:
%o R_new += possible_extensions(r)
%o return R_new
%o R = [[]]
%o for i in N:
%o R = extend(R)
%o act = lambda sigma,r: [(~sigma)*r[(~sigma)(i)]*sigma for i in range(n)] # In Sage, the composition of permutations is reversed.
%o orbits = []
%o while R:
%o r = R.pop()
%o orb = []
%o for sigma in Perm:
%o r_iso = act(sigma,r)
%o orb += [tuple(r_iso)]
%o try: R.remove(r_iso)
%o except: pass
%o orbits += [set(orb)]
%o return len(orbits)
%Y A362821 is the labeled version.
%Y Cf. A001329 (magmas), A000041, A362382, A362385, A362642, A362822.
%K nonn,hard,more
%O 0,3
%A _Philip Turecek_, Apr 14 2023
%E a(8)-a(10) from _Andrew Howroyd_, Apr 17 2023