install methodology to know that structures built on mult tables are finite

This commit is contained in:
Glen Whitney 2017-10-20 16:21:59 +02:00
parent 79682e0048
commit 419408e598

View File

@ -24,7 +24,31 @@ InstallMethod(IsElementwiseIdempotentTable, "for matrix",
T -> ForAll([1..Length(T)], i->(T[i,i]=i))
);
## And a general principle: collections from finite families are finite.
InstallMethod(IsFinite, "for any collection (with a finite element family)",
[IsCollection],
function(C)
local ef;
ef := ElementsFamily(FamilyObj(C));
if HasIsFinite(ef) and IsFinite(ef) then return true; fi;
TryNextMethod();
return fail;
end);
## And now create them from multiplication tables
#First a helper function
FiniteMagmaCreator@ := function(tbl, const, filts)
local M;
M := MagmaByMultiplicationTableCreatorNC(
T, const, filts and IsMagmaByMultiplicationTableObj);
SetIsFinite(ElementsFamily(FamilyObject(M)));
return M;
end;
InstallGlobalFunction(LeftQuasigroupByMultiplicationTable,
function(T)
if not IsLeftQuasigroupTable(T) then
@ -36,8 +60,7 @@ InstallGlobalFunction(LeftQuasigroupByMultiplicationTable,
end);
InstallGlobalFunction(LeftQuasigroupByMultiplicationTableNC,
T -> MagmaByMultiplicationTableCreatorNC(T, LeftQuasigroupNC,
IsLeftQuotientElement and IsMagmaByMultiplicationTableObj)
T -> FiniteMagmaCreator@(T, LeftQuasigroupNC, IsLeftQuotientElement)
);
InstallGlobalFunction(RightQuasigroupByMultiplicationTable,
@ -50,8 +73,7 @@ InstallGlobalFunction(RightQuasigroupByMultiplicationTable,
end);
InstallGlobalFunction(RightQuasigroupByMultiplicationTableNC,
T -> MagmaByMultiplicationTableCreatorNC(T, RightQuasigroupNC,
IsRightQuotientElement and IsMagmaByMultiplicationTableObj)
T -> FiniteMagmaCreator@(T, RightQuasigroupNC, IsRightQuotientElement)
);
InstallGlobalFunction(LeftRackByMultiplicationTable,
@ -68,10 +90,8 @@ InstallGlobalFunction(LeftRackByMultiplicationTable,
end);
InstallGlobalFunction(LeftRackByMultiplicationTableNC,
T -> MagmaByMultiplicationTableCreatorNC(T, LeftRackNC,
IsLeftQuotientElement and IsLSelfDistElement and
IsMagmaByMultiplicationTableObj
)
T -> FiniteMagmaCreator@(T, LeftRackNC,
IsLeftQuotientElement and IsLSelfDistElement)
);
InstallGlobalFunction(LeftQuandleByMultiplicationTable,
@ -89,10 +109,8 @@ InstallGlobalFunction(LeftQuandleByMultiplicationTable,
end);
InstallGlobalFunction(LeftQuandleByMultiplicationTableNC,
T -> MagmaByMultiplicationTableCreatorNC(T, LeftQuandleNC,
IsLeftQuotientElement and IsLSelfDistElement and IsIdempotent and
IsMagmaByMultiplicationTableObj
)
T -> FiniteMagmaCreator@(T, LeftQuandleNC,
IsLeftQuotientElement and IsLSelfDistElement and IsIdempotent)
);
InstallGlobalFunction(RightRackByMultiplicationTable,
@ -109,10 +127,8 @@ InstallGlobalFunction(RightRackByMultiplicationTable,
end);
InstallGlobalFunction(RightRackByMultiplicationTableNC,
T -> MagmaByMultiplicationTableCreatorNC(T, RightRackNC,
IsRightQuotientElement and IsRSelfDistElement and
IsMagmaByMultiplicationTableObj
)
T -> FiniteMagmaCreator@(T, RightRackNC,
IsRightQuotientElement and IsRSelfDistElement)
);
InstallGlobalFunction(RightQuandleByMultiplicationTable,
@ -130,10 +146,8 @@ InstallGlobalFunction(RightQuandleByMultiplicationTable,
end);
InstallGlobalFunction(RightQuandleByMultiplicationTableNC,
T -> MagmaByMultiplicationTableCreatorNC(T, RightQuandleNC,
IsRightQuotientElement and IsRSelfDistElement and IsIdempotent and
IsMagmaByMultiplicationTableObj
)
T -> FiniteMagmaCreator@(T, RightQuandleNC,
IsRightQuotientElement and IsRSelfDistElement and IsIdempotent)
);
## And define the operations