Documentation contents

atlas Library · Script File

ratmat.at

implement type |ratmat| that makes doing linear algebra over $\Q$ possible

This is firmly based on built-in limited integer |mat| support, and aims
at providing an interface that resemble what basic.at does for |mat|

By loading this file, you declare BEING AWARE that the chosen representation
for rational matrices is susceptible to overflow problems for large matrices
or those with complicated rational entries, and ACCEPTING the consequences.

For safer rational linear algebra, use the Gaussian_elim.at script.
Conversion functions |to_ratmat| and |to_rowrowrat| between |ratmat| and the
[[rat]] type used there are defined below.
Source
atlas-scripts/ratmat.at (181 lines)
Definitions
70
Loads
Loaded by
group_operations.at simple_factors.at lattice.at coordinates.at center.at isomorphism.at cyclotomic_Lie_algebra.at bracket.at

Definitions in source order

ratmat type

L18
set_type [ ratmat = (mat,string,int) ] { matrix, slash, common denominator }
the void component avoids unary/binary conflicts, as for -@(mat,int)
L19

save_s

L22save_s : s
a trick to locally rebind |s| (defined in basic.at) to constant string "/"

s

L23!s = "/"

also in this file at line 180; also defined in basic.at

simplify

L25simplify(ratmat(M,,d)) = ratmat

/

L28/ (mat M,int d) = ratmat

also in this file at line 33, line 89, line 91; also defined in basic.at, cyclotomic.at, polynomial.at, lazy_lists.at

*

L32* (rat f,mat M) = ratmat

also in this file at line 80, line 81, line 83, line 84, line 85, line 87, line 88, line 112, line 113, line 123; also defined in basic.at, extParamPol.at, complex.at, modules.at, hodge_tensor.at, tits_centralizer.at, stable.at, synthetic.at, Weylgroup.at, group_operations.at, tits.at, twisted_root_datum.at, cyclotomic.at, polynomial.at, hodgeParamLaurentPol.at, hodgeParamPol.at, laurentPolynomial.at, cyclotomic_Lie_algebra.at, cyclotomicMat.at, bracket.at, hodge_functions.at, sparse.at, lazy_lists.at

/

L33/ (mat M,rat f) = ratmat

also in this file at line 28, line 89, line 91; also defined in basic.at, cyclotomic.at, polynomial.at, lazy_lists.at

entry

L35entry (ratmat(M,,d),int i,int j) = rat

matrix

L38matrix ((int,int)(r,c),(int,int->rat) f) = ratmat
matrix defined by its dimension and expression for general entry

also defined in basic.at

n_rows

L43n_rows (ratmat(M,,)) = int

also defined in basic.at, cyclotomicMat.at

n_columns

L44n_columns (ratmat(M,,)) = int

also defined in basic.at, cyclotomicMat.at

columns

L46columns (ratmat(M,,d)) = [ratvec]

rows

L47rows (ratmat(M,,d)) = [ratvec]

column

L48column (ratmat(M,,d),int j) = ratvec

also defined in hodge_K_type_formula.at, stable.at

row

L49row (ratmat(M,,d),int i) = ratvec

columns_with 3 overloads

L51columns_with ((int,ratvec->bool) p,ratmat(M,,d)) = ratmat
L54columns_with ((ratvec->bool) p,ratmat T) = ratmat
L56columns_with ((int->bool) p,ratmat(M,,d)) = ratmat

also defined in basic.at

rows_with 3 overloads

L59rows_with ((int,ratvec->bool) p,ratmat(M,,d)) = ratmat
L62rows_with ((ratvec->bool) p,ratmat T) = ratmat
L64rows_with ((int->bool) p,ratmat(M,,d)) = ratmat

also defined in basic.at

kernel

L67kernel (ratmat(M,,)) = mat

also defined in cyclotomic_Gaussian_elim.at

det

L68det (ratmat(M,,d)) = rat
this very easily overflows

also defined in basic.at, Gaussian_elim.at, cyclotomic_Gaussian_elim.at

^

L70^ (ratmat(M,,d)) = ratmat
transpose

also in this file at line 95, line 111; also defined in basic.at, tits.at, cyclotomic.at, polynomial.at, sparse.at, lazy_lists.at

+ 2 overloads

L72+ (ratmat(M,s,d),int k) = ratmat
L73+ (int k,ratmat(M,s,d)) = ratmat

also in this file at line 76, line 114, line 115, line 125; also defined in basic.at, extParamPol.at, modules.at, cyclotomic.at, polynomial.at, hodgeParamLaurentPol.at, hodgeParamPol.at, laurentPolynomial.at, cyclotomic_Lie_algebra.at, cyclotomicMat.at, bracket.at, hodge_functions.at, lazy_lists.at

