empfohlen: wenigstens 5,3,4,2 mit Papier und maxima.
Variable und ihre Ordnung:
newtype V = V Natural deriving Eq instance Ord V where compare (V i) (V j) = compare j idann ist V0 > V1 > V2 > ....
Monome und ihre Ordnung:
type D = Natural
newtype Mono v = Mono (M.Map v D) deriving Eq
instance Ord v => Ord (Mono v) where
compare (Mono f) (Mono g) =
compare (M.toDescList f) (M.toDescList g)
Überprüfen und begründen Sie, daß das
eine korrekte Implementierung
der lexikografischen Ordnung ist.
Ist folgende Implementierung äquivalent?
compare (M.toAscList g) (M.toAscList f)
für Polynome in Variablen X > Y > Z:
geben Sie möglichst lange
-Ketten an,
die bei X3 + Y2Z beginnen
load(grobner);poly_buchberger(...);)
oder fricas
poly_grobner_member) oder fricas
Erweitern Sie den Buchberger-Algorithmus und das Reduktionsverfahren →B, um diese Darstellung zu erhalten.
(zum Vergleich: Euklid bestimmt gcd(a, b), erweiterter Euklid bestimmt c, d mit ac + bd = gcd(a, b).)
{b}c}
(alle b, die nicht durch die jeweils anderen Basis-Elemente reduziert werden können)
Bestimmen Sie B' für voriges Beispiel.
Ergänzen Sie die Eigenbau-Implementierung.
(Es gilt 〈B'〉 = 〈B〉. Jedes solche B' heißt reduziert. Die reduzierte Gröbner-Basis eines Polynom-Ideals ist im wesentlichen eindeutig.)
it is very hard to provide a good explicit upper bound on [die Laufzeit des Buchberger-Algorithmus], bad examples are known.
Finden Sie solche bad examples
Erklärung: brute force mit unserer Implementierung
und Leancheck-Generatoren für Monome und Polynome.
Vorsicht: Generatoren sollen keine Exponenten
oder Koeffizienten 0 erzeugen. Hinweis: Anzahl der
Variablen fixieren, z.B. data V = X | Y.
Deswegen
ist der Code polymorph im Variablentyp v.