عملیات برای هممورفیسم های گروهی در GAP

عملیات برای هممورفیسم های گروهی

هممورفیسم‌های گروهی نگاشت هستند، بنابراین تمام عملیات و ویژگی‌های نگاشت‌هایی که در فصل 32 توضیح داده شده است  ، برای آنها قابل استفاده است. (اما اغلب روش های بسیار بهتری نسبت به نقشه برداری های عمومی موجود است.)

هممورفیسم های گروهی تنها با نگاشت مجموعه ای از ژنراتورها، گروه ها را به گروه ها ترسیم می کند.

KernelOfMultiplicativeGeneralMapping( 32.9-5 ) را می توان برای محاسبه هسته هممورفیسم گروهی استفاده کرد.

gap>  hom:=GroupHomomorphismByImages(g,h,gens,[(1,2),(1,3)]); 
gap>  Kernel(hom); 
گروه([ (1،4)(2،3)، (1،2) (3،4) ])

هممورفیسم ها می توانند بین گروه ها در نمایش های مختلف نقشه برداری کنند و همچنین برای به دست آوردن گروه های هم شکل در یک نمایش متفاوت استفاده می شوند.

gap>  m1:=[[0,-1],[1,0]];;m2:=[[0,-1],[1,1]]; 
gap>  sl2z:=Group(m1,m2); # SL(2,Integers) به عنوان 
شکاف  گروه ماتریس > F:=FreeGroup(2);; 
gap>  psl2z:=F/[F.1^2,F.2^3]; #PSL(2,Z) به عنوان گروه FP 
< گروه fp در ژنراتورها [ f1, f2 ]> gap> phom:=GroupHomomorphismByImagesNC(sl2z,psl2z,[m1,m2], > GeneratorsOfGroup(psl2z)); # نسخه غیر NC گران خواهد بود 
[ [ [ 0, -1 ], [ 1, 0 ] ], [ [ 0, -1 ], [ 1, 1 ] ] ] -> [ f1, f2 ] gap> Kernel (phom)؛ # ماتریس مورب 
گروه ([[[-1، 0]، [0، -1]]، [[-1، 0]، [0، -1]]]) شکاف> P1: = (1،2) (3,4);;p2:=(2,4,5);;a5:=گروه(p1,p2);; شکاف>
 
 
 
 
 ahom:=GroupHomomorphismByImages(psl2z,a5, 
>  GeneratorsOfGroup(psl2z),[p1,p2]); # در اینجا تست هممورفیسم ارزان است. 
[ f1, f2 ] -> [ (1,2)(3,4), (2,4,5) ] gap> u:=PreImage(ahom,Group((1,2,3),(1,2 )(4،5))); 
Group() gap> Index(psl2z,u); 
10 gap> isofp:=IsomorphismFpGroup(u);; تصویر (isofp)؛ 
<گروه fp بی نهایت اندازه در ژنراتورها [ F1, F2, F3, F4 ]> gap> RelatorsOfFpGroup(Image(isofp)); 
[ F1^2, F4^2, F3^3 ] gap> up:=PreImage(phom,u);; gap> List(GeneratorsOfGroup(up),TraceMat); 
[ -2، -2، 0، -4، 1، 0 ]
 
 
 
 
 
 

برای automorphism aut ، Inverse( 31.10-8 ) automorphism معکوس aut ^{-1} را برمی گرداند . با این حال، اگر hom هم‌مورفیسم دو شکلی بین گروه‌های مختلف باشد، یا اگر hom تزریقی باشد و به‌عنوان بیجکشن تصویر آن در نظر گرفته شود، باید از عملیات InverseGeneralMapping( 32.2-3 ) استفاده شود. ( برای بحث بیشتر در مورد این مشکل Inverse( 31.10-8 ) را ببینید  .)

gap>  iso:=IsomorphismPcGroup(g); 
Pcgs([ (3،4)، (2،4،3)، (1،4)(2،3)، (1،3)(2،4) ]) -> [ f1، f2، f3، f4 ] gap> Inverse(iso); 
#I نقشه برداری باید دوطرفه باشد و منبع=محدوده داشته باشد 
#I ممکن است بخواهید از 'InverseGeneralMapping' 
fail gap> InverseGeneralMapping(iso); 
[ f1، f2، f3، f4 ] -> Pcgs([ (3،4)، (2،4،3)، (1،4)(2،3)، (1،3)(2،4) ] )
 
 

 

40.3 کارایی هممورفیسم ها

GAP اجازه ایجاد هم شکلی بین گروه های دلخواه را می دهد. این بخش کارایی پیاده سازی را در نظر می گیرد و راه هایی را نشان می دهد که چگونه نمایش های مناسب را انتخاب کنید. برای گروه‌های جایگشت (نگاه کنید به  43 ) یا گروه‌های رایانه شخصی (نگاه کنید به  46 ) این معمولاً جای نگرانی نیست، مگر اینکه گروه‌ها بسیار بزرگ شوند. با این حال، برای گروه های دیگر، محاسبات خاص ممکن است گران باشد و برخی اقدامات احتیاطی ممکن است برای جلوگیری از محاسبات گران غیر ضروری مورد نیاز باشد.

