\e
mathnf([0,2])
mathnf([0,2], 1)
mathnf([0,x])
mathnf([0,x], 1)
mathnf([x;1])
mathnf([x;1], 1)
mathnf([x,x^2+1; x^3+x+1, x+2]*Mod(1,5))
v=[116085838, 181081878, 314252913,10346840];
[H,U]=mathnf(v, 1); [v*U, norml2(U)]
[H,U]=mathnf(v, 5); [v*U, norml2(U)]
M=[0,0,0,0,0,0,0,0,0,13;0,0,0,0,0,0,0,0,23,6;0,0,0,0,0,0,0,23,-4,-7;0,0,0,0,0,0,17,-3,5,-5;0,0,0,0,0,56,16,-16,-15,-17;0,0,0,0,57,24,-16,-25,2,-21;0,0,0,114,9,56,51,-52,25,-55;0,0,113,-31,-11,24,0,28,34,-16;0,50,3,2,16,-6,-2,7,-19,-21;118,43,51,23,37,-52,18,38,51,28]; mathnf(M)

M=[16*x^9-224*x^8+1176*x^7-2744*x^6+2401*x^5,0,0,0,0,0,16*x^9-224*x^8+1176*x^7-2744*x^6+2401*x^5,0,0,0,0,0,16*x^9-224*x^8+1176*x^7-2744*x^6+2401*x^5,0,0,0,0,0;0,-32*x^9+560*x^8-3920*x^7+13720*x^6-24010*x^5+16807*x^4,0,0,0,0,0,-32*x^10+560*x^9-3920*x^8+13720*x^7-24010*x^6+16807*x^5,0,0,0,422576*x^9-5916064*x^8+31059336*x^7-72471784*x^6+63412811*x^5,0,-32*x^10+560*x^9-3920*x^8+13720*x^7-24010*x^6+16807*x^5,0,0,0,0;0,0,64*x^9-1344*x^8+11760*x^7-54880*x^6+144060*x^5-201684*x^4+117649*x^3,0,0,0,0,0,32*x^10-560*x^9+3920*x^8-13720*x^7+24010*x^6-16807*x^5,0,0,0,0,0,64*x^11-1344*x^10+11760*x^9-54880*x^8+144060*x^7-201684*x^6+117649*x^5,0,0,0;0,0,0,-128*x^9+3136*x^8-32928*x^7+192080*x^6-672280*x^5+1411788*x^4-1647086*x^3+823543*x^2,0,0,0,0,0,-32*x^10+560*x^9-3920*x^8+13720*x^7-24010*x^6+16807*x^5,0,0,0,0,0,-128*x^12+3136*x^11-32928*x^10+192080*x^9-672280*x^8+1411788*x^7-1647086*x^6+823543*x^5,0,0;0,0,0,0,256*x^9-7168*x^8+87808*x^7-614656*x^6+2689120*x^5-7529536*x^4+13176688*x^3-13176688*x^2+5764801*x,0,0,0,0,0,32*x^10-560*x^9+3920*x^8-13720*x^7+24010*x^6-16807*x^5,0,0,0,0,0,256*x^13-7168*x^12+87808*x^11-614656*x^10+2689120*x^9-7529536*x^8+13176688*x^7-13176688*x^6+5764801*x^5,0;0,0,0,0,0,-512*x^9+16128*x^8-225792*x^7+1843968*x^6-9680832*x^5+33882912*x^4-79060128*x^3+118590192*x^2-103766418*x+40353607,0,0,0,0,0,-512*x^10+8960*x^9-62720*x^8+219520*x^7-384160*x^6+268912*x^5,0,0,0,0,0,-512*x^14+16128*x^13-225792*x^12+1843968*x^11-9680832*x^10+33882912*x^9-79060128*x^8+118590192*x^7-103766418*x^6+40353607*x^5];
[H,U]=mathnf(M,1);
M*U[,1..12]==0
M*U[,13..18]==H

mathnf([])
mathnf([],1)
mathnf([;])
mathnf([;],1)
mathnfmodid(matrix(0,2), [])
mathnfmodid([0,7;-1,0;-1,-1], [6,2,2])
mathnfmodid([;],[2])

matsolvemod([;],[]~,[]~,1)
matsolvemod([;],[],[]~,1)
matsolvemod([;],[]~,[],1)
matsolvemod([;],2,[1]~,1)
matsolvemod([;],[2]~,[1]~,1)
matsolvemod([;],[2]~,1,1)
matsolvemod([;],1,1,1)
matsolvemod([1,2;3,4],1,2,1)

M=[2,1,1,0,0,-1,0,-1,1,0,-1,1,0,0,0,0;0,0,0,0,0,0,0,0,0,-2,0,0,-1,0,0,0;0,0,0,0,0,0,0,-1,-1,0,0,-1,0,0,0,0;0,0,0,0,0,0,0,0,0,0,0,-2,0,2,0,0;0,0,0,0,0,0,0,-1,1,0,0,-1,0,0,0,0;0,0,0,0,0,0,0,0,0,0,0,0,0,-2,0,0;0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0;2,0,0,1,1,1,0,2,2,0,2,0,2,2,3,2];
E=[0,0,0,0,0,0,0,2]~; B=[0,0,0,0,0,0,0,0]~;
matsolvemod(M,B,E,0)

\\ Errors, keep at end of file
matsolvemod([;],[2]~,[2,3]~,1)
