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
1 changed files with 34 additions and 20 deletions

View File

@ -24,7 +24,31 @@ InstallMethod(IsElementwiseIdempotentTable, "for matrix",
T -> ForAll([1..Length(T)], i->(T[i,i]=i)) 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 ## 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, InstallGlobalFunction(LeftQuasigroupByMultiplicationTable,
function(T) function(T)
if not IsLeftQuasigroupTable(T) then if not IsLeftQuasigroupTable(T) then
@ -36,8 +60,7 @@ InstallGlobalFunction(LeftQuasigroupByMultiplicationTable,
end); end);
InstallGlobalFunction(LeftQuasigroupByMultiplicationTableNC, InstallGlobalFunction(LeftQuasigroupByMultiplicationTableNC,
T -> MagmaByMultiplicationTableCreatorNC(T, LeftQuasigroupNC, T -> FiniteMagmaCreator@(T, LeftQuasigroupNC, IsLeftQuotientElement)
IsLeftQuotientElement and IsMagmaByMultiplicationTableObj)
); );
InstallGlobalFunction(RightQuasigroupByMultiplicationTable, InstallGlobalFunction(RightQuasigroupByMultiplicationTable,
@ -50,8 +73,7 @@ InstallGlobalFunction(RightQuasigroupByMultiplicationTable,
end); end);
InstallGlobalFunction(RightQuasigroupByMultiplicationTableNC, InstallGlobalFunction(RightQuasigroupByMultiplicationTableNC,
T -> MagmaByMultiplicationTableCreatorNC(T, RightQuasigroupNC, T -> FiniteMagmaCreator@(T, RightQuasigroupNC, IsRightQuotientElement)
IsRightQuotientElement and IsMagmaByMultiplicationTableObj)
); );
InstallGlobalFunction(LeftRackByMultiplicationTable, InstallGlobalFunction(LeftRackByMultiplicationTable,
@ -68,10 +90,8 @@ InstallGlobalFunction(LeftRackByMultiplicationTable,
end); end);
InstallGlobalFunction(LeftRackByMultiplicationTableNC, InstallGlobalFunction(LeftRackByMultiplicationTableNC,
T -> MagmaByMultiplicationTableCreatorNC(T, LeftRackNC, T -> FiniteMagmaCreator@(T, LeftRackNC,
IsLeftQuotientElement and IsLSelfDistElement and IsLeftQuotientElement and IsLSelfDistElement)
IsMagmaByMultiplicationTableObj
)
); );
InstallGlobalFunction(LeftQuandleByMultiplicationTable, InstallGlobalFunction(LeftQuandleByMultiplicationTable,
@ -89,10 +109,8 @@ InstallGlobalFunction(LeftQuandleByMultiplicationTable,
end); end);
InstallGlobalFunction(LeftQuandleByMultiplicationTableNC, InstallGlobalFunction(LeftQuandleByMultiplicationTableNC,
T -> MagmaByMultiplicationTableCreatorNC(T, LeftQuandleNC, T -> FiniteMagmaCreator@(T, LeftQuandleNC,
IsLeftQuotientElement and IsLSelfDistElement and IsIdempotent and IsLeftQuotientElement and IsLSelfDistElement and IsIdempotent)
IsMagmaByMultiplicationTableObj
)
); );
InstallGlobalFunction(RightRackByMultiplicationTable, InstallGlobalFunction(RightRackByMultiplicationTable,
@ -109,10 +127,8 @@ InstallGlobalFunction(RightRackByMultiplicationTable,
end); end);
InstallGlobalFunction(RightRackByMultiplicationTableNC, InstallGlobalFunction(RightRackByMultiplicationTableNC,
T -> MagmaByMultiplicationTableCreatorNC(T, RightRackNC, T -> FiniteMagmaCreator@(T, RightRackNC,
IsRightQuotientElement and IsRSelfDistElement and IsRightQuotientElement and IsRSelfDistElement)
IsMagmaByMultiplicationTableObj
)
); );
InstallGlobalFunction(RightQuandleByMultiplicationTable, InstallGlobalFunction(RightQuandleByMultiplicationTable,
@ -130,10 +146,8 @@ InstallGlobalFunction(RightQuandleByMultiplicationTable,
end); end);
InstallGlobalFunction(RightQuandleByMultiplicationTableNC, InstallGlobalFunction(RightQuandleByMultiplicationTableNC,
T -> MagmaByMultiplicationTableCreatorNC(T, RightQuandleNC, T -> FiniteMagmaCreator@(T, RightQuandleNC,
IsRightQuotientElement and IsRSelfDistElement and IsIdempotent and IsRightQuotientElement and IsRSelfDistElement and IsIdempotent)
IsMagmaByMultiplicationTableObj
)
); );
## And define the operations ## And define the operations