Sunteți pe pagina 1din 18

Laboratorul 6.

Verificarea izomorfismelor
Fie sunt daţi doi grupoizi (Q,*) şi (Q,º) se cere de alcătuit un program, care ar
determina dacă grupoizii respectivi sunt izomorfi sau nu sunt izomorfi. Se ştie că
grupoidul (Q,*) este izomorf cu grupoidul (Q,º) dacă există aşa un morfism bijectiv pentru
care α(x * y) = αx º αy.
Program Izotmorf;
uses crt;
type masiv=array[1..20,1..20] of byte;
var rez,m,m1,m2,m3:masiv;
n,i,j:byte;
izotop,t,k,d,r,d1,r1,r2:integer;
st,b,c:array[1..20] of 0..20;
Procedure medial(m:masiv);
var l,i,j,k,t:integer;
begin
l:=0;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
for t:=1 to n do
begin
d:=m[i,j];
r:=m[k,t];
d1:=m[i,k];
r1:=m[j,t];
if m[d,r]<>m[d1,r1] then inc(l);end;
if l=0 then writeln('initial este medial')
else writeln('initial nu este medial');
end;
Procedure medial1(m3:masiv);
var l,i,j,k,t:integer;
begin
l:=0;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
for t:=1 to n do
begin
d:=m3[i,j];
r:=m3[k,t];
d1:=m3[i,k];
r1:=m3[j,t];
if m3[d,r]<>m3[d1,r1] then inc(l);end;
if l=0 then writeln('este medial')
else writeln('nu este medial');
end;
Procedure paramedial(m:masiv);
var l,i,j,k,t:integer;
begin
l:=0;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
for t:=1 to n do
begin
d:=m[i,j];
r:=m[k,t];
d1:=m[t,j];
r1:=m[k,i];
if m[d,r]<>m[d1,r1] then inc(l);end;
if l=0 then writeln('este paramedial')
else writeln('nu este paramedial');end;
Procedure paramedial1(m3:masiv);
var l,i,j,k,t:integer;
begin
l:=0;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
for t:=1 to n do
begin
d:=m3[i,j];
r:=m3[k,t];
d1:=m3[t,j];
r1:=m3[k,i];
if m3[d,r]<>m3[d1,r1] then inc(l);end;
if l=0 then writeln('este paramedial')
else writeln('nu este paramedial');end;
Procedure asociativ(m:masiv);
var l,i,j,k,t:integer;
begin
l:=0;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
begin
d:=m[j,k];
d1:=m[i,j];
if m[d1,k]<>m[i,d] then inc(l);end;
if l=0 then writeln('este asociativ')
else writeln('nu este asociativ');end;
Procedure asociativ1(m3:masiv);
var l,i,j,k,t:integer;
begin
l:=0;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
begin
d:=m3[j,k];
d1:=m3[i,j];
if m3[d1,k]<>m3[i,d] then inc(l);end;
if l=0 then writeln('este asociativ')
else writeln('nu este asociativ');end;
procedure distributiv_dreapta(m:masiv);
var l,i,j,k,t:integer;
begin
l:=0;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
begin
d:=m[i,j];
d1:=m[i,k];
r1:=m[j,k];
if m[d,k]<>m[d1,r1] then inc(l);end;
if l=0 then writeln('este distribuitv la dreapta')
else writeln('nu este distributiv la dreapta');end;
Procedure Distributiv_dreapta1(m3:masiv);
var l,i,j,k,t:integer;
begin
l:=0;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
begin
d:=m3[i,j];
d1:=m3[i,k];
r1:=m3[j,k];
if m3[d,k]<>m3[d1,r1] then inc(l);end;
if l=0 then writeln('este distributiv la dreapta')
else writeln('nu este distributiv la dreapta');end;
Procedure distributiv_stinga(m:masiv);
var l,i,j,k,t:integer;
begin
l:=0;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
begin
d:=m[i,j];
d1:=m[k,i];
r1:=m[k,j];
if m[k,d]<>m[d1,r1] then inc(l);end;
if l=0 then writeln('este distributiv la stinga')
else writeln('nu este distributiv la stinga');end;
Procedure Distributiv_stinga1(m3:masiv);
var l,i,j,k,t:integer;
begin
l:=0;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
begin
d:=m3[i,j];
d1:=m3[k,i];
r1:=m3[k,j];
if m3[k,d]<>m3[d1,r1] then inc(l);end;
if l=0 then writeln('este distributiv la stinga')
else writeln('nu este distributiv la stinga');end;
Procedure AG_grupoid(m:masiv);
var l,i,j,k,t:integer;
begin
l:=0;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
begin
d:=m[i,j];
d1:=m[k,j];
if m[d,k]<>m[d1,i] then inc(l);
end;
if l=0 then writeln('este AG grupoid')
else writeln('nu este AG grupoid');end;
Procedure AG_grupoid1(m3:masiv);
var l,i,j,k,t:integer;
begin
l:=0;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
begin
d:=m3[i,j];
d1:=m3[k,j];
if m3[d,k]<>m3[d1,i] then inc(l);end;
if l=0 then writeln('este AG grupoid')
else writeln('nu este AG grupoid');end;
{------------------------------------}
procedure bicomutativ(m:masiv);
var l,i,j,k,t:integer;
begin
l:=0;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
for t:=1 to n do
begin
d:=m[i,j];
r:=m[k,t];
d1:=m[t,k];
r1:=m[j,i];
if m[d,r]<>m[d1,r1] then inc(l);end;
if l=0 then writeln('este bicomutativ') else writeln('nu este
bicomutativ');end;
procedure bicomutativ1(m3:masiv);
var l,i,j,k,t:integer;
begin
l:=0;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
for t:=1 to n do
begin
d:=m3[i,j];
r:=m3[k,t];
d1:=m3[t,k];
r1:=m3[j,i];
if m3[d,r]<>m3[d1,r1] then inc(l); end;
if l=0 then writeln('este bicomutativ') else writeln('nu este
bicomutativ'); end;

procedure GA(m:masiv);
var l,i,j,k,t:integer;
begin
l:=0;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
begin
d:=m[i,j];
r:=m[j,i];
if m[d,k]<>m[k,r] then inc(l); end;
if l=0 then writeln('este GA - grupoid') else
writeln('nu este GA-grupoid');end;
procedure GA1(m3:masiv);
var l,i,k,j,t:integer;
begin
l:=0;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
begin
d:=m3[i,j];
r:=m3[j,i];
if m3[d,k]<>m3[k,r] then inc(l);end;
if l=0 then writeln('este GA - grupoid') else
writeln('nu este GA-grupoid');end;

procedure AD(m:masiv);
var l,t,i,j,k:integer;
begin
l:=0;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
begin
d:=m[i,j];
//r:=m[j,i];
if m[d,k]<>m[k,d] then inc(l);end;
if l=0 then writeln('este AD-grupoid')
else writeln('nu este AD- grupoid');end;
procedure AD1(m3:masiv);
var l,j,k,i,t:integer;
begin
l:=0;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
begin
d:=m3[i,j];
//r:=m3[j,i];
if m3[d,k]<>m3[k,d] then inc(l);end;
if l=0 then writeln('este AD-grupoid')
else writeln('nu este AD- grupoid');end;
procedure DA(m:masiv);
var l,t,i,j,k:integer;
begin
l:=0;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
begin
d:=m[j,k];
r:=m[j,i];
if m[i,d]<>m[k,r] then inc(l);end;
if l=0 then writeln('este DA-grupoid')
else writeln('nu este DA- grupoid');end;
procedure DA1(m3:masiv);
var l,t,i,j,k:integer;
begin
l:=0;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
begin
d:=m3[j,k];
r:=m3[j,i];
if m3[i,d]<>m3[k,r] then inc(l);end;
if l=0 then writeln('este DA-grupoid')
else writeln('nu este DA- grupoid');end;

procedure hexagonal(m:masiv);
var l,i,t,j,k:integer;
begin
l:=0;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
for t:=1 to n do
begin
d:=m[i,j];
r:=m[k,t];
d1:=m[i,k];
r1:=m[j,t];
if (m[d,r]<>m[d1,r1]) or (m[i,i]<>i)
then inc(l); end;
if l=0 then writeln ('este hexagonal') else writeln('nu este
hexagonal'); end;
procedure hexagonal1(m3:masiv);
var l,t,i,j,k:integer;
begin
l:=0;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
for t:=1 to n do
begin
d:=m3[i,j];
r:=m3[k,t];
d1:=m3[i,k];
r1:=m3[j,t];
if (m3[d,r]<>m3[d1,r1]) and (m3[i,i]<>i)
then inc(l); end;
if l=0 then writeln ('este hexagonal') else writeln ('nu este
hexagonal');end;
Procedure unitate_dreapta(m:masiv);
var l,t,i,j,k:integer;
begin
j:=0;
r:=0;
for i:=1 to n do begin
l:=0;
inc(j);
if m[j,i]=i then begin
for k:=1 to n do begin
if m[k,j]=k then inc(l);
if l=n then r:=j;end;end; end;
if r<>0 then writeln('Este unitate de dreapta ', r) else
writeln('Nu este unitate de dreapta');end;
Procedure unitate_dreapta1(m3:masiv);
var l,t,i,j,k:integer;
begin
j:=0;
r:=0;
for i:=1 to n do begin
l:=0;
inc(j);
if m3[j,i]=i then begin
for k:=1 to n do begin
if m3[k,j]=k then inc(l);
if l=n then r:=j;
end;end;end;
if r<>0 then writeln('Este unitate de dreapta ', r) else
writeln('Nu este unitate de dreapta');
end;
Procedure unitate_stanga(m:masiv);
var l,t,i,j,k:integer;
begin
j:=0;
r2:=0;
for i:=1 to n do begin
l:=0;
inc(j);
if m[i,j]=i then begin
for k:=1 to n do begin
if m[j,k]=k then inc(l);
if l=n then r2:=j;
end;
end;
end;
if r2<>0 then writeln('Este unitate de stanga ', r2) else
writeln('Nu este unitate de stanga');
end;
Procedure unitate_stanga1(m3:masiv);
var l,t,i,j,k:integer;
begin
j:=0;
r2:=0;
for i:=1 to n do begin
l:=0;
inc(j);
if m3[i,j]=i then begin
for k:=1 to n do begin
if m3[j,k]=k then inc(l);
if l=n then r2:=j;
end;
end;
end;
if r2<>0 then writeln('Este unitate de stanga ', r2) else
writeln('Nu este unitate de stanga');
end;
Procedure unitate;
begin
if (r=r2) and (r>0) then writeln('Este unitate ',r) else
writeln('Nu este unitate');
end;

{-------------nm--------------------}
function mm(g:byte):byte;
var ii,jj,k,x,q:byte;
begin
for jj:=1 to n do begin
k:=0;x:=jj;
repeat begin
x:=m[x,g];inc(k);end;
until (x=jj)or(k>n);
if k>n then b[jj]:=0 else b[jj]:=k;end;
q:=b[1];
for jj:=1 to n do
if b[jj]>q then q:=b[jj]; mm:=q;end;
function nn(gg:byte):byte;
var ii,jj,k,x,q:byte;
begin
for jj:=1 to n do begin
k:=0;x:=jj;
repeat begin
x:=m[gg,x];inc(k);end;
until (x=jj)or(k>n+1);
if k>n then c[jj]:=0 else c[jj]:=k;end;
q:=c[1];
for jj:=1 to n do
if c[jj]>q then q:=c[jj]; nn:=q;end;

{---}
function mm1(g:byte):byte;
var ii,jj,k,x,q:byte;
begin
for jj:=1 to n do begin
k:=0;x:=jj;
repeat begin
x:=m3[x,g];inc(k);end;
until (x=jj)or(k>n);
if k>n then b[jj]:=0 else b[jj]:=k;end;
q:=b[1];
for jj:=1 to n do
if b[jj]>q then q:=b[jj]; mm1:=q;end;
function nn1(gg:byte):byte;
var ii,jj,k,x,q:byte;
begin
for jj:=1 to n do begin
k:=0;x:=jj;
repeat begin
x:=m3[gg,x];inc(k);end;
until (x=jj)or(k>n+1);
if k>n then c[jj]:=0 else c[jj]:=k;end;
q:=c[1];
for jj:=1 to n do
if c[jj]>q then q:=c[jj]; nn1:=q;end;
{---}

{-----------------nm-------------------}
procedure init;
var i:byte;
begin
for i:=1 to n do
st[i]:=0;
end;
procedure tipar(p:byte);
var i,j:integer;
begin
for i:=1 to n do
for j:=1 to n do
begin
t:=st[i];
m1[i,j]:=m[t,j];
end;
for i:=1 to n do
for j:=1 to n do
begin
t:=st[j];
m2[i,j]:=m1[i,t];
end;
for i:=1 to n do
for j:=1 to n do
begin
t:=m2[i,j];
m3[i,j]:=st[t];
end;
izotop:=0;
for i:=1 to n do
for j:=1 to n do begin
if m3[i,j] <> rez[i,j] then inc(izotop);
end;
if izotop=0 then begin writeln('Grupoizii dati sunt izomorfi pentru
substitutia:');
for i:=1 to p do write(st[i]);
end;writeln;
//if izotop<>0 then writeln('Grupoizii nu sunt izomorfi');
end;
function valid(p:byte):boolean;
var i:byte;
begin
valid:=true;
for i:=1 to p-1 do
if st[p]=st[i] then valid:=false;
end;
procedure Back(p:byte);
var pval:byte;
begin
for pval:=1 to n do begin
st[p]:=pval;
if valid(p) then
if p=n then tipar(p) else back(p+1);
end;
end;
begin
clrscr;
writeln('Dati dimensiunea cuasigrupului');
readln(n);
writeln('Introduceti elementele grupoidului initial:');
for i:=1 to n do
for j:=1 to n do
read(m[i,j]);
writeln('Introduceti elementele grupoidului final:');
for i:=1 to n do
for j:=1 to n do
read(rez[i,j]);
clrscr;
writeln('Grupoid initial');
for i:=1 to n do begin
for j:=1 to n do begin
write(m[i,j], ' ');
end;writeln;end;
writeln('Grupoid final');
for i:=1 to n do begin
for j:=1 to n do begin
write(rez[i,j], ' ');
end;writeln;end;
init;
Back(1);

writeln;
readln();
writeln('iteratia gama');
for i:=1 to n do
begin
for j:=1 to n do
write(m3[i,j]:2);
writeln;
end;
readln();
writeln('pentru cuasigrupul introdus avem proprietatile');
medial(m);
paramedial(m);
asociativ(m);
bicomutativ(m);
distributiv_dreapta(m);
distributiv_stinga(m);
AG_grupoid(m);
GA(m);
AD(m);
DA(m);
hexagonal(m);
unitate_dreapta(m);
unitate_stanga(m);
unitate;
for i:=1 to n do
if(m[i,i]=i)and(mm(i)<>0)and(nn(i)<>0) then begin
writeln(i,'=E(',nn(i),',',mm(i),'|'); end;
writeln;
readln();
writeln('pentru cuasigrupul izotop avem proprietatile');
medial1(m3);
paramedial1(m3);
asociativ1(m3);
bicomutativ1(m3);
distributiv_dreapta1(m3);
distributiv_stinga1(m3);
AG_grupoid1(m3);
GA1(m3);
AD1(m3);
DA1(m3);
hexagonal1(m3);
unitate_dreapta1(m3);
unitate_stanga1(m3);
unitate;
for i:=1 to n do
if(m3[i,i]=i)and(mm(i)<>0)and(nn(i)<>0) then begin
writeln(i,'=E(',nn(i),',',mm(i),'|'); end;
readkey;
end.

Rezolvare
1. Grupoid initial

1234

2341

4123

3412
Grupoid final

1234

2413

4321

3142

Grupoizii dati sunt izomorfi pentru substitutia:

1243

iteratia gama

3412

2341

4123

1234

pentru cuasigrupul introdus avem proprietatile

initial nu este medial

nu este paramedial

nu este asociativ

nu este bicomutativ

nu este distributiv la dreapta

nu este distributiv la stinga

nu este AG grupoid

nu este GA-grupoid

nu este AD- grupoid

nu este DA- grupoid

nu este hexagonal

Nu este unitate de dreapta

Este unitate de stanga 1

Nu este unitate
1=E(1,2)

pentru cuasigrupul izotop avem proprietatile

nu este medial

nu este paramedial

nu este asociativ

nu este bicomutativ

nu este distributiv la dreapta

nu este distributiv la stinga

nu este AG grupoid

nu este GA-grupoid

nu este AD- grupoid

nu este DA- grupoid

nu este hexagonal

Nu este unitate de dreapta

Este unitate de stanga 4

Nu este unitate

4=E(2,3)

2. Grupoid initial

1234

2143

3421

3142

Grupoid final

2143

1234

4321

3412
iteratia gama

3142

4312

2143

1234

pentru cuasigrupul introdus avem proprietatile

initial nu este medial

nu este paramedial

nu este asociativ

nu este bicomutativ

nu este distributiv la dreapta

nu este distributiv la stinga

nu este AG grupoid

nu este GA-grupoid

nu este AD- grupoid

nu este DA- grupoid

nu este hexagonal

Nu este unitate de dreapta

Este unitate de stanga 1

Nu este unitate

1=E(1,1)

pentru cuasigrupul izotop avem proprietatile

nu este medial

nu este paramedial

nu este asociativ

nu este bicomutativ

nu este distributiv la dreapta


nu este distributiv la stinga

nu este AG grupoid

nu este GA-grupoid

nu este AD- grupoid

nu este DA- grupoid

nu este hexagonal

Nu este unitate de dreapta

Este unitate de stanga 4

Nu este unitate

4=E(4,4)

3. Grupoid initial

123

312

231

Grupoid final

321

132

213

iteratia gama

312

231

123

pentru cuasigrupul introdus avem proprietatile

initial este medial

este paramedial

nu este asociativ

este bicomutativ
nu este distributiv la dreapta

nu este distributiv la stinga

este AG grupoid

nu este GA-grupoid

nu este AD- grupoid

nu este DA- grupoid

nu este hexagonal

Nu este unitate de dreapta

Este unitate de stanga 1

Nu este unitate

1=E(1,2)

pentru cuasigrupul izotop avem proprietatile

este medial

este paramedial

nu este asociativ

este bicomutativ

nu este distributiv la dreapta

nu este distributiv la stinga

este AG grupoid

nu este GA-grupoid

nu este AD- grupoid

nu este DA- grupoid

este hexagonal

Nu este unitate de dreapta

Este unitate de stanga 3

Nu este unitate

3=E(3,2)
4. Grupoid initial

123

231

312

Grupoid final

312

231

123

iteratia gama

231

312

123

pentru cuasigrupul introdus avem proprietatile

initial este medial

este paramedial

este asociativ

este bicomutativ

nu este distributiv la dreapta

nu este distributiv la stinga

este AG grupoid

este GA - grupoid

este AD-grupoid

este DA-grupoid

nu este hexagonal

Este unitate de dreapta 1

Este unitate de stanga 1

Este unitate 1
1=E(1,1)

pentru cuasigrupul izotop avem proprietatile

este medial

este paramedial

este asociativ

este bicomutativ

nu este distributiv la dreapta

nu este distributiv la stinga

este AG grupoid

este GA - grupoid

este AD-grupoid

este DA-grupoid

este hexagonal

Este unitate de dreapta 3

Este unitate de stanga 3

Este unitate 3

3=E(3,3)

Ex 1 Ex 2 E3 E4

3412 3142 312 231

iteratia 2341 4312 231 312


gama
4123 2143 123 123

1234 1234

Substituţiile α1=(1,2,4,3) - - -
Unitate
- - - - - 1 1 3
dreapta

Unitatea
1 4 1 1 1 3 1 3
stânga

Unitate - - - - - - 1 3

Unitate 1=E(1,2) 4=E(2,3)


1=E(1,1) 4=E(4,4) 1=E(1,2) 3=E(3,2) 1=E(1,1) 3=E(3,3)
multipla

Medial - - - - + + + +

Paramedial - - - - + + + +

Bicomutativ - - - - + + + +

Asociativ - - - - - - + +

Distributiv
- - - - - - - -
dreapta

Distributiv
- - - - - - - -
stânga

AG grupoid - - - - + + + +

GA grupoid - - - - - - + +

AD grupoid - - - - - - + +

DA grupoid - - - - - - + +

Hexagonal - - - - + + - +

S-ar putea să vă placă și