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).)
(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
.