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
axiom
a:=matrix ([[1,2],[0,9]])
Type: Matrix(Integer)
axiom
inverse(a)
Type: Union(Matrix(Fraction(Integer)),...)
axiom
)expose TriangularMatrixOperations
TriangularMatrixOperations is now explicitly exposed in frame
initial
UpTriBddDenomInv(a,9)
Type: Matrix(Integer)
axiom
UpTriBddDenomInv(a,7)
>> Error detected within library code:
(1 . failed) cannot be coerced to mode (Integer)
axiom
a:=matrix ([[1,2],[0,9]])
Type: Matrix(Integer)
axiom
a:=transpose(a)
Type: Matrix(Integer)
axiom
inverse(a)
Type: Union(Matrix(Fraction(Integer)),...)
axiom
LowTriBddDenomInv(a,9)
Type: Matrix(Integer)
axiom
LowTriBddDenomInv(a,7)
>> Error detected within library code:
(1 . 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.