BeginPackage["HyperGroupTest`"]; Clear["HyperGroupTest`*"]; HyperGroupTest::usage = "HyperGroupTest[LookUpTable] tests if hypergroupoid \ operation given LookUpTable forms a HyperGroup" Begin["`Private`"]; Clear["HyperGroupTest`Private`*"]; HyperGroupTest[LookUpTable_List] := Table[If[ReproductivityTest[LookUpTable[[j]]], If[AssociativityTest[LookUpTable[[j]]], True, False], False], {j, 1, Length[LookUpTable]}]; AssociativityTest[LookUpTable1_List] := Module[{i,j,k,len,test}, i = 1; j = 1; k = 1; test = True; len = Length[LookUpTable1]; While[test && i<=len, test = Union[Flatten[Union[Extract[LookUpTable1,Distribute[{LookUpTable1[[i, j]], {k}}, List]]]]] == Union[Flatten[Union[Extract[LookUpTable1,Distribute[{{i}, LookUpTable1[[j, k]]}, List]]]]]; k = k + 1; If[k > len, k = 1; j = j + 1; If[j > len, i = i + 1; j = 1]; ]; ]; Return[test] ]; ReproductivityTest[LookUpTable1_List] := Union[Apply[Union, LookUpTable1 , 1]] == {Range[1, Length[LookUpTable1]]} && Union[Apply[Union,Transpose[LookUpTable1], 1]] == {Range[1, Length[LookUpTable1]]}; End[]; EndPackage[];