به طور خلاصه، همیشه ارزش این را دارد که به نقشه‌برداری بگوییم که یک هم‌مورفیسم است (این را می‌توان با فراخوانی انجام داد SetIsMapping) (یا ایجاد آن مستقیماً با GroupHomomorphismByImagesNC( 40.1-2 )).

عملیات اساسی مورد نیاز عبارتند از محاسبه تصویر و تصویر اولیه از عناصر و آزمایش اینکه آیا یک نقشه برداری یک هممورفیسم است یا خیر. هزینه آنها بسته به نوع نقشه برداری متفاوت خواهد بود.

 

40.3-1 نگاشتهای داده شده روی ژنراتورها

مشاهده GroupHomomorphismByImages( 40.1-1 ) و GroupGeneralMappingByImages( 40.1-3 ).

محاسبات تصاویر نیاز به بیان یک عنصر از منبع به عنوان کلمه در مولدها دارد. اگر نمی توان آن را به طور موثر انجام داد (این توسط KnowsHowToDecompose( 39.26-7 تعیین می شود ) که به trueعنوان مثال برای گروه های جایگشت دلخواه، برای گروه های PC یا برای گروه هایی که به طور محدود با تصاویر ژنراتورهای آزاد ارائه می شوند، باز می گردد) باید فاصله ژنراتورها محاسبه شود. از نظر عنصری که می تواند بسیار گران و حافظه مصرف کند.

محاسبات پیش‌تصاویر از قوانین یکسانی با نقش‌های جایگزین ژنراتورها و تصاویر آن‌ها تبعیت می‌کند.

آزمایش اینکه آیا یک نقشه‌برداری هم‌مورفیسم است یا خیر، مستلزم محاسبه یک ارائه برای منبع و ارزیابی مرتبط‌های آن در تصاویر مولدهای آن است. برای گروه‌های بزرگ‌تر، این می‌تواند گران باشد و اگر نقشه‌برداری به عنوان هممورفیسم شناخته شود، باید از GroupHomomorphismByImagesNC( 40.1-2 ) استفاده شود.

ایجاد هممورفیسم گروهی در GAP

 

هممورفیسم گروهی نقشه برداری از یک گروه به گروه دیگر است که ضرب و معکوس را رعایت می کند. آنها به عنوان یک کلاس ویژه از نگاشت ها پیاده سازی می شوند، بنابراین به ویژه تمام عملیات برای نگاشت ها، مانند Image( 32.4-6 )، PreImage( 32.5-6 )، PreImagesRepresentative( 32.5-4 )، KernelOfMultiplicativeGeneralMapping( 32.9-5 )، Source( 32.3-8 )، Range( 32.3-7 )، IsInjective( 32.3-4 ) و IsSurjective( 32.3-5 ) (به فصل  32 ، به ویژه بخش  32.9 مراجعه کنید ) برای آنها قابل اعمال است.

از هممورفیسم ها می توان برای انتقال محاسبات به گروه های هم شکل در نمایش دیگری استفاده کرد که الگوریتم های بهتری برای آن موجود است. بخش  40.5 روشی را توضیح می دهد که چگونه می توان این را به طور خودکار اعمال کرد.

هممورفیسم ها همچنین برای نمایش خودمورفیسم های گروهی استفاده می شوند و بخش 40.6 امکانات GAP را برای کار با گروه های خودمورفیسم توضیح می دهد .

بخش 40.9 توضیح می‌دهد که چگونه می‌توان GAP را برای جستجوی همه هممورفیسم‌ها بین دو گروه که دارای مشخصات خاصی هستند، ساخت.

 

40.1 ایجاد هممورفیسم های گروهی

مهم‌ترین راه ایجاد هم‌مورفیسم‌های گروهی، دادن تصاویر برای مجموعه‌ای از مولدهای گروه و گسترش آن به گروهی است که توسط ویژگی هم‌مورفیسم توسط آنها ایجاد می‌شود.

راه دوم برای ایجاد هممورفیسم ها، دادن توابعی است که تصویر و پیش تصویر را محاسبه می کنند. (یک مورد مشابه هممورفیسم هایی هستند که توسط صرف القا می شوند. سازنده های ویژه برای چنین نگاشت ها در بخش 40.6 توضیح داده شده اند  ).

طبقه سوم اپی‌مورفیسم‌های یک گروه به گروه عامل آن است. چنین هممورفیسم هایی را می توان توسط NaturalHomomorphismByNormalSubgroup( 39.18-1 ) ساخت.

