Documente Academic
Documente Profesional
Documente Cultură
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
1243
iteratia gama
3412
2341
4123
1234
nu este paramedial
nu este asociativ
nu este bicomutativ
nu este AG grupoid
nu este GA-grupoid
nu este hexagonal
Nu este unitate
1=E(1,2)
nu este medial
nu este paramedial
nu este asociativ
nu este bicomutativ
nu este AG grupoid
nu este GA-grupoid
nu este hexagonal
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
nu este paramedial
nu este asociativ
nu este bicomutativ
nu este AG grupoid
nu este GA-grupoid
nu este hexagonal
Nu este unitate
1=E(1,1)
nu este medial
nu este paramedial
nu este asociativ
nu este bicomutativ
nu este AG grupoid
nu este GA-grupoid
nu este hexagonal
Nu este unitate
4=E(4,4)
3. Grupoid initial
123
312
231
Grupoid final
321
132
213
iteratia gama
312
231
123
este paramedial
nu este asociativ
este bicomutativ
nu este distributiv la dreapta
este AG grupoid
nu este GA-grupoid
nu este hexagonal
Nu este unitate
1=E(1,2)
este medial
este paramedial
nu este asociativ
este bicomutativ
este AG grupoid
nu este GA-grupoid
este hexagonal
Nu este unitate
3=E(3,2)
4. Grupoid initial
123
231
312
Grupoid final
312
231
123
iteratia gama
231
312
123
este paramedial
este asociativ
este bicomutativ
este AG grupoid
este GA - grupoid
este AD-grupoid
este DA-grupoid
nu este hexagonal
Este unitate 1
1=E(1,1)
este medial
este paramedial
este asociativ
este bicomutativ
este AG grupoid
este GA - grupoid
este AD-grupoid
este DA-grupoid
este hexagonal
Este unitate 3
3=E(3,3)
Ex 1 Ex 2 E3 E4
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
Medial - - - - + + + +
Paramedial - - - - + + + +
Bicomutativ - - - - + + + +
Asociativ - - - - - - + +
Distributiv
- - - - - - - -
dreapta
Distributiv
- - - - - - - -
stânga
AG grupoid - - - - + + + +
GA grupoid - - - - - - + +
AD grupoid - - - - - - + +
DA grupoid - - - - - - + +
Hexagonal - - - - + + - +