numerisches Rechnen mit Maschinenzahlen
sqrt 2 + sqrt 3 ==> 3.1462643699419726
(sqrt 2 + sqrt 3)*(sqrt 2 - sqrt 3) ==> ...
exaktes Rechnen (mit algebraischen Ausdrücken)
\((\sqrt{2}+\sqrt{3})\cdot(\sqrt{2}-\sqrt{3})=\dots\),
maxima: expand(%)
auf konkreten Daten:
let f x = (x+1)^2 in f 3.1 - f 3
auf symbolischen Daten: diff((x+1)^2,x)
subst([x=3],diff((x+1)^2,x))
eigentlich diff(\x -> (x+1)^2)
mit diff::(R -> R) -> (R -> R)
,
hat weitreichende Anwendungen:
Lösen von (parametrisierten) Aufgabenklassen
(für numerisches Rechnen muß Parameter fixiert werden)
exaktes Lösen von Aufgaben
(numer. R. mit Maschinenzahlen: nur Approximation)
experimentelle, explorative, exakte Mathematik und Programmierung
ist nützlich im Studium, verwendet und vertieft:
Mathematik (Analysis, Algebra)
Algorithmen-Entwurf, -Analyse
Prinzipien von Programmiersprachen
Zahlen (große, genaue)
Vektoren (Gitterbasen)
Polynome
Terme, Term-Ersetzungs-Systeme
(Anwendung: Differentiation, Vereinfachung)
Termination un Vervollständigung v. Reduktionssystemen
für Polynom-Ideale, Anw.: Geometrische Beweise
für Gleichheits-Theorien auf Termen (Knuth-Bendix)
maschinell unterstütztes interaktives Programmieren und Beweisen in konstruktiver Typ-Theorie (Agda)
Wolfram Koepf: Computeralgebra, Springer, 2006. https://www.mathematik.uni-kassel.de/~koepf/CA/
Hans-Gert Gräbe: Einführung in das Symbolische Rechnen, Gröbnerbasen und Anwendungen, Skripte, Universität Leipzig https://www.informatik.uni-leipzig.de/~graebe/skripte/
Franz Baader and Tobias Nipkow: Term Rewriting and All That, Cambridge, 1998. https://www21.in.tum.de/~nipkow/TRaAT/
weitere Literatur siehe z.B. https://portal.risc.jku.at/Members/hemmecke/teaching/ppscs
wir benutzen
ist alles im Pool installiert (ssh, tmux, x2go)
allgemeine Hinweise, auch zum Selbstbauen https://www.imn.htwk-leipzig.de/~waldmann/etc/cas/
Regeln für symbolisches Differenzieren (nach t
):
D(t) -> 1 D(constant) -> 0
D(+(x,y)) -> +(D(x),D(y))
D(*(x,y)) -> +(*(y,D(x)),*(x,D(y)))
D(-(x,y)) -> -(D(x),D(y))
Robert Floyd 1967, zitiert in: Nachum Dershowitz: 33 Examples of Termination,
Korrektheit? Termination? Komplexität?
Strategie (Auswahl von Regel und Position)?
ausreichend? angemessen?
data E = Zero | One | T
| Plus E E | Times E E deriving Show
e :: E
e = let b = Plus T One in Times b b
d :: E -> E
d e = case e of
Zero -> Zero ; One -> Zero ; T -> One
Plus x y -> Plus (d x) (d y)
Times x y ->
Plus (Times y (d x)) (Times x (d y))
http://wayback.cecm.sfu.ca/projects/ISC/ISCmain.html (kaputt)
zur Bestimmung ganzzahliger Relationen (z.B. zwischen Potenzen einer numerisch gegebenen Zahl)
sqrt(2+sqrt 3) ==> 1.9318516525781366
integer relations algorithm, run:
K = 1.9318516525781366
4 2
K satisfies the polynomial, X - 4 X + 1
mit LLL-Algorithmus (Lenstra, Lenstra, and Lovasz, 1982), der kurzen Vektor in geeignetem Gitter bestimmt.
zum Haskell-Programm zum Symb. Differenzieren:
füge Syntax und Regel für Quotienten hinzu
schlage Regeln zur Vereinfachung vor
ISC Simple Lookup and Browser sagt für \(\sqrt{2+\sqrt{3}}\):
Mixed constants with 5 operations
1931851652578136 = 1/2/sin(Pi/12)
begründen Sie das (geometrisch oder schriftlich)
ein Polynom mit Nullstelle \(\sqrt[2]{2} +\sqrt[3]{3}\) bestimmen, nachrechnen.
Geonext: Satz von Napoleon illustrieren (gleichseitige Dreiecke über den Seiten eines beliebigen Dreiecks)
eigener Rechner: rlwrap maxima
installieren,
Rechner im Pool: ssh
und tmux
ausprobieren,
auch Management von Sessions, Windows, Panes (split horizontal,
vertikal), vgl. https://news.ycombinator.com/item?id=26670708
Organisatorisches:
in Gitlab.Dit-Projekt einschreiben
Hausaugabe: Wiki anmelden, Issue: diskutieren, ggf. MR
Prüfungszulassung: Hausaufgaben, autotool (empfohlen, nicht erzwungen)
Prüfung: Klausur, ggf. Hilfspunkte aus Projekt (\(=\) ausgearbeitete Hausaufgabe o.ä.)
exakte Zahlen: natürlich, ganz, rational
Darstellungen: Positionssystem, Bruch
Rechnungen: Addition, Multiplikation
beliebig genau genäherte Zahlen
(berechenbare reelle Zahlen)
Darstellungen: Positions-System, Kettenbruch
Rechnungen: arithmetische und irrationale Funktionen
später:
exaktes Rechnen mit algebraischen Zahlen
die Zahl \(n\in \NN\) im Positionssystem zur Basis \(B\):
\(n = \sum_{k\ge 0} x_k B^k\)
mit \(\forall i: 0\le x_i< B\) und \(\{i\mid x_i\neq 0\}\) endlich
Bsp: \(25 = 1\cdot 3^0+ 2\cdot 3^1 + 2\cdot 3^2 = [1,2,2]_3\)
Darstellung ist eindeutig, kann durch fortgesetzte Division mit Rest bestimmt werden \(25=1+3\cdot 8, 8=2+3\cdot 2\)
praktisch wählt man die Basis
10 für schriftliches Rechnen
historisch auch 60 (Zeit- und Winkelteilung)
2 (oder \(2^w\)) binäre Hardware, maschinennahe Software
Darstellung
type Digit = Word64 ; data N = Z | C Digit N
Semantik
value :: N -> Natural
value Z = 0 ; value (C x xs) = x + 2^64 * value xs
Rechnung
instance Num N where (+) = plus_carry False
plus_carry :: Bool -> N -> N -> N
plus_carry cin (C x xs) (C y ys) =
let z = bool 0 1 cin + x + y
cout = z < x || z < y || ...
in C z (plus_carry cout xs ys)
plus_carry ...
anstatt Schulmethode: rekursive Multiplikation
\((p + qB) (r + sB) = pr + (ps + qr)B + qsB^2\)
Bsp. \(B=100\), \((12+34\cdot 100)(56+78\cdot 100)=12\cdot 56+\dots\)
\((1+2\cdot 10)(5+6\cdot 10)=1\cdot 2 + \dots\)
\(M(w)=\) Anzahl elementarer Operationen (Plus, Mal) für Multiplikation \(w\)-stelliger Zahlen nach diesem Verfahren
\(M(1)=1, M(w)=4\cdot M(w/2)+ 2\cdot w\)
\(M(2^k)=3\cdot 4^k-2^{k+1}\), also \(M(w)\in \Theta(w^2)\)
also wie bei Schulmethode, aber das läßt sich verbessern, und darauf muß man erstmal kommen
Anatoli Karatsuba, Juri Ofman 1962
\((p + qB) (r + sB) = pr + (ps + qr)B + qsB^2\)
\(= pr + ((p+q)(r+s)-pr-qs) B + qs B^2\)
\(K(w) =\) Anzahl elementarer Operationen (Plus, Mal) für Multiplikation \(w\)-stelliger Zahlen nach diesem Verfahren
\(K(1)=1, K(w)=3\cdot K(w/2)+5\cdot w\)
(eine Multiplikation weniger, drei Additionen mehr)
asymptotisch mit Ansatz \(K(w)\approx C\cdot w^e\)
\(C\cdot w^e = 3C w^e/2^e + 5w\) \(\Rightarrow\) \(1\approx 3/2^e\), also \(e=\log_2 3\approx 1.58\)
explizite Werte für \(w=2^k\),
ab wann besser als Schulmethode?
Darstellung: Bsp GMP (GNU Multi Precision Library)
Natürliche Zahl (magnitude) mit Vorzeichen (sign)
nicht Zweierkomplement, denn das ist nur für Rechnungen modulo \(2^w\) sinnvoll
GHC (integer-gmp
)
data Integer = S Int | Jp BigNat | Jn BigNat
data BigNat = BN ByteArray
NB: ganzzahlige Zahlbereiche in Haskell/GHC:
Int
(ist immer die falsche Wahl)
Maschinenzahlen (mod \(2^{64}\)): Int64
,
Word64
,
beliebig große: Integer
,
Numeric.Natural
rationale Zahl \(q\) ist Paar von ganzen Zahlen \((z,n)\)
data Q = Q Integer Integer
normalisiert: \(n\ge 1\) und \(\gcd(|z|,|n|)=1\)
normalisierte Darstellung ist eindeutig
Vorteil:
semantische Gleichheit (dieselbe Zahl wird bezeichnet) ist syntaktische Gleichheit (der Komponenten)
Nachteil (?)
nach jeder arithmetischen Operation normalisieren
nicht normale Zahlen verhindern: Konstruktor Q
nicht
exportieren (sonst let q = Q 8 12
)
Funktion \(f:\QQ\to\QQ: x \mapsto x/2+1/x\)
\(x_k=f^k(1)\), \(x_0=1, x_1=3/2, x_2=17/12, x_3=577 / 408\)
Zähler (und Nenner) in jedem Schritt (wenigstens) quadriert, d.h., Stellenzahl verdoppelt (Bsp: \(x_{10}\))
\(p/q\mapsto p/(2q) + q/p = (p^2+2q^2)/(2pq)\)
das ist typisch für Folgen arithmetischer Op.,
Normalisierung wirkt nur selten verkleinernd.
die Folge \(x_k\) nähert \(\sqrt 2\) an: \((p_k/q_k)^2-2=1/q_k^2\)
Konvergenz ist quadratisch (jeder Schritt quadriert den Fehler, verdoppelt Anzahl gültiger Stellen)
Darstellug von Zahlen in \(\{x\mid 0\le x < 1\}\)
mit Basis \(1/B\) und Ziffern \(\in\{0\dots B-1\}\)
Bsp: \(B=10\), \(0.314 = 0\cdot B^0+3\cdot B^{-1}+1\cdot B^{-2}+4\cdot B^{-3}\)
hier sind auch unendliche Ziffernfolgen sinnvoll,
bezeichnet Limes der Werte der endlichen Partialfolgen
Konversion
decimal :: Rational -> [ Nat ]
decimal x = let q = truncate (fromRational x)
in q : decimal (10 * (x-q))
Anwendung: vorige Näherung von \(\sqrt 2\)
beschrieben wird hier nicht die exakte (symbolische) Rechnung, sondern eine konvergente Näherung
Def. reelle Zahl \(r\) mit \(0\le r<1\) heißt berechenbar (zur Basis \(B\)), wenn die Funktion \(d:\NN\to\{0,\dots,B-1\}\), welche die Darstellung von \(x\) zur Basis \(1/B\) bestimmt, berechenbar ist (z.B. durch eine Turingmaschine)
jede rationale Zahl ist berechenbar
(Beweis: Dezimalbruch ist endlich oder periodisch)
\(\sqrt 2\) ist berechenbar (Beweis: vorige Folge \(x_k\))
Menge \(\BB\) der berechenbaren Zahlen ist abgeschlossen unter arithmetischen Operationen (und weiteren)
Satz von Taylor: wenn \(f\) oft genug diff-bar,
dann \(f(x_0+d)=\sum_{k=0}^{n-1} f^{(k)}(x_0) d^k/k!+\Delta_n\)
mit \(\exists 0\le d'\le d: \Delta_n=f^{(n)}(x_0+d')d^n/n!\)
Bsp: \(f(x)=\exp(x)\), dann \(f=f' =f'' = f^{(3)}=\dots\) und
\(\exp(0+d)=1+d+d^2/2+d^3/6+\dots\)
take 100 $ decimal
$ sum $ take 100 $ scanl (/) (1::Rational) [1..]
==> [2,7,1,8,2,8,1,8,2,8,4,5,9,0,4 ... ]
Fehlerabschätzung? (reicht die zweite 100 für die erste?)
\(\exp(1)=\exp(1/2)^2\), diese Reihe konvergiert schneller
Taylor-Reihe von \(\sqrt x\) an der Stelle 1
Ableitungen mit maxima:
diff(sqrt(x),x,5);
\(105/32\cdot x^{-9/2}\)
diff(sqrt(x),x,6);
\(-945/64\cdot x^{-11/2}\)
Vermutung \(f^{(n)}(1)=(-1)^{n+1}\cdot (2n-3)!! \cdot 2^{-n}\)
\(\sqrt{1+d}=1+\sum_{k>0} (-1)^{k+1} \frac{(2k-3)!!}{2k!!}d^k\)
\(= 1+\frac{1}{2}\cdot d - \frac{1\cdot 1}{2\cdot 4}\cdot d^2 + \frac{1\cdot 1\cdot 3}{2\cdot 4\cdot 6}\cdot d^3 - \frac{1\cdot 1\cdot 3\cdot 5}{2\cdot 4\cdot 6\cdot 8}\cdot d^4 \pm \dots\)
für \(\sqrt 2\): Berechnung als \(\sqrt{1+1}\) konvergiert langsam
besser: \(\sqrt 2=7/5\sqrt{1+1/49}\)
Taylor-Entwicklung \(\log(1+x)=x-x^2/2+x^3/3- \ldots\)
konvergiert sehr langsam für \(x=1\), gar nicht für größere \(x\).
J.R. Young, 1835, siehe v. Mangoldt/Knopp, Bd. 2, S. 127 \[\begin{aligned} a = \log (16/15) &=& 4\log 2-1 \log 3-\log 5, \\ b = \log (25/24) &=& \dots \\ c = \log (81/80) &=& \dots \end{aligned}\] Umstellung ergibt \(\log 2 = 7a + 5b + 3c , \dots\) Aufgaben:
alle Koeffizienten ausrechnen
wie genau sind die Werte für \(\log 2\) usw., wenn man nur die erste Näherung benutzt, also \(\log(1+x)\approx x\)
woher bekommt man geeignete Brüche (z. B. für \(\log 7\))?
darüber gibt es ganze Bücher (Aufgabe: finde Beispiele)
Ansatz: Taylor-Entwicklung von \(\arctan x\)
\[\arctan x = x - x^3/3 + x^5/5 - \dots\]
betrachte \(x=1/5\), \(\alpha=\arctan x\),
bestimme \(\tan(4 \alpha)\) (ist nahe bei 1)
bestimme \(\beta = 4\alpha - \pi/4\)
und \(y\) mit \(\beta = \arctan y\) (ist nahe bei 0)
\(\pi/4 = 4\arctan x - \arctan y\)
(J. Machin, 1706, 100 Stellen; W. Shanks, 1873, 707 St.)
Multiplikation in GMP (GNU Multiprecision Library) https://gmplib.org/manual/Multiplication-Algorithms
Karatsuba-Rechnung ist dort etwas anders als hier auf der Folie, warum?
GHC verwendet GMP für den Typ Integer
.
Bestimmen Sie experimentell den Anstieg der Rechenzeit bei Verdopplung der Stellenzahl, z.B.
:set +s
x = 10^10^8 :: Integer
odd x -- damit x ausgewertet wird
odd ((x-1)*(x+1)) -- die eigentliche Messung
True
(3.73 secs, 166,159,792 bytes)
y = x*x -- hat doppelte Stellenzahl
Ist die Anzahl der Bytes plausibel?
Diskutieren Sie mögliche verkürzte Auswertungen für
odd ...
. Kann GMP/GHC das?
Zusatz: warum ist (oder erscheint) (x+1)^2
schneller
als (x+1)*(x+1)
?
diskutieren (Zusatz: implementieren) Sie die Darstellung von ganzen Zahlen mit negativer Basis \(B\le -2\)
(und nichtnegativen Ziffern \(\in\{0,\dots,|B|-1\}\) wie bisher)
Bsp: \(B=-2\),
\(-3 = 1\cdot B^0 + 0\cdot B^1 + 1\cdot B^2+1\cdot B^3 =1+0+4-8\)
Eindeutigkeit, Konstruktion
Arithmetik (Nachfolger, Addition, Multiplikation)
Bestimmen Sie die Taylor-Reihe für den Arcustangens an der Stelle 0
wie auf Folie Potenzreihe für Wurzelfunktion
Bestimmen Sie damit \(x=\arctan(1/2), y=\arctan(1/3)\) auf (z.B.) 20 Stellen.
Begründen Sie \(x+y=\pi/4\). Rechnen Sie den Wert für \(\pi\) aus und vergleichen Sie mit einer verläßlichen Quelle.
Kann man \(\pi\) nach diesem Verfahren, aber mit anderen Parametern, besser bestimmen? (mehr Stellen bei gleichem Aufwand)
Bestimmen Sie die Taylor-Reihe für den (natürlichen) Logarithmus an der Stelle 1. Bestimmen Sie damit \(a=\log(6/5), b=\log(9/8), c=\log(10/9)\) auf (z.B.) 100 Stellen und daraus \(\log 2\) als eine Linearkombination.
wie bestimmt man \(\sqrt{3}\), \(\sqrt{5}\), \(\sqrt[3]{2}\)
Hinweis: \(\sqrt[3]{2}\) als Fixpunkt von \(x \mapsto (2x + 2/x^2)/3\),
diese Gewichte ergeben quadratische Konvergenz,
ist äquivalent zu Bestimmung der Nullstelle von \(f(x)=x^3-2\) nach Newton-Verfahren:
\(f'(x)=3x^2, x\mapsto x - f(x)/f'(x) = \dots\)
Jerzy Karczmarczuk: The Most Unreliable Technique in the World to compute pi, 2003? https://web.archive.org/web/20051017081559/http://users.info.unicaen.fr/~karczma/arpap/lazypi.ps.gz
Optimierungs-Aufgaben, Bsp: Koeffizienten eines neuronalen Netzes (gegebener Topologie) zur bestmöglichen Approximation einer gegebenen Funktion
oder Aufgaben, die sich als O-A formulieren lassen,
Bsp: Lösung eines (nicht linearen) Ungleichungs-Systems \(\bigwedge_i L_i(x) \ge R_i(x)\) für \(x\in\RR^n\)
äq: \(0 \stackrel{?}{=} \min_x \sum_i \max (-(L_i(x)-R_i(x)),0)\)
lösen durch Folge \(x^{(k+1)}=x^{(k)} + \alpha \cdot d\), mit \(\alpha\in\RR,d\in\RR^n\)
wobei Schritt-Richtung \(d = - (\nabla f)(x^{(k)})\), Gradient \((\nabla f) x := [\partial f/\partial x_i \mid 1\le i \le n]\) \(=\) Vektor der partiellen Ablt.
Aufgabenstellung (Spezifikation):
gegeben: Vektor \(x\in\RR^d\), arithmetische Fkt. \(f:\RR^d\to\RR\)
als symbolischer Ausdruck (Term, DAG)
gesucht: \((\nabla f)(x)\), Wert des Gradienten an Stelle \(x\)
verschiedene Lösungsverfahren:
symbolische Differentiation: Term für \(\nabla f\)
…der kann aber sehr groß werden
numerische Diff.: berechnet \((f(x+h\cdot \vec{e_i})-f(x))/h\)
…anfällig für Rundungs- und Auslöschungs-Fehler
automatische Diff.: symbolische Rechng. auf DAG von \(f\)
Baydin, Pearlmutter, Radul, Siskind: Automatic differentiation in machine learning: a survey, 2015–2018 https://arxiv.org/abs/1502.05767
Implementierung: repräsentiere Funktionswert und
Gradient in einem Objekt, dessen Typ impl. Num
data N v z = N {abs :: z, lin :: M.Map v z}
var::v->z->N v z; var v z = N z (M.singleton v 1)
instance (Ord v, Num z) => Num (N v z) where
fromInteger i = N (fromInteger i) M.empty
N a1 l1+N a2 l2 = N(a1+a2)(M.unionWith (+) l1 l2)
Anwendung: \(\sqrt 2\) durch \(\arg\min f\) mit \(f x = (x^2-2)^2\)
f :: Num a => a -> a ; f x = (x^2 - 2)^2
f @(Fixed E6) 1.4 ==> 0.001600
f @(N () (Fixed E6) ) (var () 1.4) ==>
N 0.001600 (fromList [((),-0.224000)])
Bsp: gesucht ist Netz mit zwei Schichten für XOR.
volles Optimierungsproblem: minimiere Fehlerquadratsumme über alle (4) Eingabe/Ausgabe-Paare (benutze Gradient dieser Fkt.)
Variante: in jedem Schritt ein E/A-Paar zufällig auswählen
weniger Rechenaufwand pro Schritt
Ausbruch aus lokalen Minima (voller Gradient \(=\) 0), die global schlecht sind
Variante: je Schritt: betrachte eine zufällige Teilmenge der Parameter als konstant (Gradient nur für die anderen)
weniger Rechenaufwand pro Schritt
Details: siehe VL Numerik für Maschinelles Lernen
das Wort-Ersetzungs-System \(R=\{ab\to ba\}\) terminiert (jede Ableitung ist endlich),
denn \(i:a \mapsto \begin{pmatrix}2 & 0\\ 0 & 1\end{pmatrix}, b \mapsto \begin{pmatrix}1 & 1\\ 0 & 1\end{pmatrix}\)
ist zu \(R\) kompatible Interpretation in wohlfundiertes monotones Monoid \((\begin{pmatrix}\ge 1 & \ge 0\\ \ge 0 & \ge 1\end{pmatrix}, \circ, >_M)\)
mit \(x>_My := x_{1,2}>y_{1,2} \wedge \forall i,j: x_{i,j}\ge y_{i,j}\)
kompatibel: \(i(ab)=\begin{pmatrix}2 & 2\\ 0 & 1\end{pmatrix} >_M \begin{pmatrix}2 & 1\\ 0 & 1\end{pmatrix}=i(ba)\)
solche Interpretation für \(\{aa\to aba\}\), \(\{a^2 b^2\to b^3a^3\}\)?
gesucht sind \(a,b\in\RR^{3\times 3}\) mit \(a,b\in M\), \(a^2>_M aba\)
Constraints für \(2\times 3\times 3\) Unbekannte: \(a_{i,j}\ge 0,,b_{i,j}\ge 0\)
ersetze durch Fkt. von unbeschränkten \(x_{i,j}\in \RR\)
Bsp.: \(a_{i,j}=x_{i,j}^2\), \(a_{i,j}=\max(0,x_{i,j})\), \(a_{i,j}=\max(x_{i,j},-x_{i,j})\)
AD funktioniert auch für stückweise Funktionen
instance Ord (N v z) where ...
\(3\times 3\) Constraints für Produkte: \((a^2)_{i,j}\ge (aba)_{i,j}\)
Ungl. \(f\ge g\) realisieren durch Strafterm \(\max (-(f-g), 0)\)
zu minimieren ist Summe der Strafen, min soll 0 sein
Modellierung so, daß der Gradient nützlich ist
(also Strafterm nicht: if \(f<g\) then 1 else 0)
Constraints (Ungl.) exakt erfüllen (in \(\QQ\), nicht Double
)
Jerzy Karczmarczuk Functional Differentiation of Computer Programs. ICFP 1998 https://dl.acm.org/doi/10.1145/289423.289442
Faustyna Krawiec, Simon Peyton Jones, Neel Krishnaswami, Tom Ellis, Richard A. Eisenberg, Andrew Fitzgibbon: Provably correct, asymptotically efficient, higher-order reverse-mode automatic differentiation, POPL 2022, https://dl.acm.org/doi/10.1145/3498710
Implementierung: Mikolaj Konarski, https://github.com/Mikolaj/horde-ad
Edward Kmett 2010–, https://hackage.haskell.org/package/ad
(H. Rosenbrock 1960) ein Test für Abstiegsverfahren ist \(f(x,y)=(x^2-y)^2 + y^2/100\),
Veranschaulichen Sie den Werteverlauf mit
rlwrap maxima
f : (x^2-y)^2 + y^2/100;
plot3d(f,[x,-50,50],[y,-1000,3000]);
wo ist das globale Minimum?
in welche Richtung geht der (entgegengesetze) Gradient im Punkt \((20,100)\),
wo verläuft die Folge der Näherungswerte, wird das globale Minimum erreicht? (1. diskutieren, 2. ausprobieren)
für den Typ N v z
: weitere Funktionen implementieren
(Division, recip, sqrt, exp, log),
den so bestimmten Wert des Gradienten mit numerischer Differentiation vergleichen
diese Fkt. in einer Minimum-Bestimmung verwenden
in neuronalen Netzen wird oft die Funktion \(S : x\mapsto 1/(1+\exp(-x))\) verwendet (sie bildet \(\RR\) monoton steigend auf \([0,1]\) ab)
bestimmen Sie deren Ableitung symbolisch (zu Fuß oder Maxima), vergleichen mit AD-Implementierung (vorige Aufgabe)
(Fortsetzung) ein \(k\)-stelliges Neuron mit Gewichten \(w_0,w_1,\dots,w_k\in\RR\) ist die Funktion \(x \mapsto S(w_0+\sum_i w_i x_i)\).
ein vollständig verbundenes Netz mit \(e\) Eingängen und \(n\) Neuronen: das Neuron \(i\) sieht alle Eingänge sowie die Ausgänge der Neuronen \(1 \dots i-1\).
Bestimmen Sie (mit stochastischem Gradientenabstieg mit AD) die Gewichte eines vollständigen Netzes (mit möglichst wenig Neuronen) für
XOR über alle Eingänge
Majoriät (falls \(s\) ungerade)
für Optimierungsverfahren 2. Ordnung benötigt man die
Hesse-Matrix einer Funktion (diese enthält alle zweiten Ableitungen).
Modellieren und berechnen Sie diese durch eine Erweiterung des Typs
data N v z
.
Vergleichen Sie mit exakten Werten (Bsp. maxima:
hessian((x^2-y)^2,[x,y]);
)
(Forschungsaufgabe) Matrix-Interpretationen für Wortersetzungssysteme
verbesserte Modellierung (der Zielfunktion) und Parameter (Schrittweite)
stochastischer Abstieg (1. Ordnung)
Abstiegsverfahren 2. Ord. (oder Quasi-Newton)
Testfälle
(leicht) \(a\to b\), \(ab\to ba\), \(ab\to bba\), \(aa\to aba\),
(schwerer) \(a^2b^2\to b^3a^3\), \(\{a^2\to bc, b^2\to ac, c^2\to ab\}\)
System mit 3 Regeln: es genügt \(>_M\) für eine Regel, für die anderen \(\ge_M\). Wie kann man diese Bedingung als Zielfunktion einer Optimierung realisieren?
ganzzahlige Lösungen sind bekannt (gefunden durch Bit-Blasting) gibt es kleinere nicht-ganzzahlige?
Anwendung: wfmA \(A=(\NN,>,[\cdot])\), jedes \([f]_A\) ist Polynom.
Bsp: \([f](x,y)=x^2\cdot y\) (Vorsicht), \([g](x,y)=x^2+y\)
Bsp: kompatibel mit \(g(g(x,y),z)\to g(x,g(y,z))\)?
es müssen Aussagen der Form \(\forall x,y,z: P(x,y,z)>0\) (automatisch) nachgewiesen werden
welche Approximation in der autotool-Aufgabe dazu?
Zeige \(x,y\ge 0\Rightarrow (x+y)/2\ge \sqrt[2]{xy}\)
Ü: Zeige \(x,y,z\ge 0\Rightarrow (x+y+z)/3\ge \sqrt[3]{xyz}\)
Ü: Hilberts 17. Problem (nichtneg. P, das kein SOS ist)
Bsp: gesucht ist Minimalpolynom für \(y = \sqrt{2} + \sqrt[3]{3}\)
\[\begin{array}{c|cccccc} & 1 & \sqrt[3]{3} & \sqrt{2} & \sqrt{2} \sqrt[3]{3} & \sqrt[3]{3^2} & \sqrt{2} \sqrt[3]{3^2} \\ \hline y^0 & 1 & 0 & 0 & 0 & 0 & 0 \\ y^1 & 0 & 1 & 1 & 0 & 0 & 0 \\ y^2 & 2 & 0 & 0 & 2 & 1 & 0 \\ y^3 & 3 & 6 & 2 & 0 & 0 & 3 \\ y^4 & 4 & 3 & 12& 8 & 12& 0 \\ y^5 & 60& 20& 4 & 15& 3 & 20 \\ \hline y^6 & 17& 90&120& 24& 60& 18 \end{array}\] die letzte Zeile ist linear abhängig von den vorigen (Dimension des Vektorraumes ist \(\le 6\)), ergibt Darstellung von \(y^6\) als rationale Linearkombination von \(y^0,\dots, y^5\).
Satz: in jedem Dreieck liegen
die Seitenmitten
die Höhenfußpunkte
die Mitten der oberen Höhenabschnitte
auf einem Kreis (Feuerbach-Kreis, 9-Punkte-Kreis).
Beweis durch symbolisches Rechnen:
Koordinaten der Ecken \((A_1,A_2),(B_1,B_2),(C_1,C_2)\)
ex. Polynom \(P\), so daß: \((X_1,X_2)\) liegt auf Umkreis der Seitenmitten gdw \(P(A_1,A_1,B_1,B_2,C_1,C_2,X_1,X_2)=0\)
\((X_1,X_2)\) ist ein Höhenfußpunkt: \(Q(\dots)=0\)
zu zeigen ist \(Q(\dots)=0 \Rightarrow P(\dots)=0\)
das ist (später) eine Aussage über Polynom-Ideale
Polynom (semantisch) als Funktion: \(\lambda x . x^3-3x^2+3x-1\)
Polynom (syntaktisch)
als Menge von Monomen \(\{1x^3,-3x^2,3x^1,-1x^0\}\),
als Folge von Koeffizienten \([1,-3,3,-1]\)
symbolisches Rechnen mit Polynomen (elementare Arithmetik)
als Grundlage für (später) Algorithmus von Buchberger zur Bestimmung von Gröberbasen
Wdhlg. (Zahlen)bereiche (Gruppen, Ringe, Körper),
Anwendung: Polynome in mehreren Variablen
Definitionen (Wiederholung)
Monoid: Addition, Null
Gruppe: wie Monoid, und Subtraktion
Ring: wie Gruppe und zusätzlich Multiplikation, Eins
Körper: wie Ring und zusätzlich Division
Vektorraum (ü. Körper): Gruppe, skalare Multiplikation
Bsp: \(\NN,\ZZ,\ZZ/6\ZZ,\ZZ/7\ZZ,\QQ,\RR,\RR^2,\CC,\ZZ[X]\)
zusätzliche Eigenschaften (Beispiele)
Ring heißt nullteilerfrei: \(\forall a,b: a\neq 0\wedge b\neq 0\Rightarrow (ab)\neq 0\)
Ring heißt euklidisch (bzgl. Funktion \(|\cdot|:R\to \NN\)),
wenn \(\forall a,b\neq 0 :\exists q,r: a=q\cdot b+r\) mit \(|r|<|b|\)
Repräsentation:
dicht: Folge (Data.Sequence) der Koeffizienten
dünn: endliche Abbildung (Data.Map)
Schlüssel: Grad, Wert: Koeffizient
normalisierte Darstellung: nur Koeffizienten \(\neq 0\) werden repräsentiert (dann einfacher Test auf \(P=0\))
Auswertung: mit Horner-Schema
Addition
in dichter Darstellung:
Data.List.zipWith (+)
in dünner Darstellung:
Data.Map.unionWith (+)
Multiplikation: naiv: quadratisch, mit FFT: \(n \log n\)
Beispiel: \(A=(x^5-1), B=(x^2-1)\), \(A:B=\) Quotient \(Q=x^3+x\), Rest \(R=x-1\)
Spezifikation: \(A:B=Q \text{~Rest~} R\) gdw. \(A = B\cdot Q + R \wedge \deg R < \deg B\).
Bezeichnung: \(\deg P\) (Grad) \(=\) der höchste Exponent,
\(\deg(x^5-1)=5,\deg(4)=0,\deg (0)=-\infty\).
Implementierung \(A:B\): falls \(\deg A \ge \deg B\), dann \((c_1\cdot x^{e_1}=\lead A\) (höchstes Monom), \((c_2\cdot x^{e_2}=\lead B\) (höchstes Monom), \(q = (c_1/c_2)x^{e_1-e_2)}\), \(A'=A - qB\), \((R', Q') = A' : B\), Resultat …
das wird in den allermeisten Anwendungen gebraucht
mögliche Repräsentationen für \(\ZZ[X_1,X_2,\ldots]\)
geschachtelt: \(=(\ZZ[X_1])[X_2,\ldots]\)
als 1-Var-Polynom, Koeffizienten sind \((n-1)\)-Var-Pol.
flach: als endliche Abbildung
Schlüssel: Monom (Bsp: \(X_2^8X_4^5\)), Wert: Koeffizient
Monom: als endliche Abbildung
Schlüssel: Variable (Bsp: \(X_2, X_4\)) Wert: Exponent
die geschachtelte Darstellung ist elegant (und man muß nichts neu programmieren)
kann aber unpraktisch sein (wenn man von oben eine innere Variable benutzt)
Mult. von Polynom mit Zahl ist strukturerhaltend
Struktur M.Map Natural c
wird hier nicht benötigt,
könnte auch [(Natural,c)]
sein (Liste, Invariante:
aufsteigend nach Schlüssel, besser: absteigend, wg. Zugriff auf
head)
dafür effiziente Addition, Multiplikation?
Addition: wie merge
. Dabei Normalisierung
Multiplikation: wiederholte Addition mit Verschiebung
dünne Darstellung ist
type Mono v = M.Map v Natural
,
type Poly v c = M.Map (Mono v) c
jeweils Map s w
ersetzen durch [(s, w)]
mit Invariante: absteigend nach s
effiziente Implementierung arithmetischer Op.?
Addition von Polynomen (benutzt merge
)
Multiplikation von Polynomen: benutzt: von Monomen
die Monom-Ordnung muß monoton sein bzgl. Multiplikation
wenn \(m_1 > m_2\), dann \(m\cdot m_1 > m\cdot m_2\).
Beispiele: lexikografisch; Exponentensumme, dann lex.
Def: in Ring \(R=(M,0,+,1,\cdot)\): Menge \(I\subseteq M\) heißt Ideal,
wenn abgeschlossen unter Summe (mit sich) \(\forall x\in I, y\in I: (x+y)\in I\).
und abgeschlossen bzgl. Multiplikation mit \(M\) (mit allen) \(\forall x\in I, y\in M: (xy)\in I\).
Def: das von \(B\subseteq M\) erzeugte Ideal, Notation \(\langle B\rangle\),
ist das kleinste (bzgl. Inklusion) Ideal \(I\) mit \(B\subseteq I\)
Satz: \(\operatorname{Ideal}(B)=\langle B\rangle= \{ \sum c_i b_i \mid c_i\in M, b_i\in B \}\)
Bsp: in \(\ZZ\): \(\operatorname{Ideal}(\{8,12 \})=\langle 8,12\rangle=?\)
Bsp: in \(\QQ[X,Y]\): \(\operatorname{Ideal}(1)\), \(\operatorname{Ideal}(0)\), \(\operatorname{Ideal}(\{X+Y,X-Y\})\)
Bsp: gilt \((X^5-Y^2)\in\operatorname{Ideal}(\{X^2Y-1, XY^2-1\})\)?
nächste VL: Algorithmus für Polynom-Ideal-Mitgliedschaft
Bezeichnungen:
arithmetisches Mittel \(A(x_1,\dots,x_n)=(\sum x_i)/n\), geometrisches Mittel \(G(x_1,\dots,x_n)=\sqrt[n]{\prod x_i)}\).
Aufgabe: Stelle \(A(x_1,\ldots,x_4)^4-G(x_1,\ldots,x_4)^4\) als Summe von Quadraten (SOS) von Polynomen dar.
Hinweis: \(A(x_1,x_2)^2-G(x_1,x_2)^2 = (x_1-x_2)^2/4\) und
\(A(x_1,x_2,x_3,x_4)=A(A(x_1,x_2),A(x_3,x_4)) \ge A(G(x_1,x_2),G(x_3,x_4)) \ge G(G(x_1,x_2),G(x_3,x_4)) = G(x_1,x_2,x_3,x_4)\).
Zusatz: \(A(x_1,x_2,x_3)^3-G(x_1,x_2,x_3)^3\) ist kein SOS, kann aber als Bruch mit SOS im Zähler und \((x+y+z)\) im Nenner geschrieben werden. Dazu die SOS-Darstellung der A-G-Ungleichung für die 4 Werte \(x_1,x_2,x_3,t=A(x_1,x_2,x_3)\) benutzen, denn \(A(x_1,x_2,x_3,t)=t\) und \(G(x_1,x_2,x_3,t)^4=G(x_1,x_2,x_3)^3\cdot t\).
Hintergrund: Bruce Reznick: Some Concrete Aspects of Hilbert’s 17th Problem, 2000, https://faculty.math.illinois.edu/~reznick/.
das Minimalpolynom für \(\sqrt{2}+\sqrt[3]{3}\) nach angegebenem Verfahren ausrechnen und überprüfen.
Ähnlich für \(\sqrt{3}+\sqrt{5}\) oder (z.B.) \(\sqrt[5]{3}+\sqrt[5]{5}\)
Das Polynom \(P\) für liegt auf Umkreis der Seitenmitten angeben (oder ähnlicher geometrischer Ort im Dreieck).
o.B.d.A \(A_1=A_2=B_1=0\) annehmen.
Warum wäre zusätzlich \(C_2=0\) doch eine B.d.A.?
für die in VL angegebene Implementierung von Polynomen:
eine anderen Koeffizientenbereich (als Rational
)
benutzen, z.B. Complex Rational
nichttriviale Rechnungen durchführen (z.B. Division von \(X^{pq}-1\) durch \(X^p-1\)), Ergebnis prüfen,
Laufzeit messen, Ausführung profilieren, teure Funktionen feststellen, ggf. verbessern
Vergleichen mit derselben Rechnung in einem richtigen Computer-Algebra-System (maxima, fricas). (Nicht irgendwo online, sondern lokal, damit man messen und vergleichen kann.)
für \(P=X^2Y + XY^2 + Y^2, Q=XY-1, R=Y^2-1\):
ist \(P\in\operatorname{Ideal}(Q,R)\)?
Hinweis: nein. Hinweis: Betrachten Sie Werte von \(P\) für die gemeinsamen Nullstellen von \(Q,R\).
gilt \(X^5-Y^2 \in\operatorname{Ideal}(X^2Y-1,XY^2-1)\)?
Welches Resultat liefert der Nullstellentest?
Zeigen Sie \(\operatorname{Ideal}(X+XY,Y+XY,X^2,Y^2)=\operatorname{Ideal}(X,Y)\).
Entscheiden Sie \(X^2+1 \in \operatorname{Ideal}(X+1)\), \(X^2-y^2\in\operatorname{Ideal}(X+Y)\), geben Sie Algorithmus für \(P\in\operatorname{Ideal}(Q)\) an.
der arktische Halbring \(\mathbb{A}=(\{-\infty\}\cup\NN,\max,-\infty,+,0)\).
Ist \(\deg\) homomorph (strukturerhaltend) von \((\ZZ[X],+,0,\cdot,1)\) nach \(\mathbb{A}\)?
Def: Monom-Ordnung: total, monoton bzgl. Multiplikation, terminierend.
Implementieren und Eigenschaften überprüfen/beweisen für graded reverse lexicographic: Ordnen nach absteigender Exponentensumme, bei Gleichheit nach aufsteigender Exponentenfolge
Bsp. (für \(X > Y\)) \(X^3Y^2 > X^1Y^3\), \(X^3Y^2 > X^4Y^1\).
Welche Eigenschaft(en) gehen dabei ohne Gradierung verloren?
Für Monom-Ordnung \(>\) bezeichnet \(\operatorname{\textsf{mdeg}}(M)\) für Monome: den Exponentenvektor (in der Reihenfolge der Variablen).
und für Polynome (\(\neq 0\)): den größten solchen Vektor (ist eindeutig, weil die Ordnung total ist).
Bsp.: für \(X>Y\) ist \(\operatorname{\textsf{mdeg}}(X^2Y^5)=[2,5]\),
für lex-Ordnung ist \(\operatorname{\textsf{mdeg}}(X^2Y^5-X^8)=[8,0]\).
Ausprobieren, beweisen, ergänzen: für Polynome \(f,g\neq 0\) ist \(\operatorname{\textsf{mdeg}}(f\cdot g)=\operatorname{\textsf{mdeg}}(f)+\operatorname{\textsf{mdeg}}(g)\) (komponentenweise Addition)
Welche Beziehung zw. \(\operatorname{\textsf{mdeg}}(f+g)\) und \(\operatorname{\textsf{mdeg}}(f),\operatorname{\textsf{mdeg}}(g)\)? Ggf. unter welchen Randbedingungen?
Def: Polynom-Ideal-Element-Problem: gegeben Polynome \(P, B_1,\ldots,B_n\), gefragt: \(P\in\operatorname{Ideal}(\{B_1,\ldots,B_n\})\).
Bsp: \(X^5-Y^2\stackrel{?}{\in}\operatorname{Ideal}(X^2Y-1,XY^2-1)\)
Beispiel-Anwendung: Beweis geometrischer Aussagen, die sich algebraisch formulieren lassen.
Algorithmus von Bruno Buchberger (1965) konstruiert besondere Basis \(G\) mit \(\operatorname{Ideal}(G) = \operatorname{Ideal}(\{B_1,\ldots,B_n\})\)
benannt nach seinem Doktorvater Wolfgang Gröbner,
(https://genealogy.math.ndsu.nodak.edu/id.php?id=18956, C. F. Gauß \(\to^*\) F. Klein \(\to^*\) …)
B. Buchberger: Ein algorithmisches Kriterium für die Lösbarkeit eines algebraischen Gleichungssystems (1970)
(in 1970-00-00-A: Verweis auf Implementierung im Formelcode der ZUSE Z 23)
F. Baader und T. Nipkow: Term Rewriting and all that (Kapitel 8), Cambridge Univ. Press 1998.
H.-G. Gräbe: Gröbnerbasen und Anwendungen (Skript, Uni Leipzig);
Bezeichnungen: für \(p\neq 0\) (Bsp: \(p=3X^2Y-5XZ^2\))
\(H_>(p)\), der Kopf von \(p\): das größte (bzgl. \(>\)) Monom (mit Koeffz.) (Bsp: \(H_>(p)=3X^2Y\))
\(R_>(p)\), der Rest von \(p\), so daß \(p = H(p) + R(p)\)
\(p \to_f q\), falls \(p\) ein Monom \(a\cdot m\) enthält, das durch \(H(f)\) teilbar ist (exist. \(m'\) mit \(m=H(f) m'\)) und \(q = p - a m' f\).
für endliche Menge \(F\) von Polynomen: \((\to_F) = \bigcup_{f\in F}(\to_f)\)
Bsp. \(F=\{f_1,f_2\}\) mit \(f_1=x^2y - x^2,f_2=xy^2-y^2\). Ordnung \(>\) auf Monomen: gradiert lexikografisch
\(x^2y^2 \to_{f_1} x^2y^2- y\cdot f_1 =x^2y \to_{f_1} x^2y - 1\cdot f_1=x^2\)
Satz: \((p\to_F^* q) \Rightarrow (p-q)\in\operatorname{Ideal}(F)\).
Folgerung: \(p\to_F^* 0 \Rightarrow p\in\operatorname{Ideal}(F)\).
\(p \to_f q\), falls \(p\) ein Monom \(a\cdot m\) enthält, das durch \(H(f)\) teilbar ist (exist. \(m'\) mit \(m=H(f) m'\)) und \(q = p - a m' f\).
Bsp. \(x^2y^2 \to_{f_1} x^2y^2- y\cdot f_1 =x^2y \to_{f_1} x^2y - 1\cdot f_1=x^2\)
Satz: \(\to_F\) terminiert. (mit \((\to_F) = \bigcup_{f\in F}(\to_f)\))
Def: Relation \(\to\) terminiert, wenn es keine unendliche Kette \(e_0\to e_1\to e_2\to\dots\) gibt.
Monom-Ordnung \(>\) (Monotonie, Termination)
daraus abgeleitete Ordnung \(\gg\) auf Polynomen (als absteigende Folge von Monomen, Koeffz. ignorieren)
Satz: \(>\) ist Monom-Ordnung \(\Rightarrow\) \(\gg\) terminiert
Satz: \(p \to_f q \implies p\gg q\), Folgerung: \(\to_F\) terminiert.
\(F=\{f_1,f_2\}\) mit \(f_1=x^2y - x^2,f_2=xy^2-y^2\).
\(x^2y^2 \to_F^* x^2\) und \(x^2y^2 \to_{f_2} ? \to_{f_2} y^2\).
\(x^2y^2\) hat (wenigstens) zwei \(\to_F\)-Normalformen.
Wir wollen (Existenz und) Eindeutigkeit von Nf. Dann \(P\to_B^* N\) ausrechnen und \(N=0\) testen.
Def. Relation \(\to\) heißt konfluent, wenn \(\forall a,b,c: (a\to^* b\wedge a\to^* c) \Rightarrow \exists d: b\to^* d \wedge c\to^* d\).
Satz: wenn \(\to\) terminiert und konfluent ist, dann besitzt jedes \(a\) genau eine Normalform
Def: \(a\) ist \(\to\)-Normalform, falls \(\neg\exists b: a\to b\).
\(\to_F\) ist nicht notwendig konfluent. BB-Algor.: berechnet \(G\supseteq F\) mit \(\operatorname{Ideal}(G)=\operatorname{Ideal}(F)\) und \(\to_G\) konfluent.
Def: solches \(G\) heißt Gröbner-Basis für \(\operatorname{Ideal}(F)\).
Konstruktion von \(G\) für \(F\) durch Vervollständigung (Hinzufügen von Polynomen \(s\in\operatorname{Ideal}(F)\))
Def: \(S(f_1,f_2) := f_1\cdot m/H(f_1) - f_2\cdot m/H(f_2)\).
mit \(m=\operatorname{lcm}(H(f_1),H(f_2))\) (kleinstes gemeinsames Vielf.)
Satz: \(S(f_1,f_2)\in\operatorname{Ideal}(F)\).
Beispiel \(F=\{f_1,f_2\}\) mit \(f_1=x^2y - x^2,f_2=xy^2-y^2\)
\(S(f_1,f_2)=f_1y-f_2x=x^2y - xy^2\)
Satz (hier ohne Bew.) Wenn für alle \(f_1,f_2\in F: S(f_1,f_2)\to_F 0\), dann ist \(\to_F\) konfluent.
Beispiel: \(x^2y -xy^2 \to_F x^2-y^2 \not\to_F 0\).
Eing.: endl. Menge \(F\) von
Polynomen, Monom-Ord. \(>\)
Ausgabe: Gröbnerbasis \(G\) für \(\operatorname{Ideal}(F)\).
Start: \(G_0=F\). Dann für \(i=1, 2, \dots\)
falls \(\exists f_1,f_2\in G_i:\) \(S(f_1,f_2) \to_{G_i}^! s_i \neq 0\), (Normalf. \(\neq 0\))
dann \(G_{i+1}=G_i\cup\{s_i\}\), sonst Halt mit Resultat \(G_i\)
Satz: Dieser Algorithmus ist total und korrekt.
Beweis: partiell korrekt wg. \(\forall i: \operatorname{Ideal}(G_i)=\operatorname{Ideal}(F)\),
total (terminierend): falls unendl. Folge \(s_0, s_1,\dots\),
dann existieren \(i<j\) mit \(H(s_i)\mid H(s_j)\) (warum?)
das ist ein Widerspruch (zu welcher Eigenschaft?)
(Fortsetzung, \(F=\{f_1,f_2\}\) wie oben.)
\(G_0=F\), dann \(S(f_1,f_2)\to_F x^2-y^2=f_3\), also \(G_1=\{f_1,f_2, f_3\}\).
Neue Paare \(S(f_1, f_3)=f_1- yf_3=y^3-y^2=:f_4\) ist Normalform,
\(S(f_2,f_3)=xf_2-y^2f_3=-xy^2+y^4\to_{f_2}y^4-y^2\to_{f_4} y^3-y^2\to_{f_4} 0\).
load ("grobner");
poly_grobner([x^2*y-x^2,x*y^2-y^2],[x,y]);
2 2 2 2 2 2 3 2
[x y - x , x y - y , y - x , y - y ]
Resultat (G-Basis) und Schrittzahl hängen von der gewählten Ordnung auf Monomen ab.
Verbesserung: nicht nur die neuen \(s\) nach \(G_i\) reduzieren, sondern auch die \(G_i\) nach \(s\). (siehe Aufgabe)
Die Schrittzahl kann trotzdem doppelt exponentiell sein.
Mit manchen Ordnungen geht es of schneller,
(empfohlen wird graded reverse lexikografisch)
da gibt es aber nur Erfahrungswerte.
Aufgabe: ausprobieren (wie Ordnung in maxima einstellen?)
zur Ordnung auf Monomen:
unterschiedliche Ordnungen ((graded) (reverse) lexikografisch) selbst implementieren.
instance Ord (Mono v) where ...
stimmt die abgeleitete Ordnung
newtype Mono v = M [(v, Natural)] deriving (Eq, Ord)
mit
einer dieser Ordnungen überein?
zur Ordnung auf Polynomen:
für Polynome in Variablen \(X>Y>Z\): geben Sie möglichst lange \(\gg\)-Ketten an, die bei \(X^3+Y^2Z\) beginnen
bzgl. der lexikografische Ordnung auf Monomen
bzgl. der grad-lexikografische Ordnung auf Monomen
Kann \(S(f_1,f_2)\) Monome mit höherem Grad enthalten als \(f_1\) und \(f_2\)?
bestimmen Sie nach dem Buchberger-Algorithmus eine Gröbner-Basis \(B\) für \(I=\operatorname{Ideal}(X^2Y-1,XY^2-1)\).
(auf Papier, mit maxima, mit eigener Impl.)
Benutzen Sie dieses \(B\), um \(X^5 - Y^2\in I\) zu entscheiden.
(Papier, maxima (poly_grobner_member
), eigen)
Geben Sie Polynome \(c_1,c_2\) mit \(X^5-Y^2= c_1(X^2Y-1)+c_2 (XY^2-1)\) an.
Erweitern Sie dazu den Buchberger-Alg. und das Reduktionsverfahren \(\to_B\).
(zum Vergleich: Euklid bestimmt \(\gcd(a,b)\), erweiterter Euklid bestimmt \(c,d\) mit \(ac+bd=\gcd(a,b)\).)
Eine Gröbner-Basis \(B\) heißt reduziert, wenn \(\forall b\in B: \neg\exists c: b\to_{B\setminus\{b\}}c\).
(\(b\) kann nicht durch die jeweils anderen Basis-Elemente reduziert werden)
Ist die Basis auf Folie Buchberger-Bsp. reduziert? Wenn nein, bestimmen sie eine reduzierte \(B'\).
Ergänzen Sie die Eigenbau-Implementierung.
Probieren Sie verschiedene Monom-Ordnungen.
Die reduzierte Gröbner-Basis eines Polynom-Ideals ist im wesentlichen eindeutig.
Arjen Cohen: Gröbner Bases, an Introduction (in: Some Tapas of Computer Algebra, Springer, 1999):
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
selbst ausdenken
mit Suchmaschine (welche Testfälle werden in Publikationen verwendet, die verbesserte Algorithmen beschreiben)
brute force
und messen Sie den Ressourcenverbrauch (maxima, Eigenbau)
Quadrat \(ABCD\), Punkt \(P\) auf Parallele zu \(BD\) durch \(C\) mit \(BP=BD\). Schnittpunkt von \(CD\) und \(BP\) heißt \(Q\). Zeige \(DP=DQ\).
algebraische Formulierung: Koordinaten: \(A=(0,0),B=(1,0),C=(1,1),D=(0,1),P=(x,y),Q=(z,1)\).
Lage: \(CP\|BD\): \((P_x-C_y)(D_y-C_y)=(D_x-B_x)(P_y-C_y)\),
\(Q\) auf \(CD\): \(CQ\|CD\), gleiche Länge: \(|DP|^2=|DQ|^2\).
Quelle: Hans-Gert Gräbe: Geometrie mit dem Computer (5. Geometrische Sätze vom Gleichungstyp) 2018,
Coxeter und Greitzer: Geometry Revisited, 1967
Bsp. 9-Punkte-Kreis (Feuerbachkreis) Kap. 1.8
Intl. Math. Olympiade, Bsp: Aufgabe 2024/4 https://www.imo-official.org/problems.aspx
dynamische Geometrie-Software Geonext (Univ. Bayreuth, Mathematikdidaktik)
https://web.archive.org/web/20130605045826/http://geonext.uni-bayreuth.de/
/opt/jdk/jdk8u442-b06/bin/java -cp /opt/geonext/geonext-1.74/geonext.jar geonext.Geonext
Export der Zeichenvorschrift im Format i2g
geometrische Lage von Punkten \([(x_1,y_1),\ldots,(x_k,y_k)]\)
beschrieben durch Aussage \(p=0\) für Polynom \(p\)
geometrische Sätze beschrieben durch Implikation
für alle \(x_1,y_1,\dots : (p_1=0\wedge \dots \wedge p_n=0)\Rightarrow (q=0)\)
das folgt aus \(q\in \operatorname{Ideal}(p_1,\ldots,p_n)\).
Beweis: Idealmitgliedschaft: \(q=\sum c_i p_i\),
dann \(q(x_1,y_1,\ldots)=\sum c_i p_i(x_1,y_1,\ldots)=\sum c_i\cdot 0=0\)
Implementierung (einfache Variante): \(q\in\operatorname{Ideal}(F)\),
gdw. \(q\stackrel{?}{\to}_B 0\) bzgl. einer Gröberbasis \(B\) für \(F\).
Ü: für das Beispiel ausrechnen
\(p_1(x_1,\ldots)=0 \wedge \dots \wedge p_n(x_1,\ldots)=0 \Rightarrow q(x_1,\ldots)= 0\).
äquivalent: es gibt kein \(x=(x_1,\ldots)\)
mit \(p_1(x)=0 \wedge \dots \wedge p_n(x)=0 \wedge q(x)\neq 0\).
(der Trick von Rabinovitch) äquivalent: neue Var. \(f\) und
\(\neg\exists x\) mit \(p_1(x)=0 \wedge \dots \wedge p_n(x)=0 \wedge 1 - f\cdot q(x)=0\).
äquivalent: \(\operatorname{Ideal}(p_1,\ldots,p_n,1-fq)=\operatorname{Ideal}(1)\)
Gröbnerbasis dafür kann man evtl. leichter berechnen
Vgl. Resolution in der Logik: Falls \((A_1\wedge\ldots\wedge A_n\wedge \neg B)\) widersprüchlich, dann \((A_1\wedge\ldots\wedge A_n\implies B)\);
aus widersprüchlicher Formel(menge) folgt jede Formel.
diese Notation für Mupad, Ü: übertrage auf andere CAS
Seitenhalb. schneiden sich in einem Punkt:
kollinear:=(x,y,z)->((z.2-y.2)*(y.1-x.1)-(y.2-x.2)*(z.1-y.1))
mittelpunkt:=(a,m,b)->( (a.1-m.1)-(m.1-b.1), (a.2-m.2)-(m.2-b.2) )
groebner::gbasis([
mittelpunkt(a,f,b), mittelpunkt(b,d,c), mittelpunkt(c,e,a),
kollinear(a,h,d), kollinear(b,h,e),
1 - y * kollinear(c,h,f)
])
Thaleskreis:
qdist:=(a,b)->((a.1-b.1)^2+(a.2-b.2)^2)
gleichweit:=(a,b,c,d)-> (qdist(a,b)-qdist(c,d))
senkrecht:=(a,b,c,d)-> ((a.1-b.1)*(c.1-d.1)+(a.2-b.2)*(c.2-d.2))
groebner::gbasis([
senkrecht(a,c,b,c), mittelpunkt(a,m,b),
1 - y*gleichweit(a,m,c,m)
])
Satz von Napoleon (kann so gar nicht gehen, da die Dreiecke nach außen zu errichten sind)
schwerpunkt:=(a,b,c,s)->(a.1+b.1+c.1-3*s.1,a.2+b.2+c.2-3*s.2)
gleichseitig:=(a,b,c)->(gleichweit(a,b,b,c),gleichweit(b,c,c,a))
groebner::gbasis([
a.1,a.2,b.2,
gleichseitig(a,b,p), schwerpunkt(a,b,p,u),
gleichseitig(b,c,q), schwerpunkt(b,c,q,v),
gleichseitig(c,a,r), schwerpunkt(c,a,r,w),
1 - y * gleichseitig(u,v,w)
])
im Projekt Symbolic Data haben H.-G. Gräbe et al. solche Beispiele erzeugt und gesammelt
siehe auch
Beispiele für geometrische Theoreme aus Skript Gräbe 2018 (Simsonsche Gerade, Miquelscher Punkt, …)
mit Geogebra zeichnen, Theorem überprüfen (durch Betrachtung der Lage bei Verschieben von Punkten)
algebraisieren (automatisieren!)
nach beschriebenen Verfahren lösen (Gröberbasis mit verschiedenen CAS ausrechnen)
ein falsches Theorem beweisen (um zu sehen, wie die Methode die Falsch-Aussage erkennt)
noch offene Aufgaben aus vorigen Wochen, insbesondere zur Eigenimplementierung von Polynomen (Division!) und Buchberger-Algorithmus
bad examples (für Buchberger-Algorithmus) in verschiedenen CAS (viele naive Algebraisierungen von geometrischen Sätzen ergeben aufwendige Rechnungen, aber es gibt auch kleinere schwere Testfälle)
Beispiel (Verallgemeinerung? Quelle?)
cyclic4 =
let [a,b,c,d] = map (var . V) [1 .. 4]
in [ a*b*c*d-1
, a*b*c+b*c*d+c*d*a+d*a*b
, a*b+b*c+c*d+d*a
, a+b+c+d
]
den Rabinovitch-Trick anwenden für den Satz über die Simson-Gerade in allgemeiner Lage (nur ein Punkt ist fixiert)
fsimson = prove $ do
...
return $ colinear a' b' c'
die letzte Zeile ersetzen durch
z0 <- number
assert $ ...
return $ ...
und Laufzeiten (der naiven Implementierung sowie anderer CAS) vergleichen
die Behandlung von Degenerations-Bedingungen,
Beispiel: der Satz von Pappus
pappus = prove $ do
a <- point ; b <- point; c <- point_on a b
a' <- point ; b' <- point; c' <- point_on a' b'
p <- intersection b c' b' c
q <- intersection a c' a' c
r <- intersection a b' a' b
return $ -- degenerate cases:
parallel (b-c') (b'-c)
* parallel (a-c') (a'-c)
* parallel (a-b') (a'-b)
-- actual conclusion:
* colinear p q r
bessere Implementierungen des Buchberger-Verfahrens: nicht jedesmal alle S-Polynome bestimmen und bezüglich aller bisherigen reduzieren.
Zum Code in poly/Grobner.hs
:
die Invarianten beweisen
die Termination begründen
für jede einzelne Reduktion eines (S-)Polynoms
für das gesamte Buchberger-Verfahren
Def: ein ARS \(A=(U,\to)\) ist ein Universum \(U\)
und ein System von Relationen \(\to_i\subseteq U^2\) für \(i\in I\).
für \(I=\{1\}\) oder \(I=\{1,2\}\) Notation \((U,\to)\), \((U,\to_1,\to_2)\)
das abstrahiert von konkreten Reduktionssystemen, z.B.
\(U\) Polynome, \(\to_B\): Reduktion bzgl. Polynom-Menge \(B\)
\(U\) Terme, \(\to_i\) durch Ersetzungs/Vereinfachungs-regeln
\(U\) Speicherbelegungen, \(\to\) durch Programm-Befehle
wichtige Eigenschaften von ARS sind
Termination (keine unendlichen Ketten)
Konfluenz (Zusammenführbarkeit divergenter Ketten)
Bücher
(Lehrbuch) Franz Baader, Tobias Nipkow: Term Rewriting and All That, Cambridge Univ. Press 1998,
(Monographie) TeReSe, Term Rewriting Systems, Cambridge Univ. Press 2003,
Forschungsgruppen (Termersetzung und Anwendungen)
Jan Willem Klop, VU Amsterdam
Aart Middeldorp, U Innsbruck
Jürgen Giesl, RWTH Aachen
(zweistellige) Relation \(R\subseteq U^2\), gerichteter Graph
Operationen:
Mengen-Operationen (Vereinigung, Durchschnitt)
Produkt \(R\circ S\), Potenz \(R^k\), inverse Relation \(R^{-1}\)
symmetrische Hülle \(R^1 \cup R^{-1}\)
\(R^+\) transitive Hülle \(=\bigcup_{k>0} R^k\)
\(R^=\) reflexive Hülle \(= R^0\cup R^1\)
\(R^*\) transitive und reflexive Hülle \(=\bigcup_{k\ge 0}R^k\)
Eigenschaften:
symmetrisch, reflexix, transitiv; linear (total),
terminierend (wohlfundiert)
alle zweist. Relationen auf \(U\) bilden Halbring (mit \(\cup,\circ\))
\(S=\{(n,n+1)\mid n\in \NN\}\) die Nachfolger-Relation auf \(\NN\)
\(P = S^-\) die Vorgänger-Relation
Ü: beschreibe \(S^+\), \(S^*\), \((S\cup P)^+\)
die (umgekehrte) Teilbarkeits-Relation
\(x\to y\) falls \(\exists z: x=y\cdot z\)
auf \(U=\NN^2\) die Relationen \((x_1,x_2)\to_i(y_1,y_2)\) falls \(x_i > y_i\)
Ü: beschreibe \(\to_1\cup \to_2\), \(\to_1\cap \to_2\), \(\to_1\circ \to_2\)
alles für \((U,\to)\)
\(x\in U\) ist reduzierbar, wenn \(\exists y: x\to y\)
\(x\in U\) ist Normalform (irreducible), wenn \(\neg\exists y: x\to y\)
\(y\) ist Normalform von \(x\), falls \(x\to^* y\) und \(y\) ist Normalform
\(x\) und \(y\) sind zusammenführbar (joinable), wenn \(\exists z: x\to^* z \leftarrow ^* y\). Notation dafür: \(x\downarrow y\)
in ARS mit mehreren Relationen \((R,S,\dots)\)
sind die Bezeichnungen:
\(R\)-Normalform, \(S\)-zusammenführbar usw.
für eine Relation \(\to\) auf \(U\): das Element \(x\in U\) heißt …
terminierend, \(\operatorname{\textsf{SN}}(x)\): es gibt
keine unendliche Kette,
die bei \(x\) beginnt: \(x=x_0\to x_1\to\dots\)
normalisierend, \(\operatorname{\textsf{WN}}(x)\): \(x\) hat Normalform
hat Diamant-Eigenschaft, \(\operatorname{\textsf{DP}}(x)\): wenn \(\forall y_1,y_2: y_1\leftarrow x\rightarrow y_2: \exists z: y_1\to z \leftarrow y_2\)
lokal konfluent, \(\operatorname{\textsf{WCR}}(x)\): wenn \(\forall y_1,y_2: y_1\leftarrow x\rightarrow y_2: y_1\downarrow y_2\)
konfluent, \(\operatorname{\textsf{CR}}(x)\): wenn \(\forall y_1,y_2: y_1\leftarrow^* x\rightarrow^* y_2: y_1\downarrow y_2\)
Beispiele, trennende Beispiele
normalisierend, aber nicht terminierend
lokal konfluent, aber nicht konfluent
ist terminierend (SN): \(\forall x\in U: \operatorname{\textsf{SN}}(x)\)
ist normalisierend (WN): \(\forall x\in U: \operatorname{\textsf{WN}}(x)\)
hat eindeutige Normalformen (UN): für alle Normalformen \(y_1,y_2\) gilt: \(y_1 (\leftarrow\cup\rightarrow)^* y_2 \implies y_1=y_2\)
hat eindeutige NF für Reduktion (UNR): für alle \(x\), alle Normalformen \(y_1,y_2\) gilt: \(y_1 \leftarrow^*x\rightarrow^* y_2\implies y_1=y_2\)
DP: \(\forall x\in U:\operatorname{\textsf{DP}}(x)\),äquiv.: \(\leftarrow\circ\to ~\subseteq~ \to\circ\leftarrow\)
lokal konfluent (WCR): \(\forall x\in U: \operatorname{\textsf{WCR}}(x)\)
äquivalente Spezifikation: \(\leftarrow\circ\to ~\subseteq~ \to^*\circ\leftarrow^*\)
konfluent (CR): jedes \(x\in U\) ist konfluent
äquivalente Spezifikation: \(\leftarrow^*\circ\to^*~\subseteq~ \to^*\circ\leftarrow^*\)
Church-Rosser (CR), wenn \((\leftarrow \cup\rightarrow)^*~\subseteq~ \to^*\circ\leftarrow^*\)
konvergent, wenn \(\to\) terminierend und konfluent ist
eine Anwendung ist:
um \(x\leftrightarrow^*y\) zu entscheiden:
bestimme \(x\to^* x'\in\Nf\), \(y\to^* y'\in\Nf\), teste \(x'=y'\)
funktioniert, falls \(\operatorname{\textsf{UNC}}(\to)\) und \(\operatorname{\textsf{SN}}(\to)\)
Vorgehen:
\(\operatorname{\textsf{WCR}}\) und \(\operatorname{\textsf{SN}}\) abhängig vom konkreten \(\to\) (später)
\(\operatorname{\textsf{WCR}}\wedge\operatorname{\textsf{SN}}\Rightarrow \operatorname{\textsf{CR}}\) (Lemma von Newman)
\(\operatorname{\textsf{CR}}\Rightarrow\operatorname{\textsf{UNC}}\)
\(\operatorname{\textsf{CR}}\) ist auch bei \(\neg\operatorname{\textsf{SN}}\) interessant, Bsp: Lambda-Kalkül,
das ist auch der historische Hintergrund
Satz: \(\forall R: \operatorname{\textsf{UNC}}(R)\Rightarrow\operatorname{\textsf{UNR}}(R)\)
Beweis (einfach):
Def. \(\operatorname{\textsf{UNC}}(\to)\): \(\Nf\ni y_1(\leftarrow\cup\rightarrow)^*y_2\in\Nf \Rightarrow y_1=y_2\)
Def. \(\operatorname{\textsf{UNR}}(\to)\): \(\Nf\ni y_1(\leftarrow^*\cdot \to^*)y_2\in\Nf \Rightarrow y_1=y_2\)
es gilt \((\leftarrow^*\cdot \to^*) \subseteq (\leftarrow\cup\rightarrow)^*\)
es gilt nicht \(\forall R:\operatorname{\textsf{UNR}}(R)\Rightarrow\operatorname{\textsf{UNC}}(R)\), Gegenbeispiel: Hausaufgabe (Universum mit 5 Elementen)
Def: CR: \((\leftarrow\cup \to)^* \subseteq(\to^*\cdot \leftarrow^*)\)
Def: Konfluenz: \((\leftarrow^*\cdot \to^*) \subseteq(\to^*\cdot \leftarrow^*)\)
Satz: diese Eigenschaften stimmen überein
(deswegen nur eine gemeinsame Bezeichnung)
Beweis: CR \(\Rightarrow\) Konfluenz wie eben (einfache Inklusion)
B: Konfluenz \(\Rightarrow\) CR: Ind. nach \(k\) in \(\to^*\cdot(\leftarrow^*\cdot \to^*)^k\cdot\leftarrow^*\):
einen Berg \((\leftarrow^*\cdot \to^*)\) durch ein Tal \((\to^* \cdot \leftarrow^*)\) ersetzen:
\(\to^*\cdot(\leftarrow^*\cdot \to^*)^{k+1}\cdot\leftarrow^*\)
\(~=~ \to^*\cdot(\leftarrow^*\cdot \to^*) \cdot(\leftarrow^*\cdot \to^*)^k\cdot\leftarrow^*\)
\(\subseteq ~ \to^*\cdot(\to^*\cdot \leftarrow^*) \cdot(\leftarrow^*\cdot \to^*)^k\cdot\leftarrow^*\)
\(\subseteq ~ \to^* \cdot(\leftarrow^*\cdot \to^*)^k\cdot\leftarrow^*\)
Satz: \(\forall R:\operatorname{\textsf{CR}}(R)\Rightarrow \operatorname{\textsf{UNC}}(R)\)
Gegenbeispiel für \(\Leftarrow\) (3 Elemente, keine Normalformen)
Beweis: falls \(\Nf\ni y_1(\leftarrow\cup \to)^* y_2\in\Nf\)
dann wegen CR: \(\exists z,i,j: y_1\to^iz\leftarrow^j y_2\)
aus \(y_1\in\Nf\) folgt \(i=0\), aus \(y_2\in\Nf\) folgt \(j=0\),
also \(y_1\to^0\cdot\leftarrow^0 y_2\), also \(y_1=y_2\)
Lemma von Newman: \(\operatorname{\textsf{SN}}\wedge\operatorname{\textsf{WCR}}\implies\operatorname{\textsf{CR}}\)
Beweis (nach Henk Barendregt, zitiert in TeReSe)
wegen \(\operatorname{\textsf{SN}}\) hat jedes \(a\in U\) wenigstens eine Nf.
wir zeigen: …genau eine Nf. Daraus folgt \(\operatorname{\textsf{CR}}\).
Bezeichnung: \(a\) mehrdeutig (\(M(a)\)): hat \(\ge 2\) Nf.
zeigen: wenn \(M(a)\), dann exist \(b\) mit \(a\to b\) und \(M(b)\).
daraus folgt \(\neg \exists a: M(a)\), sonst Widerspruch zu \(\operatorname{\textsf{SN}}\)
Falls \(M(a)\), dann \(a\to b_1\to^*n_1\) und \(a\to b_2\to^*n_2\) mit \(n_1\neq n_2\) Nf.
WCR: existiert \(c\) mit \(b_1\to^* c\leftarrow^* b_2\) und \(c\to^* n\) Nf.
Dann \(n_1\neq n\) oder \(n_2\neq n\), also \(M(b_1)\) oder \(M(b_2)\).
Anwendung: \(\operatorname{\textsf{CR}}(\to_\beta)\) für Lambda-Kalkül,
Beispiel: \((\lambda y.yy)(I(\lambda z.zz))\) für \(I=\lambda x.x\)
Satz: Falls \(\to_1 {\subseteq} \to_2 {\subseteq} \to_1^*\) und \(\operatorname{\textsf{DP}}(\to_2)\), dann \(\operatorname{\textsf{CR}}(\to_1)\).
Beweis (TeReSe Ex. 1.3.1)
\(\operatorname{\textsf{DP}}(\to_2)\Rightarrow\operatorname{\textsf{DP}}(\to_2^*) = \operatorname{\textsf{CR}}(\to_2)\), \(\to_1^* {=} \to_2^*\), \(\operatorname{\textsf{CR}}(\to_1)\).
Anwendung: \(s\to_2 t\) durch
vollständige Reduktion
einer Menge von markierten Redexes in \(s\)
Markierungen werden verbraucht oder kopiert,
neue entstehende Redexe nicht markiert
deswegen ist \(\to_2\) wohldefiniert (es gilt \(\operatorname{\textsf{SN}}(\to_2)\))
Bemerkung/Wiederholung: \(\operatorname{\textsf{WCR}}(\to)\not\Rightarrow\operatorname{\textsf{CR}}(\to)\)
empfohlen: beide (b), 4, 5
TeReSe Ex. 1.3.2
Def: \((\to_1,\to_2)\) kommutieren schwach: \(\leftarrow_1\cdot\to_2{\subseteq}\to_2^*\cdot\leftarrow_1^*\)
Def: \((\to_1,\to_2)\) kommutieren: \(\leftarrow_1^*\cdot\to_2^*{\subseteq}\to_2^*\cdot\leftarrow_1^*\)
Satz: wenn \((\to_1,\to_2)\) schwach kommutieren und \(\operatorname{\textsf{SN}}(\to_1\cup \to_2)\), dann kommutieren \((\to_1,\to_2)\).
Gegenbeispiel für: …und \(\operatorname{\textsf{SN}}(\to_1)\wedge\operatorname{\textsf{SN}}(\to_2)\), dann …
TeReSe Ex. 1.3.15, Geser 1990, di Cosmo, Piperno 1995
Wenn \(\leftarrow_1\cdot \to_2{\subseteq}\to_2^+\cdot\leftarrow_1^*\) und \(\operatorname{\textsf{SN}}(\to_2)\), dann kommutieren \((\to_1,\to_2)\).
zeigen, daß \(\operatorname{\textsf{SN}}(\to_2)\) notwendig ist.
TeReSe Ex. 1.3.3, Rosen 1973.
Def (sub-commutative) \(\operatorname{\textsf{CR}^{\le 1}}(\to):=\leftarrow\cdot\to{\subseteq} \to^{0,1}\cdot\leftarrow^{0,1}\)
Satz: aus \(\to_1^*{=}\to_2^*\) und \(\operatorname{\textsf{CR}^{\le 1}}(\to_1)\) folgt \(\operatorname{\textsf{CR}}(\to_2)\).
TeReSe Ex 1.3.22.ii
ein \(R\) mit \(\operatorname{\textsf{WCR}}(R)\wedge\operatorname{\textsf{UNR}}(R)\wedge\neg\operatorname{\textsf{UNC}}(R)\)
alle Gegenbeispiele zu vorigen Aussagen könnte man
durch passende autotool-Aufgaben übeprüfen oder
durch passenden Carpa-Aufruf bestimmen https://www.win.tue.nl/~hzantema/carpa.html
—aber nur, falls es Gegenbeispiele mit endlichem Universum gibt. Das ist nicht immer der Fall.
Geben Sie eine Eigenschaft vom Typ Prop
an https://autotool.imn.htwk-leipzig.de/docs/autotool-collection-1.3/Rewriting-Abstract-Data.html#t:Prop,
die
erfüllbar ist,
aber nicht endlich erfüllbar (d.h., mit endlichen Universum erfüllbar)
Implementierung in Carpa (2018?) mit https://gitlab.imn.htwk-leipzig.de/autotool/all0/-/blob/master/collection/src/Rewriting/Abstract/Solve.hs (2015?) vergleichen.
Gemeinsamkeit: aussagenlogische Codierung. Unterschied: SAT/BDD. Auswirkungen?
Signatur \(\Sigma\): Menge von Funktionssymbolen mit Stelligkeit, Bsp. \(\{(s,1),(z,0),(p,2)\}\),
\(\Term(\Sigma)\) ist die kleinste Menge \(M\) mit …
\(\Pos(t)\): Menge der Positionen in \(t\in\Term(\Sigma)\): …
\(t(p)\) Symbol an Position \(p\) in \(t\)
\(t\mid_p\) Teilterm an Position \(p\) in \(t\) (alternative Notation: \(t[p]\))
Beispiele:
Term \(t=p(z,s(s(z)))\),
Positionen \(\Pos(t)=\{\epsilon,0,1,10,100\}\),
Symbol \(t(1)=s\), Teilterm \(t[1]=s(s(z))\),
Def: Menge \(P\subseteq \NN^*\) heißt Baum-Bereich (tree domain), wenn
(…es einen Term \(t\) gibt, so daß \(P=\Pos(t)\) — das soll aber ohne Benutzung des Term-Begriffs definiert werden)
\(\epsilon\in P\)
\(P\) abgeschlossen unter …
definiere und benutze Relationen \(<_u\) (up) und \(<_l\) (left).
Def: ein Term \(t\) über Signatur \(\Sigma\) ist Abbildung von einem Baumbereich \(P\) nach \(\Sigma\)
oder: partielle Abbildung \(t:\NN^*\hookrightarrow \Sigma\) mit \(\operatorname{\textsf{dom}}(t)\) Baumbereich
\(t[p:=s]\) in \(t\) an Position \(p\) den Term \(s\) einsetzen
Übung: exakte Definition, für Term als Abbildung von Baumbereich
dazu ist \(t':\NN^*\hookrightarrow\Sigma\) zu implementieren
für \(t'=t[p:=s]\) und wenn \(t, s:\NN^*\hookrightarrow \Sigma\) gegeben
Übung: ergänzen: \(t[p_1:=s_1][p_2:=s_2]=\)
wenn …, dann \(= t[p_2:=s_2][p_1:=s_1]\)
sonst \(=\dots\) (2 Fälle)
\(\Term(\Sigma,V)\): Menge der Terme mit Symbolen aus \(\Sigma\) und Variablen aus \(V\).
Vereinbarung: Variablen am Ende des Alphabets (\(x,y,\ldots\)), Funktionssymbole am Anfang (\(f,g,a,b,\ldots\))
Menge der in einem Term \(t\) vorkommende Variablen: \(\Var(t)\)
Substitution \(\sigma\) ist Abbildung \(V \to \Term(\Sigma,W)\)
eine Substitution \(\sigma\) angewendet auf einen Term \(t\) erzeugt Term \(t\sigma\)
Beispiel \(t=f(x)\), \(\Var(t)=\{x\}\), \(\sigma:x\mapsto p(0,0)\), \(t\sigma=f(p(0,0))\).
Regel \((l,r)\), Schreibweise \((l \to r)\), mit \(l,r\in \Term(\Sigma,V)\)
Regel \((l\to r)\) an Position \(p\) in \(t\in\Term(\Sigma)\) anwenden, um \(s\) zu erhalten, Schreibweise \(t \to_{(l\to r),p} s\)
\(\exists \sigma:V\to \Term(\Sigma): t[p]=l\sigma \wedge t[p:=r\sigma]= s\)
Beispiel: Regel \((l,r)=(f(x),g(x,x))\), Term \(t=h(1,f(f(2)))\).
Position \(p=[1] \in \Pos(t)\), Teilterm \(t[p]=f(f(2))\),
Substitution \(\sigma:x\mapsto f(2)\) mit \(t[p]=l\sigma\),
auf \(r\) anwenden: \(r\sigma=g(f(2),f(2))\),
in \(t\) einsetzen: \(s=t[p:=r\sigma]=h(1,r\sigma)=h(1,g(f(2),f(2)))\).
\(R\) eine Menge von Regeln (TRS, term rewriting system)
definiert Relation \(\to_R\) auf \(\Term(\Sigma)\)
(einmalige Anwendung irgendeiner Regel irgendwo):
\(\to_R := \{ ( t,s) \mid\exists (l,r)\in R, p\in\Pos(t): t \to_{(l,r),p} s \}\)
jedes solche \(\to_R\) definiert ein ARS
ist nichtdeterministisches Berechnungsmodell
Resultat \(=\) \((\to_R)\)-Normalform (kürzer: \(R\)-Normalform)
Ausdrucksstärke stimmt mit Turing-Maschinen überein
Simulation einer TM \(M\) durch \(\to_R^+\) für TRS \(R\)
Simulation von \(\to_R\) durch TM
Termersetzung ist
Grundlage für funktionale Programmierung
(Auswertung, Kompilation, Verifikation)
Grundlage für Symbolisches Rechnen
(Grundlage für XML-Transformationen mit XSLT, …)
Für Anwendungen wichtig sind die Eigenschaften
Termination (SN) (keine unendlich langen Rechnungen)
Konfluenz (CR,UNR) (eindeutige Ergebnisse)
Ableitungskomplexität (Länge von Rechnungen als Funktion der Startgröße)
das ist aber alles unentscheidbar (wg. Turing-Vollst.)
Regeln (Term-Ersetzungs-System) für das Differenzieren: \[\begin{aligned} D_x(x) = 1, \textrm{ wenn } x\notin A: D_x(A) = 0 \\ D_x(A+B) = D_x(A) + D_x(B) \\ D_x(A\cdot B) = \dots, D_x(A/B) = \ldots \\ D_x(\log x) = 1/x, D_x(\sin x)=\cos x, \ldots \end{aligned}\] Dazu braucht man aber noch Vereinfachungsregeln.
Wie drückt man die Kettenregel \(D_x(f(g(x)) =\dots\) aus?
Hier sind \(f\) und \(g\) Variablen, aber zweiter Ordnung (bezeichnen Funktionen).
allgemein: Higher Order Rewriting (HOR) als Verallgemeinerung von TRS und Lambda-Kalkül
Wort (Folge) als Term (Baum, Pfad) auffassen
Beispiel: \(abaab\) bedeutet \(a(b(a(a(b(\epsilon)))))\).
Wortersetzungssystem (SRS):
Menge von Regeln, Regel: Paar von Wörtern
\(ab \to ba\) bedeutet \(a(b(x))\to b(a(x))\)
Alle Aussagen über TRS gelten auch für SRS,
SRS (als Berechnungsmodell) sind Turing-vollständig, denn eine TM ist (im wesentlichen) ein SRS
für viele Anwendungen sind TRS natürlich (algebraische Beschreibung, Terme mit Symbolen der Stelligket \(>1\))
zahlreiche Methoden für TRS wurden zuerst für SRS erfunden und untersucht (z.B. für Termination)
ergänzen: \(t[p_1:=s_1][p_2:=s_2]=\dots\)
Normalformen, Termination, Konfluenz des TRS \[\begin{aligned} \neg(1) \to 0 ,\quad \neg(\neg(x)) \to x\\ 1\wedge x\to x, \quad 0\wedge x\to 0 \\ x\vee y\to \neg(\neg x\wedge\neg y) \end{aligned}\] über Signatur \(\{(0,0),(1,0),(\neg,1), (\vee,2),(\wedge,2)\}\)
jeweils Beweis (soweit jetzt möglich, später systematisch) oder Gegenbeispiel (mit Reparaturvorschlag)
Die Zug-Relation in Hackenbush auf höchstens binären Bäumen als TRS darstellen. (Signatur, Regeln f. Blau)
(auf Papier) unendliche Ableitungen finden für
\(\{f (0, y) \to f (y, S(0)), f(S(x), y) \to f (x, S(y))\}\)
\(\{f (0, S(x), y) \to g(f (0, x, S(y)), f (x, y, S(S(0))))\)
\(A(A(F,x),y)\to A(A(x,A(F, y)), F)\)
(experimentell) unendliche Ableitungen finden für:
\(\{1000\to 0001110\}\), allgemein \(10^k\to 0^k1^k0\)
\(\{ 0 0 0 0 \to 0 1 0 1 , 1 0 0 1 \to 0 1 0 0 \}\)
\(\{ 0 0 0 0 \to 0 1 1 1 , 1 0 0 1 \to 0 0 1 0 \}\)
\(\{ 0 0 0 0 \to 0 1 1 1 , 1 0 1 1 \to 0 1 1 0 \}\)
nachrechnen (Abschnitt 3.1, Alg. 3.2, Ex. 3.3: auf Zahlenfolgen, diese repräsentieren Terme) und beweisen:
Ikebuchi, Nakano: On Properties of B terms, 2020 https://doi.org/10.23638/LMCS-16(2:8)2020
Def: Gleichungssystem \(E\) über Signatur \(\Sigma\) ist Menge von Paaren \((l,r)\in\Term(\Sigma,V)^2\), geschrieben \(l \approx r\)
Def: die Relation \(\approx_E\) ist \((\to_E \cup \to_E^-)^*\). (alternativ: \(\leftrightarrow_E^*\))
Bsp: \(E_1=\{f^5(a) \approx a, f^3(a)\approx a\}\). Zeige \(f(a)\approx_{E_1} a\).
Bsp: \(E_2=\{f(f(x)) \approx g(x)\}\). Zeige \(f(g(x))\approx_{E_2} g(f(x))\).
Bsp: Die Relation \(\approx_{D_i}\) ist entscheidbar für
\(D_1=\{f(f(x,y),z) \approx f(x,f(y,z)) \}\)
\(D_2=\{f(f(x,y),z) \approx f(x,f(y,z)), f(x,y) \approx f(y,x) \}\)
\(\approx_C\) ist nicht entscheidbar für \(C=\{A(A(K,x),y) \approx x,\) \(A(A(A(S,x),y),z) \approx A(A(x,z),A(y,z))\}\)
Def. eine Algebra \(A\) zur Signatur \(\Sigma\) ist:
eine Menge (domain) \(D_A\) und
für jedes \(k\)-stellige \(c\) aus \(\Sigma\) eine Funktion \([c]_A: D^k\to D\).
Bsp. \(\Sigma=\{P/2,S/1,Z/0\}, D_A=\NN,\) \([P]_A(x,y)=x+y, [S]_A(x)=x+1, [Z]_A=0\).
Def: Wert eines Terms \(t\in \Term(\Sigma,V)\) in \(A\)
unter Belegung \(\alpha:\Var(t)\to D\), Notation \([t,\alpha]_A\)
Bsp. \([P(S(Z),a),\{(a,5)\}]_A=6\)
beachte verschiedene Wortbedeutungen von Algebra:
“high school algebra”: Umformen von Ausdrücken.
lineare Algebra: untersucht Vektoren, Matrizen, …
abstrakte Algebra: allgemein Mengen mit Operationen.
Def. eine Gleichung \(l\approx r\) ist gültig in einer \(\Sigma\)-Algebra \(A=(D_A,[\cdot]_A)\), geschrieben \(A\models l \approx r\),
falls für jede Belegung \(\alpha: \Var(l)\cup\Var(r) \mapsto D_A\) gilt: \([l,\alpha]_A=[r,\alpha]_A\)
Def. eine \(\Sigma\)-Algebra \(A=(D_A,[\cdot]_A)\) heißt Modell
für ein Gls. \(E\) über \(\Sigma\), wenn \(\forall (l\approx r)\in E: A\models l\approx r\).
Bsp: \(D=\NN, [P](x,y)=x+y, [S](x)=x+1, [Z]=0\) ist Modell für \(E = \{P(Z,y)\approx y, P(S(x),y)\approx S(P(x,y))\}\).
Übung: gibt es andere Modelle dafür?
(über \(\NN\)? Ja: \([P](x,y)=y, [S](x)=x, [Z]=0\). über anderen Bereichen, z.B.: \(\RR\), Wörter, endlicher Bereich?)
für Gleichungssystem \(E\) über \(\Sigma\)
Bsp. \(E = \{P(Z,y)\approx y, P(S(x),y)\approx S(P(x,y))\}\).
bereits definiert: syntaktische Äquivalenz: \(\approx_E\)
\((\leftarrow_E\cup\to_E)^*\), alternative Schreibweise: \(E\vdash s\approx t\)
Def. \(E\models s\approx t\): für jedes Modell \(A\) von \(E\) gilt \(A\models s\approx t\).
Bsp: \(E\models P(S(S(Z)),y)\approx S(S(y))\).
Vorsicht: \(E\not\models P(x,y)\approx P(y,x)\), dazu später mehr
Def: semantische Äquivalenz: \(E\models s\approx t\)
Satz (Birkhoff): \(E\vdash s\approx t \iff E\models s\approx t\). Anwend.:
syntaktische Beweise für Aussagen in (allen) Modellen
semantische Widerlegung von \(s\leftrightarrow_E^* t\) (ein Nicht-Mod.)
Bsp. \(E = \{P(Z,y)\approx y, P(S(x),y)\approx S(P(x,y))\}\).
Gilt \(E\models P(x,y)\approx P(y,x)\)?
Nein. Betrachte Modell \(A\) für \(E\) über \(\NN\): \([Z]_A=0,\) \[\begin{aligned} [S]_A(x)&=&\text{if}~ 2|x ~\text{then}~ 2+x ~\text{else}~ 1 \\{} [P]_A(x,y)&=&\text{if}~ 2|x ~\text{then}~ x+y ~\text{else}~ 1 \end{aligned}\] \(A\not\models P(x,y)\approx P(y,x)\), betrachte \(\alpha=\{(x,2),(y,1)\}\).
Nach Satz von Birkhoff folgt \(P(x,y)\not\approx_E P(y,x)\).
Beachte: \(\neg \exists t\in\Term(\Sigma,\emptyset): [t]_A=1\).
Für alle \(s,t\in\Term(\Sigma,\emptyset)\) gilt \(P(s,t)\approx_E P(t,s)\).
Sprechweise: \(P(x,y)\approx P(x,y)\) ist ein induktives Theorem in \(E\), aber kein Gleichungs-Theorem.
Jetzt ad-hoc, später teilw. systematisch/automatisiert
Quellen: TeReSe Kapitel 7.1; Baader/Nipkow Kapitel 3, 4.
Für \(E=\{ aba(x) \approx x \}\): gilt \(abbbaa(x) \approx_E bba(x)\)?
\(F=\{f(x,f(y,z))\approx f(f(x,y),z), f(e,x)\approx x, f(i(x),x)\approx e\}\). Zeige \(f(x,e)\approx_F x\).
\(G = \{f(x,f(y,z))\approx f(f(x,y),z), f(f(x,y),x)\approx x \}\). Zeige \(f(x,x)\approx_G x\) und \(f(f(x,y),z)\approx_G f(x,z)\)
\(H=\{f(x,f(y,z))\approx f(f(x,y),z), f(e,x)\approx x, f(x,i(x))\approx e\}\). Zeige \(f(x,e)\not\approx_H x\).
Hinweis: ein Modell für \(H\) konstruieren, in dem die Behauptung nicht gilt. Mit etwas Glück gibt es ein endliches Modell. Mit noch mehr Glück ein so kleines, daß es durch Aufzählen mit https://hackage.haskell.org/package/leancheck gefunden wird. (Sonst: SAT-Kodieren) Ergänzen Sie:
import Test.LeanCheck
import Test.LeanCheck.Function
check $ \ f i (e :: Bool) ->
or [not $ holds 100 $ \ x y z -> _ , ... ]
vereinfachen Sie die Ausgabe, überprüfen Sie die Eigenschaft.
Zur Sicherheit: das gleiche Verfahren für Aufgabe \(F\) darf nicht funktionieren, denn dort wird behauptet, daß die Folgerung gilt.
gibt es unendliche Ableitungen für …?
\(a\to b\), \(ba \to ab\), \(ba \to aab\), \(aa \to aba\), \(100 \to 00110\)
\(A(A(D,x),y) \to A(x,A(x,y))\)
Regeln zum symbolischen Differenzieren
zum Auswerten o. Vereinfachen Boolescher Ausdrücke
beliebiges Programm (TM (SRS), funktional (TRS))
Anwendung (später): Vervollständigungs-Algorithmus
(zum Entscheiden der syntaktischen Kongruenz \(\approx_E\))
Invariante: das (aktuelle) System terminiert
(Ziel: …und ist konfluent)
die Menge \(\{R\mid \operatorname{\textsf{SN}}(\to_R)\}\) ist nicht entscheidbar,
(Beweis: Reduktion vom Halteproblem: Simulation der Rechnung einer TM, mit zusätzlicher Betrachtung ungültiger Konfigurationskodierungen)
wegen der großen praktischen Bedeutung in der Software-Verifikation wünscht man korrekte partielle Verfahren: diese antworten auf Frage \(\operatorname{\textsf{SN}}(R)\)
mit: Ja, Nein (beides muß stimmen) oder Weißnicht.
Wettbewerb für Implementierungen solcher Verfahren: Intl. Termination Competition (seit 2003),
mit Termination Problem Data Base (TPDB)
Alan Turing: Checking a large routine, 1949,
Zohar Manna and Steven Ness: On the termination of Markov algorithms, 1970. Dallas Lankford: On Proving term rewriting systems are Noetherian, 1979.
Nachum Dershowitz: 33 Examples of Termination, 1995.
Intl. Workshops on Termination (seit 1993) (Leipzig: 2010, 2025)
syntaktisch: Bsp. für \(\{ba \to ab\}\):
aus \(u\to v\) folgt \(|u|=|v|\) und \(u>_\text{lex} v\) für \(b>a\)
Vorsicht: für \(\{ba\to aabb\}\) gilt auch \(u>_\text{lex}v\)
semantisch: Bsp. für \(\{ba \to ab\}\):
Anzahl der Inversionen \(f(w) := |\{(i,j)\mid i<j\wedge w_i>w_j\}|\)
ist eine Schrittfunktion (aus \(u\to v\) folgt \(f(u)>f(v)\))
Transformation: Bsp. für \(\{aa\to aba\}\):
jeder Buchstabe markiert mit seinem rechten Nachbarn
\(\{a_a a_a \to a_b b_a a_a, a_a a_b\to a_b b_a a_b\}\), Anzahl d. \(a_a\) ist Schrittfkt.
Modularität: \(\operatorname{\textsf{SN}}(R_1)\wedge\operatorname{\textsf{SN}}(R_2)\wedge{}\) weitere Bedingungen \(\implies \operatorname{\textsf{SN}}(R_1\cup R_2)\). Vorsicht: \(R_1=\{a\to b\}, R_2=\{b\to a\}\)
Beispiel:
Regel \(ba \to aab\), Abl. \(bba \to baab \to aabab \to aaaabb\)
Interpretation in \(\NN\): \([a](x) = x+1, [b](x)= 3x, [\epsilon]=0\)
\([bba]=9 > [baab]=6 > [aabab] = \ldots > [aaaabb]=\ldots\)
Def: \((D,>,[\cdot])\) ist wohlfundierte monotone Algebra
wohlfundiert: \(\operatorname{\textsf{SN}}(>)\), keine unendl. absteigende Kette
monoton: \(\forall c\in\Sigma, x\in D, y\in D: x>y \Rightarrow [c](x)>[c](y)\)
allgemein: Monotonie in jedem Argument einzeln
Def: monotone Algebra ist kompatibel mit \(R\):
Kompatibilität: \(\forall (l,r)\in R,x\in D: [l](x)>[r](x)\)
wg. Monotonie folgt daraus \(u\to_R v\Rightarrow [u]>[v]\)
Satz: \(\operatorname{\textsf{SN}}(\to_R)\) \(\iff\) \(\exists\) wfmA, die mit \(R\) kompatibel ist.
Satz: \(\operatorname{\textsf{SN}}(\to_R)\) \(\iff\) \(\exists\) wfmA \(A\), die mit \(R\) kompatibel ist.
Beweis \((\operatorname{\textsf{SN}}(\to_R)\Leftarrow\dots)\): indirekt:
falls \(x_0\to_R x_1\to_R\dots\) unendlich,
dann \([x_0]_A>[x_1]_A>\dots\) unendlich, Wid. zu \(\operatorname{\textsf{SN}}(>)\).
Beweis \((\operatorname{\textsf{SN}}(\to_R)\Rightarrow\dots)\) zu konstruieren ist \(A\):
Universum: \(\Term(\Sigma)\), Interpretation: Symbol durch sich
\(u>v : u\to_R^+v\)
ü: falls \(\operatorname{\textsf{SN}}(\to_R)\), definiere \(f(t):=\max\{k \mid\exists t': t\to_R^k t'\}\),
und \(u>v\) falls \(f(u)>f(v)\). Dann \(u\to_Rv\Rightarrow f(u)>f(v)\),
aber \(f\) ist im Allg. keine Algebra (kein fold) auf \(\NN\).
\(R=\{ba\to ab\}\), \(f(a)=f(b)=0\), \(1=f(ba)=[b](f(a))=[b](0), 0=f(bb)=[b](f(b))=[b](0)\).
Signatur \(\Sigma=\{P/2,S/1,Z/0\}\).
Regelmenge \(R=\{P(Z,y)\to y, P(S(x),y)\to S(P(x,y))\)
verschiedene \(\Sigma\)-Algebren über \(\NN\), überprüfe Eigenschaften.
Welche liefert einen Terminationsbeweis für \(R\)?
\([P](x,y)=x+y, [S](x)=x+1, [Z]=0\)
\([P](x,y)=2x, [S](x)=x+1, [Z]=1\)
\([P](x,y)=2x+y+1, [S](x)=x+1, [Z]=0\)
Aufgabe: finde kompatible wfmA für
\(R\cup \{ M(Z,y) \to Z, M(S(x),y) \to P(y,M(x,y)) \}\)
Merke: kompatibel: links \(>\) rechts, Modell: links \(=\) rechts,
bisher: Interpretation der Funktionssymbole durch multilineare Funktionen über \(\NN\). — Erweiterungen:
Polynome über \(\NN\)
lineare Funktionen (Matrizen) über \(\NN^d\)
…über anderen Halbringen, wie \((\{-\infty\}\cup\NN,\max,+)\)
für jedes solche Klasse von Algebren möchte man lösen:
das Verifikations-Problem:
gegeben: (endliche Beschreibung einer) Algebra \(A\),
gesucht: \(A\) ist monoton? \(A\) ist kompatibel mit \(R\)?
das Synthese-Problem:
gegeben \(R\), gesucht \(R\)-kompatible wfmA \(A\)
wfmA \((\NN,>,[\cdot])\), wobei jedes Funktionssymbol durch ein Polynom interpretiert wird
Bsp: für \(P(Z,y)\to_1 y, P(S(x),y)\to_2 S(P(x,y)),\) \(M(Z,y) \to_3 Z, M(S(x),y) \to_4 P(y,M(x,y))\)
\([Z]=0,[S](x)=x+3,[P](x,y)=2x+y; [M](x,y) = xy\)
R.2: \(2(x+3)+y \stackrel{?}{>} 2x+y+3\), R.4: \((x+3)y \stackrel{?}{>} 2y + xy\)
ist monoton auf \(\{n\mid n\in\NN, n\ge 1\}\)
\([M](x,y)=(x+1)(y+1)-1 = xy + x + y\)
Analyse: ist Pol.-Int. kompatibel mit \(R\), ist \(P>0\)sind nicht entscheidbar (Hilberts 10. Problem, Matiasevich)
Synthese: nichtlineares Constraint-System
Approximation von \(P\ge 0\) durch SOS \(P=\sum Q_i^2\)
Gewicht ist Abbildung \(g:\Sigma\to\NN\)
forgesetzt zu \(g^*:\Sigma^*\to\NN:w\mapsto\sum_i g(w_i)\)
Bsp: \(g=\{a\mapsto 2,b\mapsto 5\}\), \(g(bab)=12\)
das ist wfmA \((\NN,>,[\cdot])\) mit \([\epsilon]=0\), \([c](x)=g(c)+x\)
ist kompatibel mit \(R\), falls \(\forall (l,r)\in R: g^*(l)>g^*(r)\)
Bsp (Verifikation) \(R = \{ bab\to aaba, a^3\to b \}\)
Synthese: gegeben \(R\), kompatible \(g\) durch lin. Ungls.
\((1-3) g_a+(2-1)g_b>0 \wedge(3-0) g_a+(0-1)g_b>0\)
Lösbarkeit ist effizient entscheidbar
als Terminations-Verfahren erscheint das sehr einfach, kann aber nach einer Transformation, welche die Signatur vergrößert (Bsp: Tiling) sehr wirksam sein.
Universum: \(\NN^d\) (Spaltenvektoren) mit \(x_d\ge 1\)
Ordnung: \(x> y \iff x_1>y_1\wedge \bigwedge_{i>1} x_i\ge y_i\)
Interpretation \([c](x)=M_c\cdot x\) für Matrix \(M_c\in\NN^{d\times d}\)
\([a](x)= \begin{pmatrix}1 & 1 & 0\\ 0 & 0 & 1\\ 0 & 0 & 1 \end{pmatrix}\cdot x, \quad [b](x)= \begin{pmatrix}1 & 0 & 0\\ 0 & 0 & 0\\ 0 & 0 & 1 \end{pmatrix}\cdot x\)
das Verifikation-Problem: ist Algebra? wohlfundiert? monoton? kompatibel mit \(aa\to aba\)?
für dieses Beispiel,
allgemein (wie beweist man \(\operatorname{\textsf{SN}}(a^2b^2\to b^3a^3)\))?
Universum (Spalten)Vektoren \(\NN^d\)
Ordnung: \(x>y \iff x_1>y_1\wedge\bigwedge_{i>1}x_i\ge y_i\)
Interpretation jedes \(k\)-stelligen Symbols \(f\)
durch \(k\)-stellige multi-lineare Funktion
\([f](x_1,\ldots,x_k)= M_1\cdot x_1 + \dots + M_k x_k + m_0\)
mit Vektor \(m_0\), Matrizen \(M_1,\ldots,M_k\),
angewendet auf Vektoren \(x_1,\ldots,x_k\)
die vorige Interp. für SRS: \([a](x)=\begin{pmatrix}1 & 1\\0 & 0\end{pmatrix}\cdot x +\begin{pmatrix}0\\1\end{pmatrix}\)
( a , Multilinear { absolute = column[0,1]
, coefficients = [ matrix[[1,1],[0,0]] ] } )
Def: falls \(\operatorname{\textsf{SN}}(R)\), dann \(\Dh(R,t)=\max\{k\mid\exists t': t\to_R^k t'\}\), \(\Dc(R)=(n\mapsto \max\{\Dh(t)\mid \textsf{size}(t)\le n\}\)
Beispiele: \(\Dc(a\to b)\in \Theta(n)\), \(\Dc(ab\to ba)\in \Theta(n^2)\), \(\Dc(ab\to bba)\in \Theta(2^n)\).
Beweismethode für \(\operatorname{\textsf{SN}}(R)\) \(\Rightarrow\) Schranke für \(\dc(R)\)
Gewichte: linear
obere Dreiecksmatrizen: polynomiell (W. 2010)
lineare Interpretation: exponentiell
Ü: Polynom-Interpretation: …
Anw.: keine Polynom-Int. für \(A(0,y)\to S(y),A(S(x),0)\to A(x,S(0)), (SA(S(x),S(y))\to A(x,A(S(x),y))\)
Def: \(\to_1/\to_2\) ist die Relation \(\to_1\cdot \to_2^*\)
Satz: \(\operatorname{\textsf{SN}}(\to_1/\to_2)\wedge \operatorname{\textsf{SN}}(\to_2)\implies \operatorname{\textsf{SN}}(\to_1\cup\to_2)\).
Sprechweise \(\operatorname{\textsf{SN}}(\to_1/\to_2)\): \(\to_1\) terminiert relativ zu \(\to_2\).
Beweis (indirekt): jede gemischte Ableitung enthält nur endlich viele \(\to_1\), nach dem letzten nur endlich viele \(\to_2\).
Def: wfmA \((D,>,[\cdot])\) schwach kompatibel mit \(S\): \(\forall (l,r)\in S, x\in D : [l](x)\ge[r](x)\)
Satz: Wenn ex. wfmA \(D\): \(D\) ist kompatibel mit \(R\) und \(D\) ist schwach kompatibel mit \(S\), dann \(\operatorname{\textsf{SN}}(\to_R/\to_S)\).
Bsp: \(\operatorname{\textsf{SN}}(\{c\to aabb,ab\to ba\})\), \(D\) zählt die \(c\).
Ü: Peano-Multiplikaton terminiert relativ zu Addition
Bsp. Rel. Term.
Def: \((D,\ge)\) ist QO: transitiv, reflexiv (PO: …und antisym)
Def: \(A\subseteq D\) ist Antikette: \(\neg \exists x,y\in A: x\neq y \wedge x\ge y\)
Def: \((D,>)\) ist WQO (WPO):
jede absteigende Kette ist endlich (\(\operatorname{\textsf{SN}}(>)\))
jede Antikette ist endlich
Satz: \((D,>)\) ist WQO \(\iff\) \(\operatorname{\textsf{SN}}(>)\) und für jede unendl. Folge \(d_0,d_1,\ldots\) existieren \(i<j\) mit \(d_i\le d_j\)
Lemma (Dickson): für jede endl. Menge von Variablen \(V\): die Teilbarkeitsrelation auf Monomen über \(V\) ist WPO.
Anwendung: …deswegen terminiert Buchberger-Alg.
Satz (Kruskal) die Einbettungsrelation (Kontrahieren von benachbarten Knoten) auf Termen ist WQO
SS 25: 5,6,8,9,2,3
Folie Matrix-Interpretationen: das Verifikations-Problem für das Beispiel.
Beschreiben Sie möglichst genau die Komponenten des Vektors \([w](0,0,1)^T\) für \(w\in \{a,b\}^*\) (Beispiele, allgemein)
Für Rechnungen mit Matrizen z.B. maxima verwenden.
Wenn
\(A=(D_A,>_A,[\cdot]_A)\) eine wfmA kompatibel mit \(R\) und schwach kompatibel mit \(S\),
und \(B=(D_B,>_B,[\cdot]_B)\) eine wfmA kompatibel mit \(S\):
konstruieren Sie eine wfmA mit Universum \(D_A\times D_B\), die kompatibel mit \(R\cup S\) ist.
Lösungsplan:
Operationen: komponentenweise. \([f](x,y)=([f]_A(x),[f]_B(y))\)
Ordnung auf dem Universum angeben (unter welchem Namen kennen Sie diese?),
Monotonie und Kompatibilität nachweisen.
Für \(A,B, R,S\) wie in voriger Aufgabe:
wenn \(A\) und \(B\) durch Gewichtsfunktionen \(g_A\), \(g_B\) definiert sind, dann gibt es eine Gewichtsfunktion \(g\), die mit \(R\cup S\) kompatibel ist.
(also eine kompatible wfmA auf \(\NN\). Nach voriger Aufgabe gibt es eine solche auf \(\NN^2\).)
Anwenden auf \(R=\{bab\to aaba\}, S=\{a^3\to b\}\), \(g_A=\{a\mapsto 1,b\mapsto 3\}, g_B=\{a\mapsto 1, b\mapsto 0\}\)
durch Beispiele illustrieren: wenn \(\operatorname{\textsf{SN}}(\to_1)\) und \(\operatorname{\textsf{SN}}(\to_2)\) und \((\to_1\cup\to_2)\) transitiv, dann \(\operatorname{\textsf{SN}}(\to_1\cup\to_2)\).
Beweis ist wohl schwierig
(von Hand, evtl. autotool) bestimme wfmAs für
\(\{aa\to bbb,bb\to a\}\)
\(\{p\wedge(q_1\vee q_2)\to (p\wedge q_1)\vee (p\wedge q_2),\) \((p_1\vee p_2)\wedge q \to (p_1\wedge q)\vee (p_2\wedge q) \}\).
\(A(A(D,x),y) \to A(x,A(x,y))\)
Hinweis: Dershowitz: 33 examples.
Familien von langen Ableitungen und Terminationsbeweis für die SRS
\(R_1 = \{ba \to acb, bc \to abb\}\)
\(R_2 = \{ba \to acb, bc \to cbb\}\)
\(R_3 = \{ba \to aab, bc \to cbb\}\)
Hinweis: eines hat doppelt exponentielle Ableitungslängen, eines mehrfach exponentielle, eines ist nichtterminierend.
Beispiel: einfach exponentielle Ableitungslängen für \(ba\to aab\): \(\forall k: ba^k\to^* a^{2k} b\), \(\forall k: b^ka\to^* a^{2^k} b^k\).
Hinweis: jede Regelanwendung verlängert um 1, deswegen \(u\to^k v\implies k=|v|-|u|\), man muß also die Schritte nicht zählen, sondern nur die Wortlängen vergleichen.
Geben Sie ein längen-erhaltendes terminierendes SRS mit exponentiellen Ableitungslängen an. Hinweis: Binärzähler.
Alphabet und Regelanzahl beliebig. Das SRS möglichst kurz (Summe aller Längen aller Regelseiten)
(Mit einer Regel geht das nicht. Wenn die terminiert, sind die Ableitungslängen höchstens quadratisch.)
Polynom-Interpretationen: Bsp. 6.2.13, 6.2.14, 6.2.15 aus Hans Zantema: Termination (in TeReSe, 2003)
(Masterprojekt/Werkvertrag) Containerisation für Matchbox
(Masterarbeit) Anwendung, Dokumentation, Verbesserung der Parameter-Optimierung für Beweissuche, Bsp.
gegeben \(E\), gesucht: Entscheidungsverfahren für \(s\approx_E t\)
Bsp: \(E=\{aba\to\epsilon\}\), \(s=abbbaa, t=bba\).
Plan: Vergleich d. \(E\)-Normalf. von \(s, t\). Aber: \(\neg(\operatorname{\textsf{UNR}}(E))\),
Lösung: Vergleich der \(\to_F\)-Normalformen für ein \(F\) mit
Hinzufügen von Regeln \(E=F_0\subseteq F_1\subseteq\dots\subseteq F_n= F\)
Invariante: \(F_i \subseteq (\approx_E)\) und \(\operatorname{\textsf{SN}}(F_i)\) (dann \((\approx_{F_i})=(\approx_E)\))
Ziel: \(\operatorname{\textsf{WCR}}(F)\) (dann gilt \(\operatorname{\textsf{CR}}(F)\) und \(\operatorname{\textsf{UNC}}(F)\))
Bsp: \(ba \gets_E ababa \to_E ab\), also \(ba\approx_E ab\),
\(F_1=E\cup\{ba \to ab\}\), \(\operatorname{\textsf{SN}}(F_1)\) wg. length-lex-order
\(F_1\) nicht lokal konfluent wegen …, neue Regel …,
Def: Für ein Termersetzungssystem \(R\) über \(\Sigma\): falls
\((l_1 \to r_1)\) und \((l_2 \to r_2)\) sind Regeln in \(R\) ohne gemeinsame Variable (ggf. vorher umbenennen!)
es gibt \(p\in\Pos (l_1)\), so daß \(l_1[p]\notin\Var\) und
\(l_1[p]\) und \(l_2\) sind unifizierbar mit mgu \(\sigma\), d.h., \(l_1[p]\sigma=l_2\sigma\)
falls \((l_1\to r_1)=(l_2\to r_2)\) (vor Umbenennung), dann \(p\neq \epsilon\)
dann ist \((r_1\sigma,(l_1\sigma)[p:=r_2\sigma])\) kritisches Paar (CP) von \(R\).
Bsp: \(\{ f(f(x,y),z)\to_1 f(x,f(y,z)), f(i(x),x) \to_2 e()\}\)
CP aus Überlappung von 1 und 2 bei Position \([0]\) (in 1)
CP aus Überlappung von 1 mit sich
Satz: \((s,t)\in\CP(R) \Rightarrow s\approx_R t\). Beweis: \(s\leftarrow_R l_1\sigma \rightarrow_R t\).
Def: CP \((s,t)\) zusammenführbar, falls \(\exists u: s\to_R^* u \wedge t\to_R^* u\).
Wenn \(\operatorname{\textsf{SN}}(R)\), dann ist Zusammenführbarkeit entscheidbar
Wenn \(R\) endlich, dann hat \(R\) endlich viele CP.
\(\operatorname{\textsf{WCR}}(R)\) gdw. jedes kritische Paar zusammenführbar.
Satz: Für endliche terminierende \(R\) ist Konfluenz entscheidbar.
\(E_0=\{aba\to\epsilon\}\), als TRS: \(\{a(b(a(x)))\to x\}\)
Überlappung der Regel mit sich an Position \([0,0]\)
\(l_1=aba(x), r_1=x, l_2=aba(x'), r_2=x', p = [0,0]\)
\(l_1[p]=a(x)\), \(\operatorname{\textsf{mgu}}(l_1[p],l_2)=\{x\mapsto ba(x')\} = \sigma\)
das aus dieser Überlappung konstruierte CP ist
\((r_1\sigma,(l_1\sigma)[p:=r_2\sigma]) = (x\sigma,(aba(x)\sigma)[p:=x'\sigma])\) \(= (ba(x'),ababa(y)[p:=x']) = (ba(x'),ab(x'))\)
Ü: alle CP für \(E_1=E_0\cup\{ba(x')\to ab(x')\}\)
Ü: alle CP für \(\{aba(x)\to b(x)\}\)
kritische Paare angeben, (später: vervollständigen)
\(\{f(x,x)\to a, f(x,g(x))\to b\}\)
\(\{0+y\to_1 y, s(x)+y\to_2 s(x+y),\) \(x+0\to_3 x, x+s(y)\to_4 s(x,y)\}\)
\(\{f(f(x,y),f(y,z))\to y\}\)
\(\{f^5(a)\to a, f^3(a)\to a\}\)
ein TRS \(R\) über \(\Sigma\) heißt nichtüberlappend, wenn \(R\) keine kritischen Paare besitzt.
(dann gilt \(\operatorname{\textsf{WCR}}(R)\) trivialerweise)
ein TRS \(R\) heißt linkslinear, wenn in keiner linken Regelseite eine Variable mehrfach vorkommt.
ein TRS \(R\) heißt orthogonal, falls es linkslinear und nichtüberlappend ist.
Satz: jedes orthogonale System ist konfluent.
beachte: das gilt auch für nicht-terminierende Systeme
braucht man linkslinear wirklich? Ja:
\(\{f(x,x)\to a,f(x,g(x))\to b, c\to g(c)\}\)
…ist Algorithmus mit dieser Spezifikation
Eingabe: Gleichungssystem \(E\)
Ausgabe: Ersetzungssystem \(R\) mit Eigenschaften:
\(R\) ist konvergent (\(:=\) terminierend und konfluent)
\(\approx_R ~ = ~ \approx_E\)
Implementierung: zusätzliche Eingabe: eine wfmA \(A\)
ordne Paare aus \(E\) bzgl. \(>_A\), Resultat \(R_0\)
wiederhole bis \(R_{i+1}=R_i\):
\(R_{i+1}:=R_i\cup\) die folgenden Paare: \(\forall (s,t)\in\CP(R_i)\):
wähle \(s'\in\Nf_{R_i}(s), t'\in\Nf_{R_i}(t)\)
falls \(s'\neq t'\), ordne \((s',t')\) bzgl. \(>_A\).
Korrektheit? Termination? beachte: 3 Fehlermöglichkeiten
$ git checkout https://git.imn.htwk-leipzig.de/waldmann/autotool/
$ cd autotool/collection
$ cabal repl
> import Autolib.Reporter
> import Rewriting.Completion.Simple
> repo check1
der Testfall ist \(E=\{aba(x)\to x\}\)
complete [ ( a(b(a(x))), x ) ] ord 10
bei einfacher Vervollständigung:
jedes neue kritische Paar muß sofort orientiert werden.
manche sind evtl. nicht orientierbar
alternativer Ansatz:
das Orientieren aufschieben,
bis neue Regeln vorliegen, die zur Umformung des Paares benutzt werden können
so daß das umgeformte Paar orientierbar ist
(nichtdeterministischer) Vervollständigungsalgorithmus wird formuliert mittels Inferenzsystem
(Leo Bachmair 1991, zitiert in Baader/Nipkow)
Grundbereich: Paare \((E,R)\) , Start: \((E_0,\emptyset)\), Ziel: \((\emptyset,R_n)\)
Invariante: \(\to_{R_k} \subseteq >_A\) und \(\approx_{E_0} = \approx_{E_k\cup R_k}\)
Fairness: \(\CP(R_n)\subseteq \bigcup_k E_k\)
Regeln (weiter evtl. in Übung)
deduce: \((s\gets_R u\to_R t)\) \(\Rightarrow\) \((E,R)\vdash(E\cup\{s\approx t\},R)\)
orient: \((s>_A t) \Rightarrow (E\cup\{s\approx t\},R)\vdash(E,R\cup\{s\to t\})\)
delete: \((E\cup\{s\approx s\},R)\vdash(E,R)\)
simplify: \((s\to_R^+ u)\Rightarrow (E\cup\{s\approx t\},R)\vdash(E\cup\{u\approx t\},R)\).
Korrektheit?
Warum ist einfache Vervollst. ein Spezialfall?
Gleichung: z.B. \(( f (1 , f (2 , 3 )) , f (f (1 , 2 ), 3 ) )\),
Variablen als Zahlen geschrieben
wfmA: Argumente sind \(x_1,x_2,\dots\), z.B.
Interpretation { dim = 1
, values = Polynomial_Interpretation (listToFM
[ ( f , 2 * x1 + x2 + 1 ) , ( a, 0) ]) }
Schritte: Deduce, Orient, Delete, Simplify, z.B.
, steps = [ Orient { s = f (a , a ) , t = a } ]
Rechnung ist Folge \(\dots (E_i,R_i)\to(E_{i+1},R_{i+1}) \dots\)
wie auf voriger Folie
Donald Knuth and Peter Bendix: Word Problems in Universal Algebras 1970
\(E\) sind Gruppen-Axiome, Signatur \(\{e/0, i/1, m/2\}\)
\(m(e(),x)\to x\)
\(m(i(x),x)\to e()\)
\(m(m(x,y),z)\to m(x,m(y,z))\)
abgeleitet z.B.: 8. \(m(x,e())\to x\)
kritische Paare wie hier definiert, orientiert nach der (später so benannten) Knuth-Bendix-Ordnung (KBO):
abnehmende Summe von Buchstabengewichten \(\in \NN\)
bei gleicher Summe: lexikogr. Abstieg bzgl. \(>\) auf \(\Sigma\)
Vorsicht bei Gewichten 0, damit \(\operatorname{\textsf{SN}}(>_{\operatorname{\textsf{KBO}}})\)
das war eine Motivation für Knuth und Bendix
Monoid-Darstellung (für Gruppe ähnlich): verwendet
endliche Menge von Generatoren (Buchstaben)
endliche Menge von Gleichungen (Wortpaaren)
\(\langle a,b\mid ab=ba\rangle\) für \(\{a,b\}^*/\approx_E\) mit \(E=\{ab\to ba\}\)
Kombinatorische Gruppentheorie (Walter Dyck, 1881) https://zenodo.org/record/1942346/preview/article.pdf
\(\approx_E\) ist das Wortproblem (Max Dehn 1911)
ist einer der Ursprünge für die spätere Entwicklung der Begriffe Algorithmus und Berechenbarkeit.
es gibt \(E\), für die \(\approx_E\) nicht entscheidbar ist (Novikov 1955)
ein Unifikator von zwei Termen \(s,t\in\Term(\Sigma,V)\)
ist eine Substitution \(\sigma:V\to\Term(\Sigma,V)\) mit \(t\sigma=s\sigma\)
zwei Terme \(s,t\) können keinen, einen oder mehrere Unifikatoren haben
Substitutionen nacheinander ausführen: \(\sigma\circ\tau\)
Substitutionen ordnen durch \(\sigma_1 \le \sigma_2\) (\(\sigma_1\) ist allgemeiner als \(\sigma_2\)) falls \(\exists \tau: \sigma_2 = \sigma_1\circ \tau\)
Satz: Wenn \(s,t\) unifizierbar, dann gibt es einen allgemeinsten Unifikator (most general unifier) \(\sigma\) von \(s\) und \(t\): für jeden Unifikator \(\sigma_2\) von \(s\) und \(t\) gilt \(\sigma \le \sigma_2\).
\(\operatorname{\textsf{mgu}}(s,t)\) ist bis auf Umbennenung eindeutig.
falls \(s=t\), dann return identische Abbildung
falls \(s\) Variable
falls \(s\) in \(t\) vorkommt, dann fail
sonst return \((s \mapsto t)\)
falls \(t\) Variable entsprechend
falls \(s=f(x_1,\ldots)\) und \(t=g(y_1,\ldots)\), dann
falls \(f \neq g\), dann fail, sonst …
bestimme \(\sigma=\operatorname{\textsf{mgu}}(x_1,y_1)\)
return \(\sigma \cup \operatorname{\textsf{mgu}}((x_2\sigma,\ldots),(y_2\sigma,\ldots))\)
Dieser Algorithmus ist korrekt, aber nicht effizient.
SS25: 1 (teilweise auch in autotool), 2, 4.
zu Folie Kritische Paare für TRS: kritische Paare ausrechnen.
Passende wfmA angeben und vervollständigen (soweit möglich).
zu Folie Orthogonale Systeme: für das Beispiel nachrechnen: \(\operatorname{\textsf{WCR}}\), \(\neg\operatorname{\textsf{CR}}\).
Das durch diese Regelmenge erzeugte ARS mit früheren Beispielen für \(\operatorname{\textsf{WCR}}\) und \(\neg\operatorname{\textsf{CR}}\) vergleichen.
Zeigen Sie Konfluenz von \(\{1 \vee 1 \to 1, x\vee y\to y\vee x\}\). Welche der in der VL genannten Sätze und Methoden sind hier anwendbar?
Beispiele und Beweis: die Dyck-Sprache ist die \(\approx_D\)-Äquivalenzklasse von \(\epsilon\) für \(D=\{ab\to\epsilon\}\).
Weil \(D\) konvergent ist (Beweis?) ist jede \(\approx_D\)-Äquivalenzklasse durch eine \(D\)-Normalform charakterisiert.
Diese \(D\)-Normaformen sind \(b^pa^q\). Die \(D\)-Normalisierung ist also eine Abbildung \(f:\{a,b\}^*\to\NN^2\).
Für \(f(w_1)=(p_1,q_1)\) und \(f(w_2)=(p_2,q_2)\), geben Sie \(f(w_1\cdot w_2)=(p,q)\) als Funktion von \(p_1,q_1,p_2,q_2\) an.
Auf Deutsch: \(f\) ist ein Monoid-Homomorphismus von \((\{a,b\}^*,\epsilon,\cdot)\) nach \((\NN^2, (0,0), ?)\) und das Fragezeichen ist gesucht. Recherche-Aufgabe: wie heißt dieses Ziel-Monoid?
weitere Regeln für Inferenzsystem für Vervollständigung
Siehe Winkler et al. (JAR 2013) https://doi.org/10.1007/s10817-012-9249-2 Fig. 1, zitiert aus: Bachmair (TCS 1991).
entsprechende Erweiterung der Autotool-Aufgabe diskutieren (…und realisieren als Masterarbeit)
Vergleichen mit der Formulierung des Knuth-Bendix-Algorithmus in Huet (1980) https://hal.inria.fr/inria-00076536/file/RR-0025.pdf
Gruppendarstellungen und Anwendung von Knuth-Bendix: siehe Havas et al.: Some Challenging Group Presentations (J. Austr. Math. Soc., 1999) https://staff.itee.uq.edu.au/havas/1999hhkr.pdf
mit Original-Artikel von Knuth u. Bendix:
wie werden Terme notiert?
wo steht die Definition von KBO?
Vervollständigungsschritte nachrechnen (das Entstehen des CP sowie seine passende Orientierung)
zur Geschichte von Knuth/Bendix siehe auch Donald Knuth: All Questions Answered, Notices Vol 49(3), https://www.ams.org/notices/200203/fea-knuth.pdf
(als Wiederholung und Ergänzung zu Termination) in KBO: welche Symbole dürfen Gewicht 0 haben? Warum die anderen nicht? (Gegen-Beispiele für \(\operatorname{\textsf{SN}}(>)\) angeben)
TTT2 (Weboberfläche) kann auch KBO.
die Curry (1960)-Howard (1969)-Isomorphie:
Typ \(=\) Behauptung (Proposition), Programm \(=\) Beweis
Behauptung: Typ \(T\) ist nicht leer,
Beweis dafür: ein Ausdruck (Programm) \(P\) mit Typ \(T\).
dann ist Beweis-Prüfung \(=\) Typ-Prüfung
diese kann automatisiert werden (Bsp: Sprache Agda)
…die Beweis-Suche aber nicht (volle Prädikatenlogik, Wahrheit ist nicht entscheidbar)
Unterstützung (interact. proof assistant, Bsp: Agda Emacs mode) für die schrittweise Beweis-Konstruktion
\((A\wedge B)\) ist wahr gdw. \(A\) wahr und \(B\) wahr
Typ \((A\wedge B)\) nicht leer gdw. \(A\) nicht leer und \(B\) nicht leer
data Und (a b : Set) : Set where
beide : a -> b -> Und a b
das ist die generalized algebraic data type (GADT)-Notation für
den Haskell-Typ data Pair a b = Beide a b
in Agda: Typ-Argumente müssen deklariert werden,
Groß/Klein-Schreibung ist frei wählbar,
Operatoren (->
, :
) benötigen
Leerzeichen,
denn a->b
ist ein gültiger Name
wenn \((A \to B)\) wahr ist, und \(A\) wahr ist, dann ist \(B\) wahr
modus ponens (Abtrennungsregel) \(\displaystyle\frac{A\to B, A}{B}\)
Implikation \(A \to B\) realisiert durch Funktionstyp \(A\to B\)
Beispiel: wir behaupten und zeigen \((A\wedge B) \to (B \wedge A)\)
Behauptung:
prop : {a b : Set} -> Und a b -> Und b a
Beweis: eine Implementierung
prop (beide x y) = ?
Syntax: in geschweiften Klammern (im Typ):
implizite Argumente (weglassen in Impl.)
\(A\vee B\) ist wahr gdw. \(A\) wahr oder \(B\) wahr ist
Typ \(A\vee B\) ist nicht leer gdw. \(A\) nicht leer oder \(B\) nicht leer
data Oder (a b : Set) : Set where
links : a -> Oder a b
rechts : a -> Oder a b
ein Distributivgesetz \((A\vee B)\wedge C \to (A\wedge C)\vee (B\wedge C)\)
dist : {a b c : Set} -> Und (Oder a b) c
-> Oder (Und a c) (Und b c)
Beweis durch vollständige Fallunterscheidung
dist (beide (links x) z) = ?
...
Lücken im Beweis schreiben als ?
C-c C-l
(load) Modul kompilieren
C-c C-,
Ziel (Typ der Lücke) und Kontext (Typen der
gebundene Namen) anzeigen
C-u C-u C-c C-,
das gleiche mit expandierten
Typen
C-c C-c
(case) vollständige Fallunterscheidung für
eine (Argument-)Variable
C-c C-SPC
(give) Lücke füllen
C-c C-r
(refine) ersetzt ?
durch
f ? ... ?
(passende Anzahl neuer Lücken)
C-c C-a
(auto) benutzt Konstruktoren und lokale
Namen
Aussage \(A\) wahr gdw. Type \(A\) nicht leer,
also: \(A\) falsch gdw. \(A\) leer, d.h., ohne Konstruktoren
data Absurd : Set
, Bezeichung auch \(\bot\) (bottom).
dieses Programm hat nicht den Typ Absurd
f : Absurd ; f = f
(in Haskell: statisch korrekt, in Agda:
wegen Nichttermination abgelehnt)
vgl. das Wahre:
data Unit : Set where unit : Unit
, auch \(\top\) (top).
exfalso : Absurd -> Unit
Beweis: exfalso ()
das ist keine Gleichung
(Implementierung), sondern die Behauptung, daß es keine gibt.
eine Art der Negation \(\neg A\) ist definiert als \((A \to \bot)\).
not : Set -> Set ; not a = a -> Absurd
Bezeichnung: das ist intuitionistische Logik
Vorsicht, dafür gilt \(A\to \neg\neg A\) (Ü), aber nicht \(\neg\neg A \to A\)
Ü: \(\neg\neg\neg A \to \neg A\)
de Morgan: \(\neg (A \vee B) \to (\neg A\wedge \neg B)\)
Ü: andere Varianten dieser Aussage.
nicht alle klassisch wahren sind auch intuitionistisch wahr.
den Typ schreiben wir genauso wie früher in Haskell
data Nat : Set where zero : Nat ; succ : Nat -> Nat
Funktionen auch (Fallunterscheidung, Rekursion)
plus : Nat -> Nat -> Nat
plus zero y = y ; plus (succ x) y = succ (plus x y)
Unterschiede zu Haskell: Vollständigkeit, Termination (Beispiele!)
Bsp: die Eigenschaft ist gerade.
wir rechnen nicht einen Wahrheitswert aus,
sondern geben Beweismöglichkeiten an:
data even : Nat -> Set where
even-zero : even zero
even-succ : {x : Nat}
-> even x -> even (succ (succ x))
Typ v. even-succ
ist dependent
(daten-abhängig, von x
)
Beweis (vollständige ! Fallunterscheidung)
even-plus
: (x y : Nat) -> even x -> even y -> even (plus x y)
even-plus zero y ex ey = ey
even-plus (succ (succ x)) y (even-succ ex) ey = ?
dependently typed functional programming language: has inductive families (data types which depend on values) proof assistant: interactive system for writing and checking proofs. based on intuitionistic type theory,
Per Martin-Löf, Constructive Mathematics and Computer Programming, 1979
Wadler, Kokke, Siek: Programming Language Foundations in Agda
Samuel Mimram: Program \(=\) Proof
exakt formalisieren, Beweis schrittweise entwickeln
Code aus VL verwenden (d.h., keine Standardbibliothek)
(möglichst viel C-c ..
, möglichst wenig selbst
schreiben)
Assoziativität des Oder
\(\neg\neg\neg a \to \neg a\)
Varianten von de Morgan
für Nat
: definiere odd
(ungerade)
(direkt, nicht als Negation von gerade)
zeige:
{x : Nat} -> even x -> odd x -> Absurd
zeige: ungerade plus ungerade ergibt gerade
definiere Multiplikation,
zeige: ungerade mal ungerade ergibt ungerade
Note: Assoziativität der Addition (usw.) noch nicht, weil wir die Gleichheit noch nicht definiert haben.
ohne Parameter, ohne Index:
data T : Set where A : T ; B : T
alle Konstruktoren liefern gleichen Typ
mit Parameter (generische Polymorphie)
data M (a : Set) : Set where N : M a; J : a -> M a
Parameter vor Doppelpunkt, in allen Konstruktoren sichtbar, alle Konstruktoren liefern gleichen Typ
mit Index (dependent Type)
data D : T -> Set where E : D A; F : (x : T) -> D x
Index nach Doppelp., kann in Konst. unterschiedlich sein
definierte Funktion soll total sein \(\Rightarrow\) jede Fallunterscheidung muß vollständig sein
match auf Argument mit nicht indiziertem Typ:
für jeden Konstruktor eine Klausel
match auf Argument mit indiziertem Typ:
für jede Klausel: Index des Musters unifizierbar mit Index des Arguments
für jede fehlende Klausel: nicht unifizierbar
Bsp: ist vollständig, Muster f A (F B)
fehlt:
f : (x : T) -> (y : D x) -> Unit
f A E = ? ; f A (F A) = ? ; f B y = ?
natürliche Zahlen als Peano-Zahlen
data Nat : Set where zero : Nat; succ : Nat -> Nat
Vektor mit Inhaltstyp als Parameter, Länge als Index
data Vec (a : Set) : Nat -> Set where
nil : Vec a zero
cons : {n : Nat} -> a -> Vec a n -> Vec a (succ n)
Anwendung: diese Funktion ist total
head : {a : Set} {n : Nat} -> Vec a (succ n) -> a
head (cons x v) = x
die Klausel für head nil
fehlt, denn die Indizes sind
nicht unifizierbar (aus Typ von head
: Index
succ n
, aus Typ von nil
: Index
zero
)
zwei Dinge sind gleich—wenn sie identisch sind
data Eq {a : Set} : (x y : a) -> Set where
refl : {x : a} -> Eq x x -- reflexiv
der Konstruktor (refl) hat einen eingeschränkten Typ (nicht
Eq x y
)
Bsp: diese Gleichheit ist transitiv:
trans : {a : Set} -> {x y z : a}
-> Eq x y -> Eq y z -> Eq x z
trans refl refl = ?
das erst Arg. hat Typ Eq x y
und Konstruktor
refl
(vollst. Falluntersch.: es gibt keinen anderen). Also
folgt x = y
. Entspr. y = z
,
Funktionsanwendung: gleiche Argumente ergeben gleiches Resultat
cong-succ
: (x y : Nat) -> Eq x y -> Eq (succ x) (succ y)
cong-succ x y refl = refl
Assoziativität der Addition, Beweis durch Induktion
plus-assoc : (x y z : Nat)
-> Eq (plus x (plus y z)) (plus (plus x y) z)
plus-assoc zero y z = refl
plus-assoc (succ x) y z = cong-succ ? ? ?
im I.S. wird die Kongruenz angwendet auf die I.V.
so sieht man besser, was passiert:
plus-assoc-v (succ x) y z = begin
plus (succ x) (plus y z)
=[] succ (plus x (plus y z))
=[ cong succ (plus-assoc-v x y z) ]
succ (plus (plus x y) z)
=[] plus (succ (plus x y)) z
=[] plus (plus (succ x) y) z end
mit diesen Operatoren
(Argument x
wird nicht benutzt, nur hingeschrieben)
infix 1 begin_ begin refl = refl
infixr 2 _=[]_ x =[] refl = refl
infixr 2 _=[_]_ x =[ exy ] eyz = trans exy eyz
infix 3 _end x end = refl
mehrstellige benutzerdefinierte Operatoren
Operator-Namen: beliebige Zeichenfolge (keine Klammern)
keine Leerzeichen,
jeder Unterstrich bezeichnet eine Argumentposition
ein Op. aus vorigem Beispiel, vollständig definiert:
Typ:
_=[_]_ : {A : Set} (x : A) {y z : A}
-> Eq x y -> Eq y z -> Eq x z
Implementierung:
x =[ exy ] eyz = trans exy eyz
Präzedenz, Assoziativität: infixr 2 _=[_]_
Beispiele: _+_
, _<_
,
if_then_else_
exakt formalisieren, Beweis schrittweise entwickeln
Code aus VL verwenden (d.h., keine Standardbibliothek)
(möglichst viel C-c ..
, möglichst wenig selbst
schreiben)
\(x + 0 = x\)
\(x + y = y + x\)
cong-succ
verallgemeinern: Aussage gilt nicht nur
für succ : Nat -> Nat
, sondern für beliebige Funktion
f : a -> b
Multiplikation definieren (Induktion über 1. Arg.)
Multiplikation ist assoziativ, kommutativ, distributiv (rechts und links) bzgl. Addition
Verkettung von Listen, von Vektoren
Fin n
mit genau \(n\) Elementen \([0,1,\dots,n-1]\)
data Fin : Nat -> Set where
f-zero : {n : Nat} -> Fin (succ n)
f-succ : {n : Nat} -> Fin n -> Fin (succ n)
Vektoren als Abbildung von einer endlichen Indexmenge
Vec : Set -> Nat -> Set ; Vec a l = Fin l -> a
Operation (Beispiel)
head : {a : Set} {n : Nat} -> Vec a (succ n) -> a
tail
, nil
, cons
,
map
(…von Zahlen, später polymorph)
sum : {n : Nat} -> Vec Nat n -> Nat
sum {zero} v = zero
sum {succ n} v = plus (head v) (sum (tail v))
pattern matching für implizites Argument {n}
(rechteckige) Matrix
Mat : Set -> Nat -> Nat -> Set
Mat a i j = Vec (Vec a i) j
Vorteil der funktionalen Darstellung wird deutlich bei:
transpose : {a : Set} {i j : Nat} -> Mat a i j -> Mat a j i
Ü: msum m == msum (transpose m)
,
Matrixmultiplikation, Assoziativität, neutrales Elt.
bisher: unabhängige Typen der Komponenten (vgl.
Und
)
data Pair (A B : Set) : Set
where pair : (x : A) -> (y : B) -> (Pair A B)
Typ der zweiten Komp. hängt vom Wert der ersten ab:
data Pair (A : Set) (P : A -> Set) : Set
where pair : (x : A) -> (y : P x) -> (Pair A P)
solches pair x y : Pair A P
ist Beweis für die
Aussage \(\exists x\in A :
P(x)\)
Standardbibliothek: Konstruktor ist Operator
_,_
bisher:
data Pair (A : Set) (P : A -> Set) : Set
where pair : (x : A) -> (y : P x) -> (Pair A P)
alternative Notation:
record Pair (A : Set) (P : A -> Set) : Set where
constructor pair
field
first : A ; second : P first
Konstruktion eines Records:
p4 : Pair Nat even
p4 = pair { first = zero; second = even-zero }
Bsp: \((A,e,f)\) heißt Monoid, wenn \(A\) Menge, \(e\in A\), \(f: A^2 \to A\), \(f\) assoziativ, \(e\) links und rechts neutral für \(f\)
Record mit Daten und Beweisen der Eigenschaften
record Monoid (A : Set)
(unit : A) (_o_ : A -> A -> A) : Set where field
left-unit : (x : A) -> Eq (unit o x) x
right-unit : (x : A) -> Eq (x o unit) x
assoc : (x y z : A) -> Eq (x o (y o z)) ((x o y) o z)
plus-monoid : Monoid Nat zero plus
plus-monoid = record
{ assoc = plus-assoc
; left-unit = \ x → refl ; right-unit = plus-x-0 }
record Monoid (A : Set) ...
ist abstrakter
Datentyp:
Typen für Operationen (unit
,
_o_
)
Spezifikationen (Axiome) (assoc
, …)
plus-monoid : Monoid Nat zero plus
ist konkreter
Datentyp:
Implementierungen für Operationen
Beweise für Axiome
in weniger ausdrucksstarken Sprachen: Spezifikation und Beweis nur als Kommentar oder Laufzeittest
record Semiring (A : Set) (zero one : A)
(_+_ _*_ : A -> A -> A) : Set where field
m-plus : Monoid A zero _+_
comm : (x y : A) -> (x + y) == (y + x)
m-times : Monoid A one _*_
dist-l : (x y z : A)
-> ((x + y) * z) == ((x * z) + (y * z))
dist-r : ...
plus-times-semiring
: Semiring Nat zero (succ zero) plus times
plus-times-semiring = record
{ m-plus = plus-monoid ; m-times = times-monoid
; comm = ? ; dist-l = ? ; dist-r = ? }
für jeden Halbring \(A\): Konstruktion des Halbrings der quadratischen Matrizen über \(A\) (fixierter Dimension \(\ge 1\))
Mat A d = Vec (Vec A d) d
mat-semi : {A : Set} {d : Nat} {d >= 1}
-> Semiring A _ _ _ _
-> Semiring (Mat A d) _ _ _ _
realisiert werden müssen Nullmatrix, Einheitsmatrix, Matrix-Addition, -Multiplikation, Assoziativität,…
geht besser, wenn man solange wie möglich funktional und koordinatenfrei rechnet, vgl. Bradley Saul: Carya, Linear Algebra in Agda, 2023– https://git.sr.ht/~bradleysaul/carya/
data Exists {A : Set} (P : A -> Set) : Set
where exists : (x : A) -> (y : P x) -> (Exists P)
(ist nur eine Umbenennung von Pair
) beweise
{A : Set} (P Q : A -> Set)
-> Exists (\ x -> Und (P x) (Q x))
-> Exists (\ x -> P x)
Vertauschen von Quantoren
p0 : {A B : Set} {P : A -> B -> Set}
-> Exists (\ x -> Exists (\ y -> P x y))
-> Exists (\ y -> Exists (\ x -> P x y))
Wiederholung: Die All-Quantifikation wird durch den Funktionspfeil ausgedrückt. Anwendung: Skolemisierung (\(f\) ist die Skolem-Funktion für \(y\) unter \(x\))
p1 : {A B : Set} {P : A -> B -> Set}
-> ((x : A) -> Exists (\ y -> P x y))
-> Exists {A -> B} (\ f -> (x : A) -> P x (f x))
für even
wie früher (induktiv definiert)
{x : Nat} -> even x
-> Exists (\ y -> times y (succ (succ zero)) == x)
not (Exists (\ x -> Und (even x) (even (succ x))))
nat-times-monoid : Monoid Nat _ times
für jeden Typ \(A\): Menge der Funktionen \(A\to A\) ist Monoid bezüglich Komposition (Nacheinanderausführung)
(Wiederholung Knuth-Bendix)
record Gruppe {A : Set}
(e : A) (_o_ : A -> A -> A) (i : A -> A) : Set where
field
left-id : {x : A} -> (e o x) == x
left-inv : {x : A} -> (i x o x) == e
assoc : {x y z : A}
-> (x o (y o z)) == ((x o y) o z)
right-id : {A : Set} {e : A} {_o_ : A -> A -> A} {i : A -> A}
-> Gruppe e _o_ i -> {x : A} -> (x o e) == x
right-inv : {A : Set} {e : A} {_o_ : A -> A -> A} {i : A -> A}
-> Gruppe e _o_ i -> {x : A} -> (x o i x) == e
Begriff Halbordnung (mit
_<=_ : A -> A -> Set
) als Record spezifizieren
(allgemein),
konkrete Implementierungen für Nat
für
x <= y
Fallunterscheidung für \(x,y\), Rekursion
Exists \ z -> plus x z == y
(kann Eigenschaften
von plus
nachnutzen, auf andere Monoide verallgemeinert
werden)
Wenn Relation \(R\) Halbordnung auf Menge \(A\), dann ist auch Relation \(R^-\) Halbordnung auf \(A\)
(15) Einleitung, symbolisches Diff.
(17) Automatisches Differenzieren
(19) Polynome (Repräsent., Operationen) Polynomideale
(20) Monom-Ordnungen, Gröbnerbasen (GB)
(21) Anwendung GB in Geometrie
(23) abstrakte Reduktionssysteme (ARS) Term-Ersetzungs-Systeme (TRS)
(24) Termination
(25) Unifikation, Vervollständigung
(26) Curry-Howard-Isomorphie (Programm \(=\) Beweis), (daten)abhängige Typen
(27) interaktives Beweisen
(28) Zusammenfassung, Ausblick