![]() | 1 | initial version |
Not an answer, but a contribution. Furthermore, I won't try to solve the (hard) problem of solving in Z, but, at least as a first step, to solve it in Q.
The problem has two parameters :
Each of the matrix equations translates to n2 equations involving 2n2 unknown equations ; similarly, the nilpotency of B translates to n2 equations of maximal dregree k involving n2 parameters.
However, these equations are far from being independent. For example, the nilpotency of B translates to
n=2k=2 : 4 equations of 4 unknowns ; the resulting ideal has dimension 2, which means that this system has two degrees of freedom.
n=3,k=2 ; 9 equations of 9 unknowns, the resulting system still has 4 degrees of freedom.
The "obvious" brute-force way (a polynomial system in ai,jbi,j) doesn't work. However, one may try to solve for B given A, i. e. build a system of polynomials in bi,j whose coefficients are taken in (the fraction field of) the ring of polynomials in ai,j. For example, after running :
NN=2
k=2
R1=PolynomialRing(QQ, ["a%d%d"%(u, v) for v in range(NN) for u in range(NN)])
# R1.inject_variables()
A=matrix(NN,R1.gens())
R2=PolynomialRing(FractionField(R1), ["b%d%d"%(u, v) for v in range(NN) for u in range(NN)])
# R2.inject_variables()
B=matrix(NN,R2.gens())
S1=(A^2*B+A*B*A+B*A^2).list()
S2=(B^2*A+B*A*B+A*B^2).list()
# Nilpotency
S3=(B^k-B).list()
J1=R2.ideal(S1+S2+S3)
one gets :
sage: R2.ideal(S1+S2+S3).variety()
[{b11: 0, b01: 0, b10: 0, b00: 0}]
sage: J1.dimension()
0
sage: J1.variety()
[{b11: 0, b01: 0, b10: 0, b00: 0}]
This result is easily repeated for k∈(2,3,5,7) ; for k=11, the system failed to compute J1.dimension()
after about 10 minutes (I threw the towel...).
Similarly, in the case n=3,k=2, the system has been searching the same J1.dimension()
for about 3 hours.
FWIW, the (gratis-but-not-free) Wolfram engine's Reduce
exhibits a similar behaviour., However, Solve
seems to be able to get the (unique) solution (null B) for n=3,k=3 in a reasonable time ; getting the (same) answer for n=4,k=2 needs about a minute. Going beyond n=4 or k=7 leads to unreasonable (=exceeding my patience) times.
This brute-force symbolic approach using only the polynomials machinery (or whatever the Wolfram engine uses) seems bound to fail. An approach using more results of linear algebra is needed.
HTH,
![]() | 2 | No.2 Revision |
EDIT : This was written as an answer to the initial redaction of the question, where B was supposed to be nilpotent (i. e. Bk−B=0 for some prime k, with no specification of k).
Not an answer, but a contribution. Furthermore, I won't try to solve the (hard) problem of solving in Z, but, at least as a first step, to solve it in Q.
The problem has two parameters :
Each of the matrix equations translates to n2 equations involving 2n2 unknown equations ; similarly, the nilpotency of B translates to n2 equations of maximal dregree k involving n2 parameters.
However, these equations are far from being independent. For example, the nilpotency of B translates to
n=2k=2 : 4 equations of 4 unknowns ; the resulting ideal has dimension 2, which means that this system has two degrees of freedom.
n=3,k=2 ; 9 equations of 9 unknowns, the resulting system still has 4 degrees of freedom.
The "obvious" brute-force way (a polynomial system in ai,jbi,j) doesn't work. However, one may try to solve for B given A, i. e. build a system of polynomials in bi,j whose coefficients are taken in (the fraction field of) the ring of polynomials in ai,j. For example, after running :
NN=2
k=2
R1=PolynomialRing(QQ, ["a%d%d"%(u, v) for v in range(NN) for u in range(NN)])
# R1.inject_variables()
A=matrix(NN,R1.gens())
R2=PolynomialRing(FractionField(R1), ["b%d%d"%(u, v) for v in range(NN) for u in range(NN)])
# R2.inject_variables()
B=matrix(NN,R2.gens())
S1=(A^2*B+A*B*A+B*A^2).list()
S2=(B^2*A+B*A*B+A*B^2).list()
# Nilpotency
S3=(B^k-B).list()
J1=R2.ideal(S1+S2+S3)
one gets :
sage: R2.ideal(S1+S2+S3).variety()
[{b11: 0, b01: 0, b10: 0, b00: 0}]
sage: J1.dimension()
0
sage: J1.variety()
[{b11: 0, b01: 0, b10: 0, b00: 0}]
This result is easily repeated for k∈(2,3,5,7) ; for k=11, the system failed to compute J1.dimension()
after about 10 minutes (I threw the towel...).
Similarly, in the case n=3,k=2, the system has been searching the same J1.dimension()
for about 3 hours.
FWIW, the (gratis-but-not-free) Wolfram engine's Reduce
exhibits a similar behaviour., However, Solve
seems to be able to get the (unique) solution (null B) for n=3,k=3 in a reasonable time ; getting the (same) answer for n=4,k=2 needs about a minute. Going beyond n=4 or k=7 leads to unreasonable (=exceeding my patience) times.
This brute-force symbolic approach using only the polynomials machinery (or whatever the Wolfram engine uses) seems bound to fail. An approach using more results of linear algebra is needed.
HTH,
![]() | 3 | No.3 Revision |
EDIT : This What follows was written as an answer to the initial redaction of the question, where B was supposed to be nilpotent (i. e. Bk−B=0 for some prime k, k, with no specification of k).k).
Not an answer, but a contribution. Furthermore, I won't try to solve the (hard) problem of solving in Z, but, at least as a first step, to solve it in Q.
The problem has two parameters :
Each of the matrix equations translates to n2 equations involving 2n2 unknown equations ; similarly, the nilpotency of B translates to n2 equations of maximal dregree k involving n2 parameters.
However, these equations are far from being independent. For example, the nilpotency of B translates to
n=2k=2 : 4 equations of 4 unknowns ; the resulting ideal has dimension 2, which means that this system has two degrees of freedom.
n=3,k=2 ; 9 equations of 9 unknowns, the resulting system still has 4 degrees of freedom.
The "obvious" brute-force way (a polynomial system in ai,jbi,j) doesn't work. However, one may try to solve for B given A, i. e. build a system of polynomials in bi,j whose coefficients are taken in (the fraction field of) the ring of polynomials in ai,j. For example, after running :
NN=2
k=2
R1=PolynomialRing(QQ, ["a%d%d"%(u, v) for v in range(NN) for u in range(NN)])
# R1.inject_variables()
A=matrix(NN,R1.gens())
R2=PolynomialRing(FractionField(R1), ["b%d%d"%(u, v) for v in range(NN) for u in range(NN)])
# R2.inject_variables()
B=matrix(NN,R2.gens())
S1=(A^2*B+A*B*A+B*A^2).list()
S2=(B^2*A+B*A*B+A*B^2).list()
# Nilpotency
S3=(B^k-B).list()
J1=R2.ideal(S1+S2+S3)
one gets :
sage: R2.ideal(S1+S2+S3).variety()
[{b11: 0, b01: 0, b10: 0, b00: 0}]
sage: J1.dimension()
0
sage: J1.variety()
[{b11: 0, b01: 0, b10: 0, b00: 0}]
This result is easily repeated for k∈(2,3,5,7) ; for k=11, the system failed to compute J1.dimension()
after about 10 minutes (I threw the towel...).
Similarly, in the case n=3,k=2, the system has been searching the same J1.dimension()
for about 3 hours.
FWIW, the (gratis-but-not-free) Wolfram engine's Reduce
exhibits a similar behaviour., However, Solve
seems to be able to get the (unique) solution (null B) for n=3,k=3 in a reasonable time ; getting the (same) answer for n=4,k=2 needs about a minute. Going beyond n=4 or k=7 leads to unreasonable (=exceeding my patience) times.
This brute-force symbolic approach using only the polynomials machinery (or whatever the Wolfram engine uses) seems bound to fail. An approach using more results of linear algebra is needed.
HTH,
![]() | 4 | No.4 Revision |
EDIT : What follows was written as an answer to the initial redaction of the question, where B was supposed to be nilpotent (i. e. Bk−B=0 for some prime k, with no specification of k).k). Furthermore, it uses an wrong definition of nilpotency (first-class thinko...). Therefore, it answers a different problem, with very weak relation to the real question. Kept for what it's worth...
Not an answer, but a contribution. Furthermore, I won't try to solve the (hard) problem of solving in Z, but, at least as a first step, to solve it in Q.
The problem has two parameters :
Each of the matrix equations translates to n2 equations involving 2n2 unknown equations ; similarly, the nilpotency of B translates to n2 equations of maximal dregree k involving n2 parameters.
However, these equations are far from being independent. For example, the nilpotency of B translates to
n=2k=2 : 4 equations of 4 unknowns ; the resulting ideal has dimension 2, which means that this system has two degrees of freedom.
n=3,k=2 ; 9 equations of 9 unknowns, the resulting system still has 4 degrees of freedom.
The "obvious" brute-force way (a polynomial system in ai,jbi,j) doesn't work. However, one may try to solve for B given A, i. e. build a system of polynomials in bi,j whose coefficients are taken in (the fraction field of) the ring of polynomials in ai,j. For example, after running :
NN=2
k=2
R1=PolynomialRing(QQ, ["a%d%d"%(u, v) for v in range(NN) for u in range(NN)])
# R1.inject_variables()
A=matrix(NN,R1.gens())
R2=PolynomialRing(FractionField(R1), ["b%d%d"%(u, v) for v in range(NN) for u in range(NN)])
# R2.inject_variables()
B=matrix(NN,R2.gens())
S1=(A^2*B+A*B*A+B*A^2).list()
S2=(B^2*A+B*A*B+A*B^2).list()
# Nilpotency
S3=(B^k-B).list()
J1=R2.ideal(S1+S2+S3)
one gets :
sage: R2.ideal(S1+S2+S3).variety()
[{b11: 0, b01: 0, b10: 0, b00: 0}]
sage: J1.dimension()
0
sage: J1.variety()
[{b11: 0, b01: 0, b10: 0, b00: 0}]
This result is easily repeated for k∈(2,3,5,7) ; for k=11, the system failed to compute J1.dimension()
after about 10 minutes (I threw the towel...).
Similarly, in the case n=3,k=2, the system has been searching the same J1.dimension()
for about 3 hours.
FWIW, the (gratis-but-not-free) Wolfram engine's Reduce
exhibits a similar behaviour., However, Solve
seems to be able to get the (unique) solution (null B) for n=3,k=3 in a reasonable time ; getting the (same) answer for n=4,k=2 needs about a minute. Going beyond n=4 or k=7 leads to unreasonable (=exceeding my patience) times.
This brute-force symbolic approach using only the polynomials machinery (or whatever the Wolfram engine uses) seems bound to fail. An approach using more results of linear algebra is needed.
HTH,