<TeXmacs|1.0.7.19>

<style|<tuple|mmxdoc|mathemagix>>

<\body>
  <tmdoc-title|Separable factorization>

  <\session|mathemagix|default>
    <\input>
      <mmx-prompt|1>
    <|input>
      use "factorix"
    </input>

    <\unfolded-io>
      <mmx-prompt|2>
    <|unfolded-io>
      help separable_factorization
    <|unfolded-io>
      <\text>
        <explain-header|<mmx|separable_factorization : Polynomial (Integer)
        -\<gtr\> Vector (Separable_factor (Polynomial
        (Integer)))><explain-synopsis|Native>>

        <explain-header|<mmx|separable_factorization : Polynomial (Rational)
        -\<gtr\> Vector (Separable_factor (Polynomial
        (Rational)))><explain-synopsis|Native>>

        <explain-header|<mmx|separable_factorization : Polynomial (Modular
        (Integer)) -\<gtr\> Vector (Separable_factor (Polynomial (Modular
        (Integer))))><explain-synopsis|Native>>

        <explain-header|<mmx|separable_factorization : Polynomial (Polynomial
        (Integer)) -\<gtr\> Vector (Separable_factor (Polynomial (Polynomial
        (Integer))))><explain-synopsis|Native>>

        <explain-header|<mmx|separable_factorization : Polynomial (Polynomial
        (Rational)) -\<gtr\> Vector (Separable_factor (Polynomial (Polynomial
        (Rational))))><explain-synopsis|Native>>

        <explain-header|<mmx|separable_factorization : Polynomial (Polynomial
        (Modular (Integer))) -\<gtr\> Vector (Separable_factor (Polynomial
        (Polynomial (Modular (Integer)))))><explain-synopsis|Native>>

        <explain-header|<mmx|separable_factorization : Polynomial (Ffe
        (Modular (Integer))) -\<gtr\> Vector (Separable_factor (Polynomial
        (Ffe (Modular (Integer)))))><explain-synopsis|Native>>

        <explain-header|<mmx|separable_factorization : Polynomial (Polynomial
        (Ffe (Modular (Integer)))) -\<gtr\> Vector (Separable_factor
        (Polynomial (Polynomial (Ffe (Modular
        (Integer))))))><explain-synopsis|Native>>
      </text>
    </unfolded-io>

    <\input>
      <mmx-prompt|4>
    <|input>
      x == polynomial (0 :\<gtr\> Rational, 1 :\<gtr\> Rational);
    </input>

    <\unfolded-io>
      <mmx-prompt|5>
    <|unfolded-io>
      separable_factorization ((x-1)^10 * (x-2)^2)
    <|unfolded-io>
      <math|<around*|(|x-2|)><rsup|2>*<around*|(|x-1|)><rsup|10>>
    </unfolded-io>

    <\input>
      <mmx-prompt|6>
    <|input>
      x == polynomial (0 :\<gtr\> Integer, 1 :\<gtr\> Integer);
    </input>

    <\unfolded-io>
      <mmx-prompt|7>
    <|unfolded-io>
      separable_factorization ((x-1)^10 * (x-2)^2)
    <|unfolded-io>
      <math|<around*|(|x-2|)><rsup|2>*<around*|(|x-1|)><rsup|10>>
    </unfolded-io>

    <\unfolded-io>
      <mmx-prompt|8>
    <|unfolded-io>
      v == separable_factorization ((x-1)^10 * (x-2)^2 mod modulus 5)
    <|unfolded-io>
      <math|<around*|(|x+3|)><rsup|2>*<around*|(|x<rsup|5>+4|)><rsup|2>>
    </unfolded-io>

    <\unfolded-io>
      <mmx-prompt|9>
    <|unfolded-io>
      factor (v[1])
    <|unfolded-io>
      <math|x+4>
    </unfolded-io>

    <\unfolded-io>
      <mmx-prompt|10>
    <|unfolded-io>
      ideg (v[1])
    <|unfolded-io>
      <math|5>
    </unfolded-io>

    <\unfolded-io>
      <mmx-prompt|11>
    <|unfolded-io>
      mul (v[1])
    <|unfolded-io>
      <math|2>
    </unfolded-io>

    <\unfolded-io>
      <mmx-prompt|12>
    <|unfolded-io>
      separable? ((x - 1)^10 - 1)
    <|unfolded-io>
      <math|true>
    </unfolded-io>

    <\input>
      <mmx-prompt|13>
    <|input>
      y == polynomial (polynomial (0 :\<gtr\> Rational), polynomial (1
      :\<gtr\> Rational));
    </input>

    <\unfolded-io>
      <mmx-prompt|14>
    <|unfolded-io>
      f == (y - x - 1) * (y^2 - x^10 - 2 * x +1)
    <|unfolded-io>
      <math|y<rsup|3>+<around*|(|-x-1|)>*y<rsup|2>+<around*|(|-x<rsup|10>-2*x+1|)>*y+x<rsup|11>+x<rsup|10>+2*x<rsup|2>+x-1>
    </unfolded-io>

    <\unfolded-io>
      <mmx-prompt|15>
    <|unfolded-io>
      separable_factorization f
    <|unfolded-io>
      <math|y<rsup|3>+<around*|(|-x-1|)>*y<rsup|2>+<around*|(|-x<rsup|10>-2*x+1|)>*y+x<rsup|11>+x<rsup|10>+2*x<rsup|2>+x-1>
    </unfolded-io>

    <\input>
      <mmx-prompt|16>
    <|input>
      y == polynomial (polynomial (0 :\<gtr\> Integer), polynomial (1
      :\<gtr\> Integer));
    </input>

    <\unfolded-io>
      <mmx-prompt|17>
    <|unfolded-io>
      f == (y - x - 1) * (y^2 - x^10 - 2 * x +1)
    <|unfolded-io>
      <math|y<rsup|3>+<around*|(|-x-1|)>*y<rsup|2>+<around*|(|-x<rsup|10>-2*x+1|)>*y+x<rsup|11>+x<rsup|10>+2*x<rsup|2>+x-1>
    </unfolded-io>

    <\unfolded-io>
      <mmx-prompt|18>
    <|unfolded-io>
      separable_factorization f
    <|unfolded-io>
      <math|y<rsup|3>+<around*|(|-x-1|)>*y<rsup|2>+<around*|(|-x<rsup|10>-2*x+1|)>*y+x<rsup|11>+x<rsup|10>+2*x<rsup|2>+x-1>
    </unfolded-io>

    <\unfolded-io>
      <mmx-prompt|19>
    <|unfolded-io>
      separable_factorization (f mod modulus 2)
    <|unfolded-io>
      <math|<around*|(|y+x+1|)>*<around*|(|y<rsup|2>+x<rsup|10>+1|)>>
    </unfolded-io>

    <\input>
      <mmx-prompt|20>
    <|input>
      p == modulus 2;
    </input>

    <\input>
      <mmx-prompt|21>
    <|input>
      x == polynomial (0, 1) mod p;
    </input>

    <\unfolded-io>
      <mmx-prompt|22>
    <|unfolded-io>
      q == irreducible_polynomial (x, 8)
    <|unfolded-io>
      <math|x<rsup|8>+x<rsup|7>+x<rsup|5>+x+1>
    </unfolded-io>

    <\unfolded-io>
      <mmx-prompt|23>
    <|unfolded-io>
      a == ffe (x, q)
    <|unfolded-io>
      <math|x>
    </unfolded-io>

    <\input>
      <mmx-prompt|24>
    <|input>
      set_variable_name (a, 'a)
    </input>

    <\unfolded-io>
      <mmx-prompt|25>
    <|unfolded-io>
      a
    <|unfolded-io>
      <math|a>
    </unfolded-io>

    <\unfolded-io>
      <mmx-prompt|26>
    <|unfolded-io>
      x == polynomial (ffe (polynomial (0) mod p, q),

      \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ffe (polynomial (1) mod p, q))
    <|unfolded-io>
      <math|x>
    </unfolded-io>

    <\input>
      <mmx-prompt|27>
    <|input>
      zero == ffe (polynomial (0) mod p, q);

      one \ == ffe (polynomial (1) mod p, q);
    </input>

    <\unfolded-io>
      <mmx-prompt|28>
    <|unfolded-io>
      separable_factorization ((x-one)^10 * (x^2+x+one)^2)
    <|unfolded-io>
      <math|<around*|(|<around*|(|x<rsup|2>|)><rsup|2>+x<rsup|2>+1|)>*<around*|(|x<rsup|2>+1|)><rsup|5>>
    </unfolded-io>
  </session>

  <tmdoc-copyright|2012|Grégoire Lecerf>

  <tmdoc-license|Permission is granted to copy, distribute and/or modify this
  document under the terms of the <hlink|GNU General Public
  License|http://www.gnu.org/licenses/gpl.txt>. If you don't have this file,
  write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  Boston, MA 02111-1307, USA.>
</body>

<initial|<\collection>
</collection>>