- 2 overloads

L74- (ratmat(M,s,d),int k) = ratmat
L75- (int k,ratmat(M,s,d)) = ratmat

also in this file at line 77, line 78, line 116, line 117, line 127; also defined in basic.at, extParamPol.at, modules.at, cyclotomic.at, polynomial.at, hodgeParamLaurentPol.at, hodgeParamPol.at, laurentPolynomial.at, cyclotomicMat.at, hodge_functions.at, lazy_lists.at

+

L76+ (ratmat(M,,d),ratmat(MM,,dd)) = ratmat

also in this file at line 72, line 73, line 114, line 115, line 125; also defined in basic.at, extParamPol.at, modules.at, cyclotomic.at, polynomial.at, hodgeParamLaurentPol.at, hodgeParamPol.at, laurentPolynomial.at, cyclotomic_Lie_algebra.at, cyclotomicMat.at, bracket.at, hodge_functions.at, lazy_lists.at

- 2 overloads

L77- (ratmat(M,,d),ratmat(MM,,dd)) = ratmat
L78- (ratmat(M,s,d)) = ratmat

also in this file at line 74, line 75, line 116, line 117, line 127; also defined in basic.at, extParamPol.at, modules.at, cyclotomic.at, polynomial.at, hodgeParamLaurentPol.at, hodgeParamPol.at, laurentPolynomial.at, cyclotomicMat.at, hodge_functions.at, lazy_lists.at

* 7 overloads

L80* (ratvec v,ratmat(M,,d)) = ratvec
L81* (ratmat(M,,d),ratvec v) = ratvec
L83* (ratmat(M,,d),mat MM) = ratmat
L84* (mat M,ratmat(MM,,d)) = ratmat
L85* (ratmat(M,,d),ratmat(MM,,dd)) = ratmat
L87* (rat a, ratmat(M,,d)) = ratmat
L88* (ratmat(M,,d), rat a) = ratmat

also in this file at line 32, line 112, line 113, line 123; also defined in basic.at, extParamPol.at, complex.at, modules.at, hodge_tensor.at, tits_centralizer.at, stable.at, synthetic.at, Weylgroup.at, group_operations.at, tits.at, twisted_root_datum.at, cyclotomic.at, polynomial.at, hodgeParamLaurentPol.at, hodgeParamPol.at, laurentPolynomial.at, cyclotomic_Lie_algebra.at, cyclotomicMat.at, bracket.at, hodge_functions.at, sparse.at, lazy_lists.at

/ 2 overloads

L89/ (ratmat(M,,d), rat a) = ratmat
L91/ (ratmat(M,,d)) = ratmat

also in this file at line 28, line 33; also defined in basic.at, cyclotomic.at, polynomial.at, lazy_lists.at

^

L95^ (ratmat(M,,d):Md,int e) = ratmat

also in this file at line 70, line 111; also defined in basic.at, tits.at, cyclotomic.at, polynomial.at, sparse.at, lazy_lists.at

ratmat_as_mat

L98ratmat_as_mat (ratmat(M,,d)) = mat

mat_as_ratmat

L100mat_as_ratmat (mat M) = ratmat

diagonal

L101diagonal(ratvec v) = ratmat

ratvecs_as_ratmat

L104ratvecs_as_ratmat ([ratvec] A) = ratmat
convert [ratvec] to ratmat, and define resulting operations involving a ratmat

to_ratmat

L108to_ratmat ([[rat]] A) = ratmat

to_rowrowrat

L109to_rowrowrat (ratmat A) = [[rat]]

^

L111^([ratvec] M) = ratmat
transpose

also in this file at line 70, line 95; also defined in basic.at, tits.at, cyclotomic.at, polynomial.at, sparse.at, lazy_lists.at

* 2 overloads

L112* ([ratvec] M,ratmat MM) = ratmat
L113* (ratmat M,[ratvec] MM) = ratmat

also in this file at line 32, line 80, line 81, line 83, line 84, line 85, line 87, line 88, line 123; also defined in basic.at, extParamPol.at, complex.at, modules.at, hodge_tensor.at, tits_centralizer.at, stable.at, synthetic.at, Weylgroup.at, group_operations.at, tits.at, twisted_root_datum.at, cyclotomic.at, polynomial.at, hodgeParamLaurentPol.at, hodgeParamPol.at, laurentPolynomial.at, cyclotomic_Lie_algebra.at, cyclotomicMat.at, bracket.at, hodge_functions.at, sparse.at, lazy_lists.at

+ 2 overloads

L114+ ([ratvec] M,ratmat MM) = ratmat
L115+ (ratmat M,[ratvec] MM) = ratmat