طبقه چهارم هممورفیسم ها در یک گروه جایگشت است که توسط یک عمل در یک مجموعه القا می شود. چنین هم‌مورفیسم‌هایی در زمینه اقدامات گروهی توضیح داده شده‌اند، به فصل  41 و به طور خاص مراجعه کنید ActionHomomorphism( 41.7-1 ).

 

40.1-1 GroupHomomorphismByImages

‣ GroupHomomorphismByImages( G , H [[, gens ], imgs ] )( عملکرد )

GroupHomomorphismByImagesهمریخت گروه با منبع گرداند G و محدوده H است که توسط نقشه برداری لیست تعریف تیره ژنراتور از G به صفحه قبل IMG مشغول تصاویر در H .

اگر حذف شود، آرگومان‌های gens و imgs به ترتیب مقدار GeneratorsOfGroup( 39.2-4 ) G و H را پیش‌فرض می‌کنند . اگر H داده نشود، نقشه برداری به طور خودکار به عنوان سوژه در نظر گرفته می شود.

اگر ژن G را تولید نکند یا اگر نگاشت مولدها به یک هممورفیسم گسترش نیابد (یعنی اگر نگاشت مولدها فقط یک نگاشت چند ارزشی را توصیف می کند) failبازگردانده می شود.

این آزمایش می تواند بسیار گران باشد. اگر کسی مطمئن باشد که نگاشت مولدها به یک هممورفیسم گسترش می یابد، می توان با فراخوانی GroupHomomorphismByImagesNC( 40.1-2 ) از بررسی ها اجتناب کرد . (همچنین امکان ساخت نگاشتهای بالقوه چند ارزشی با GroupGeneralMappingByImages( 40.1-3 ) و آزمایش با IsMapping( 32.3-3 ) وجود دارد که آیا آنها واقعاً هممورفیسم هستند یا خیر.)

 

40.1-2 GroupHomomorphismByImagesNC

‣ GroupHomomorphismByImagesNC( G , H [[, gens ], imgs ] )( عمل )

GroupHomomorphismByImagesNCایجاد یک همریخت عنوان GroupHomomorphismByImages( 40.1-1 ) می کند، با این حال آن را تست کنید که آیا تیره تولید G و نقشه برداری از تیره به IMG مشغول واقع تعریف همریخت گروه. از آنجایی که این تست ها می توانند گران باشند، می توانند به طور قابل توجهی سریعتر از GroupHomomorphismByImages( 40.1-1 ) باشند. در صورت عدم وجود شرایط، نتایج غیر قابل پیش بینی هستند.

اگر حذف شود، آرگومان‌های gens و imgs به ترتیب مقدار GeneratorsOfGroup( 39.2-4 ) G و H را پیش‌فرض می‌کنند .

(برای ایجاد یک نگاشت احتمالاً چند ارزشی از G تا H که ضرب و معکوس را رعایت می کند، می توان از GroupGeneralMappingByImages( 40.1-3 ) استفاده کرد.)

gap> gens:=[(1,2,3,4),(1,2)];
[ (1,2,3,4), (1,2) ]
gap> g:=Group(gens);
Group([ (1,2,3,4), (1,2) ])
gap> h:=Group((1,2,3),(1,2));
Group([ (1,2,3), (1,2) ])
gap> hom:=GroupHomomorphismByImages(g,h,gens,[(1,2),(1,3)]);
[ (1,2,3,4), (1,2) ] -> [ (1,2), (1,3) ]
gap> Image(hom,(1,4));
(2,3)
gap> map:=GroupHomomorphismByImages(g,h,gens,[(1,2,3),(1,2)]);
fail

کار با لیست در GAP

gap> l := [ 2, 3, 5, 7, 11, 13 ];;  l[1];  l[2];  l[6];
2
3
13
gap> l := [ 2, 3, 5, 7, 11, 13, 17, 19 ];;
gap> l{[4..6]};  l{[1,7,1,8]};
[ 7, 11, 13 ]
[ 2, 17, 2, 19 ]
gap> m := [ [1,2,3], [4,5,6], [7,8,9], [10,11,12] ];;  m{[1,2,3]}{[3,2]};
[ [ 3, 2 ], [ 6, 5 ], [ 9, 8 ] ]
gap> l := m{[1,2,3]};; l{[3,2]};
[ [ 7, 8, 9 ], [ 4, 5, 6 ] ]
ListElement := function ( list, pos, level )
 if level = 0 then
  return list[pos];
 else
  return List( list, elm -> ListElement(elm,pos,level-1) );
 fi;
end;
gap> l := [ 1, 2, 3 ];;
gap> l[1] := 3;; l;             # assign a new object
[ 3, 2, 3 ]
gap> l[2] := [ 4, 5, 6 ];; l;   #  may be of any type
[ 3, [ 4, 5, 6 ], 3 ]
gap> l[ l[1] ] := 10;; l;       #  may be an expression
[ 3, [ 4, 5, 6 ], 10 ]