content: {-# OPTIONS_GHC -Wno-orphans #-}
  {-|
  This module provides a series of rewriting rules, replacing invocations on
  @'Algebra.Algorithms.Groebner.calcGroebnerBasis'@ and
  @'Algebra.Algorithms.Groebner.calcGroebnerBasisWith'@ with @'f5'@ followed by minimisation and reduction of basis.
  Since @'f5'@ is the fastest implementation for general Gröbner basis computation in this package,
  it is expected that doing this improves the performance.
  
  You can import this module to gain a speed-up also in other functions using @'Algebra.Algorithms.Groebner.calcGroebnerBasis'@ such as
  @'Algebra.Algorithms.Groebner.intersection'@ and so on.
  
  Rules replaces __all__ the occurences of @'Algebra.Algorithms.Groebner.calcGroebnerBasis'@ and @'Algebra.Algorithms.Groebner.calcGroebnerBasisWith'@ with @'f5'@.
  This effect is pervasive once this module is imported; in general, importing this module in
  /library-site/ is __NOT__ good idea.
  
  In addition, we __DO NOT__ rewrite other Buchberger-specific functions such as
  @'Algebra.Algorithms.Groebner.calcGroebnerBasisWithStrategy'@ or @'Algebra.Algorithms.Groebner.syzygyBuchberger'@.
  -}
  module Algebra.Algorithms.Groebner.Signature.Rules () where
  import qualified Algebra.Algorithms.Groebner           as GB
  import           Algebra.Algorithms.Groebner.Signature (f5)
  import           Algebra.Prelude.Core                  (const)
  import           Algebra.Prelude.Core                  (convertPolynomial')
  import           Algebra.Prelude.Core                  (mapIdeal, (.))
  
  {-# RULES
  "calcGroebnerBasis/f5"
    GB.calcGroebnerBasis = GB.reduceMinimalGroebnerBasis . GB.minimizeGroebnerBasis . f5
  
  "calcGroebnerBasisWith/f5"
    GB.calcGroebnerBasisWith = const (GB.reduceMinimalGroebnerBasis . GB.minimizeGroebnerBasis . f5)
  
  "calcGroebnerBasisWith/f5 . convertPolynomial"
    GB.calcGroebnerBasisWith = const (GB.reduceMinimalGroebnerBasis . GB.minimizeGroebnerBasis . f5 . mapIdeal convertPolynomial')
   #-}
  