diff --git a/Algebra/Algorithms/Groebner/Monomorphic.hs b/Algebra/Algorithms/Groebner/Monomorphic.hs
--- a/Algebra/Algorithms/Groebner/Monomorphic.hs
+++ b/Algebra/Algorithms/Groebner/Monomorphic.hs
@@ -9,6 +9,9 @@
     , divModPolynomialWith, divPolynomialWith, modPolynomialWith
     -- * Groebner basis
     , calcGroebnerBasis, calcGroebnerBasisWith
+    , syzygyBuchberger, syzygyBuchbergerWith
+    , primeTestBuchberger, primeTestBuchbergerWith
+    , simpleBuchberger, simpleBuchbergerWith
     -- * Ideal operations
     , isIdealMember, intersection, thEliminationIdeal, eliminate
     , quotIdeal, quotByPrincipalIdeal
@@ -124,6 +127,54 @@
         Ideal vec ->
           case singInstance (Poly.sDegree (head $ toList vec)) of
             SingInstance -> map (renameVars vars . polyn . demote . Monomorphic) $ Gr.calcGroebnerBasisWith ord ideal
+  where
+    vars = nub $ sort $ concatMap buildVarsList j
+
+simpleBuchberger :: (Groebnerable r) => [Polynomial r] -> [Polynomial r]
+simpleBuchberger = simpleBuchbergerWith Grevlex
+
+simpleBuchbergerWith :: forall ord r. (Groebnerable r, IsMonomialOrder ord)
+                      => ord -> [Polynomial r] -> [Polynomial r]
+simpleBuchbergerWith _ ps | any (== zero) ps = []
+simpleBuchbergerWith ord j =
+  case uniformlyPromote j :: Monomorphic (Ideal :.: Poly.OrderedPolynomial r ord) of
+    Monomorphic (Comp ideal) ->
+      case ideal of
+        Ideal vec ->
+          case singInstance (Poly.sDegree (head $ toList vec)) of
+            SingInstance -> map (renameVars vars . polyn . demote . Monomorphic) $ Gr.simpleBuchberger ideal
+  where
+    vars = nub $ sort $ concatMap buildVarsList j
+
+primeTestBuchberger :: (Groebnerable r) => [Polynomial r] -> [Polynomial r]
+primeTestBuchberger = primeTestBuchbergerWith Grevlex
+
+primeTestBuchbergerWith :: forall ord r. (Groebnerable r, IsMonomialOrder ord)
+                      => ord -> [Polynomial r] -> [Polynomial r]
+primeTestBuchbergerWith _ ps | any (== zero) ps = []
+primeTestBuchbergerWith ord j =
+  case uniformlyPromote j :: Monomorphic (Ideal :.: Poly.OrderedPolynomial r ord) of
+    Monomorphic (Comp ideal) ->
+      case ideal of
+        Ideal vec ->
+          case singInstance (Poly.sDegree (head $ toList vec)) of
+            SingInstance -> map (renameVars vars . polyn . demote . Monomorphic) $ Gr.primeTestBuchberger ideal
+  where
+    vars = nub $ sort $ concatMap buildVarsList j
+
+syzygyBuchberger :: (Groebnerable r) => [Polynomial r] -> [Polynomial r]
+syzygyBuchberger = syzygyBuchbergerWith Grevlex
+
+syzygyBuchbergerWith :: forall ord r. (Groebnerable r, IsMonomialOrder ord)
+                      => ord -> [Polynomial r] -> [Polynomial r]
+syzygyBuchbergerWith _ ps | any (== zero) ps = []
+syzygyBuchbergerWith ord j =
+  case uniformlyPromote j :: Monomorphic (Ideal :.: Poly.OrderedPolynomial r ord) of
+    Monomorphic (Comp ideal) ->
+      case ideal of
+        Ideal vec ->
+          case singInstance (Poly.sDegree (head $ toList vec)) of
+            SingInstance -> map (renameVars vars . polyn . demote . Monomorphic) $ Gr.syzygyBuchberger ideal
   where
     vars = nub $ sort $ concatMap buildVarsList j
 
diff --git a/computational-algebra.cabal b/computational-algebra.cabal
--- a/computational-algebra.cabal
+++ b/computational-algebra.cabal
@@ -2,7 +2,7 @@
 -- further documentation, see http://haskell.org/cabal/users-guide/
 
 name:                computational-algebra
-version:             0.1.0.0
+version:             0.1.0.1
 synopsis:            Well-kinded computational algebra library, currently supporting Groebner basis.
 description:         Dependently-typed computational algebra libray for Groebner basis.
 homepage:            https://github.com/konn/computational-algebra
diff --git a/examples/bench.hs b/examples/bench.hs
--- a/examples/bench.hs
+++ b/examples/bench.hs
@@ -9,9 +9,8 @@
 import qualified Numeric.Algebra                         as NA
 import           Progression.Main
 
-x, y, z, w, s, a, b, c :: Polynomial Rational
-[x, y, z, w, s, a, b, c] =
-    map (injectVar . flip Variable Nothing) "xyzwSabc"
+x, y, z, w, s, a, b, c :: Polynomial Rational (S (S (S Three)))
+[x, y, z, w, s, a, b, c] = genVars (sS (sS (sS Three)))
 
 instance NFData Variable where
   rnf (Variable x y) = rnf x `seq` rnf y `seq` ()
@@ -24,12 +23,12 @@
 ideal2 = [x^2 * y - 2*x*y - 4*z - 1, z-y^2, x^3 - 4*z*y]
 ideal3 = [ 2 * s - a * y, b^2 - (x^2 + y^2), c^2 - ( (a-x) ^ 2 + y^2)
          ]
-ideal4 = [ x^5 + y^4 + z^3 - 1, x^3 + y^3 + z^2 - 1]
+ideal4 = [ z^5 + y^4 + x^3 - 1, z^3 + y^3 + x^2 - 1]
 
 main :: IO ()
 main =
     defaultMain $ bgroup "groebner"
-                    [ bench "grevlex" $ nf calcGroebnerBasis ideal4
-                    , bench "grlex" $ nf (calcGroebnerBasisWith Grlex) ideal4
-                    , bench "lex" $ nf (calcGroebnerBasisWith Lex) ideal4
+                    [ bench "simple" $ nf (simpleBuchberger Lex) ideal3
+                    , bench "relprime" $ nf (primeTestBuchberger Lex) ideal3
+                    , bench "relprime" $ nf (syzygyBuchberger Lex) ideal3
                     ]
