{-# LANGUAGE DataKinds, OverlappingInstances, PolyKinds #-}
{-# OPTIONS_GHC -fno-warn-type-defaults #-}
module Main (module Algebra.Algorithms.Groebner, module Algebra.Ring.Polynomial
, module Data.Ratio, module Main, module Algebra.Internal
) where
import Algebra.Algorithms.Groebner
import Algebra.Internal
import Algebra.Ring.Noetherian
import Algebra.Ring.Polynomial
import Data.Ratio
import qualified Numeric.Algebra as NA
u, v, x, y, z :: Polynomial Rational (S (S Three))
[u, v, x, y, z] = genVars (sS (sS sThree))
(.+), (.*), (.-) :: Polynomial Rational (S Three) -> Polynomial Rational (S Three) -> Polynomial Rational (S Three)
(.+) = (NA.+)
(.*) = (NA.*)
(.-) = (NA.-)
infixl 6 .+, .-
infixl 7 .*
(^^^) :: Polynomial Rational (S Three) -> NA.Natural -> Polynomial Rational (S Three)
(^^^) = NA.pow
fromRight :: Either t t1 -> t1
fromRight (Right a) = a
fromRight _ = error "fromRight"
{-
parse :: String -> Polynomial Rational
parse = fromRight . parsePolyn
-}
main :: IO ()
main = print $ thEliminationIdealWith (eliminationOrder sTwo) sTwo $
toIdeal [x - (3*u + 3*u*v^2 - u^3), y - (3*v + 3*u^2*v - v^3), z - (3*u^2 - 3*v^2)]