also in this file at line 72, line 73, line 76, line 125; also defined in basic.at, extParamPol.at, modules.at, cyclotomic.at, polynomial.at, hodgeParamLaurentPol.at, hodgeParamPol.at, laurentPolynomial.at, cyclotomic_Lie_algebra.at, cyclotomicMat.at, bracket.at, hodge_functions.at, lazy_lists.at

- 2 overloads

L116- ([ratvec] M,ratmat MM) = ratmat
L117- (ratmat M,[ratvec] MM) = ratmat

also in this file at line 74, line 75, line 77, line 78, line 127; also defined in basic.at, extParamPol.at, modules.at, cyclotomic.at, polynomial.at, hodgeParamLaurentPol.at, hodgeParamPol.at, laurentPolynomial.at, cyclotomicMat.at, hodge_functions.at, lazy_lists.at

inverse

L119inverse (ratmat(M,,d)) = ratmat

also defined in basic.at, combinatorics.at, parameters.at, tits.at, affine.at, cyclotomic.at, Gaussian_elim.at, cyclotomic_Gaussian_elim.at, lazy_lists.at

solve

L120solve (ratmat(M,,d), ratvec v) = Maybe<ratvec>

also defined in basic.at

*

L123* ([ratvec] M,[ratvec] MM) = ratmat
also define resulting operations involving a mat

also in this file at line 32, line 80, line 81, line 83, line 84, line 85, line 87, line 88, line 112, line 113; also defined in basic.at, extParamPol.at, complex.at, modules.at, hodge_tensor.at, tits_centralizer.at, stable.at, synthetic.at, Weylgroup.at, group_operations.at, tits.at, twisted_root_datum.at, cyclotomic.at, polynomial.at, hodgeParamLaurentPol.at, hodgeParamPol.at, laurentPolynomial.at, cyclotomic_Lie_algebra.at, cyclotomicMat.at, bracket.at, hodge_functions.at, sparse.at, lazy_lists.at

+

L125+ ([ratvec] M,[ratvec] MM) = ratmat

also in this file at line 72, line 73, line 76, line 114, line 115; also defined in basic.at, extParamPol.at, modules.at, cyclotomic.at, polynomial.at, hodgeParamLaurentPol.at, hodgeParamPol.at, laurentPolynomial.at, cyclotomic_Lie_algebra.at, cyclotomicMat.at, bracket.at, hodge_functions.at, lazy_lists.at

-

L127- ([ratvec] M,[ratvec] MM) = ratmat

also in this file at line 74, line 75, line 77, line 78, line 116, line 117; also defined in basic.at, extParamPol.at, modules.at, cyclotomic.at, polynomial.at, hodgeParamLaurentPol.at, hodgeParamPol.at, laurentPolynomial.at, cyclotomicMat.at, hodge_functions.at, lazy_lists.at

rational_inverse

L131rational_inverse(mat M) = ratmat
define inverse of mat as ratmat

orth_reflection

L134orth_reflection (vec v) = ratmat
orthogonal reflection with respect to standard scalar product

left_inverse

L139left_inverse(ratmat(A,,d)) = ratmat
left inverse of injective (full column rank) rational matrix
adapted from |weak_left_inverse| in matrix.at

also defined in matrix.at

right_inverse

L148right_inverse(ratmat(A,,d)) = ratmat
right inverse of a rational matrix.
formal dual of left_inverse

also defined in matrix.at

ratvec_to_string

L156ratvec_to_string(ratvec v) = string
show ratvec as [rat], simplified

ratmat_to_bigmat

L164ratmat_to_bigmat (ratmat(A,,d)) = [[rat]]
convert ratmat, i.e. (mat,string,int), to [[rat]]

## 3 overloads

L167## (ratmat A, ratmat B) = ratmat
concatenate horizontally, must have same depth
L170## (ratmat A, mat B) = ratmat
concatenate horizontally, must have same depth
L173## (mat A, ratmat B) = ratmat
concatenate horizontally, must have same depth

also defined in basic.at

show

L176show (ratmat(M,,d)) = void

also defined in modules.at, K_Nilpotent.at, good_W_representatives.at, arthur_parameters.at, sub_cells.at, associated_variety_annihilator.at, geck_generic.at, L_packet.at, Levi_subgroups.at, nilpotent_orbits.at, subgroups.at, poset.at, cyclotomic.at, polynomial.at, character_tables.at, springer_tables.at, hodgeParamLaurentPol.at, hodgeParamPol.at, laurentPolynomial.at, weak_packets.at, cyclotomic_Lie_algebra.at, cyclotomicMat.at, bracket.at, exceptional.at, nilpotent_posets.at, lazy_lists.at

s

L180s : save_s
finally restore |s| from basic.at, and free the identifier |save_s|

also in this file at line 23; also defined in basic.at

Generated from atlas-scripts at commit 648506c (2026-10-13).