InstallGlobalFunction( QPAStringQuiverRho, function(Q,rho)
local rho_q, i,j,k,arr,arr1;
rho_q := []; for i in [1..Length(rho)] do
arr := []; for j in [1..Length(rho[i])] do for k in [1..NumberOfArrows(Q)] do if rho[i][j] = String(ArrowsOfQuiver(Q)[k])[1] then
Add(arr,ArrowsOfQuiver(Q)[k]); fi;
od;
od;
arr1 := arr[1]; for k in [2..Length(arr)] do
arr1 := arr1*arr[k];
od;
Add(rho_q, arr1);
od;
return rho_q; end
);
InstallGlobalFunction( QPAStringSigmaEps, function( A )
local Q, rho1, rho, i, onerel, tworel, str, Composable_Matrix, IsComposable, temp_in, temp_out,
j, k, sigma, eps, x, y;
rho1 := []; for i in [1..Length(rho)] do
onerel := CoefficientsAndMagmaElements(rho[i]);
tworel := WalkOfPath(onerel[1]);
str := Concatenation(List(tworel, a -> String(a)));
Append(rho1, [str]);
od;
Composable_Matrix := function(Q,rho)
local mat, x, str, i, j;
mat := []; for i in [1..NumberOfArrows(Q)] do
str := []; for j in [1..NumberOfArrows(Q)] do if SourceOfPath(ArrowsOfQuiver(Q)[i]) =
TargetOfPath(ArrowsOfQuiver(Q)[j]) and not
\in(ArrowsOfQuiver(Q)[j]*ArrowsOfQuiver(Q)[i],rho) then
Append(str, [1]); else
Append(str, [0]); fi;
od;
Append(mat, [str]);
od;
return mat; end;
IsComposable := function(Q,rho,arrow1,arrow2)
local i, Mat, pos1, pos2, j;
Mat := Composable_Matrix(Q,rho); for i in [1..NumberOfArrows(Q)] do if arrow1 = ArrowsOfQuiver(Q)[i] then
break; fi;
od; for j in [1..NumberOfArrows(Q)] do if arrow2 = ArrowsOfQuiver(Q)[j] then
break; fi;
od;
return Mat[i][j]; end;
sigma := [];
eps := []; for i in [1..NumberOfArrows(Q)] do
Append(sigma, [0]);
Append(eps, [0]);
od;
rho := QPAStringQuiverRho(Q,rho1);
for i in [1..NumberOfVertices(Q)] do
x := IncomingArrowsOfVertex(VerticesOfQuiver(Q)[i]);
y := OutgoingArrowsOfVertex(VerticesOfQuiver(Q)[i]); if Length(x) = 2then
eps[temp_in(Q, i, 1)] := 1;
eps[temp_in(Q, i, 2)] := -1; if Length(y) = 1then if IsComposable(Q, rho, y[1], x[1]) = 1then
sigma[temp_out(Q, i, 1)] := -1; elif IsComposable(Q, rho, y[1], x[2]) = 1then
sigma[temp_out(Q, i, 1)] := 1; fi; elif Length(y) = 2then if IsComposable(Q, rho, y[1], x[1]) = 1 or
IsComposable(Q, rho, y[2], x[2]) = 1then
sigma[temp_out(Q, i, 1)] := -1;
sigma[temp_out(Q, i, 2)] := 1; else
sigma[temp_out(Q, i, 1)] := 1;
sigma[temp_out(Q, i, 2)] := -1; fi; fi; elif Length(x) = 1then if Length(y) = 1then
eps[temp_in(Q, i, 1)] := 1;
sigma[temp_out(Q, i, 1)] := -1; elif Length(y) = 2then
sigma[temp_out(Q, i, 1)] := 1;
sigma[temp_out(Q, i, 2)] := -1; if IsComposable(Q, rho, y[1], x[1]) = 1then
eps[temp_in(Q, i, 1)] := -1; else
eps[temp_in(Q, i, 1)] := 1; fi; fi; elif Length(x) = 0then
sigma[temp_out(Q, i, 1)] := 1;
sigma[temp_out(Q, i, 2)] := -1; fi;
od;
return [sigma, eps]; end
);
InstallMethod( IsValidString, "for stringalgebras and strings",
true,
[ IsAlgebra, IsString ], 0, function( A, input_str )
local IsValidStringSA, IsReducedWalk, IsValidWalk, Q, rho1, rho, vertices, arrows, i, x, y, str; if IsStringAlgebra(A) = false then
Error("The input algebra is not a string algebra");
return 0; fi;
for i in [1..Length(vertices)] do if Length(String(vertices[i])) <> 2 or String(vertices[i])[1] <> 'v' or
String(vertices[i])[2] <> String(i)[1] then
Error("The Quiver of A is not acceptable");
return 0; fi;
od;
for i in [1..Length(arrows)] do if Length(String(arrows[i])) <> 1 or String(arrows[i])[1] <> CharInt(i+96) then
Error("The Quiver of A is not acceptable");
return 0; fi;
od;
rho := []; for i in [1..Length(rho1)] do
x := CoefficientsAndMagmaElements(rho1[i]);
y := WalkOfPath(x[1]);
str := Concatenation(List(y, a -> String(a)));
Append(rho, [str]);
od;
IsReducedWalk := function(Q, input_str)
local x,y,i,j;
x := 0;
y := ['-','1']; for i in [1..Length(ArrowsOfQuiver(Q))] do
Append(y, String(ArrowsOfQuiver(Q)[i]));
od; for i in [1..Length(ArrowsOfQuiver(Q))] do
Append(y, [CharInt(SIntChar(String(ArrowsOfQuiver(Q)[i])[1])-32)]);
od;
for i in [1..Length(input_str)] do if not input_str[i] in y then
return 0; fi;
od; for i in [1..Length(input_str) - 1] do if SIntChar(input_str[i]) - SIntChar(input_str[i+1]) = 32 or
SIntChar(input_str[i + 1]) - SIntChar(input_str[i]) = 32then
x := 1; else continue; fi;
od; if x = 0then return 1; else return 0; fi; end;
IsValidWalk := function (Q, input_str)
local i,j,k,x,s,t,array, y;
x := 0;
y := []; for i in [1..Length(ArrowsOfQuiver(Q))] do
Append(y, String(ArrowsOfQuiver(Q)[i]));
od; for i in [1..Length(ArrowsOfQuiver(Q))] do
Append(y, [CharInt(SIntChar(String(ArrowsOfQuiver(Q)[i])[1]) - 32)]);
od; for i in [1..Length(input_str)] do if not input_str[i] in y then
return false; fi;
od; for i in [1..Length(input_str) - 1] do if SIntChar(input_str[i]) > 96then if SIntChar(input_str[i + 1]) > 96then if SourceOfPath(ArrowsOfQuiver(Q)[SIntChar(input_str[i])
- SIntChar('a') + 1]) <>
TargetOfPath(ArrowsOfQuiver(Q)[SIntChar(input_str[i + 1])
- SIntChar('a') + 1]) then
x := 1; fi; else if SourceOfPath(ArrowsOfQuiver(Q)[SIntChar(input_str[i])
- SIntChar('a') + 1]) <>
SourceOfPath(ArrowsOfQuiver(Q)[SIntChar(input_str[i + 1])
- SIntChar('A') + 1]) then
x := 1; fi; fi; else if SIntChar(input_str[i + 1]) > 96then if TargetOfPath(ArrowsOfQuiver(Q)[SIntChar(input_str[i])
- SIntChar('A') + 1]) <>
TargetOfPath(ArrowsOfQuiver(Q)[SIntChar(input_str[i + 1])
- SIntChar('a') + 1]) then
x := 1; fi; else if TargetOfPath(ArrowsOfQuiver(Q)[SIntChar(input_str[i])
- SIntChar('A') + 1]) <>
SourceOfPath(ArrowsOfQuiver(Q)[SIntChar(input_str[i + 1])
- SIntChar('A') + 1]) then
x := 1; fi; fi; fi;
od; if x = 0then if SIntChar(input_str[Length(input_str)]) > 96then
s := SourceOfPath(ArrowsOfQuiver(Q)[SIntChar(input_str[Length(input_str)])
- SIntChar('a') + 1]); else
s := TargetOfPath(ArrowsOfQuiver(Q)[SIntChar(input_str[Length(input_str)])
- SIntChar('A') + 1]); fi;
if SIntChar(input_str[1]) > 96then
t := TargetOfPath(ArrowsOfQuiver(Q)[SIntChar(input_str[1])
- SIntChar('a') + 1]); else
t := SourceOfPath(ArrowsOfQuiver(Q)[SIntChar(input_str[1])
- SIntChar('A') + 1]); fi;
array := [s, t]; fi;
if x = 1then return false; else return true; fi; end;
IsValidStringSA := function(A, Q, rho1, input_str)
local i, j, k, rel, temp, temp_caps, temp1, y, x, l, length, count, num,
num_digits, lit, sigma, eps, array, rho;
rho := QPAStringQuiverRho(Q,rho1);
array := QPAStringSigmaEps(A);
sigma := array[1];
eps := array[2];
num := NumberOfVertices(Q);
num_digits := 0; while num <> 0do
num := num - num mod 10;
num := num/10;
num_digits := num_digits + 1;
od;
y := "0123456789(-,)"; for i in [1..Length(ArrowsOfQuiver(Q))] do
y := Concatenation(String(ArrowsOfQuiver(Q)[i]), y);
od; for i in [1..Length(ArrowsOfQuiver(Q))] do
y := Concatenation([CharInt(SIntChar(String(
ArrowsOfQuiver(Q)[i])[1]) - 32)], y);
od; for i in [1..Length(input_str)] do if not input_str[i] in y then
return false; fi;
od; if input_str[1] = '('then
num := 0; for j in [2..num_digits + 1] do
num := num + (SIntChar(input_str[j])
- SIntChar('0')) * 10^(num_digits - j + 1);
od; if \in(num,[1..NumberOfVertices(Q)]) and input_str[num_digits + 2] = ',' and input_str[num_digits + 3] = '1' and
input_str[num_digits+4] = ')'then
return true; elif \in(num,[1..NumberOfVertices(Q)]) and input_str[num_digits + 2]
= ',' and input_str[num_digits + 3] = '-' and
input_str[num_digits + 4] = '1' and
input_str[num_digits + 5] = ')'then
return true; fi; fi; for i in [1..14] do
Unbind(y[Length(y)]);
od;
count := 0; if Length(input_str) > 2then for i in [1..Length(input_str) - 2] do if input_str[i] = '-' and input_str[i + 1] = '1' and
\in(input_str[i+2],y) then if SIntChar(input_str[i + 2]) > 96 and
eps[SIntChar(input_str[i + 2]) - SIntChar('a') + 1] = 1then
return false; elif SIntChar(input_str[i + 2]) < 96 and
sigma[SIntChar(input_str[i + 2]) - SIntChar('A') + 1] = 1then
return false; else for j in [i..Length(input_str) - 2] do
input_str[j] := input_str[j + 2];
od;
count := count + 2; fi; if input_str[i + 1] = '1'then input_str[i + 1] := '2'; fi; fi;
od; fi;
if Length(input_str) > 1then for i in [1..Length(input_str) - 1] do if input_str[i] = '1' and \in(input_str[i + 1], y) then if SIntChar(input_str[i + 1]) > 96 and
eps[SIntChar(input_str[i + 1]) - SIntChar('a') + 1] = -1then
return false; elif SIntChar(input_str[i + 1]) < 96 and
sigma[SIntChar(input_str[i + 1]) - SIntChar('A') + 1]= -1then
return false; else for j in [i..Length(input_str) - 1] do
input_str[j] := input_str[j + 1];
od;
count := count + 1; fi; fi;
od; fi;
if Length(input_str) > 1then if input_str[Length(input_str) - 1] = '-'
and input_str[Length(input_str)] = '1' and
\in(input_str[Length(input_str) - 2], y) then if SIntChar(input_str[Length(input_str) - 2]) > 96 and
sigma[SIntChar(input_str[Length(input_str) - 2]) -
SIntChar('a') + 1] = -1then
return false; elif SIntChar(input_str[Length(input_str)-2]) < 96 and
eps[SIntChar(input_str[Length(input_str) - 2]) -
SIntChar('A') + 1] = -1then
return false; else count := count + 2; fi; elif input_str[Length(input_str)] = '1' and
\in(input_str[Length(input_str) - 1], y) then if SIntChar(input_str[Length(input_str) - 1]) > 96 and
sigma[SIntChar(input_str[Length(input_str) - 1]) -
SIntChar('a') + 1] = 1then
return false; elif SIntChar(input_str[Length(input_str) - 1]) < 96 and
eps[SIntChar(input_str[Length(input_str) - 1]) -
SIntChar('A') + 1] = 1then
return false; else
count := count + 1; fi; fi; fi;
for i in [1..count] do
Unbind(input_str[Length(input_str)]);
od;
for i in [1..Length(input_str)] do if not input_str[i] in y then
return false; fi;
od;
if IsReducedWalk(Q, input_str) = 0then return false; fi;
if IsValidWalk(Q, input_str) = false then
return false; fi;
x := 0; for i in [1..Length(rho)] do
temp := "";
temp_caps := "";
rel := WalkOfPath(rho[i]); for j in [1..Length(rel)] do
temp := Concatenation(String(rel[j]), temp);
od; for j in [1..Length(rel)] do
temp1 := CharSInt(SIntChar(String(rel[j])[1]) - 32);
temp_caps[j] := temp1;
od;
l := Length(input_str)-Length(temp);
for j in [0..l] do for k in [1..Length(temp)] do if input_str[j + k] <> temp[k] then
break; fi;
od; if k = Length(temp) and input_str[j + k] = temp[k] then
x := 3;
break; fi;
od; for j in [0..l] do for k in [1..Length(temp_caps)] do if input_str[j + k] <> temp_caps[k] then
break; fi;
od; if k = Length(temp_caps) and input_str[j +k] = temp_caps[k] then
x := 3;
break; fi;
od;
od;
if x=0then return true; else return false; fi; end;
return IsValidStringSA(A, Q, rho, input_str); end
);
InstallGlobalFunction( QPAStringDirectLeft, function(A, input_str, sigma, eps)
local Q, x, y, z, temp, output, num, num_digits, j, temp3;
output := IsValidString(A, input_str); #if output <> "Valid Positive Length String" then # return output; #fi;
Q := QuiverOfPathAlgebra(A); if output = true and input_str[1] = '('then
num := NumberOfVertices(Q);
num_digits := 0; while num <> 0do
num := num - num mod 10;
num := num/10;
num_digits := num_digits + 1;
od;
num := 0; for j in [2..num_digits + 1] do
num := num +
(SIntChar(input_str[j]) - SIntChar('0')) * 10^(num_digits - j + 1);
od;
temp := OutgoingArrowsOfVertex(VerticesOfQuiver(Q)[num]); if input_str[num_digits + 3] = '1'then if Length(temp) = 1 and
sigma[SIntChar(String(temp[1])[1]) - SIntChar('a') + 1] = -1then
z := String(temp[1]); elif Length(temp) = 2then if sigma[SIntChar(String(temp[1])[1]) - SIntChar('a') + 1] = -1then
z := String(temp[1]); else
z := String(temp[2]); fi; else z := "Cannot Perform The Operation"; fi;
return z; elif input_str[num_digits + 3] = '-'then if Length(temp) = 1 and
sigma[SIntChar(String(temp[1])[1]) - SIntChar('a') + 1] = 1then
z := String(temp[1]); elif Length(temp) = 2then if sigma[SIntChar(String(temp[1])[1]) - SIntChar('a') + 1] = 1then
z := String(temp[1]); else
z := String(temp[2]); fi; else z := "Cannot Perform The Operation"; fi;
return z; fi; fi;
if SIntChar(input_str[1]) > 96then
x := SIntChar(String(TargetOfPath(ArrowsOfQuiver(Q)[
SIntChar(input_str[1]) - SIntChar('a') + 1]))[2]) - SIntChar('0');
if Length(temp3) = 2then if SIntChar(String(temp3[1])[1])
- SIntChar(input_str[1]) = 32then
y := String(temp3[2])[1]; else
y := String(temp3[1])[1]; fi;
z := [y];
Append(z, input_str); if IsValidString(A, z) = false then
return "Cannot Perform The Operation"; fi; else
return "Cannot Perform The Operation"; fi; fi;
return z; end
);
InstallGlobalFunction( QPAStringInverseLeft, function(A, input_str, sigma, eps)
local Q, x, y, z, temp, output, num, num_digits, j, temp2;
output := IsValidString(A, input_str); #if output = "Valid Positive Length String" then # return output; #fi;
Q := QuiverOfPathAlgebra(A); if output = true and input_str[1] = '('then
num := NumberOfVertices(Q);
num_digits := 0; while num <> 0do
num := num - num mod 10;
num := num/10;
num_digits := num_digits + 1;
od;
num := 0; for j in [2..num_digits + 1] do
num := num +
(SIntChar(input_str[j]) - SIntChar('0')) * 10^(num_digits - j + 1);
od;
temp := IncomingArrowsOfVertex(VerticesOfQuiver(Q)[num]); if input_str[num_digits + 3] = '1'then if Length(temp) = 1 and eps[SIntChar(String(temp[1])[1])
- SIntChar('a') + 1] = -1then
z := [CharInt(SIntChar(String(temp[1])[1]) - 32)]; elif Length(temp) = 2then if eps[SIntChar(String(temp[1])[1]) - SIntChar('a') + 1] = -1then
z := [CharInt(SIntChar(String(temp[1])[1]) - 32)]; else
z := [CharInt(SIntChar(String(temp[2])[1]) - 32)]; fi; else z := "Cannot Perform The Operation"; fi;
return z; elif input_str[num_digits + 3] = '-'then if Length(temp) = 1 and
eps[SIntChar(String(temp[1])[1]) - SIntChar('a') + 1] = 1then
z := [CharInt(SIntChar(String(temp[1])[1]) - 32)]; elif Length(temp) = 2then if eps[SIntChar(String(temp[1])[1]) - SIntChar('a') + 1] = 1then
z := [CharInt(SIntChar(String(temp[1])[1]) - 32)]; else
z := [CharInt(SIntChar(String(temp[2])[1]) - 32)]; fi; else z := "Cannot Perform The Operation"; fi;
return z; fi; fi;
if SIntChar(input_str[1]) > 96then
x := SIntChar(String(TargetOfPath(ArrowsOfQuiver(Q)[
SIntChar(input_str[1]) - SIntChar('a') + 1]))[2]) - SIntChar('0');
if Length(temp2) = 2then if String(temp2[1])[1] = input_str[1] then
y := String(temp2[2])[1]; else
y := String(temp2[1])[1]; fi;
z := [CharInt(SIntChar(y) - 32)];
Append(z, input_str); if IsValidString(A, z) = false then
return "Cannot Perform The Operation"; fi; else
return "Cannot Perform The Operation"; fi; else
x := SIntChar(String(SourceOfPath(ArrowsOfQuiver(Q)[
SIntChar(input_str[1]) - SIntChar('A') + 1]))[2]) - SIntChar('0');
if Length(temp2) = 2then
z := [CharInt(SIntChar(String(temp2[1])[1]) - 32)];
Append(z, input_str); if IsValidString(A, z) = false then
z := [CharInt(SIntChar(String(temp2[2])[1]) - 32)];
Append(z, input_str); if IsValidString(A, z) = false then
return "Cannot Perform The Operation"; fi; fi; elif Length(temp2) = 1then
z := [CharInt(SIntChar(String(temp2[1])[1]) - 32)];
Append(z, input_str); if IsValidString(A, z) = false then
return "Cannot Perform The Operation"; fi; else return "Cannot Perform The Operation"; fi; fi;
return z; end
);
InstallGlobalFunction( QPAStringDirectRight, function(A, input_str, sigma, eps)
local Q, x, y, z, temp, output, i, num, num_digits, j, temp2; #if IsValidString(Q,rho,input_str) = false then #return false; #fi;
output := IsValidString(A, input_str);
Q := QuiverOfPathAlgebra(A);
if output = true and input_str[1] = '('then
num := NumberOfVertices(Q);
num_digits := 0; while num <> 0do
num := num - num mod 10;
num := num/10;
num_digits := num_digits + 1;
od;
num := 0; for j in [2..num_digits+1] do
num := num +
(SIntChar(input_str[j])-SIntChar('0')) * 10^(num_digits -j + 1);
od;
temp := IncomingArrowsOfVertex(VerticesOfQuiver(Q)[num]); if input_str[num_digits + 3] = '1'then if Length(temp) = 1 and eps[SIntChar(String(temp[1])[1])
- SIntChar('a')+1] = 1then
z := temp; elif Length(temp) = 2then if eps[SIntChar(String(temp[1])[1]) - SIntChar('a') + 1] = 1 then z := String(temp[1]); else
z := String(temp[2]); fi; else z := "Cannot Perform The Operation"; fi;
return z; elif input_str[num_digits + 3] = '-'then if Length(temp) = 1 and eps[SIntChar(String(temp[1])[1])
- SIntChar('a') + 1] = -1then
z := String(temp[1]); elif Length(temp) = 2then if eps[SIntChar(String(temp[1])[1]) - SIntChar('a') + 1] = -1 then z := String(temp[1]); else
z := String(temp[2]); fi; else z := "Cannot Perform The Operation"; fi;
return z; fi; fi; #temp := input_str;
temp := []; for i in [1..Length(input_str)] do
Add(temp, input_str[i]);
od; if SIntChar(temp[Length(temp)]) > 96then
x := SIntChar(String(SourceOfPath(ArrowsOfQuiver(Q)[
SIntChar(temp[Length(temp)]) - SIntChar('a') + 1]))[2])
- SIntChar('0');
temp2 := IncomingArrowsOfVertex(VerticesOfQuiver(Q)[x]); if Length(temp2) = 2then
z := [String(temp2[1])[1]];
temp := Concatenation(temp, z); if IsValidString(A, temp) = false then
z := [String(temp2[2])[1]];
temp := input_str;
temp := Concatenation(temp, z); if IsValidString(A, temp) = false then
return "Cannot Perform The Operation"; fi; fi; elif Length(temp2) = 1then
z := [String(temp2[1])[1]];
temp := Concatenation(temp, z); if IsValidString(A, temp) = false then
return "Cannot Perform The Operation"; fi; else return "Cannot Perform The Operation"; fi; else
x := SIntChar(String(TargetOfPath(ArrowsOfQuiver(Q)[
SIntChar(temp[Length(temp)]) - SIntChar('A') + 1]))[2])
- SIntChar('0');
temp2 := IncomingArrowsOfVertex(VerticesOfQuiver(Q)[x]); if Length(temp2) = 2then if SIntChar(String(temp2[1])[1])
- SIntChar(temp[Length(temp)]) = 32then
y := String(temp2[2])[1]; else
y := String(temp2[1])[1]; fi;
z := [y];
temp := Concatenation(temp, z); if IsValidString(A, temp) = false then
return "Cannot Perform The Operation"; fi; else
return "Cannot Perform The Operation"; fi; fi;
return temp; end
);
InstallGlobalFunction( QPAStringInverseRight, function(A, input_str, sigma, eps)
local Q, x, y, z, temp, output, i, num_digits, num, j, temp3; #if IsValidString(Q,rho,input_str) = false then # return false; #fi;
output := IsValidString(A, input_str);
Q := QuiverOfPathAlgebra(A);
if output = true and input_str[1] = '('then
num := NumberOfVertices(Q);
num_digits := 0; while num <> 0do
num := num - num mod 10;
num := num/10;
num_digits := num_digits + 1;
od;
num := 0; for j in [2..num_digits + 1] do
num := num +
(SIntChar(input_str[j]) - SIntChar('0')) * 10^(num_digits - j + 1);
od;
temp := OutgoingArrowsOfVertex(VerticesOfQuiver(Q)[num]); if input_str[num_digits + 3] = '1'then if Length(temp) = 1 and sigma[SIntChar(String(temp[1])[1])
- SIntChar('a') + 1] = 1then
z := [CharInt(SIntChar(String(temp[1])[1]) - 32)]; elif Length(temp) = 2then if sigma[SIntChar(String(temp[1])[1]) - SIntChar('a') + 1] = 1then
z := [CharInt(SIntChar(String(temp[1])[1]) - 32)]; else
z := [CharInt(SIntChar(String(temp[2])[1]) - 32)]; fi; else z := "Cannot Perform The Operation"; fi;
return z; elif input_str[num_digits + 3] = '-'then if Length(temp) = 1 and
sigma[SIntChar(String(temp[1])[1]) - SIntChar('a') + 1] = -1then
z := [CharInt(SIntChar(String(temp[1])[1]) - 32)]; elif Length(temp) = 2then if sigma[SIntChar(String(temp[1])[1]) - SIntChar('a') + 1] = -1then
z := [CharInt(SIntChar(String(temp[1])[1]) - 32)]; else
z := [CharInt(SIntChar(String(temp[2])[1]) - 32)]; fi; else z := "Cannot Perform The Operation"; fi;
return z; fi; fi;
#temp1 := input_str;
temp := []; for i in [1..Length(input_str)] do
Add(temp,input_str[i]);
od; #temp := input_str; #input_str := temp1; if SIntChar(temp[Length(temp)]) > 96then
x := SIntChar(String(SourceOfPath(ArrowsOfQuiver(Q)[
SIntChar(temp[Length(temp)]) - SIntChar('a') + 1]))[2]) - SIntChar('0');
if Length(temp3) = 2then if String(temp3[1])[1] = temp[Length(temp)] then
y := String(temp3[2])[1]; else
y := String(temp3[1])[1]; fi;
z := [CharInt(SIntChar(y) - 32)];
Append(temp, z); if IsValidString(A, temp) = false then
return "Cannot Perform The Operation"; fi; else
return "Cannot Perform The Operation"; fi; else
x := SIntChar(String(TargetOfPath(ArrowsOfQuiver(Q)[
SIntChar(temp[Length(temp)]) - SIntChar('A') + 1]))[2]) - SIntChar('0');
for i in [1..Length(vertices)] do if Length(String(vertices[i])) <> 2 or String(vertices[i])[1] <> 'v' or
String(vertices[i])[2] <> String(i)[1] then
Error("The Quiver of A is not acceptable");
return 0; fi;
od;
for i in [1..Length(arrows)] do if Length(String(arrows[i])) <> 1 or String(arrows[i])[1] <> CharInt(i+96) then
Error("The Quiver of A is not acceptable");
return 0; fi;
od;
rho := []; for i in [1..Length(rho1)] do
onerel := CoefficientsAndMagmaElements(rho1[i]);
tworel := WalkOfPath(onerel[1]);
str := Concatenation(List(tworel, a -> String(a)));
Append(rho, [str]);
od;
temp := IsValidString(A, input_str); if temp = false then
Error("The input string is invalid"); fi;
La := function(A, input_str)
local x,y; #output := IsValidString(Q,rho,input_str); #if output <> "Valid Positive Length String" and output <> "Valid Zero Length String" then return output; #fi;
x := QPAStringInverseLeft(A, input_str, sigma, eps); if x = "Cannot Perform The Operation"then return 0; fi; while true do
y := QPAStringDirectLeft(A, x, sigma, eps); if y = "Cannot Perform The Operation"then return x; else x := y; fi;
od; end;
Lb := function(A, input_str)
local x, y;
x := QPAStringDirectLeft(A, input_str, sigma, eps); if x = "Cannot Perform The Operation"then return 0; fi; while true do
y := QPAStringInverseLeft(A, x, sigma, eps); if y = "Cannot Perform The Operation"then return x; else x := y; fi;
od; end;
Ra := function(A, input_str)
local x, y;
x := QPAStringInverseRight(A, input_str, sigma, eps); if x = "Cannot Perform The Operation"then return 0; fi; while true do
y := QPAStringDirectRight(A, x, sigma, eps); if y = "Cannot Perform The Operation"then return x; else x := y; fi;
od; end;
Rb := function(A, input_str)
local x, y;
x := QPAStringDirectRight(A, input_str, sigma, eps); if x = "Cannot Perform The Operation"then return 0; fi; while true do
y := QPAStringInverseRight(A, x, sigma, eps); if y = "Cannot Perform The Operation"then return x; else x := y; fi;
od; end;
arr := [];
temp1 := La(A, input_str); if temp1 <> 0then
Append(arr, [Concatenation
("The canonical embedding StringModule(", input_str, ") to StringModule(", temp1, ")")]); fi;
temp1 := Lb(A, input_str); if temp1 <> 0then
Append(arr, [Concatenation
("The canonical projection StringModule(", temp1, ") to StringModule(", input_str, ")")]); fi;
temp1 := Ra(A, input_str); if temp1 <> 0then
Append(arr, [Concatenation
("The canonical projection StringModule(", temp1, ") to StringModule(", input_str, ")")]); fi;
temp1 := Rb(A, input_str); if temp1 <> 0then
Append(arr, [Concatenation
("The canonical embedding StringModule(", input_str, ") to StringModule(", temp1, ")")]); fi;
return arr; end
);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.