GREAT/MRAT bug, was: alt_eigen more info



> Apparently RATMX:true causes some function to call GREAT with bad arguments. Which function though?

I haven't looked at the source for specrepcheck, but the ratdisrep doesn't map down a list, for example:

(%i7) ?specrepcheck([rat(x)]);
  1> (SPECREPCHECK
         ((MLIST SIMP)
          ((MRAT SIMP ($X) (#:X34195)) (#:X34195 1 1) . 1)))
  <1 (SPECREPCHECK
         ((MLIST SIMP)
          ((MRAT SIMP ($X) (#:X34195)) (#:X34195 1 1) . 1)))
(%o7)/R/ [x]

The b-search-expr ('great' based binary search) in nset calls specrepcheck and then uses great, not $orderlessp (there is even a
helpful source code comment about this :).  With or without ratmx : true, great can receive CRE arguments while doing set operations
such as adjoin. (The alt_eigen bug happens when nullspace is doing adjoin.)

Question:  Should specrepcheck map down lists, or should b-search-expr dispatch $totaldisrep instead of specrepcheck?

(%i3) adjoin(matrix([x]), set(matrix([rat(x)])));
  1> (SPECREPCHECK (($MATRIX SIMP) ((MLIST SIMP) $X)))
  <1 (SPECREPCHECK (($MATRIX SIMP) ((MLIST SIMP) $X)))
  1> (SPECREPCHECK
         (($MATRIX SIMP)
          ((MLIST SIMP)
           ((MRAT SIMP ($X) (#:X34195)) (#:X34195 1 1) . 1))))
  <1 (SPECREPCHECK
         (($MATRIX SIMP)
          ((MLIST SIMP)
           ((MRAT SIMP ($X) (#:X34195)) (#:X34195 1 1) . 1))))
  1> (SPECREPCHECK
         (($MATRIX SIMP)
          ((MLIST SIMP)
           ((MRAT SIMP ($X) (#:X34195)) (#:X34195 1 1) . 1))))
  <1 (SPECREPCHECK
         (($MATRIX SIMP)
          ((MLIST SIMP)
           ((MRAT SIMP ($X) (#:X34195)) (#:X34195 1 1) . 1))))
  1> (GREAT (($MATRIX SIMP)
             ((MLIST SIMP)
              ((MRAT SIMP ($X) (#:X34195)) (#:X34195 1 1) . 1)))
            (($MATRIX SIMP) ((MLIST SIMP) $X)))
    2> (GREAT (#:X34195 1 1) $X)
      3> (GREAT 1 $X)
      <3 (GREAT NIL)
    <2 (GREAT NIL)
  <1 (GREAT NIL)
(%o3)/R/ {matrix([x]),matrix([x])}


--Barton