From functions's declaration:
UpTriBddDenomInv: (M,R) -> M
++ UpTriBddDenomInv(B,d) returns M, where
++ B is a non-singular upper triangular matrix and d is an
++ element of R such that \spad{M = d * inv(B)} has entries in R.
Here, it's false, but may be use another error message
fricas
(1) -> a:=matrix ([[1,2],[0,9]])
Type: Matrix(NonNegativeInteger
?)
fricas
inverse(a)
Type: Union(Matrix(Fraction(Integer)),...)
fricas
)expose TriangularMatrixOperations
TriangularMatrixOperations is now explicitly exposed in frame
initial
UpTriBddDenomInv(a,9)
Type: Matrix(Integer)
fricas
UpTriBddDenomInv(a,7)
>> Error detected within library code:
"failed" of mode Union(Integer,"failed") cannot be coerced to mode Integer
fricas
a:=matrix ([[1,2],[0,9]])
Type: Matrix(NonNegativeInteger
?)
fricas
a:=transpose(a)
Type: Matrix(NonNegativeInteger
?)
fricas
inverse(a)
Type: Union(Matrix(Fraction(Integer)),...)
fricas
LowTriBddDenomInv(a,9)
Type: Matrix(Integer)
fricas
LowTriBddDenomInv(a,7)
>> Error detected within library code:
"failed" of mode Union(Integer,"failed") cannot be coerced to mode Integer
From the package:
++ This package provides functions that compute "fraction-free"
++ inverses of upper and lower triangular matrices over a integral
++ domain. By "fraction-free inverse" we mean the following:
++ given a matrix B with entries in R and an element d of R such that
++ d* inv(B) also has entries in R, we return d * inv(B).
So if you enter B and d such that d * inv(B) does not have entries in R, it is an error.
The package is for internal use (that why it is not exposed)
where d is always divisible by the determinant of B.
But I don't like
computer error
. I prefer some
mathematical
message for example:
d is not an element of R such that \spad{M = d * inv(B)} has entries in R.
Severity: normal => wishlist