Con hammar's help he hecho un poco de Haskell plantilla que compilafactorización de polinomios en Haskell
$(zModP 5)
a
newtype Z5 = Z5 Int
instance Additive.C Z5 where
(Z5 x) + (Z5 y) = Z5 $ (x + y) `mod` 5
...
ahora estoy frente a un problema que no creo que pueda resolver este camino.
Un hecho notable sobre los polinomios es que son irreductibles en los racionales si son módulos irreducibles algunos primeros p
. Ya tengo un método que fuerza bruta intenta factorizar polinomios sobre un campo dado (finito).
Quiero intentar ejecutar esta función para múltiples campos. He aquí algo de lo que quiero:
isIrreducible :: (FiniteField.C a) => Poly.T a -> Bool
isIrreducible p = ...
intPolyIrreducible :: Poly.T Int -> Bool
intPolyIrreducible p = isIrreducible (p :: Poly.T Z2) ||
isIrreducible (p :: Poly.T Z3) ||
isIrreducible (p :: Poly.T Z5) ||
...
Básicamente quiero probar el funcionamiento de mi algoritmo de factorización de un gran número de definiciones de "división".
Creo que esto es posible con TH, pero parece que llevaría una eternidad. Me pregunto si sería más fácil pasar mis operaciones aritméticas como un parámetro al isIrreducible
?
Alternativamente Parece que esto podría ser algo que el módulo de Newtype podría ayudar, pero no puedo pensar en cómo funcionaría sin el uso de TH de una manera que sería tan duro ...
Cualquiera ¿Alguna idea de cómo lograr esto?
Estoy usando los [polinomios] (http://hackage.haskell.org/packages/archive/numeric-prelude/0.2.2/doc/html/MathObj-Polynomial-Core.htm) del preludio numérico. La parte molesta de su método es que tengo que pasar el módulo en todo momento; es probablemente más fácil que la forma en que lo hice, pero aún así es un poco molesto ... – Xodarap