From c178c7ab70c83c92ce12e32395dfb67f863951b5 Mon Sep 17 00:00:00 2001 From: DLizr Date: Thu, 3 Oct 2024 13:56:05 +0300 Subject: [PATCH] Added a couple of lectures. --- .../2023_Rukhovich/figures/001.pdf_tex | 58 + .../2023_Rukhovich/figures/001.svg | 376 +++ .../2023_Rukhovich/figures/001.svg.pdf_tex | 58 + .../2023_Rukhovich/figures/galil1.pdf_tex | 58 + .../2023_Rukhovich/figures/galil1.svg | 212 ++ .../2023_Rukhovich/figures/galil2.pdf_tex | 58 + .../2023_Rukhovich/figures/galil2.svg | 326 +++ .../2023_Rukhovich/figures/gomory.pdf_tex | 58 + .../2023_Rukhovich/figures/gomory.svg | 339 +++ .../2023_Rukhovich/flows.tex | 706 ++++++ .../2023_Rukhovich/geometry.tex | 231 ++ .../2023_Rukhovich/header.tex | 239 ++ .../2023_Rukhovich/logo_ltc.png | Bin 0 -> 216873 bytes .../2023_Rukhovich/main.tex | 17 + .../2023_Rukhovich/probabilities.tex | 273 +++ .../2023_Rukhovich/strings.tex | 536 +++++ .../2023_Rukhovich/title_page.tex | 27 + .../2023_Zhukovskiy/diffeqs.tex | 2024 +++++++++++++++++ .../2023_Zhukovskiy/figures/001.pdf_tex | 58 + .../2023_Zhukovskiy/figures/001.svg | 376 +++ .../2023_Zhukovskiy/figures/001.svg.pdf_tex | 58 + .../2023_Zhukovskiy/figures/4-1.pdf_tex | 58 + .../2023_Zhukovskiy/figures/4-1.svg | 296 +++ .../2023_Zhukovskiy/figures/811.pdf_tex | 58 + .../2023_Zhukovskiy/figures/811.svg | 217 ++ .../figures/circle-portrait.pdf_tex | 58 + .../figures/circle-portrait.svg | 169 ++ .../figures/continuation-theorem.pdf_tex | 58 + .../figures/continuation-theorem.svg | 497 ++++ .../figures/degenerate-knot.pdf_tex | 58 + .../figures/degenerate-knot.svg | 187 ++ .../figures/dicritical-knot.pdf_tex | 58 + .../figures/dicritical-knot.svg | 171 ++ .../figures/focus-portrait.pdf_tex | 58 + .../figures/focus-portrait.svg | 164 ++ .../figures/implicit-equation-t.pdf_tex | 58 + .../figures/implicit-equation-t.svg | 495 ++++ .../figures/knot-portrait.pdf_tex | 58 + .../2023_Zhukovskiy/figures/knot-portrait.svg | 291 +++ .../figures/seat-portrait.pdf_tex | 58 + .../2023_Zhukovskiy/figures/seat-portrait.svg | 355 +++ .../2023_Zhukovskiy/header.tex | 218 ++ .../2023_Zhukovskiy/logo_ltc.png | Bin 0 -> 216873 bytes .../2023_Zhukovskiy/main.tex | 14 + .../2023_Zhukovskiy/title_page.tex | 27 + .../2023_Akhtyamov/figures/001.pdf_tex | 58 + .../2023_Akhtyamov/figures/001.svg | 376 +++ .../2023_Akhtyamov/figures/001.svg.pdf_tex | 58 + .../2023_Akhtyamov/formal-languages.tex | 1423 ++++++++++++ .../2023_Akhtyamov/header.tex | 222 ++ .../2023_Akhtyamov/logo_ltc.png | Bin 0 -> 216873 bytes .../Formal_Languages/2023_Akhtyamov/main.tex | 14 + .../2023_Akhtyamov/title_page.tex | 27 + .../2024_Zhukovskiy/diffeqs.tex | 1905 ++++++++++++++++ .../2024_Zhukovskiy/figures/001.pdf_tex | 58 + .../2024_Zhukovskiy/figures/001.svg | 376 +++ .../2024_Zhukovskiy/figures/001.svg.pdf_tex | 58 + .../2024_Zhukovskiy/figures/4-1.pdf_tex | 58 + .../2024_Zhukovskiy/figures/4-1.svg | 296 +++ .../2024_Zhukovskiy/figures/811.pdf_tex | 58 + .../2024_Zhukovskiy/figures/811.svg | 217 ++ .../figures/circle-portrait.pdf_tex | 58 + .../figures/circle-portrait.svg | 169 ++ .../figures/continuation-theorem.pdf_tex | 58 + .../figures/continuation-theorem.svg | 497 ++++ .../figures/degenerate-knot.pdf_tex | 58 + .../figures/degenerate-knot.svg | 187 ++ .../figures/dicritical-knot.pdf_tex | 58 + .../figures/dicritical-knot.svg | 171 ++ .../figures/focus-portrait.pdf_tex | 58 + .../figures/focus-portrait.svg | 164 ++ .../figures/implicit-equation-t.pdf_tex | 58 + .../figures/implicit-equation-t.svg | 495 ++++ .../figures/knot-portrait.pdf_tex | 58 + .../2024_Zhukovskiy/figures/knot-portrait.svg | 291 +++ .../figures/seat-portrait.pdf_tex | 58 + .../2024_Zhukovskiy/figures/seat-portrait.svg | 355 +++ .../2024_Zhukovskiy/header.tex | 222 ++ .../2024_Zhukovskiy/logo_ltc.png | Bin 0 -> 216873 bytes .../2024_Zhukovskiy/main.tex | 14 + .../2024_Zhukovskiy/title_page.tex | 27 + config.json | 7 + 82 files changed, 18036 insertions(+) create mode 100644 Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/001.pdf_tex create mode 100644 Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/001.svg create mode 100644 Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/001.svg.pdf_tex create mode 100644 Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/galil1.pdf_tex create mode 100644 Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/galil1.svg create mode 100644 Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/galil2.pdf_tex create mode 100644 Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/galil2.svg create mode 100644 Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/gomory.pdf_tex create mode 100644 Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/gomory.svg create mode 100644 Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/flows.tex create mode 100644 Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/geometry.tex create mode 100644 Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/header.tex create mode 100644 Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/logo_ltc.png create mode 100644 Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/main.tex create mode 100644 Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/probabilities.tex create mode 100644 Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/strings.tex create mode 100644 Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/title_page.tex create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/diffeqs.tex create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/001.pdf_tex create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/001.svg create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/001.svg.pdf_tex create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/4-1.pdf_tex create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/4-1.svg create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/811.pdf_tex create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/811.svg create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/circle-portrait.pdf_tex create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/circle-portrait.svg create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/continuation-theorem.pdf_tex create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/continuation-theorem.svg create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/degenerate-knot.pdf_tex create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/degenerate-knot.svg create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/dicritical-knot.pdf_tex create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/dicritical-knot.svg create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/focus-portrait.pdf_tex create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/focus-portrait.svg create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/implicit-equation-t.pdf_tex create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/implicit-equation-t.svg create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/knot-portrait.pdf_tex create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/knot-portrait.svg create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/seat-portrait.pdf_tex create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/seat-portrait.svg create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/header.tex create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/logo_ltc.png create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/main.tex create mode 100644 Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/title_page.tex create mode 100644 Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/figures/001.pdf_tex create mode 100644 Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/figures/001.svg create mode 100644 Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/figures/001.svg.pdf_tex create mode 100644 Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/formal-languages.tex create mode 100644 Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/header.tex create mode 100644 Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/logo_ltc.png create mode 100644 Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/main.tex create mode 100644 Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/title_page.tex create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/diffeqs.tex create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/001.pdf_tex create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/001.svg create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/001.svg.pdf_tex create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/4-1.pdf_tex create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/4-1.svg create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/811.pdf_tex create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/811.svg create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/circle-portrait.pdf_tex create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/circle-portrait.svg create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/continuation-theorem.pdf_tex create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/continuation-theorem.svg create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/degenerate-knot.pdf_tex create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/degenerate-knot.svg create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/dicritical-knot.pdf_tex create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/dicritical-knot.svg create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/focus-portrait.pdf_tex create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/focus-portrait.svg create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/implicit-equation-t.pdf_tex create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/implicit-equation-t.svg create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/knot-portrait.pdf_tex create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/knot-portrait.svg create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/seat-portrait.pdf_tex create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/seat-portrait.svg create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/header.tex create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/logo_ltc.png create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/main.tex create mode 100644 Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/title_page.tex diff --git a/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/001.pdf_tex b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/001.pdf_tex new file mode 100644 index 00000000..d67d802f --- /dev/null +++ b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/001.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file '001.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{188.61345426bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.71747798)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{001.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/001.svg b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/001.svg new file mode 100644 index 00000000..a08c4a6e --- /dev/null +++ b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/001.svg @@ -0,0 +1,376 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/001.svg.pdf_tex b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/001.svg.pdf_tex new file mode 100644 index 00000000..3ae12021 --- /dev/null +++ b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/001.svg.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3 (0e150ed6c4, 2023-07-21), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file '001.svg.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{160.29248455bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.8442442)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{001.svg.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/galil1.pdf_tex b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/galil1.pdf_tex new file mode 100644 index 00000000..081a7aa7 --- /dev/null +++ b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/galil1.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file 'galil1.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{160.33487275bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.24699048)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{galil1.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/galil1.svg b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/galil1.svg new file mode 100644 index 00000000..87637028 --- /dev/null +++ b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/galil1.svg @@ -0,0 +1,212 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/galil2.pdf_tex b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/galil2.pdf_tex new file mode 100644 index 00000000..e8f573fe --- /dev/null +++ b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/galil2.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file 'galil2.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{182.86550687bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.21655907)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{galil2.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/galil2.svg b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/galil2.svg new file mode 100644 index 00000000..26cc77a8 --- /dev/null +++ b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/galil2.svg @@ -0,0 +1,326 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/gomory.pdf_tex b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/gomory.pdf_tex new file mode 100644 index 00000000..2e9bdbe8 --- /dev/null +++ b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/gomory.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file 'gomory.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{172.20164261bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.89942821)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{gomory.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/gomory.svg b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/gomory.svg new file mode 100644 index 00000000..81452a0f --- /dev/null +++ b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/figures/gomory.svg @@ -0,0 +1,339 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/flows.tex b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/flows.tex new file mode 100644 index 00000000..eb920abe --- /dev/null +++ b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/flows.tex @@ -0,0 +1,706 @@ +\section{Потоки} +\subsection{Основные определения} +\textbf{Определение.} Сеть --- это ориентированный граф, у каждого ребра которого есть пропускная способность $c(u, v) > 0$, с двумя выделенными вершинами: исток ($s$) и сток ($t$). + +\textbf{Определение.} Поток --- функция $f: V \times V \to \mathbb R$ со следующими свойствами: +\begin{itemize} + \item Антисимметричность. + \item $f(u, v) \le c(u, v)$ (поток не превосходит пропускную способность ребра). + \item Если $u \in V \setminus \{s, t\}$, то $\sum_{v \in V} f(u, v) = 0$ (входящий поток равен исходящему). +\end{itemize} + +Теперь более программистское определение: + +\textbf{Определение.} Поток --- функция $f: E \to \mathbb R_{\ge 0}$ со следующими свойствами: +\begin{itemize} + \item $f(e) \le c(e)$. + \item $\sum_{(u, v)} f((u, v) \in E) = \sum_{(v, u) \in E} f((v, u))$. +\end{itemize} + +\textbf{Определение.} Величина потока --- $|f|$ --- это величина потока, входящего в сток, или величина потока, исходящего из истока. + +\textbf{Корректность.} Просуммируем последнее свойство по всем рёбрам, получим равенство нуля и потока из истока/в сток. + +\textbf{Определение.} Остаточная сеть $G_f$ --- это сеть, где из пропускных способностей рёбер вычтен поток $f$ и добавлены обратные рёбра. + +\textbf{Определение.} Увеличение потока $f$ на $f'$ --- это функция $(f \uparrow f'): V \times V \to \mathbb R$, такая что $(f \uparrow f')(u, v) = f(u, v) + f'(u, v)$. + +\textbf{Лемма.} Увеличение потока является потоком. Просто проверим пункты из определения. + +\textbf{Определение.} Насыщенное ребро --- ребро, поток по которому максимален. + +\textbf{Определение.} Увеличивающий путь в сети --- путь из истока в сток по ненасыщенным рёбрам. + +\textbf{Определение.} Разрез $(S, T)$ --- это разбиение $V = S \sqcup T$, такое что $s \in S$ и $t \in T$. + +\textbf{Определение.} Пропускная способность разреза $c(S, T)$ --- это сумма пропускных способностей рёбер, пересекающих его. + +\textbf{Определение.} Минимальный разрез --- разрез минимальной пропускной способности. + +\textbf{Определение.} Для разреза $(S, T)$ \textit{чистый поток} --- это $f(S, T) = \sum_{u \in S, v \in T} f(u, v)$. + +\textbf{Лемма.} Для любого разреза $f(S, T) = |f|$. + +\textbf{Доказательство.} По определению $|f| = \sum_{v \in V} f(s, v)$. +Прибавим ноль: $|f| = \sum_{u \in S} \sum_{v \in V} f(s, v)$. +Из-за антисимметричности вклад всех пар $(u, v) \in S \times S$ равен нулю, поэтому $|f| = \sum_{u \in S} \sum_{v \in T} f(u, v) = f(S, T)$. + +\sloppy \textbf{Лемма.} Величина потока не превосходит пропускную способность минимального разреза. Действительно, внимательно посмотрим на $|f| = \sum_{u \in S} \sum_{v \in T} f(u, v)$. + +\textbf{Теорема.} (Форда-Фалкерсона) Пусть $G$ --- сеть и $f$ --- поток в ней. Следующие утверждения эквивалентны: +\begin{enumerate} + \item $f$ --- максимальный поток. + \item $G_f$ не содержит увеличивающие пути. + \item $|f| = c(S, T)$ для некоторого разреза $(S, T)$. +\end{enumerate} + +\textbf{Доказательство.} $1 \Rightarrow 2$ очевидно. $3 \Rightarrow 1$ тривиально. +$2 \Rightarrow 3$: возьмём в качестве $S$ все достижимые из $s$ вершины по ненасыщенным рёбрам. + +Таким образом, мы пришли к \textit{методу Форда-Фалкерсона} нахождения максимального потока: сначала ставим нулевой поток по всем рёбрам, далее, пока есть путь по ненасыщенным рёбрам, проталкиваем по нему поток. + +\subsection{Алгоритмы поиска максимального потока} +\textbf{Определение.} Целочисленная сеть --- сеть, в которой пропускные способности всех рёбер целочисленные. +В целочисленных сетях алгоритм Форда-Фалкерсона работает за $O(E |f|)$. + +\subsubsection{Алгоритм Эдмонса-Карпа} +(Или ФФ с BFS) Будем искать путь в остаточной сетя не поиском в глубину, а поиском в ширину. Утверждается, что алгоритм работает за $O(VE^2)$. + +\textbf{Лемма 1.} Для любой верщины $v$ верно, что в процессе алгоритма Э-К расстояние от истока до $v$ в остаточной сети не уменьшается. + +\textbf{Доказательство.} Зафиксируем вершину $v$. +Рассмотрим слои, полученные поиском в ширину. Тогда все рёбра идут либо в непосредственно следующий слой, либо в один из предыдущих слоёв. +Рассмотрим произвольный кратчайший путь из $s$ в $t$ (он не обязан проходить через $v$). +Пустим по нему поток. +Так как все рёбра идут в направлении строгого увеличения номера слоя, теперь какие-то из рёбер в бóльшие слои исчезли, и какие-то рёбра в меньшие слои появились. +Следовательно, новый путь в $v$ меньшей длины появиться не мог. + +\textbf{Лемма 2.} Любое ребро в процессе работы алгоритма Э-К насыщено не более чем $\frac{|V|}{2}$ раз. + +\textbf{Доказательство.} Рассмотрим насыщенное ребро $(u, v)$. В каком случае оно может быть насыщено ещё раз? +Для этого должно произойти $\dist(s, u) > \dist(s, v)$, чтобы пустить поток в обратную сторону, а потом снова $\dist(s, v) > \dist(s, u)$, чтобы пустить в направлении $u \to v$. +Следовательно, $\dist(s, v)$ увеличивается хотя бы на 2 при каждом перенасыщении. + +Таким образом, каждое из $O(E)$ рёбер насыщается $O(V)$ раз, и для каждого насыщения нужно запустить поиск в ширину за $O(E)$. + +\subsubsection{Концепция блокирующих потоков} +\textbf{Определение.} Слоистая сеть --- это сеть $G = (V, E, C, s, t)$, такая что для любого ребра $e \in E$ верно $\dist_G(s, e.start) + 1 = \dist_G(s, e.finish)$. +Иными словами, все рёбра ведут в вершину, лежащую в непосредственно следующем слое. + +\textbf{Определение.} Пусть $G = (V, E, C, s, t)$ --- сеть, а $f$ --- поток в ней. +Тогда $f$ называется \textit{блокирующим}, если в сети $G$ не существует пути из $s$ в $t$ по ненасыщенным рёбрам, то есть для увеличения потока приходится отменять уже пущенный поток. + +\textbf{Определение.} Концепция блокирующих потоков: пока есть путь из $s$ в $t$ в остаточной сети, запускаем в ней BFS, строим слоистую сеть и строим в этой слоистой сети блокирующий поток. +Это не является алгоритмом Диница, так как мы ничего не говорим про то, как находить блокирующий поток. + +\textbf{Теорема.} В концепции блокирующих потов (КБП) выполняется не более, чем $|V|$ итераций. +Данная теорема является следствием более важной: + +\textbf{Теорема.} Каждая итерация КБП строго увеличивает расстояние от $s$ до $t$ в остаточной сети. + +\textbf{Доказательство.} Рассмотрим одну итерацию. Допустим что по её окончании расстояние не увеличилось. +Тогда из $s$ в $t$ существует путь, проходящий только по ненасыщенным рёбрам, идущим в следующий слой. +Но по этому пути можно пустить поток, поэтому исходный поток не блокирующий --- противоречие. + +\textbf{Утверждение.} После того, как мы прошли по ребру и не смогли протолкнуть через него поток, можно его удалить/забыть про него до конца данной итерации. +(Формального доказательства не было) + +Вместе с этим утверждением получаем, что для нахождения блокирующего потока можно просто запускать DFS, и он будет работать за $O(|E'| + l + |V|)$, где $E'$ --- оставшиеся рёбра, $l$ --- расстояние от $s$ до $t$ (так как нужно протолкнуть поток) и $|V|$, так как нужно пройти по всем вершинам. + +Следовательно, делая суммарно $O(V)$ итераций и проталкивая поток $O(E)$ раз за $O(E)$, получаем $O(VE^2)$. + +Отсюда очевидным образом вытекает алгоритм Диница: каждое проталкивание работает за $O(V)$ засчёт того, что мы удаляем лишние рёбра, а по оставшимся проходим на расстояние $O(V)$ до стока. + +\subsubsection{Декомпозиция потока} +\textbf{Утверждение.} Поток разбивается на не более, чем $|E|$ путей и циклов. + +\subsubsection{Частные случаи алгоритма Диница} +\textbf{Единичная сеть.} + +Во-первых, заметим, что при проталкивании потока мы насыщаем сразу все рёбра на пути, поэтому сходу можно сказать, что алгоритм работает за $O(VE)$. + +\textbf{Утверждение.} Декомпозиция потока в единичной сети состоит из циклов и рёберно непересекающихся путей. + +\textbf{Теорема.} При поиске потока с помощью КБП в единичной сети будет выполнено $O(\sqrt E)$ итераций. + +\textbf{Доказательство.} Зафиксируем $k$. Рассмотрим остаточную сеть после $k$ итераций. +Тогда расстояние от $s$ до $t$ не менее $k$. +Пусть $f$ --- текущий поток, $f'$ --- максимальный поток. +Рассмотрим декомпозицию потока $f' - f$: это какие-то циклы и рёберно не пересекающиеся пути длины хотя бы $k$, то есть этих путей не более $\frac{|E|}{k}$. +Но так как каждый путь соответствует ровно одной единице потока, $|f' - f| \le \frac{|E|}{k}$, то есть нам осталось сделать не более $\frac{|E|}{k}$ итераций. +Следовательно, для всех $k$ выполнено, что количество итераций не превосходит $k + \frac{|E|}{k}$. +Возьмём $k = \sqrt{|E|}$. + +\textbf{Паросочетание (единичная двудольная сеть)} + +Теперь у нас все вершины делятся на два типа: те, в которых входит одно ребро, те, из которых выходит одно ребро. +Второе замечание: через каждую вершину проходит не более одной единицы потока. + +\textbf{Теорема.} Будет выполнено $O(\sqrt V)$ итераций. + +\textbf{Доказательство.} Теперь у нас все пути в декомпозиции вершинно-непересекающиеся, поэтому можно повторить то же доказательство, что и для единичной сети, взяв $k = \sqrt V$. + +Это называется алгоритмом Хопкрофта-Карпа, так как именно они доказали асимптотику, хотя по факту это алгоритм Диница обыкновенный. + +\textbf{Почти максимальное паросочетание} + +Паросочетание, размер которого --- не менее 95\% от размера максимального паросочетания. + +\textbf{Теорема.} (Данилюка) Будем искать максимальное паросочетание в двудольном графе методом КБП. +Тогда после $k$ итераций размер уже найденного паросочетания будет не менее, чем $\frac{k}{k+1}$ от размера максимального паросочетания. + +\textbf{Доказательство.} Всё то же самое: $k$ итераций, декомпозиция потока, который осталось протолкнуть. +В ней все пути будут являться удлинняющими цепочками. +Более того, длина путей, которые мы находим на $k$-ой итерации --- хотя бы $2k + 3$, так как изначально длина пути --- 3, и после каждой итерации увеличивается хотя бы на 2. +В частности, внутри каждой такой цепочки должно быть хотя бы $k$ рёбер справа налево, то есть в паросочетании. +Следовательно, если $cur_k$ --- это найденный поток после $k$ итераций, то на оставшихся итерациях мы найдём поток величины не более $\frac{cur_k}{k}$. +Тогда ответ не превосходит $cur_k \cdot \frac{k + 1}{k}$. +Таким образом, спустя 19 итераций мы найдём 95\% паросочетания. + +\subsection{Паросочетания} +(Да, здесь что-то не так с хронологией) + +\textbf{Утверждение.} Максимальное паросочетание --- это насыщенные рёбра в остаточной сети максимального потока. Оба неравенства проверяются напрямую. + +\textbf{Утверждение.} Алгоритм Куна --- это оптимизированный поиск максимального потока. +Действительно, удлинняющая цепь --- это в точности путь по ненасыщенным рёбрам. + +\textbf{Лемма.} При поиске потока методом Форда-Фалкерсона не может быть такого, что после $k$-ой итерации в остаточной сети нет пути от $v$ до $t$, а после $(k+1)$-ой --- есть. + +\textbf{Доказательство.} От противного: рассмотрим новопоявившийся путь $A$. +Раз он появился только сейчас, мы должны были пустить по нему отрицательный поток, то есть найти путь по ненасыщенным рёбрам $B$. +Рассмотрим первую вершину на пути $A$, лежащую на пути $B$: из неё есть путь в $t$ по ненасыщенным рёбрам, и в неё есть путь из $v$. + +\textbf{Лемма.} (Холла) Пусть $N(U)$ --- множество вершин, инцидентных вершинам $u \in U$. +Тогда совершенное паросочетание существует тогда и только тогда, когда для всех $U \subset V$ верно $|N(U)| \ge |U|$. + +\textbf{Доказательство.} $\Rightarrow$ очевидно. $\Leftarrow$: от противного, пусть для $u \in L$ не нашлась пара. +Тогда если запустить из итерацию алгоритма Куна, мы посетим какие-то вершины $X \subset L$ и $Y \subset R$. +Как вершина $v \in X$ могла там оказаться? Либо $v = u$, либо мы пришли в неё из вершины $r \in Y$. +По определению паросочетания отображение $r \mapsto v$ инъективно, и, так как оно не сюръективно (из-за $u \in X$), $|X| < |Y|$. +Остаётся понять, что $Y$ --- это в точности $N(X)$. + +\textbf{Задача.} Доказать, что в $d$-регулярном двудольном графе существует полное паросочетание. +Доказывается аналогично теореме Холла. + +\textbf{Определение.} $\alpha(G)$ --- размер максимального независимого множества. + +\textbf{Определение.} $\tau(G)$ --- размер минимального вершинного покрытия (каждое ребро графа инцидентно хотя бы одной вершине из этого множества). + +\textbf{Определение.} $\pi(G)$ --- размер максимального паросочетания. + +\textbf{Свойство 1.} $\tau(G) = |V| - \alpha(G)$. Будет следовать из следующего: + +\textbf{Свойство 2.} $\forall V' \subset V$ ($V'$ --- вершинное покрытие $\iff$ $V \setminus V'$ --- независимое множество). + +\textbf{Доказательство.} Напишем определение для вершинного покрытия $V'$: $\forall (u, v) \in E$ $(u \in V' \vee v \in V')$ или $(u \not\in V \setminus V' \vee v \not\in V \setminus V')$ или же $V \setminus V'$ --- независимое множество. + +\textbf{Свойство 3.} $\pi(G) \le \tau(G)$. + +\textbf{Теорема.} (Кёнига) В двудольном графе $G$ верно $\pi(G) = \tau(G)$. + +\textbf{Доказательство.} Мы уже знаем, что $\pi(G) \le \tau(G)$, поэтому достаточно построить покрывающее множество размера $\pi(G)$. +Добавим направление для рёбер в графе: рёбра из паросочетания идут влево, остальные --- вправо. +Запустим поиск в глубину из левых вершин, не покрытых паросочетанием. +Разобьём все вершины на 4 множества: $R^+, R^-, L^+, L^-$, где множества с плюсами --- это те вершины, которые обошёл поиск, а с минусом --- остальные. + +Тогда утверждается, что $L^- \cup R^+$ --- это и есть искомое вершинное покрытие размера $\pi(G)$. +Вершинным покрытием оно очевидно является, так как в нём могут не лежать только рёбра между $L^+$ и $R^-$: если ребро направлено влево, то мы могли прийти в вершину из $L^+$ только из вершины в $R^-$, а вправо быть не может, так как вершину из $R^-$ мы не посетили. +Размер совпадает из соображения, что все вершины из $L^-$ и из $R^+$ лежат в паросочетании ($L^-$ --- по определению, $R^+$ --- если не лежит, то мы нашли удлинняющую цепь, так как стартовали из непокрытой вершины), и ни одно из рёбер паросочетания не лежит между двумя вершинами из этих множеств. + +\textbf{Определение.} Пусть $\left$ --- конечное ЧУМ. Тогда последовательность $a_1, \dots, a_k$ называется \textit{цепью}, если $a_1 \le a_2 \le \dots \le a_k$. + +\textbf{Определение.} Множество вершин $\{a_1, \dots, a_k\} \subset A$ называется \textit{антицепью}, если $\forall i, j~a_i \not\le a_j$. + +\textbf{Теорема.} (Дилворда) В конечном ЧУМе $\left< A, \le \right>$ количество цепей в минимальном разбиении на цепи в точности совпадает с максимальным размером антицепи. + +\textbf{Доказательство.} Докажем нестрогие неравенства в обе стороны. В силу транзитивности графа количество покрывающих цепей не может быть меньше размера антицепи, потому что в этом случае какие-то два элемента антицепи окажутся в одной цепи. +Раздвоим все вершины $a_i$ в вершины $l_i$, $r_i$ и сопоставим ребру $(a_i, a_j)$ исходного графа ребро $(l_i, r_j)$ в новом графе $A'$. +Пусть $f(A)$ --- минимальное число цепей, необходимое для покрытия $A$. +Так как цепь длины $k$ содержит $k - 1$ ребро, суммарно все цепи содержат $|A| - f(A)$ рёбер. +Более того, каждое ребро цепи в $A$ соответствует ребру паросочетания в $A'$, и они попарно не пересекаются. +Следовательно, $|A| - f(A) \le \pi(A')$, и пример с равенством строится тривиально. + +Остаётся построить независимое множество $S$ в графе $A$ размера $|A| - \pi(A')$. +Положим в $S$ все вершины из $A$, которые не соответствуют ни одной вершине из минимального вершинного покрытия. +Тогда $S$ --- независимое множество, как подмножество дополнения к минимальному вершинному покрытию, и $|S| \ge |A| - \tau(A') = |A| - \pi(A') = f(A)$. + +\subsection{Алгоритмы в целочисленных сетях} +Пусть все пропускные способности рёбер целочисленные и не превосходят $C$. В частности, максимальный поток не превосходит $|E|C$. + +Тогда можно пихать поток величины $C$, $\frac{C}{2}$, $\frac{C}{4}$ и так далее и улучшить асимптотику. +Найдём эту асимптотику. Пусть мы проталкивали поток величины $2^k$, и он перестал влезать. +Тогда у нас появился разрез, через который проходят рёбра с оставшейся пропускной способностью менее $2^k$, то есть суммарный вес разреза меньше $|E| \cdot 2^k$. +Следовательно, поток в оставшейся сети менее $|E| \cdot 2^k$. + +Если использовать алгоритм Форда-Фалкерсона, то у нас будет $\log(C)$ итераций, и каждая итерация будет работать за $O(|E|^2)$. + +Что получится, если написать алгоритм Диница с масштабированием? +Вспомним, что, если расстояние от истока до стока равно $l$, то один запуск поиска в глубину отрабатывает за $l + |E'|$, где $E'$ --- множество удалённых рёбер. +Если просуммировать это по $k$ запускам, то получится +\[ + k|E| + \sum_{i=1}^{k} l_i kol_i \le k|E| + |V| \sum_{i=1}^{k} kol_i \le |V| \cdot |E| + |V| \sum_{i=1}^{k} kol_i = O(VE). +\] +Здесь $kol_i$ --- количество путей, по которым мы протолкнули поток. +Последнее равенство следует из того, что максимальный возможный поток в сети не превосходит $|E| 2^k$, и мы проталкиваем $2^k$. +Следовательно, вместе с масштабированием алгоритм Диница работает за $O(VE \log(C))$. + +\subsubsection{Оптимизация до $O(VE \log(V))$} +Заметим, что в ходе работы алгоритма Диница из каждой вершины выходит только одно ребро, которое нас интересует, и самая медленная часть --- обновление рёбер при проталкивании потока. +Если рассмотреть эти рёбра, то получится лес, в котором нам нужно уметь: +\begin{enumerate} + \item Удалять рёбра (при насыщении). + \item Добавлять рёбра (после удаления насыщенного ребра). + \item Проверять, является ли $s$ потомком $t$. + \item Находить минимум на пути от $s$ до $t$. + \item Вычитать на пути от $s$ до $t$. +\end{enumerate} +Всё это умеет делать Link-Cut Tree, и эти операции заменяют поиск в глубину, так что поиск блокирующего потока работает за $O(E \log(V))$. + +\subsubsection{Оценки Карзанова} +\textbf{Определение.} Пусть $G = (V, E, C, s, t)$ --- это сеть. Пусть $v$ --- вершина, не являющаяся ни стоком, ни истоком. +Тогда +\begin{itemize} + \item Входящий потенциал --- $p_{in}(v) = p_{G,in}(v) = \sum_{(u, v) \in E} c((u, v))$. + \item Исходящий потенциал --- $p_{out}(v) = p_{G,out}(v) = \sum_{(v, u) \in E} c((v, u))$. + \item Потенциал --- $p(v) = p_G(v) = \min(p_{in}(v), p_{out}(v))$. + \item Потенциал сети --- $P = P_G = \sum_{v \in V \setminus \{s, t\}} p(v)$. +\end{itemize} + +\textbf{Лемма.} Пусть $G$ --- сеть, а $f$ --- поток в ней. Тогда для любой $v \in V \setminus \{s, t\}$ верно $p_{G, in}(v) = p_{G_f, in}(v)$, $p_{G, out}(v) = p_{G_f, out}(v)$, $p_{G}(v) = p_{G_f}(v)$. + +\textbf{Доказательство.} При проталкивании потока по рёбрам $(u, v)$ и $(v, w)$ уменьшается пропускная способность ребра $(v, w)$, а у ребра $(v, u)$ увеличивается на то же значение, поэтому сумма в вершине $v$ не изменилась. + +\textbf{Теорема.} (Первая теорема Карзанова) Пусть $G$ --- произвольная целочисленная сеть. +Тогда любой алгоритм поиска максимального потока в сети $G$, основанный на концепции блокирующих потоков, выполнит $O(\sqrt {P_G})$ итераций. + +\textbf{Доказательство.} Выполним $\sqrt{P_G}$ итераций алгоритма. Докажем, что в полученной остаточной сети величина максимального потока не превосходит $\sqrt{P_G}$. +Рассмотрим оставшийся максимальный поток и декомпозируем его на пути и циклы. +Длина каждого этого пути --- хотя бы $\sqrt{P_G}$. +В силу целочисленности сети каждый путь будет брать на себя хотя бы $\sqrt{P_G}$ единиц потенциала, так как потенциал --- это сумма максимально возможных потоков через каждую вершину. +Следовательно, этих путей не более $\sqrt{P_G}$. + +\textbf{Теорема.} (Вторая теорема Карзанова) Пусть $G$ --- целочисленная сеть без кратных рёбер с пропускными способностями, не превосходящими $C$. +Тогда любой алгоритм поиска максимального потока в сети $G$, основанный на концепции блокирующих потоков, выполнит $O(\sqrt[3]{C|V|^2})$ итераций. + +\textbf{Доказательство.} Сделаем $k$ итераций и оценим величину оставшегося потока. +Рассмотрим слоистую сеть. По теореме Форда-Фалкерсона любой разрез в этой сети не меньше максимального потока. +Рассмотрим разрез между $l$-ым и $(l+1)$-ым слоем. Тогда количество рёбер между ними не превосходит $2|V_l| \cdot |V_{l+1}|$ (между парой вершин может быть два ребра с противоположными направлениями). + +Таким образом, $f_{\text{ост}} \le 2C \cdot \min_{l=1}^{k} (|V_l| \cdot |V_{l+1}|)$. +Воспользуемся неравенством Коши: +\[ + f_{\text{ост}} \le 2C \cdot \min_{l=1}^{k} \left( \left(\frac{|V_l| + |V_{l+1}|}{2} \right)^2 \right) = \frac{C}{2} \cdot \min_{l=1}^{k} (|V_l| + |V_{l+1}|)^2 \le +\] +\[ + \le \frac{C}{2} \left( \frac{\sum_{l=1}^{k} (|V_l| + |V_{l+1}|)}{k} \right)^2 \le \frac{C}{2} \left( \frac{2|V|}{k} \right)^2 = 2C \cdot \frac{|V|^2}{k^2}. +\] +То есть для всех $k$ верно, что количество итераций не превосходит $k + 2C \frac{|V|^2}{k^2}$. +Возьмём $k = \sqrt[3]{C |V|^2}$, получаем искомую оценку. + +\textbf{Пример.} Дан граф $G = (V, E)$, мы хотим найти в нём подграф $G' = (V', E')$, в котором отношение $\frac{|E'|}{|V'|}$ максимально (подграф максимальной плотности). + +Применим бинарный поиск по ответу. Будем искать ответ на вопрос: существует ли подграф с $|E'| \ge M |V'|$. + +Есть похожая задача: даны $n$ пар чисел $(a_i, b_i)$, выбрать $k$ из них так, чтобы максимизировать $\frac{\sum a}{\sum b}$. +Можно сделать бинарный поиск по ответу, тогда +\[ + \frac{\sum a}{\sum b} \ge M \iff \sum a \ge \sum kb \iff \sum (a - kb) \ge 0. +\] + +Сделаем минимальный разрез в этом графе так, чтобы в первой половине лежали вершины из $V'$, во второй --- из $V \setminus V'$. +Сделаем всем рёбрам пропускную способность $-1$, а рёбрам в сток --- $M$. +Тогда величина разреза равна $M|V'| - $ (количество рёбер, пересекающих разрез). +Это равно $M|V'| + 2|E'| - \sum \deg(v')$. +Такая величина не очень помогает, поэтому сделаем рёбрам в сток пропускную способность $(-M + \deg(v))$. +С такими пропускными способностями минимальный разрез --- минимум величины $(-M|V'| + 2|E'|)$. +В очередной раз не сошлось, так как мы хотим проверить неравенство $M|V'| < 2|E'|$, но это чинится домножением всех пропускных способностей на $-1$. + +Однако этот разрез нельзя свести к поиску потока, так как рёбра имеют потенциально отрицательные пропускные способности и нет рёбер из истока. +Это нетрудно исправить: добавим во все вершины рёбра из стока величиной $+\infty$ и к пропускным способностям рёбер в сток добавим $+\infty$. +Величина разреза не изменилась, но теперь в этой сети можно искать поток. +Также можно вместо бесконечности добавить рёбра из стока в вершину $v$ величины $\deg(v)$. + +\subsubsection{Теоремы Менгера} +\textbf{Теорема.} (О рёберной двойственности) Между вершинами $u$ и $v$ существует $L$ рёберно непересекающихся путей тогда и только тогда, когда после удаления любых $L - 1$ рёбер существует путь из $u$ в $v$. + +\textbf{Доказательство.} $\Rightarrow$: очевидно. +$\Leftarrow$: пусть $u$ --- исток, $v$ --- сток. Назначим всем рёбрам пропускную способность 1 и найдём максимальный поток. +По теореме Форда-Фалкерсона его величина равна минимальному разрезу. +По условию при удалении $L - 1$ ребра в этом разрезе между $u$ и $v$ всё ещё останется путь, то есть величина потока --- хотя бы $L$, то есть $L$ рёберно непересекающихся путей, так как сеть единичная. + +\textbf{Теорема.} (О вершинной двойственности) Между вершинами $u$ и $v$ существует $L$ вершинно непересекающихся путей тогда и только тогда, когда после удаления любых $L - 1$ вершин существует путь из $u$ в $v$. + +\textbf{Доказательство.} Раздвоим вершину, чтобы ограничить поток через неё. + +\subsection{Проталкивание предпотока или технология Голдберга} +\subsubsection{Концепция} +Мы будем разрешать себе в некоторые моменты времени пускать неправильный поток для улучшения асимптотики. + +\textbf{Определение.} Предпоток $f$ в сети $G = (V, E, c, s, t)$ --- это функция $f: E \to \mathbb R$, такая что +\begin{itemize} + \item Для всех рёбер поток через него не превосходит пропускную способность. + \item Для всех вершин $v$, кроме стока и истока, верно, что сумма входящего потока больше суммы исходящего. +\end{itemize} + +\textbf{Определение.} Высота $h: V \to \mathbb Z_{\ge 0}$, такая что +\begin{itemize} + \item $h(s) = |V|$. + \item $h(t) = 0$. + \item У остальных вершин высоты могут меняться, \textbf{не уменьшаясь}, однако для любого ребра $e$ в остаточной сети $E_f$, такого что $c_f(e) > 0$, верно $h(e.finish) \ge h(e.start) - 1$. + То есть рёбра могут спуститься на высоту на один меньше, остаться на той же высоте или подняться. +\end{itemize} + +\textbf{Определение.} Избыток вершины $v$ --- $\excess(v)$ --- разность входящего и исходящего потока. + +Изначально $h(v) = 0$ для всех $v \ne s$ и мы насыщаем все рёбра, инцидентные $s$. +Далее изменяем предпоток и высоты, пока хотя бы у одной вершины $v \not\in \{s, t\}$ есть ненулевой избыток. + +Рассмотрим предпоток, удовлетворяющий условиям на высоту с нулевыми избытками. + +\textbf{Утверждение.} Это поток, очевидно. + +\textbf{Утверждение.} Этот поток максимален. Допустим, что он не максимален, тогда существует простой путь в остаточной сети из $s$ в $t$. +В этом пути не более $|V| - 1$ рёбер, но тогда $h(t) \ge 1$ --- противоречие. + +Введём дополнительное ограничение: изменять предпоток и высоты разрешено исключительно с помощью функций $\push$ и $\relabel$. + +\textbf{Определение.} $\push(e)$ --- функция от ребра, проталкивающая по данному ребру поток. Требования: +\begin{itemize} + \item $\excess(e.start) > 0$. + \item $c_f(e) > 0$. + \item $h(e.finish) = h(e.start) - 1$. +\end{itemize} +Всё, что она делает --- проталкивает поток величины $\min(\excess(e.start), c_f(e))$. + +\textbf{Определение.} Вызов $\push(e)$ называется \textit{насыщающим}, если после него $f(e) = c(e)$. + +\textbf{Определение.} $\relabel(v)$ --- функция от вершины, которая ``поднимает`` вершину. Требования: +\begin{itemize} + \item $\excess(v) > 0$. + \item Из $v$ нельзя сделать $\push$ ни по одному ребру. +\end{itemize} +Выполняет присвоение +\[ + h(v) = 1 + \min_{\substack{e \in E_f \\ c_f(e) > 0 \\ e.start = v}}(h(e.finish)). +\] +Нетрудно заметить, что высота строго увеличится. +Хотя бы одно ребро найдётся, потому что подходит ребро, по которому в вершину входит избыток. + +\textbf{Лемма.} Если $\excess(v) > 0$, то в остаточной сети $G_f$ существует путь из $v$ в $s$ (не наоборот!) по ненасыщенным рёбрам. + +\textbf{Доказательство.} Допустим, что это неправда. Запустим DFS из $v$ по обратным рёбрам. Тогда суммарный избыток у всех посещённых вершин строго больше нуля, так как он может быть отрицательным только у истока. +Но теперь заметим, что рёбра, лежащие полностью в посещённой компоненте, не меняют суммарный избыток. +Следовательно, существует ребро вне данной компоненты, входящее в вершину из этой компоненты, то есть мы посетили не всё, что могли --- противоречие. + +\textbf{Следствие.} Если $\excess(v) > 0$, то $h(v) \le 2|V| - 1$. Пройдём по пути из леммы, в этом пути не более $|V| - 1$ рёбер и мы пришли в $s$ --- вершину высоты $|V|$. + +\textbf{Следствие.} Предыдущее следствие верно для всех вершин. Высота могла увеличиться только после $\relabel$-а, а это значит, что у вершины был избыток, и после увеличения у неё всё ещё остаётся избыток, так что она подходит под следствие. + +\textbf{Следствие.} $\relabel$ вызывается $O(|V|^2)$ раз, так как он увеличивает высоту, и высота у вершины ограничена. +Более того, суммарно они работают за $O(VE)$. + +Рассмотрим одно ребро $e$. Пусть мы сделали насыщающий $\push$ в одну сторону, потом --- в обратную. +Заметим, что для этого нужно было поднять $e.finish$ хотя бы на две единицы, чтобы сделать $\push$ в обратную сторону. +Следовательно, насыщающих $\push$-ей $O(VE)$ суммарно. + +Рассмотрим на $\push$-и между соседними $\relabel$-ами. Заметим, что ненасыщающий $\push$ удаляет избыток вершины, а после насыщающего это ребро останется насыщенным до следующего $\relabel$-а. +Поэтому насыщающих не более $|E|$, а для ненасыщающих введём потенциал $\Phi := \sum_{\substack{v \in V \setminus \{s, t\}\\ \excess(v) > 0}} h(v)$. +Тогда ненасыщающие $\push$-и уменьшают потенциал, а насыщающие увеличивают не более, чем на $2|V| - 2$ ввиду ограничения на высоту. +Что насчёт $\relabel$? Из доказанного выше, все вызовы $\relabel$ суммарно увеличивают потенциал не более, чем на $(|V| - 2)(2|V| - 1)$. + +\textbf{Теорема.} Ненасыщающих $\push$-ей не более $4|V|^2(|V| + |E|)$. Следует из того, что между двумя $\relabel$-ами не более $|E|$ насыщающих $\push$-ей, поэтому потенциал не превосходит $4|V|^2(|V| + |E|)$, и ненасыщающий $\push$ его уменьшает. + +Таким образом, если это аккуратно написать, можно получить алгоритм за $O(V^2E)$, так как всё, что нужно поддерживать, --- из каких вершин можно сделать $\relabel$. + +\subsubsection{Оптимизация до $O(V^3)$} +Аналогично алгоритму Диница будем поддерживать в вершине указатель на ребро, по которому мы можем пройти. +Теперь мы не будем пользоваться операциями $\push$ и $\relabel$, а будем только использовать операцию $\discharge(v)$. +Реализация такая: +\begin{verbatim} + while excess[v] > 0 { + if (it[v] != network[v].end()) { + if (mayPush(*it[v])) { + push(*it[v]); + } else { + it[v]++; + } + } else { + relabel(v); + it[v] = network[v].begin(); + } + } +\end{verbatim} +Для доказательства корректности хочется сказать, что после того, как мы пропустили ребро, оно нас больше не интересует (как в Динице). +Действительно, после насыщения оно не могло отнасытититься, так что это не проблема. +Если оно не подходило по высоте, то высота у конца ребра больше, а это чиниться только $\relabel$-ом из текущей вершины. + +Теперь нам только нужно поддерживать вершины с избытком для того, чтобы вызывать из них $\discharge$. +Но всё равно каждое ребро мы просматриваем $|V|$ раз при $\relabel$-ах концов, и дополнительно суммарно $|V|^2|E|$ из-за ненасыщающих $\push$-ей. +Очевидно, что проблема в ненасыщающих проталкиваниях, именно их и будем оптимизировать. + +\textbf{Алгоритм 1.} (По высоте) Будем выписывать все вершины, сортировать их по убыванию высоты и вызывать $\discharge$ от всех вершин в этом порядке. +Сортировка работает за $O(V)$, так как можно подсчётом. +Нас интересует только количество ненасыщающих проталкиваний и количество фаз. +Начнём с того, что в каждой фазе мы делаем не более $|V|$ ненасыщающих проталкиваний, так как они обнуляют избыток. +Докажем, что фаз $O(V^2)$. +Заметим, что после прохода $\discharge$-ами у нас либо произошёл $\relabel$ в какой-то вершине (таких фаз $O(V^2)$), либо у всех вершин закончился избыток (так как в порядке убывания высот), и алгоритм завершается. +Следовательно, алгоритм будет работать за $O(V^3)$, ибо остальные части работают за $O(VE)$. + +\textbf{Алгоритм 2.} (Поднять вверх) Будем брать вершины в случайном порядке и идти слева направо, вызывая $\discharge$. +Если в какой-то вершине произошёл $\relabel$, перенесём её в начало и пойдём заново. +Это официальный алгоритм и утверждается, что он работает. + +\textbf{Лемма.} Пусть в процессе прохода есть ребро $u \to v$, по которому можно сделать $\push$ (назовём его хорошим). +Тогда позиция $u$ меньше позиции $v$ в списке вершин. + +\textbf{Доказательство.} В начале алгоритма хороших рёбер вообще нет. А потом если оно появилось, то оно выходит из вершины, которую мы отправили в начало. +Если же мы конец хорошего ребра отправили в начало, то оно перестало быть хорошим. + +Следовательно, мы можем просто вызывать $\discharge$, аналогично первому алгоритму: оценка количества фаз та же самая, так как поток идёт слева направо. + +\textbf{Алгоритм 3.} (С очередью) Заведём очередь, будем проходить по ней и вызывать $\discharge$ от всех вершин. +Откуда будут браться вершины в этой очереди? +Во-первых, положим в начале туда все вершины. +Во-вторых, будем класть в неё конец тех рёбер, которые мы при $\push$-е не насытили. + +Для доказательства введём потенциал $\Phi = \max_{\substack{v \in V \setminus \{s, t\} \\ \excess(v) > 0}}(h(v))$. +Заметим, что при $\relabel$ он увеличивается не более, чем на единицу, а при $\push$-e он может уменьшится, а увеличиться не может, так как проталкиваем в вершины меньшей высоты. +Рассмотрим фазы, аналогично поиску в ширину. Если в фазе произошёл $\relabel$, то таких фаз мало, а если не произошёл, то потенциал должен был уменьшиться, поэтому между двумя $\relabel$-ами их $O(V)$. + +\textbf{Алгоритм 4.} Максимально наивно: просто пока есть вершины с избытком, проходим по всем вершинам и вызываем $\discharge$. +Доказывается тем же потенциалом, что и третий. + +\textbf{Алгоритм 5.} (Malhotra-Kumar-Maheshwari) Рассмотрим слоистую сеть и вспомним потенциалы Карзанова: $p(v) = \min(p_{in}(v), p_{out}(v))$. +Возьмём вершину с минимальным потенциалом и протолкнём поток в сток по прямым и в исток по обратным рёбрам. +После этого удалим эту вершину и пересчитаем потенциалы. +Протолкнуть мы сможем по определению потенциала, так повторяем, пока потенциал ненулевой. + +\subsection{Максимальный поток минимальной стоимости} +\subsubsection{Циркуляция} +\textbf{Определение.} Циркуляция в сети $G$ --- поток величины 0. + +\textbf{Утверждение.} Любую циркуляцию можно декомпозировать на не более чем $|E|$ циклов. + +\textbf{Определение.} Циркуляция минимальна, если её стоимость минимально возможная. + +\textbf{Определение.} Циркуляция локально оптимальна, если в остаточной сети нет циклов отрицательной стоимости. + +\textbf{Теорема.} Циркуляция минимальная тогда и только тогда, когда она локально оптимальна. + +\textbf{Доказательство.} $\Rightarrow$: очевидно. +$\Leftarrow$. Пусть $f$ --- оптимальная циркуляция, а $f'$ --- минимальная, причём $\cost(f') < \cost(f)$. +Тогда в остаточной сети $G_f$ существует циркуляция $f' - f$, и $\cost(f' - f) = \cost(f') - \cost(f) < 0$. +Корректность: если пустили отрицательное значение по ребру, то по обратному пустили положительное. +Тогда в декомпозиции $f' - f$ на циклы найдётся хотя бы один цикл отрицательной стоимости --- противоречие, так как в $f$ их нет. + +\textbf{Определение.} Потенциал --- функция $p: V \to \mathbb R$, такая что приведённая стоимость ребра $e$ --- это $\cost_p(e) := \cost(e) + p(e.start) - p(e.finish)$. + +\textbf{Утверждение.} Пусть $\rho$ --- путь от $u$ до $v$. Тогда $\cost_p(\rho) = \cost(\rho) + p(u) - p(v)$. + +\textbf{Утверждение.} Если $\rho$ --- цикл, то $\cost_p(\rho) = \cost(\rho)$. + +\textbf{Определение.} Потенциал $p$ неотрицательный, если $\forall e \in E~(e.cap > 0 \rightarrow \cost_p(e) \ge 0)$. + +\textbf{Теорема.} Неотрицательный потенциал существует тогда и только тогда, когда в сети нет циклов отрицательного веса. + +\textbf{Метод Клейна.} +Переходим к алгоритму поиска минимальной циркуляции. Пусть у графа все пропускные способности равны единице. +Будем добавлять рёбра по-одному, обновляя потенциал. +Инвариант: до добавления ребра циклов отрицательного веса не было. +А именно, после добавления ребра $(u, v)$ будем определять $p(w) = \dist_{G_f}(v, w)$ без учёта нового ребра для достижимых из $v$ вершин $w$, а для остальных --- просто прибавим константу, чтобы цены стали неотрицательными. +Теперь, если цикл отрицательного веса не появился, мы продолжаем добавлять рёбра. +Иначе пустим по этому циклу единичный поток. + +Утверждение: после этого все приведённые веса рёбер неотрицательны. +Рассмотрим, как они изменились. +Если ребро не лежало на отрицательном цикле, то приведённый вес не изменился. +А если лежало, то с новым потенциалом приведённые веса всех рёбер, кроме $(u, v)$, равны нулю, поэтому после проталкивания потока они развернутся, ноль останется нулём, а ребро $(u, v)$ станет положительным. + +Асимптотика: каждое ребро мы добавляем один раз и ищем кратчайший путь алгоритмом Дейкстры, поэтому $O(E^2 \log(V))$. +Если рёбра не единичные, то всё умножается на $C$: из каждого ребра пропускной способности $c$ мы делаем $c$ единичных рёбер. + +\subsubsection{Максимальный поток минимальной стоимости} +Эта задача очень легко сводится к циркуляции: добавим из стока в исток ребро пропускной способностью $+\infty$ с ценой $-\infty$. +Теперь запускаем на этой сети алгоритм поиска минимальной циркуляции. +Заметим, что мы получили в точности тот самый жадный алгоритм. +В частности, фиктивное ребро можно добавить в конце, тогда проталкивать потоки не придётся, и получится асимптотика $O(VE + |f| E \log(V))$. + +\subsubsection{Венгерский алгоритм} +Рассмотрим полный двудольный граф, у которого все рёбра имеют какую-то стоимость. +Мы хотим найти совершенное паросочетание минимальной стоимости. +Пусть $L$ и $R$ --- доли графа, $u: L \to \mathbb R$, $v: R \to \mathbb R$ --- потенциалы на долях, $a[i][j]$ --- стоимость ребра из $i$ в $j$. +Будем поддерживать инвариант $a[i][j] - u[i] - v[j] \ge 0$. + +\textbf{Определение.} Ребро $(i, j)$ \textit{жёсткое}, если $a[i][j] - u[i] - v[j] = 0$. + +Наша цель: подобрать потенциалы так, чтобы выполнялся инвариант и существовало совершенное паросочетание на жёстких рёбрах. + +\textbf{Утверждение.} Такое паросочетание --- искомое. + +Будем делать всё в точности, как в алгоритме Куна, но теперь в DFS-е мы будем ходить только по жёстким рёбрам. +По утверждению выше, полученное в итоге паросочетание из жёстких рёбер искомое. + +Теперь должны возникать логичные вопросы: почему найдётся удлинняющая цепь, откуда брать потенциалы и прочее. +Если ребро не нашлось, то будем подкручивать потенциалы, чтобы нашлось. +Пусть $L^+, R^+$ --- посещённые вершины, $L^-, R^-$ --- непосещённые. +Пусть $\Delta$ --- минимум стоимости ребра $(i, j)$ с учётом потенциала, где $i \in L^+$ и $j \in R^-$. +Сделаем так, чтобы это ребро стало жёстким. А именно, прибавим $\Delta$ ко всем $u[i]$, где $i \in L^+$, и вычтем из всех $v[j]$, где $j \in R^+$. +Теперь можно посмотреть на рёбра из всех пар множеств и проверить, что жёсткие рёбра остались жёсткими, инвариант сохранился и рёбра веса $\Delta$ стали жёсткими. +Так как мы добавили хотя бы одну вершину в $R^+$, такие добавления будут выполнены $O(V)$ раз, поэтому итоговая асимптотика --- ($V$ вершин, в каждой из них запускаем $V$ DFS из алгоритма Куна) $O(V^4)$. + +В данной вариации есть одно место, которое мы делаем за $O(V^2)$, и которое можно оптимизировать, --- нахождение $\Delta$ и последующий перезапуск DFS-а. +Положим $min\Delta[j] = \min_{i \in L^+}(a[i][j] - u[i] - v[j])$ для $j \in R^-$. +Данную величину нетрудно поддерживать в DFS-е и при обновлении потенциалов. +А DFS оптимизировать довольно просто, так как между запусками из одной вершины можно не очищать список посещённых вершин, а просто запускаться из той вершины, которая стала достижима после обновления потенциалов. +Итоговое время работы --- $O(V^3)$. + +\subsection{Глобальный разрез} +Пусть нам дан граф с неотрицательными весами. +Мы хотим найти два множества $S$ и $T$, такие что $S \sqcup T = V$, $S, T \ne \varnothing$ и $f(S, T)$ минимально. +Можно просто зафиксировать первую вершину, перебрать вершину в другой доли и найти максимальный поток, получая $O(V^4)$. + +\subsubsection{Алгоритм Штор-Вагнера} +Не Штора-Вагнера. + +Пусть у нас есть изначально пустое множество $A$. +Будем добавлять вершины в специальном порядке $v_1, \dots, v_n$ так, чтобы минимальным разрезом между $v_{n-1}$ и $v_n$ было множество $\{v_1, \dots, v_{n-1}\}$. +После этого у нас есть два варианта: либо это искомый разрез, либо объединяем эти две вершины и запускаем заново. +То есть либо мы нашли минимальный разрез, и он между вершинами $v_{n-1}$ и $v_n$, либо он не минимален, и тогда во всех остальных разрезах они будут вместе. + +В каком же порядке брать вершины? Пусть $v_0$ --- произвольная вершина, а $v_i = \argmax_{u \in V \setminus A_i}(w(u, A_i))$, где $A_i = \{v_1, \dots, v_{i-1}\}$ и $w(u, S) = \sum_{v \in S} w(u, v)$ --- сумма весов рёбер. +Об этом можно думать, как о самой ``тесно связанной`` вершиной со множеством $A_i$. + +\textbf{Доказательство корректности.} Пусть $s = v_{n-1}$, $t = v_n$, $C$ --- какой-то разрез между $s$ и $t$. Докажем, что наш разрез не хуже $C$. + +\textbf{Определение.} Вершина $v_i$ \textit{критическая}, если $v_{i-1}$ и $v_i$ лежат в разных долях $C$. +Как об этом думать: сначала идёт несколько вершин справа, потом слева и так далее, критические вершины --- это первые вершины в этих отрезках. + +Положим $C_i$ --- множество рёбер $(x, y) \in C$, таких что $x, y \in A_i \cup \{v_i\}$. Иными словами, подмножество $C$, индуцированное $A_i \cup \{v_i\}$. + +\textbf{Утверждение.} Если вершина $v_i$ критическая, то $w(C_i) \ge w(v_i, A_i)$. + +\textbf{Доказательство.} Индукцией по количеству критических вершин в порядке их появления. +Для первой очевидно, так как достигается равенство: действительно, все рёбра из неё ведут в другую долю и все рёбра из другой доли ведут в неё, так как она первая. +Переход: пусть верно для критической вершины $v_p$, рассмотрим следующую критическую вершину $v_q$. +Не умаляя общности, пусть $v_p$ находится в правой доли, а $v_q$ --- в левой. +Тогда распишем, из каких частей состоит $w(C_q)$, чтобы подогнать под предположение индукции: +\[ + w(C_q) = w(C_p) + w(v_q, A_q \cap RIGHT) + w(A_p \cap LEFT, \{v_{p+1}, \dots, v_{q-1}\}) \ge +\] +(просто выкинем по неотрицательности весов рёбер) +\[ + \ge w(C_p) + w(v_q, A_q \cap RIGHT) \ge +\] +(по предположению индукции) +\[ + \ge w(v_p, A_p) + w(v_q, A_q \cap RIGHT) \ge +\] +(по построению алгоритма: так как $v_p$ было взято на $p$-ом шаге и мы брали максимум по $w(v_p, A_p)$, получаем $w(v_p, A_p) \ge w(v_q, A_p)$) +\[ + \ge w(v_q, A_p) + w(v_q, A_q \cap RIGHT) \ge w(v_q, A_q). +\] +Таким образом, $w(C) = w(C_n) \ge w(v_n, A_n) = w(t, V \setminus \{t\})$, так как $t$ критическая. + +Последовательность $\{v_n\}$ можно построить за $O(V^2)$, так как каждое ребро добавляется в $\argmax$ ровно один раз, поэтому суммарно всё работает за $O(V^3)$. + +\subsection{Дерево Гомори-Ху} +Пусть нам дан неориентированный граф с рёбрами неотрицательного веса и запросы вида $(u, v)$. +В ответ мы хотим выводить минимальный разрез между вершинами $u$ и $v$. +Утверждается, что можно построить дерево на тех же вершинах, такое что минимальный разрез в исходном графе равен минимальному разрезу в дереве. + +Пусть $f_{u,v}$ --- стоимость минимального разреза между $u$ и $v$. + +\textbf{Лемма 1.} Для любых $u, v, w \in V$ верно $f_{u,v} \ge \min(f_{u,w}, f_{w, v})$. + +\textbf{Доказательство.} Рассмотрим минимальный разрез $(X, Y)$ между $u \in X$ и $v \in Y$. +Если $w \in X$, то вот нашли разрез между $w$ и $v$ стоимостью $f_{u,v}$, то есть $f_{w,v} \le f_{u,v}$. +Аналогично в другом случае. + +\textbf{Следствие.} Если рассмотреть последовательность вершин $u = w_1, w_2, \dots, w_k = v$, то будет верно $f_{u,v} \ge \min(f_{u,w_2}, f_{w_1,w_3}, \dots, f_{w_{k-1},v})$. +Действительно, применим лемму несколько раз: +\[ + f_{u,v} \ge \min(f_{u, w_2}, f_{w_2, v}) \ge \min(f_{u, w_2}, \min(f_{w_2, w_3}, f_{w_3, v})) \ge \dots +\] + +Положим $F := (f_{u,v})$ --- матрица $n \times n$, $G_r$ --- граф с такой матрицей смежности. + +\textbf{Утверждение.} Максимальный остов $G_r$ --- искомое дерево. + +\textbf{Доказательство.} Рассмотрим две вершины $u$ и $v$ и путь между ними $u = w_1, \dots, w_k = v$. +Тогда $f_{u,v} \ge \min(f_{u,w_1}, \dots, f_{w_{k-1},v})$ по лемме 1. +Обратное неравенство следует из структуры максимального остовного дерева: допустим, что строго больше, чем все рёбра на пути, тогда ребро $(u, v)$ должно было оказаться в остове. + +Таким алгоритмом мы можем построить дерево за $O(V^2 \cdot maxFlow)$. +Но из построенного выше остова мы видим, что $f_{u,v}$ может принимать лишь $n - 1$ различное значение --- веса рёбер в максимальном остове. +Поэтому возникает желание как-нибудь понять, между какими парами вершин возникают различные минимальные разрезы, и только для них искать максимальный поток, чтобы получить время работы $O(V \cdot maxFlow)$. + +Зафиксируем две вершины $u$ и $v$, пусть $A_u$ --- множество минимального разреза, в котором лежит $u$, $A_v$ --- в котором лежит $v$. + +\textbf{Утверждение.} Рассмотрим две произвольные вершины $x, y \in V$. +Тогда между ними существует минимальный разрез, такой что $A_v$ целиком лежит в одной из долей. + +\textbf{Доказательство.} Рассмотрим произвольный разрез $(X \ni x, Y \ni y)$. +Положим $X_u = X \cap A_u$, аналогично $X_v, Y_u, Y_v$. +Не умаляя общности, $v \in X_v$. +Перенесём вершины из $Y_v$ в $X_v$ --- утверждение состоит в том, что разрез от этого хуже не станет. +Изначальная стоимость разреза между $x$ и $y$ --- это $w(X_u, Y_u) + w(X_u, Y_v) + w(X_v, Y_u) + w(X_v, Y_v)$. +Новая стоимость --- $w(X_u, Y_u) + w(X_v, Y_u) + w(Y_u, Y_v)$. +Мы хотим доказать, что $w(X_u, Y_u) + w(X_u, Y_v) + w(X_v, Y_u) + w(X_v, Y_v) \ge w(X_u, Y_u) + w(X_v, Y_u) + w(Y_u, Y_v)$. +Или же, сокращая лишнее, что $w(X_u, Y_v) + w(X_v, Y_v) \ge w(Y_u, Y_v)$. + +Чем вообще можно пользоваться при доказательстве? +Всё, что мы знаем, --- это то, что разрез $u-v$ минимален, то есть стоимость разреза $(X_v, Y_v \cup Y_u \cup X_u)$ не меньше. +На языке математики: $w(X_v, Y_v) + w(X_v, Y_u) + w(X_v, X_u) \ge w(X_u, X_v) + w(X_u, Y_v) + w(Y_u, X_v) + w(Y_u, Y_v)$. +Сокращая, получаем $w(X_v, Y_v) \ge w(Y_u, Y_v) + w(Y_u, X_v)$. +В силу неотрицательности рёбер $w(X_v, Y_v) \ge w(Y_u, Y_v)$ --- остаётся прибавить слева $w(X_u, Y_v)$, и мы получили искомое неравенство. + +Данное утверждение даёт нам возможность решать задачу таким образом: изначально у нас есть одна большая мета-вершина $A$, соответствующая всем вершинам исходного графа, далее мы будем разбивать её на мета-вершины поменьше, пока не дойдём до исходных вершин графа, следующим алгоритмом: +\begin{itemize} + \item Возьмём две вершины $u$, $v$ и найдём между ними максимальный поток. + \item Выделим минимальный разрез $(X \ni u, Y \ni v)$ и разобьём $A$ на мета-вершины $X$ и $Y$, проведя между ними ребро стоимостью $f_{u,v}$. + \item Как и в $A$, найдём в $X$ минимальный разрез $X_1 \sqcup X_2 = X$ и проведём между мета-вершинами $X_1$, $X_2$ ребро. + Если $Y \in X_1$ (как мета-вершина), то перепроводим ребро $(Y, X)$ в $X_1$, иначе --- наоборот. + И так далее, для $Y$ аналогично. +\end{itemize} + +По итогу получается какое-то дерево. Наша цель --- доказать, что оно является искомым (с построенным ранее деревом оно не обязано совпадать, та часть была просто для доказательства существования). + +\textbf{Лемма 2.} Пусть $A$ и $B$ --- мета-вершины на каком-то этапе построения дерева, соединённые ребром стоимостью $c$. +Тогда существуют $u \in A$ и $v \in B$, такие что $f_{u,v} = c$. +Главная проблема не в том, что при появлении ребра у него непонятно какая стоимость (это как раз понятно), а в том, что если $c = f_{u, v}$ и мы разрезали $A$, $u$ могла перейти в другую мета-вершину, и свойство перестало выполняться. + +\textbf{Доказательство.} По индукции. После первого разреза, очевидно, найдутся. +Переход: пусть мы разрезаем мета-вершину $A$, соединённую с $B$ ребром стоимостью $c$. +По предположению индукции существуют вершины $u \in A$, $v \in B$, такие что $c = f_{u,v}$. +Теперь пусть мы выбрали в $A$ вершины $a_1, a_2$ и сделали по ним минимальный разрез стоимостью $c'$ на $A_1 \sqcup A_2 = A$, не умаляя общности, $B$ соединено с $A_1$. +Тогда у нас есть 2 случая: $u \in A_1$ и $u \in A_2$. + +\begin{figure}[ht] + \centering + \incfig{gomory}{0.5\linewidth} +\end{figure} + +Во-первых, в обоих случаях $c' = f_{a_1, a_2}$ по построению. +Теперь разбираем случаи для $c$: если $u \in A_1$, то пара $(u, v)$ всё ещё прекрасно подходит. +При $u \in A_2$: по лемме 1 $f_{a_1, v} \ge \min(f_{a_1, a_2}, f_{a_2,u}, f_{u,v})$. +Уберём лишние слагаемые справа. +Заметим, что $f_{a_2, u}$ тут совсем не при чём: мы можем делать стоимости рёбер в $A_2$ сколь угодно большими, но $f_{a_1, v}$ от этого не изменится. +Поэтому $f_{a_1, v} \ge \min(c, c')$. +Но $c'$ --- это, в частности, разрез между $u$ и $v$, поэтому $c' \ge c$. +Получаем $f_{a_1, v} \ge f_{u,v}$. +Противоположное неравенство аналогично: $c$ --- это разрез между $a_1$ и $v$, поэтому $f_{u,v} \le f_{a_1, v}$. + +Таким образом, мы нашли две подходящие вершины $a_1 \in A_1$ и $v \in B$, такие что $c = f_{a_1, v}$. + +\textbf{Теорема.} Для всех пар вершин $u$, $v$, на пути между которыми в построенном дереве идут рёбра стоимостями $c_1, \dots, c_k$, выполнено $f_{u,v} = \min(c_1, \dots, c_k)$. + +\textbf{Доказательство.} Докажем два неравенства. + +$\le$: каждое ребро на пути --- это какой-то разрез между $u$ и $v$, так что $f_{u,v}$ не больше каждого из них. + +$\ge$. Пусть $u = w_1, w_2, \dots, w_{k+1} = v$ --- путь между $u$ и $v$ в дереве. +По лемме 2 получаем, что $c_1 = f_{w_1, w_2}$, $c_2 = f_{w_2, w_3}$, $\dots$, $c_k = f_{w_k, w_{k+1}}$. +Остаётся применить лемму 1. + +\textbf{Следствие.} Построенное дерево --- дерево Гомори-Ху. diff --git a/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/geometry.tex b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/geometry.tex new file mode 100644 index 00000000..01943066 --- /dev/null +++ b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/geometry.tex @@ -0,0 +1,231 @@ +\section{Геометрия} +Скалярное произведение определяем через косинус, косинус через единичную окружность. +Свойства: симметрия, однородность, аддитивность (заметим, что скалярное произведение --- это длина проекции). + +\textbf{Утверждение.} Если ко свойствам выше добавить, что $((1, 0), (1, 0)) = ((0, 1), (0, 1)) = 1$ и $((1, 0), (0, 1)) = 0$, то из этих свойств будет следовать определение из алгема, и функция будет определена однозначно. +Для доказательства просто разложим два вектора по базису. + +Дополнительные свойства: скалярное произведение равно нулю только для перпендикулярных векторов, по знаку можно определить остроту угла. + +Векторное произведение вводится через синус, свойства обычные. +Линейность из соображения, что это проекция на перпендикуляр к вектору. + +\textbf{Утверждение.} Если зафиксировать значения на базисных векторах, то векторное произведение тоже определяется однозначно. + +Свойства: равно нулю только для параллельных, позволяет понимать, по часовой или против часовой стрелки векторы идут. + +\subsection{Многоугольники} +\subsubsection{Площадь} +\textbf{Определение.} Ориентированная площадь --- площадь, если многоугольник против часовой стрелки, и отрицательная площадь иначе. +Выпуклый многоугольник можно разбить на треугольники и найти сумму их площадей. +Положим $f(A) = \frac{1}{2} \sum_{i=0}^{n-1} [p_i - A, p_{i+1} - A]$ --- формула площади для выпуклых, где $A$ --- вершина многоугольника. + +\textbf{Утверждение.} Для всех многоугольников $f(A)$ --- константа. +Раскроем по линейности и всё сократим. + +Тогда для выпуклых многоугольников можно считать площадь через $f(A)$ для любой точки. +Но это работает и для произвольных многоугольников. +Аналогично проверке принадлежности проведём диагональ и найдём ориентированную площадь двух полученных многоугольников. +Но можно и по-другому. +Возьмём точку вне многоугольника и посмотрим на ориентированные площади, которые мы суммируем. +Тогда область снаружи сократится, а внутри --- останется. +Чтобы было чуть более строго, возьмём точку вне многоугольника и рассмотрим углы, которые смотрят на отрезки, такие что вершин нет внутри углов. +Тогда у отрезков, пересекающих этот угол, чередуются направления, так что вновь учтётся только внутренность. + +Альтернативно, метод трапеций тоже существует. + +\subsubsection{Проверка принадлежности точки} +Проверим, лежит ли точка $(x, y)$ в произвольном многоугольнике. +Проведём произвольный луч из точки и посчитаем число пересечений. +Будет больно, если он пересечёт вершины многоугольника, это можно избежать тремя способами: провести новый случайный луч, взять направление, у которого угол с осью X меньше углов для всех векторов в вершины многоугольника, провести луч в $(+\infty, y + 1)$. + +А можно просто решить эту проблему. Будем учитывать только те отрезки $((x_1, y_1), (x_2, y_2))$, для которых верно $\min(y_1, y_2) \le y < \max(y_1, y_2)$. +Доказывается разбором случаев, или просто по факту мы поднимаем луч вверх на $\varepsilon$. + +\subsubsection{Площадь пересечения многоугольника и круга} +Площадь многоугольника мы можем посчитать через треугольники. +Теперь пересечём каждый из треугольников с кругом и получим искомую площадь. + +\subsection{Выпуклые многоугольники} +\textbf{Определение.} Множество точек $A$ называется \textit{выпуклым}, если все отрезки $(p_1, p_2)$ с $p_1, p_2, \in A$ лежат в $A$. + +\textbf{Свойство 1.} Выпуклые множества замкнуты относительно любого пересечения. + +\textbf{Теорема 1.} Это определение эквивалентно тому, что все рёбра при ориентации против часовой стрелки поворачивают налево. + +\textbf{Доказательство.} $\Rightarrow$: от противного, тогда легко найти отрезок. + +$\Leftarrow$: от противного, пусть какой-то отрезок не лежит полностью. +Переходя к подотрезку, можно считать, что вершины лежат на рёбрах, а внутренность --- вне многоугольника. +Будем двигать отрезок вверх (считая, что он горизонтален). +Тогда мы либо придём в вершину, и тогда нашли поворот направо, либо многоугольник закончится с одной из сторон, тогда пойдём вниз. +Если и внизу закончился, то многоугольник несвязен. + +\textbf{Теорема 2.} Сумма углов многоугольника равна $\pi(n - 2)$. + +\textbf{Доказательство.} Пройдём многоугольник против часовой стрелки. +Тогда в каждом повороте мы получим внутренний угол $\alpha$ и внешний угол $\beta$. +Известно, что $\alpha + \beta = \pi$, поэтому запишем сумму и заметим, что сумма $\beta$ равна $2\pi$. + +\subsubsection{Проверка принадлежности точки} +По классике триангуляцией и бинарным поиском. + +\subsubsection{Касательная} +\textbf{Определение.} Касательная ко множеству --- прямая, которая проходит хотя бы через одну точку множества и относительно которой множество лежит по одну сторону. +Можно ещё о ней думать, как о прямой, которая крутится вокруг многоугольника, касаясь стороны или вершины. + +Присвоим рёбрам \textit{тип}. Разберём случай, когда первая вершина находится по другую сторону от точки, из которой строим касательную. +Рёбра от начала до первой точки касания --- первого типа, от первой до второй --- второго типа, от второй до конца --- третьего типа. +Теперь тип ребра можно понять векторным произведением, так что применим бинарный поиск. + +\subsubsection{Общая касательная к двум многоугольникам} +Вращающимся сканлайном за $O(n \log(n))$, но это какая-то жесть. +Можно ещё параллельно крутить две касательные и отлавливать моменты, когда они совпадают (обгоняют друг друга), получится $O(n)$. + +\subsection{Окружности} +\subsubsection{Пересечение окружностей} +Можно найти радиальную ось, можно сделать инверсию, но можно по-другому. +Сначала проверим, что точки пересечения вообще есть. +Пусть $C_0$, $C_1$ --- центры и $r_0$, $r_1$ --- радиусы окружностей. +Тогда нужно найти треугольник со сторонами $r_0$, $r_1$ и $|C_1 - C_0|$ с вершинами в центрах окружностей и точке пересечения. +Теперь возьмём угол между отрезком, соединяющим центры окружностей, и радиусом и найдём его по теореме косинусов. + +\subsubsection{Касательная к окружности} +Найдём расстояние от точки до точки касания теоремой Пифагора или через степень точки. +Угол между касательной и отрезком, соединяющим точку и центр окружности, найти несложно, поэтому остаётся повернуть прямую. + +\subsubsection{Общие касательные к двум окружностям} +Их четыре штуки: две внешние и две внутренние. +Внешние находятся через построение прямоугольной трапеции и нахождение угла между касательной и отрезком, соединяющим центры. +Внутренние --- увеличим радиус одной из окружностей до $r_1 + r_2$. + +\subsection{Сканирующая прямая} +\subsubsection{Проверка принадлежности нескольких точек произвольному многоугольнику} +Классика, + +\subsubsection{Объединение прямоугольников} +Классика, + +\subsubsection{Проверка, пересекаются ли два отрезка} +Будем при добавлении отрезка во множество проверять, пересекается ли он с соседями. +Аналогично при удалении --- с бывшими соседями. + +\subsection{Выпуклая оболочка} +\textbf{Определение.} Выпуклая оболочка множества --- пересечение всех выпуклых множеств, содержащих данное. + +\subsubsection{Алгоритм Джарвиса (метод заворачивания подарка)} +Возьмём самую левую точку $p_0$ (она точно лежит в выпуклой оболочке). +Теперь наивно найдём точку $p_1$, такую что все точки из множества лежат слева от направленной прямой $p_0 p_1$. +Продолжаем, пока не надоест. +Работает за $O(nh)$, где $h$ --- размер выпуклой оболочки. + +\subsubsection{Алгоритм Грэхема} +Классика (отсортируем по полярному углу и добавим). +Доказывается индукцией по количеству шагов в алгоритме. + +\subsubsection{Алгоритм Грэхема-Эндрю} +Отсортируем по первой координате и соберём нижнюю и верхнюю огибающую. + +\subsubsection{Алгоритм Киркпатрика} +Можно построить выпуклую оболочку через разделяй-и-властвуй: разделим на две части, построим и объединим через вращающуюся сканирующую прямую. + +\subsubsection{Алгоритм Чена} +Пусть мы уже знаем, чему равно $h$, размер ответа. +Разделим точки на множества размера $h$ и найдём в них выпуклые оболочки алгоритмом Джарвиса за $O(n \log(h))$ суммарно. +Теперь через заворачивание подарка найдём объединение этих выпуклых оболочек. +А именно, пусть $p_0$ --- самая левая точка. +Найдём касательные ко всем $\frac{n}{h}$ множествам за $O(\log(h))$ к каждому, то есть за $O \left( \frac{n}{h} \log(h) \right)$ суммарно. +Возьмём $p_1$ среди точек касания, как в алгоритме Джарвиса. +Повторим $h$ раз --- по итогу $O(n \log(h))$. + +Но откуда достать $h$? +На самом деле, если мы взяли слишком маленький $h$, то мы просто не достроим оболочку до конца, и тогда можно будет перезапуститься с бóльшим $h$. +Для хорошей асимптотики берём $h = 1, 2, 2^2, 2^{2^2}, 2^{2^3}, 2^{2^4}, \dots$. + +То есть для случайного набора точек это работает за $O(n \log(\log(n)))$. + +\subsection{Convex Hull Trick} +\subsubsection{На скалярных произведениях} +Пусть мы хотим посчитать динамику вида +\[ + dp_i = \min_{1 \le j < i} (a_i \cdot dp_j + b_i \cdot c_j + d_i). +\] +Заметим, что по модулю константы $d_i$ это является скалярным произведением векторов $((a_i, b_i), (dp_j, c_j))$. +Мы хотим иметь чёрный ящик, который поддерживает две операции: добавить вектор $(x, y)$ и по данному вектору $(x, y)$ найти вектор в ящике, дающий минимальное скалярное произведение с ним. + +Пусть мы делаем запрос для вектора $(a, b)$. +Вспомним, что скалярное произведение --- это длина вектора $(a, b)$, умноженная на ориентированную длину проекции вектора $(x, y)$ в чёрном ящике на $(a, b)$. +Таким образом, чтобы найти минимум, нужно найти вектор, ориентированная длина проекции которого на $(a, b)$ минимальна. +Теперь нарисуем картинку и увидим, что все такие векторы лежат на выпуклой оболочке точек $(x, y)$ в чёрном ящике: пройдём вдоль прямой, содержащей $(a, b)$, упрёмся в выпуклую оболочку и т.д. + +Как же поддерживать выпуклую оболочку и делать к ней запросы? +Будем решать задачу для $(a, b)$ при $b > 0$. +Тогда можно поддерживать только нижнюю огибающую, для векторов с $b < 0$ аналогично. +Нетрудно заметить, что подходящую точку можно найти просто бинарным поиском, смотря на знак скалярного произведения. + +С запросами разобрались, теперь про добавление точек. +Если точки добавляются в порядке возрастания первой координаты, то можно просто строить выпуклую оболочку алгоритмом Эндрю. +Теперь общий случай, пусть мы добавляем точку $(x_0, y_0)$. +Найдём ближайшую слева и справа точки $A$ и $B$. +Если $(x_0, y_0)$ находится выше $AB$, то добавлять не нужно. +В противном случае придётся её вставить и поудалять соседние точки, если они нарушают выпуклость. + +Но для этого нам нужна структура, позволяющая удалять из середины --- возьмём какое-нибудь дерево поиска и вместо бинарного поиска будем делать спуск, поддерживая следующую и предыдущую вершину в каждой. + +\subsubsection{На прямых} +Вернёмся к классике: в чёрный ящик мы добавляем прямые $y = kx + b$ и хотим найти минимум среди прямых для данного $x$. + +Если прямые добавляются в порядке убывания $k$, то вновь алгоритм Эндрю. +Если это не так, то будем вновь строить касательные по направлению прямых и удалять все точки над новой прямой. + +\subsubsection{Дерево Ли-Чао} +Пусть нам заранее известны координаты $x$, в которых мы вычисляем значение прямых (в целом, можно и неявно, но тогда будет $\log(C)$ вместо $\log(n)$). +Тогда можно хранить для каждой точки прямые, в которых минимум потенциально достигается. +Этот инвариант мы просто будем поддерживать в ходе работы алгоритма, то есть нужно лишь доказать, что он сохраняется при добавлении новой прямой. + +\subsection{Тернарный поиск} +\textbf{Определение.} Функция $f: [a, b] \to \mathbb R$ называется \textit{унимодальной}, если существует $x_0 \in [a, b]$, такой что $f$ строго убывает на $[a, x_0]$ и строго возрастает на $[x_0, b]$. + +Тогда для поиска этой самой точки можно использовать тернарный поиск. +Чтобы найти минимум с точностью до $\varepsilon$, нам понадобится $O \left( \log_{1.5} \left( \frac{b - a}{\varepsilon} \right) \right)$ операций. +Для оптимизации можно использовать более оптимальные функции выбора новых границ, например: $x_l = \frac{3a + 4b}{7}$, $x_r = \frac{4a + 3b}{7}$. + +Ещё можно делить по золотому сечению, чтобы делать $\log_\phi \left( \frac{b - a}{\varepsilon} \right)$ итераций. + +\subsubsection{Выпуклые функции} +Обычно для доказательства того, что функция унимодальна и можно использовать тернарный поиск, доказывают её выпуклость. + +\textbf{Определение.} Функция выпукла вниз, если её надграфик является выпуклым множеством точек. + +\textbf{Утверждение.} Выпуклая вниз на $(a, b)$ немонотонная функция $f$ унимодальная. + +\textbf{Доказательство.} В силу немонотонности существуют точки $a' < c' < b'$, такие что $f(c') < f(a')$ и $f(c') < f(b')$. +Тогда в силу непрерывности $f$ достигает минимум на отрезке $[a', b']$, и теперь в силу выпуклости вниз это и будет глобальным минимумом унимодальной функции (от противного). + +\textbf{Утверждение.} Пусть $f$ и $g$ выпуклы вниз на $(a, b)$. +Тогда $\max(f, g)$, $f + g$ выпуклы вниз на $(a, b)$. + +\textbf{Пример.} Задача про гонки на колесницах. +Есть $n \le 10^5$ спортсменов, которые стартуют в координатах $x_i$ и движутся со скоростью $v_i$. +Нужно найти момент времени $t$, когда они все находятся в минимально возможном отрезке. +Запишем формулу длины искомого отрезка: $\max(x_i + v_i \cdot t) - \min(x_i + v_i \cdot t)$. +Заметим, что это разность выпуклой вниз функции и выпуклой вверх --- результат выпуклый вниз. + +\textbf{Пример.} Дан выпуклый многоугольник, найти максимальный радиус окружности, которую можно вписать в него. +Будем искать точку с максимальным минимальным расстоянием до отрезков многоугольника, а можно не до отрезков, а до прямых. +Заметим, что можно теперь делать вложенный тернарный поиск. +Возникает проблема с тем, что мы можем вылезти за многоугольник, но для её решения можно ориентировать прямые многоугольника и искать ориентированное расстояние до них (в левой полуплоскости положительное, в правой --- отрицательное). + +\subsubsection{Пересечение полуплоскостей} +Научимся пересекать полуплоскости и находить полученное множество. +Сразу ограничимся каким-то большим прямоугольником, чтобы не работать с бесконечными координатами. +Тогда можно добавлять полуплоскости по-одному и пересекать их с результатом, который поначалу является этим большим прямоугольником. +По факту нужно только пересекать прямую с многоугольником и брать нужную полуплоскость. + +Но это как-то сложно. +Разделим полуплоскости на направленные вверх и направленные вниз, их пересечём, получим верхнюю и нижнюю огибающие, которые можно пересечь сканирующей прямой. + +\textbf{Пример.} Найти точку в выпуклом многоугольнике, такую что при удалении $k$ точек она останется в выпуклой оболочке, а при $k + 1$ уже вылетит, причём $k$ максимально. +Сделаем бинарный поиск и пересечём полуплоскости, полученные удалением всех $k$ последовательных вершин. + +\textbf{Определение.} Сумма Минковского множеств $A$, $B$ --- это $A + B = \{a + b: a \in A, b \in B\}$. diff --git a/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/header.tex b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/header.tex new file mode 100644 index 00000000..621a0707 --- /dev/null +++ b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/header.tex @@ -0,0 +1,239 @@ +%\documentclass[a4paper,12pt, draft]{article} +\documentclass[12pt,a4paper]{article} + +%%% Работа с русским языком +\usepackage{cmap} % поиск в PDF +\usepackage{mathtext} % русские буквы в формулах +\usepackage[T2A]{fontenc} % кодировка +\usepackage[utf8]{inputenc} % кодировка исходного текста +\usepackage[english,russian]{babel} % локализация и переносы +\usepackage{indentfirst} % красная строка в первом абзаце +\frenchspacing % равные пробелы между словами и предложениями + +%%% Дополнительная работа с математикой +\usepackage{amsmath,amsfonts,amssymb,amsthm,mathtools} % пакеты AMS +\usepackage{icomma} % "Умная" запятая + +%%% Свои символы и команды +\usepackage{centernot} % центрированное зачеркивание символа +\usepackage{stmaryrd} % некоторые спецсимволы +\usepackage{dsfont} +\usepackage{amsthm} + +\renewcommand{\epsilon}{\ensuremath{\varepsilon}} +\renewcommand{\phi}{\ensuremath{\varphi}} +\renewcommand{\kappa}{\ensuremath{\varkappa}} +\renewcommand{\le}{\ensuremath{\leqslant}} +\renewcommand{\leq}{\ensuremath{\leqslant}} +\renewcommand{\ge}{\ensuremath{\geqslant}} +\renewcommand{\geq}{\ensuremath{\geqslant}} +\renewcommand{\emptyset}{\ensuremath{\varnothing}} + +\DeclareMathOperator{\sgn}{sgn} +\DeclareMathOperator{\ke}{Ker} +\DeclareMathOperator{\im}{Im} +\DeclareMathOperator{\re}{Re} + +\newcommand{\N}{\mathbb{N}} +\newcommand{\Z}{\mathbb{Z}} +\newcommand{\Q}{\mathbb{Q}} +\newcommand{\R}{\mathbb{R}} +\newcommand{\Cm}{\mathbb{C}} +\newcommand{\F}{\mathbb{F}} +\newcommand{\I}{\mathbb{I}} +\newcommand{\id}{\mathrm{id}} +\newcommand{\imp}[2]{ + (#1\,\,$\ra$\,\,#2)\,\, +} +\newcommand{\System}[1]{ + \left\{\begin{aligned}#1\end{aligned}\right. +} +\newcommand{\Root}[2]{ + \left\{\!\sqrt[#1]{#2}\right\} +} +\newcommand{\RR}{\R} +\newcommand{\NN}{\N} +\renewcommand{\subseteq}{\subset} +\newcommand{\sub}{\subset} +\newcommand{\sconstr}{\;\vert\;} +\newcommand{\thus}{\implies} + +\newcommand{\defeq}{\vcentcolon= } +\newcommand{\defev}{\stackrel{\Delta}{\Longleftrightarrow}} +\newcommand{\deriv}[3][1]{% + \ifthenelse{#1>1}{% + \frac{\dlta^{#1} {#2}}{\dlta {#3}^{#1}} + }{% + \frac{\dlta {#2}}{\dlta {#3}} + }% +} + +\renewcommand\labelitemi{$\triangleright$} + +\let\bs\backslash +\let\lra\Leftrightarrow +\let\ra\Rightarrow +\let\la\Leftarrow +\let\emb\hookrightarrow + +%%% Перенос знаков в формулах (по Львовскому) +\newcommand{\hm}[1]{#1\nobreak\discretionary{}{\hbox{$\mathsurround=0pt #1$}}{}} + +%%% Работа с картинками +\usepackage{graphicx} % Для вставки рисунков +\setlength\fboxsep{3pt} % Отступ рамки \fbox{} от рисунка +\setlength\fboxrule{1pt} % Толщина линий рамки \fbox{} +\usepackage{wrapfig} % Обтекание рисунков текстом + +%%% Работа с таблицами +\usepackage{array,tabularx,tabulary,booktabs} % Дополнительная работа с таблицами +\usepackage{longtable} % Длинные таблицы +\usepackage{multirow} % Слияние строк в таблице + +%%% Теоремы +\theoremstyle{plain} +\newtheorem{theorem}{Теорема}[section] +\newtheorem{lemma}{Лемма}[section] +\newtheorem{proposition}{Утверждение}[section] +\newtheorem{property}{Свойство}[section] +\newtheorem*{exercise}{Упражнение} +\newtheorem*{problem}{Задача} + +\theoremstyle{definition} +\newtheorem{definition}{Определение}[section] +\newtheorem*{corollary}{Следствие} +\newtheorem*{note}{Замечание} +\newtheorem*{reminder}{Напоминание} +\newtheorem*{agreement}{Соглашение} +\newtheorem*{example}{Пример} +\theoremstyle{remark} +\newtheorem*{solution}{Решение} + +%%% Оформление страницы +\usepackage{extsizes} % Возможность сделать 14-й шрифт +\usepackage{geometry} % Простой способ задавать поля +\usepackage{setspace} % Интерлиньяж +\usepackage{enumitem} % Настройка окружений itemize и enumerate +\setlist{leftmargin=25pt} % Отступы в itemize и enumerate + +\geometry{top=25mm} % Поля сверху страницы +\geometry{bottom=30mm} % Поля снизу страницы +\geometry{left=20mm} % Поля слева страницы +\geometry{right=20mm} % Поля справа страницы + +\setlength\parindent{15pt} % Устанавливает длину красной строки 15pt +\linespread{1.3} % Коэффициент межстрочного интервала +%\setlength{\parskip}{0.5em} % Вертикальный интервал между абзацами +%\setcounter{secnumdepth}{0} % Отключение нумерации разделов +%\setcounter{section}{-1} % Нумерация секций с нуля +\usepackage{multicol} % Для текста в нескольких колонках +\usepackage{soulutf8} % Модификаторы начертания +\mathtoolsset{showonlyrefs=true} % показывать номера формул только у тех, у которых есть ссылки по eqref +%%% Содержаниие +\usepackage{tocloft} +\tocloftpagestyle{main} +%\setlength{\cftsecnumwidth}{2.3em} +%\renewcommand{\cftsecdotsep}{1} +%\renewcommand{\cftsecpresnum}{\hfill} +%\renewcommand{\cftsecaftersnum}{\quad} + +%%% Шаблонная информация для титульного листа +\newcommand{\CourseName}{Алгоритмы и структуры данных} +\newcommand{\FullCourseNameFirstPart}{\so{АЛГОРИТМЫ И СТРУКТУРЫ ДАННЫХ}} +\newcommand{\SemesterNumber}{III} +\newcommand{\LecturerInitials}{Рухович Филипп Дмитриевич} +\newcommand{\CourseDate}{осень 2023} +\newcommand{\AuthorInitials}{Лизюра Дмитрий} +\newcommand{\VKLink}{https://vk.com/id738720460} +\newcommand{\TGLink}{https://t.me/dimaliz} +\newcommand{\GithubLink}{https://github.com/MIPT-Group/Lectures_Tex_Club} + +%%% Колонтитулы +\usepackage{titleps} +\newpagestyle{main}{ + \setheadrule{0.4pt} + \sethead{\CourseName}{}{\hyperlink{intro}{\;Назад к содержанию}} + \setfootrule{0.4pt} + \setfoot{ФПМИ МФТИ, \CourseDate}{}{\thepage} +} +\pagestyle{main} + +%%% Нумерация уравнений +\makeatletter +\def\eqref{\@ifstar\@eqref\@@eqref} +\def\@eqref#1{\textup{\tagform@{\ref*{#1}}}} +\def\@@eqref#1{\textup{\tagform@{\ref{#1}}}} +\makeatother % \eqref* без гиперссылки +\numberwithin{equation}{section} % Нумерация вида (номер_секции).(номер_уравнения) +\mathtoolsset{showonlyrefs= true} % Номера только у формул с \eqref{} в тексте. + +%%% Гиперссылки +\usepackage{hyperref} +\usepackage[usenames,dvipsnames,svgnames,table,rgb]{xcolor} +\hypersetup{ + unicode=true, % русские буквы в раздела PDF + colorlinks=true, % Цветные ссылки вместо ссылок в рамках + linkcolor=black!15!blue, % Внутренние ссылки + citecolor=green, % Ссылки на библиографию + filecolor=magenta, % Ссылки на файлы + urlcolor=NavyBlue, % Ссылки на URL +} + +%%% Графика +\usepackage{tikz} % Графический пакет tikz +\usepackage{tikz-cd} % Коммутативные диаграммы +\usepackage{tkz-euclide} % Геометрия +\usepackage{stackengine} % Многострочные тексты в картинках +\usetikzlibrary{angles, babel, quotes} + +%\usepackage{paratype} +%\usepackage{euler} + +%\usepackage{microtype} + +%\everymath{\displaystyle} + +% https://tex.stackexchange.com/questions/44235/is-there-a-way-to-do-an-upside-down-widehat +\DeclareFontFamily{U}{mathx}{\hyphenchar\font45} +\DeclareFontShape{U}{mathx}{m}{n}{ + <5> <6> <7> <8> <9> <10> + <10.95> <12> <14.4> <17.28> <20.74> <24.88> + mathx10 + }{} +\DeclareSymbolFont{mathx}{U}{mathx}{m}{n} +\DeclareFontSubstitution{U}{mathx}{m}{n} +\DeclareMathAccent{\widecheck}{0}{mathx}{"71} + +% \usepackage{transparent} + +\usepackage{pdfpages} +\usepackage{import} +\newcommand{\QED}{$\hfill\square$} +\newcommand{\incfig}[2]{ + \def\svgwidth{#2} + \import{./figures/}{#1.pdf_tex} +} + +\DeclareMathOperator{\dist}{dist} +\DeclareMathOperator{\excess}{excess} +\DeclareMathOperator{\push}{push} +\DeclareMathOperator{\relabel}{relabel} +\DeclareMathOperator{\discharge}{discharge} +\DeclareMathOperator{\cost}{cost} +\DeclareMathOperator{\argmax}{argmax} + +\DeclareMathOperator{\pal}{pal} +\DeclareMathOperator{\suff}{suff} +\DeclareMathOperator{\len}{len} +\DeclareMathOperator{\reach}{reach} +\DeclareMathOperator{\shift}{shift} +\DeclareMathOperator{\DAWG}{DAWG} +\DeclareMathOperator{\longest}{longest} + +\let\path\relax +\DeclareMathOperator{\path}{path} + +\DeclareMathOperator{\LCP}{LCP} + +\usepackage[boxed]{algorithm2e} + diff --git a/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/logo_ltc.png b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/logo_ltc.png new file mode 100644 index 0000000000000000000000000000000000000000..3938067a8136770c6ec6fe17260d39d4ab32762c GIT binary patch literal 216873 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 Tsu7 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

C`Z3B?#P9d`uo+9wzUMa~|eQn|@5t8U;V|F1{zy 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 kOqoJo>v+XW=zPERixlh3{+2FGyF$ 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 Yz0UoWxe2YD`QI4opV2Ek;c)Xm0hI4(-~a#s literal 0 HcmV?d00001 diff --git a/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/main.tex b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/main.tex new file mode 100644 index 00000000..996ec5f9 --- /dev/null +++ b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/main.tex @@ -0,0 +1,17 @@ +\input{header} + +\begin{document} + \input{title_page} + + \newpage + \hypertarget{intro}{} + \tableofcontents + \linespread{1} + \selectfont + + \newpage + \input{flows.tex} + \input{strings.tex} + \input{geometry.tex} + \input{probabilities.tex} +\end{document} diff --git a/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/probabilities.tex b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/probabilities.tex new file mode 100644 index 00000000..7e98ecc5 --- /dev/null +++ b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/probabilities.tex @@ -0,0 +1,273 @@ +\section{Вероятностные алгоритмы} +\textbf{Определение.} Алгоритм типа Лас-Вегас --- алгоритм, который всегда выдаёт правильный ответ, время работы не гарантировано. + +\textbf{Определение.} Алгоритм типа Монте-Карло --- алгоритм, который всегда работает быстро, корректность не гарантирована. + +\subsection{Быстрая сортировка} +Оценим количество пар, которые сравнивались в процессе алгоритма. +Не умаляя общности, мы сортируем перестановку чисел от $1$ до $n$. +Найдём математическое ожидание: пусть $I_{i,j}$ --- индикатор того, что числа $i$ и $j$ сравнивались. +Тогда время работы алгоритма --- математическое ожидание $\sum_{i, j} I_{i,j}$, или сумма вероятностей того, что $i$ и $j$ сравнивались. +А эта вероятность равна тому, что когда мы в первый раз выбрали pivot на отрезке $[i, j]$, мы попали в $i$ или $j$. +То есть математическое ожидание равно +\[ + \sum_{i < j} \frac{2}{j - i + 1} = \sum_{l=2}^{n} \frac{2}{l} (n - l + 1) \le 2n \sum_{l=2}^{n} \frac{1}{l} \le 2 n \log(n) = O(n \log(n)). +\] +С какой вероятностью алгоритм всё равно будет долго работать? +Пусть $X$ --- количество сравнений. +Применяя неравенство Маркова, получаем +\[ + P(X \ge \alpha n \log(n)) \le \frac{2}{\alpha}. +\] +Делание выводов остаётся в качестве упражнения. + +\subsection{Быстрая $k$-ая порядковая статистика} +Сделаем всё то же самое, вновь хотим найти вероятность того, что элементы $i$ и $j$ сравнивались. +Если $k$-ый элемент лежит на отрезке $[i, j]$, то это будет вероятность того, что pivot попал в $i$ или $j$. +Если же он вне отрезка (пусть $k < i < j$), то это вероятность того, что при первом попадании pivot-а в отрезок $[k, j]$ он попал в $i$ или $j$. +Следовательно, математическое ожидание --- это +\[ + \sum_{i \le k \le j} \frac{2}{i - j + 1} + \sum_{k < i < j} \frac{2}{j - k + 1} + \sum_{i < j < k} \frac{2}{k - i + 1}. +\] +Дальше техника. + +\subsection{Random Tree Game Eval} +Пусть у нас двоичное дерево высоты $2n$. Изначально в корне стоит фишка, два игрока её двигают в потомка по выбору. +В каждом листе написан номер игрока, который выигрывает при входе в него. +Кто выиграет при оптимальной игре? + +Можно насчитать динамику за $4^n$, и это нельзя улучшить, если нам нужно сначала считать дерево. +Но что, если у нас есть оракул, который может по листу сказать, выигрышая ли вершина? +Тогда можно идти в случайного потомка, и так, пока не найдём выигрышную стратегию. +Пусть $T_W(n)$ --- математическое ожидание ходов на $n$-ом уровне при победе игрока, который ходит сейчас, $T_L(n)$ --- при поражении. +Тогда +\[ + T_W(2n) \le \frac{1}{2} T_L(2n-1) + \frac{1}{2} (T_L(2n - 1) + T_W(2n-1)) + 1. +\] +Мы попадём в проигрышную ситуацию для противника либо с первого раза (первое слагаемое), либо в первый раз не повезёт, и мы пойдём в другое поддерево (второе слагаемое). +\[ + T_L(2n) \le 2T_W(2n-1) + 1 \le 2T_L(2n-2) + T_W(2n-2) + 3. +\] +Здесь всё проще: пошли в оба поддерева, и в обоих не повезло. +Второй переход получили, раскрыв $T_W$ по первому неравенству. + +Теперь улучшим оценку на $T_W$: +\[ + T_W(2n) \le T_L(2n-1) + \frac{1}{2} T_W(2n-1) + 1 \le +\] +\[ + \le 2T_W(2n-2) + 1 + \frac{1}{2} (T_L(2n-2) + \frac{1}{2} T_W(2n-1) + 1) + 1 = +\] +\[ + = \frac{9}{4} T_W(2n-2) + \frac{1}{2} T_L(2n-2) + \frac{5}{2}. +\] +Все переходы получены чистой арифметикой. +Главная идея --- выразить $2n$-ый член через $(2n-2)$-ой. + +\textbf{Утверждение.} $T_W(2n), T_L(2n) \le C \cdot 3^n - D$. Доказывается через первый семестр. + +\subsection{Минимальный разрез в невзвешенном графе} +Выберем случайное ребро. +Сожмём две его вершины в одну. +Будем так делать, пока не останется две вершины: количество рёбер между ними --- минимальный разрез. +С какой вероятностью мы промахнёмся? Пусть $ans$ --- минимальный разрез. +Мы ошиблись, если стянули ребро из минимального разреза, то есть с вероятностью $\frac{ans}{E}$. +Тогда +\[ + 2E = \sum_{v \in V} \deg(v) \ge ans \cdot V \iff \frac{ans}{E} \le \frac{2}{V}. +\] +Первое неравенство из того, что мы можем взять разрез из одной вершины и $\deg(v)$ рёбер --- его весом как раз будет $\deg(v)$, так как граф невзвешен. +То есть слева просуммировали $V$ каких-то разрезов, а справа --- $V$ минимальных. +Тогда вероятность успеха --- вероятность того, что мы ни разу не взяли ребро из минимального разреза, то есть мы $V - 2$ раза взяли ребро не из разреза. +Она не меньше, чем +\[ + \left(1 - \frac{2}{V} \right) \left( 1 - \frac{2}{V - 1} \right) \dots \left(1 - \frac{2}{3} \right) = +\] +(приведём к общим знаменателям) +\[ + = \frac{V - 2}{V} \cdot \frac{V - 3}{V - 1} \cdot \frac{V - 4}{V - 2} \cdot \frac{V - 5}{V - 3} \cdots \frac{1}{3} = \frac{2}{V(V-1)} \ge \frac{2}{V^2}. +\] +Вероятность так себе, но давайте запустим алгоритм $C$ раз. +Так и не найдём ответ мы с вероятностью +\[ + \left(1 - \frac{2}{V^2} \right)^C \approx \frac{1}{e^k} +\] +при $C = \frac{V^2}{2} \cdot k$. + +Это называется алгоритмом Каргера. + +\subsubsection{Алгоритм Каргера-Штейна} +Положим $t = \frac{V}{\sqrt 2}$ и сожмём граф до $t$ вершин. +Аналогично предыдущим рассуждениям мы к этому моменту не сожмём ребро ответа с вероятностью хотя бы $\frac{1}{2}$. +Теперь запустим то же самое от полученного графа два раза. +Пусть $P(V)$ --- вероятность того, что мы не ошиблись на графе на $V$ вершинах. +Тогда +\[ + P(V) \ge \frac{1}{2} \left(1 - \left(1 - P \left( \frac{V}{\sqrt 2} \right) \right)^2 \right) +\] +--- чтобы не ошибиться мы должны не ошибиться при сжатии до $t$ вершин и не ошибиться хотя бы в одном из следующих запусков. +Пусть $V = (\sqrt 2)^k$. +Тогда $P(k) \ge \frac{1}{2} (1 - (1 - P(k - 1))^2)$. +Теперь утверждается, что $P(k) \ge \frac{1}{k}$. +Доказывается по индукции ($P(0) = 1$ и переход (может не работать при малых $k$)). +Время работы --- $O(V^2 \log(V))$ на итерацию. + +\subsection{Минимальный остов за $O(E)$} +\textbf{Определение.} MSF --- Minimum Spanning Forest, подграф какого-то минимального остовного дерева. + +\textbf{Определение.} Пусть $F$ --- какой-то минимальный остовный лес и ребро $e \in E$. +Тогда $e$ называется $F$-\textit{тяжёлым}, если $e \in F$ и $e$ --- максимальное ребро на стягиваемом им в $F$ цикле. +В противном случае оно называется $F$-\textit{лёгким}. + +\textbf{Утверждение.} Если ребро $e$ $F$-тяжёлое относительно какого-то минимального остовного леса $F$, то $e$ не лежит ни в каком минимальном остовном лесе. + +\textbf{Доказательство.} Рассмотрим произвольный остовный лес, содержащий $F$ тяжёлое ребро $(a, b)$. +Удалим ребро $(a, b)$. +Пройдём по вершинам из цикла $F$, стягиваемого $(a, b)$. +В какой-то момент мы пройдём по ребру из компоненты вершины $a$ в компоненту вершины $b$ нового графа --- добавим это ребро. + +\subsubsection{Принцип работы} +Для начала запустим 3 шага алгоритма Борувки, чтобы размер графа уменьшался. +Возьмём $E' \subset E$ --- подмножество рёбер, где каждое ребро берётся с вероятностью $\frac{1}{2}$. +Пусть $G' = (V, E')$ --- новый граф, найдём на нём рекурсивно минимальный остовный лес $F'$. +Теперь найдём среди рёбер $E$ все $F'$-тяжёлые и положим их в $E''$. +Наконец, вернём минимальный остов на графе $(V, E \setminus E'')$. + +\textbf{Замечание 1.} Рекурсивные запуски могли возвращать несвязные остовные леса, так как мы им могли дать несвязный граф, но результат будет связен. + +\textbf{Замечание 2.} Множество $E''$ можно найти за $O(E)$, но это что-то сложное, и это не рассказали. + +\subsubsection{Доказательство $O(E \log(V))$ в худшем случае} +\textbf{Утверждение.} $|E''| \ge |E'| - |V| + s$, где $s$ --- количество компонент связности в $G'$. +Следует из того, что в минимальном остовном дереве будет $|V| - s$ рёбер, и остальные будут тяжёлыми. + +Тогда при рекурсивных запусках для графа $G = (V, E)$ у нас будет суммарно $|E'| + |E| - |E''| \le |E| + |V| - s$. +Но теперь вспомним, что мы ещё запускали Борувку, поэтому мы на самом деле работали не с $(V, E)$, а с $(V_3, E_3)$, где $|E_3| \le |E| - |V| + |V_3|$ (так как при каждом стягивании ребра мы удаляли одну вершину) и $|V_3| \le \frac{|V|}{8}$. +Тогда вернёмся к неравенству выше, заменяя $E$ на $E_3$ и $V$ на $V_3$: +\[ + |E'| + |E_3| - |E''| \le |E_3| + |V_3| - s \le |E| - |V| + |V_3| + |V_3| - s \le |E| - \frac{3|V|}{4}. +\] +Получаем, что суммарно в двух рекурсивных вызовах рёбер будет не больше, чем у нас сейчас, а глубина дерева --- $O(\log(V))$ засчёт Борувки. +Таким образом, в худшем случае это работает за $O(E \log(V))$. + +\subsubsection{Доказательство $O(V + E)$ в среднем} +Пусть $T(G)$ --- время работы алгоритма на графе $G$. +Докажем по индукции, что +\[ + MT(G) \le A(V + E) + MT(G') + MT(V_3, E_3 \setminus E''). +\] +Здесь $M$ --- математическое ожидание, чтобы не было коллизии с $E$. +Что такое $MT(G')$? Это +\[ + \sum_{E'} P(E' \text{ появилось}) \cdot M'T(G') \le \sum_{E'} P(E' \text{ появилось}) \cdot C(|V_3| + |E'|) = +\] +Здесь $M'T(G')$ --- это математическое ожидание при фиксированном $E'$, а $MT(G')$ --- математическое ожидание по всем $E'$. +Это равно +\[ + = C|V_3| + C \sum_{E'} P(E' \text{ появилось}) |E'| = C|V_3| + CM|E'| = C \left(|V_3| + \frac{|E_3|}{2} \right). +\] + +Теперь главная часть алгоритма. Мы знаем, что $F'$ --- это какой-то минимальный остовный лес, и его мог вернуть любой алгоритм, в частности, алгоритм Краскала (с СНМом). +Поэтому мы можем думать, что $F'$ был сгенерирован следующим алгоритмом: отсортируем рёбра и будем пробовать добавлять каждое с вероятностью $\frac{1}{2}$. +Пусть мы сейчас рассматриваем ребро $(u, v)$. +Если $u$ и $v$ лежат в одной компоненте $F'$, то оно точно $F'$-тяжёлое и попадёт в $E''$. +Если же в разных, то оно $F'$-лёгкое, и здесь уже имеет смысл бросать монетку. +Так как рёбер в $F'$ по итогу не более $|V_3| - 1$, монетка выпадет столько же раз, то есть математическое ожидание числа бросков монетки не превосходит $2|V_3|$. +Это и есть математическое ожидание числа $F'$-лёгких рёбер, или же размера $|E \setminus E''|$. +Следовательно, $MT(V_3, E_3 \setminus E'') \le 3C |V_3|$. +Собирая всё вместе, получаем +\[ + MT(G) \le A(|V| + |E|) + C \left(|V_3| + \frac{|E_3|}{2} \right) + 3C|V_3| = +\] +\[ + = A(|V| + |E|) + 4C|V_3| + C \frac{|E_3|}{2} \le A(|V| + |E|) + \frac{C|V|}{2} + C \frac{|E|}{2}. +\] +Это не превосходит $C(|V| + |E|)$ при $C \ge 2A$. + +\textbf{Замечание.} Вообще, это проще доказывается через $T(n, m)$ --- время работы на графе с $n$ вершинами и $m$ рёбрами (тогда $MT(G) = C \left( |V_3| + \frac{|E_3|}{2} \right)$ будет следовать напрямую из предположения индукции), здесь же описан метод, использованный на лекции. + +\subsection{Умножение булевых матриц} +Хотим для булевых матриц $A$ и $B$ размера $n \times n$ найти матрицу $C$, такую что $C_{i,j} = \bigvee_{k=1}^n (A_{i,k} \wedge V_{k,j})$. + +\textbf{Определение.} $M(n) = O(n^{2.37})$ --- лучшее время, за которое человечество умеет детерминировано перемножать булевы матрицы размера $n \times n$. + +\subsubsection{Наикратчайшие расстояния для всех пар вершин в графе} +Будем решать другую задачу: дана матрица смежности $A_{n \times n}$, найдём матрицу $D_{n \times n}$, где $D_{i,j} = \dist(i, j)$ в невзвешенном графе, задаваемом $A$. + +\textbf{Замечание.} $A^k$ --- количество путей длины $k$ в графе. + +Построим новый граф, в котором вершины $u$ и $v$ соединены тогда и только тогда, когда расстояние между ними в исходном графе не превосходит 2. +Иными словами, $A' = A^2 \vee A$. +Также определим для него матрицу $D'_{i,j}$ аналогично матрице $D$. + +\textbf{Лемма 1.} $D'_{i,j} = \lceil \frac{D_{i,j}}{2} \rceil$. +Просто по построению. + +\textbf{Лемма 2.} Если $D_{i,j}$ чётно, то для любого ребра $(i, v)$ верно $D'_{v,j} \ge D'_{i,j}$. +Если же нечётно, то найдётся вершина $v$ и ребро $(i, v)$, такие что $D'_{v,j} < D'_{i,j}$. +Более того, в этом случае для всех вершин $v$ и рёбер $(i, v)$ верно $D'_{v,j} \le D'_{i,j}$. + +\textbf{Доказательство.} Так как граф невзвешен, $|D_{v,j} - D_{i,j}| \le 1$. +То есть если $D_{i,j} = 2x$, то $D_{v,j} \in \{2x - 1, 2x, 2x + 1\}$ и по лемме 1 $D'_{v,j} \ge x = D'_{i,j}$. +Остальные по этой же схеме. + +\textbf{Следствие.} $D_{i,j}$ чётно тогда и только тогда, когда $\sum_{(i, v) \in E} D'_{v,j} \ge D'_{i,j} \cdot \deg(i)$. +(Просуммируем неравенства выше) + +Это следствие позволяет нам восстановить чётность всех элементов матрицы $D$ по матрице $D'$ за одно матричное умножение, так как сумма слева --- не что иное, как элемент матрицы $A \cdot D'$. +А зная чётность $D_{i,j}$ и значение $D'_{i,j}$, мы можем однозначно восстановить $D_{i,j}$. +Но откуда мы возьмём $D'_{i,j}$? Всё просто: запустимся рекурсивно от $A'$ и $D'$. +В новом графе диаметр уменьшился в 2 раза, поэтому мы завершимся за $O(\log(n))$ шагов и получим итоговое время работы --- $O(M(n) \log(n))$. + +\subsubsection{Нахождение свидетелей} +\textbf{Определение.} Свидетель булевого перемножения матриц --- индекс $k$, при котором $A_{i,k} \wedge B_{k,j} = 1$. + +Сначала перемножим $A$ и $B$ и поймём, для каких элементов мы хотим искать свидетелей. +Положим матрицу $F$, такую что $F_{i,k} = A_{i,k} \cdot k$. +Тогда при умножении матрицы $F$ на $B$, если свидетель ровно один, мы его успешно и найдём. +Но если свидетелей несколько, то это не сработает. +Поэтому будем обнулять случайное множество столбцов, умножать и проверять, нашли ли мы свидетелей (это проверяется за $O(n^2)$). + +Обнулим клетки из случайно выбранного множества $R$, такого что $|R| = r$. +Пусть у пары $(i, j)$ есть $w$ свидетелей. +Тогда вероятность того, что в новой матрице свидетель ровно один --- +\[ + \frac{w C_{n-w}^{r-1}}{C_n^r} = wr \frac{(n-w)! (n-r)!}{n! (n-w-r+1)!} = +\] +\[ + = \frac{wr}{n} \cdot \frac{(n-r)(n-r-1) \dots (n-r-w+2)}{(n-1)(n-2) \dots (n-w+1)} = +\] +\[ + = \frac{wr}{n} \left(1 - \frac{r-1}{n-1} \right) \left(1 - \frac{r-1}{n-2} \right) \dots \left(1 - \frac{r-1}{n-w+1} \right) \ge +\] +\[ + \ge \frac{wr}{n} \left(1 - \frac{r-1}{n-w} \right)^{w-1} = \frac{wr}{n} \left( 1 - \frac{wr - w}{w(n - w)} \right)^{w - 1} \ge +\] +Предположим, что $\frac{wr}{n} \in \left[ \frac{1}{2}, 1 \right]$. +\[ + \ge \frac{wr}{n} \left( 1 - \frac{n - w}{w(n - w)} \right)^{w-1} \ge \frac{1}{2} \left(1 - \frac{1}{w} \right)^{w-1} \ge \frac{1}{2e}. +\] +Чтобы получить $\frac{wr}{n} \in \left[ \frac{1}{2}, 1 \right]$, будем брать $r = 1, 2, 4, 8, \dots$. +Теперь будем перезапускать алгоритм (для всех $r$) $k = \lceil \log_{1 - \frac{1}{2e}} \left( \frac{1}{n} \right) \rceil$ раз. +После этого могли остаться ненайденные свидетели, но их будет мало, и можно каждого находить отдельно за $O(n)$. +А сколько именно их будет? +Рассмотрим элемент $(i, j)$, пусть у него $w > 0$ свидетелей. +Посчитаем вероятность того, что ни один из свидетелей не нашёлся. + +Существует $r$, такое что $\frac{wr}{n} \in \left[ \frac{1}{2}, 1 \right]$, и мы для этого $r$ пытались найти свидетеля $k$ раз. +Вероятность успеха каждой из этих итераций --- хотя бы $\frac{1}{2e}$, поэтому не нашли мы с вероятностью не более $\left(1 - \frac{1}{2e} \right)^k \le \frac{1}{n}$ по определению $k$. +Следовательно, математическое ожидание числа свидетелей не превосходит $n^2 \cdot \frac{1}{n} = n$. + +Соответственно итоговое время работы --- $O(M(n) \log^2(n))$: логарифмы из-за $k$ и перебора $r$. + +\subsubsection{Применение свидетелей к задаче о наикратчайших расстояниях} +Мы хотим научиться восстанавливать наикратчайшие пути между всеми парами вершин за $o(n^3)$. +В частности, мы хотим построить матрицу $S$, такую что $S_{i,j}$ --- первая вершина на одном из наикратчайших путей между $i$ и $j$, если начинать с вершины $i$. +Изучим свойства этой матрицы, пусть $v = S_{i,j}$. +Тогда $D_{i,v} = 1$ и $D_{i,j} = D_{v,j} + 1$. +В частности, $D_{v,j} \equiv D_{i,j} - 1 \mod 3$. +При чём тут модуль 3? +Вспомним, что граф у нас неориентированный и невзвешенный, поэтому для любой инцидентной $i$ вершине $u$ выполнено $D_{u,j} \in \{D_{i,j} - 1, D_{i,j}, D_{i,j} + 1\}$ --- сравнимость по модулю будет верна только для одной из подходящих вершин $v$. +Определим три булевы матрицы $G^k$, у которых элемент $(i, j)$ равен единице в случае, когда $D_{i,j} \equiv k \mod 3$. +Тогда $S_{i,j}$ --- это в точности свидетель умножения булевых матриц $A$ и $B = (G_{i,j}^{D_{i,j} - 1 \mod 3})$. +Время работы --- сумма времён работы нахождения $D$ и умножения со свидетелями, то есть $O(M(n) \log^2(n))$ в среднем. diff --git a/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/strings.tex b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/strings.tex new file mode 100644 index 00000000..0622f32e --- /dev/null +++ b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/strings.tex @@ -0,0 +1,536 @@ +\section{Строки} +\textbf{Соглашения.} Индексация может быть как и с нуля, так и с единицы, пустая строка является подстрокой всех строк. + +\subsection{Поиск подстроки в строке} +Хотим найти вхождение строки $T$ в строке $S$. Алгоритм за $O(|S| \cdot |T|)$ очевиден, посмотрим на другие варианты. + +\subsubsection{Префикс-функция} +Пусть $p$ --- префикс-функция строки. Все доказательства в этом пункте делаются внимательным рассмотрением рисунка. +На этот алгоритм можно смотреть, как на метод двух указателей. + +Лемма 1: $p[i + 1] \le p[i] + 1$, очевидно из рисунка. + +Лемма 2: если $p[i + 1] < p[i] + 1$, то $p[i + 1] \le p[p[i]] + 1$. +В очередной раз можно нарисовать рисунок и заметить, что можно рассмотреть предыдущий префикс и сравнить с ним. + +При помощи префикс-функции можно прийти к \textit{алгоритму Кнута} \textit{-Морриса-Пратта}: насчитаем префикс-функцию на строке \verb+T$S+ и посмотрим на её значения. +Интересный факт: размер массива префикс-функции можно сделать $|T|$, так как значения префикс-функции не превосходят $|T|$. + +Более того, заметим, что при подсчёте префикс функции нас интересует только префикс-функция на предыдущей позиции и текущий символ. +Поэтому мы можем ввести функцию $go(i, c)$ --- сделать следующий шаг, зная, что префикс-функция --- $i$, а текущий символ --- $c$, и получить автомат префикс-функции. + +\subsubsection{Z-функция} +Тривиально. + +\subsubsection{Хэши} +Очевидно. + +\subsection{Палиндромы} +\subsubsection{Алгоритм Манакера} +Вставим между соседними символами строки $S$ какие-нибудь символы. Теперь нам достаточно найти все палиндромы нечётной длины. +Посчитаем массив $p$ --- максимальную длину палиндрома с центром в данной позиции. + +Можно вычислить слева направо, пользуясь фактом, что максимальная длина палиндрома с центром в данном символе --- хотя бы длина для симметричной позиции относительно центра палиндрома, покрывающего нас. + +\textbf{Задача.} (О тандемном повторе) Дана строка, найти подстроку наибольшей длины, являющуюся конкатенацией двух строк. +Будем решать через разделяй и властвуй. Зафиксируем точку разбиения, то есть слева и справа одинаковые строки. +При разделении будем просто находить Z-функцию от развёрнутой левой части и правой части. + +\textbf{Определение.} Строка $T$ $l$-\textit{периодическая}, если $T_i = T_{l+i}$ для всех $i$. + +Тогда предыдущая задача сводится к нахождению $l$-периодической строки длины хотя бы $2l$. + +\subsubsection{Дерево палиндромов} +Дана строка $S$ и нам поступают запросы вида ``входит ли строка $P$ --- палиндром --- как подстрока в $S$?``. + +\textbf{Утверждение.} В строке $S$ содержится не более $|S|$ различных палиндромов. + +\textbf{Доказательство.} Индукцией по построению $S$. Припишем символ в конец, теперь у нас могло появиться не более одного палиндрома, так как саммый длинный, может, не встречался, а остальные уже встречались, как часть самого длинного палиндрома. + +Выпишем все подпалиндромы для данной строки. Теперь построим два бора на правых половинах этих палиндромов (чётных и нечётных). + +\textbf{Определение.} Дерево палиндромов --- построенный бор. Его размер линеен, так как каждая вершина задаёт палиндром. + +Теперь будем строить дерево, добавляя в строку по одному символу, находя самый длинный палиндром, проходящий через новый символ и добавляя палиндром в дерево при необходимости. +Находить самый длинный палиндром нетрудно: новый самый длинный палиндром --- это палиндром, заканчивающийся в предыдущем символе с новым символом. + +Это, конечно, можно сделать хэшами, но лучше через суффиксные ссылки. Для этого введём следующие понятия: $\pal(v)$ --- палиндром, соответствующий вершине $v$, $\suff(v)$ --- множество всех $u$, таких что $\pal(u)$ --- собственный префикс $\pal(v)$ и длина $\pal(u)$ максимальна, $\len(v) = |\pal(v)|$. +Будем считать $\len(root_{odd}) = -1$ и $\len(root_{even}) = 0$ и проведём между корнями суффиксную ссылку, то есть $\suff(root_{even}) = root_{odd}$. + +Будем находить тремя указателями: один указатель на конец, второй --- на начало текущего самого длинного палиндрома, заканчивающегося в последнем символе, третий --- на суффиксную ссылку, то есть на второй по длине самый большой суффикс. + +\textbf{Задача.} Даны две строки $S$ и $T$, нужно поддерживать для каждой позиции $T$ максимальную длину суффикса $T[0..i]$, являющегося палиндромом и встречающегося в $S$. +Можно построить дерево палиндромов на $S$ и, поддерживая суффиксные ссылки и в $S$, и в $T$, проверять вхождения. +Другой вариант: построить деревья палиндромов для двух строк и запустить параллельный поиск в глубину. + +\subsection{Поиск подстроки в строке с $O(1)$ дополнительной памяти} +По большей части этот параграф написан по авторской статье ``Z. Galil, J.I. Seiferas: Time-space-optimal string matching``, а не по лекциям. +\subsubsection{Основные понятия} +Зафиксируем константу $k = 4$. + +\textbf{Определение.} Строка $p$-периодична, если любые два символа на расстоянии $p$ равны. + +\textbf{Определение.} $\reach_S(p)$ --- максимальная длина $p$-периодичного префикса строки $S$. + +\textbf{Определение.} Базовая строка --- строка, не представимая в виде конкатенации нескольких одинаковых строк. + +\textbf{Определение.} $T$ --- префиксный период $S$, если $T^k$ --- префикс $S$ и $T$ базовая. + +\textbf{Определение.} $\shift_S(p) = p - \pi_S[p]$. Иными словами, минимальное $l$, такое что префикс длины $p$ $l$-периодичен. + +\sloppy \textbf{Лемма 0.} (О периодичности) Если строка $S$ $a$-периодична и $b$-периодична, её длина --- хотя бы $a + b$, то она $gcd(a, b)$-периодична. + +\textbf{Доказательство.} Не умаляя общности, $a > b$ (случай $a = b$ остаётся в качестве упражнения). +Докажем, что строка $(a - b)$-периодична. +Рассмотрим $i$-ый символ, где $i + a \le |s|$: он равен $(i + a)$-ому, а $(i + a)$-ый равен $(i + a - b)$-ому символу. +Если же $i + a > |S|$ и $i + a - b \le |S|$, то пройдём в порядке $i \to i - b \to i + a - b$ (засчёт $a + b \ge |S|$ можно гарантировать, что $i - b > 0$). +Следовательно, $i$-ый символ равен $(i + a - b)$-ому, и строка $(a - b)$-периодична. +Остаётся применить алгоритм Евклида. + +\textbf{Замечание.} Утверждается, что достаточно просить, что длина --- хотя бы $a + b - gcd(a, b)$, но это всё равно нигде не поможет. + +\textbf{Лемма 1.} Если $\shift_S(q) \le \frac{q}{k}$, то $S[1..\shift_S(q)]$ --- префиксный период. + +\textbf{Доказательство.} По определению шифта $S[1..q]$ имеет период $\shift_S(q)$, и, так как $\shift_S(q) \le \frac{q}{k}$, $S[1..\shift_S(q)]^k$ является префиксом $S[1..q]$. +Остаётся доказать, что $S[1..\shift_S(q)]$ базовая. +От противного, допустим, что $S[1..\shift_S(q)] = T^l$ для $l > 1$. +Но тогда строка $S[1..q]$ будет $|T|$-периодична --- противоречие, так как $|T| < \shift_S(q)$. + +\textbf{Лемма 2.} Если $S[1..l]$ --- префиксный период $S$, то для любого $q$ верно +\[ + l = \shift_S(q) \le \frac{q}{k} \iff kl \le q \le \reach_S(l). +\] + +\textbf{Доказательство.} $\Rightarrow$: первое неравенство совсем очевидно, докажем второе от противного. +Тогда длина любого $l$-периодичного префикса строки $S$ строго меньше $q$. +Но по определению шифта префикс длины $q$ должен быть $l$-периодичен --- противоречие. + +$\Leftarrow$. Во-первых, префикс длины $\reach_S(l) \ge q$ $l$-периодичен, поэтому $\shift_S(q) \le l$. +Допустим, что $\shift_S(q) < l$. Тогда у префикса длины $kl$ есть два периода: $l$ и $\shift_S(q)$. +По лемме 0 он $gcd$-периодичен, следовательно, префикс длины $l$ $gcd$-периодичен и не является базовым. + +\subsubsection{Теорема о декомпозиции} +Для любой строки $p$ её можно представить в виде $p = uv$, где у $v$ не более одного префиксного периода и $|u| = O(\shift_v(|v|))$. +Будет доказано ниже. + +\textbf{Утверждение.} Пусть у строки $s = T^k$, где $T$ --- базовая, есть префиксный период длины $p_1$ и базовый префикс длины $p_2$, причём $p_2 > p_1$ и $\reach(p_2) \ge 2p_2$. +Тогда $p_2 > (k-1)p_1$. + +\textbf{Доказательство.} От противного: пусть $p_2 \le (k-1)p_1$. +Тогда по лемме о периодичности строка $gcd(p_1, p_2)$-периодична, то есть строка $p_2$ $gcd(p_1,p_2)$-периодична, то есть она не базовая --- противоречие. + +\textbf{Лемма 3.} Пусть $w$ --- базовая строка. Тогда существует разбиение $w = w_1w_2$, такое что для любой строки $w'$ строка $w_2 w^{k-1}w'$ не имеет префиксный период, меньший $|w|$. + +\textbf{Доказательство.} Рассмотрим произвольное разбиение $w = w_1 w_2$. +\sloppy Во-первых, заметим, что строка $w_2 w^{k-1}$ $|w|$-периодична по определению ($w_2 w^{k-1} = w_2w_1w_2w_1 \dots$), причём строка $w_2w_1$ базовая, как циклический сдвиг базовой. +Допустим, что нашёлся префиксный период строки $w_2 w^{k-1} w'$ длины $p_1 < |w|$, такой что в $w_2 w^{k-1}$ не влезло $k$ его копий. +Вместе с тем, что у неё есть базовый префикс $w_2 w_1$, к ней можно применить утверждение выше и получить $p_1 < \frac{|w|}{k-1}$. Тогда +\[ + kp_1 < |w| \frac{k}{k-1} < |w|(k - 1). +\] +То есть префикс длины $p_1$, повторённый $k$ раз, влезает в $w_1 w^{k-1}$ --- противоречие. +Следовательно, вне зависимости от $w'$ префикс длины $p_1$ будет префиксным периодом $w_2 w^{k-1} w'$. +Поэтому мы можем зафиксировать $w' = w^\infty$ и дальше доказывать для строки $S := w_2 w^{\infty}$. + +Теперь к самому построению разложения. +Раз мы не хотим иметь префиксный период меньше $|w|$, будем находить минимальную по длине строку $z$, такую что $z^k$ --- префикс оставшейся строки, и отпиливать $z$, если $|z| < |w|$. +Теперь докажем, что рано или поздно это прекратится. + +Пусть мы отпиливали строки $z_1, z_2, \dots$. +Утверждается, что их длины не убывают и каждая строка --- префикс следующей. +Пусть мы отпилили $z_i$, тогда дальше ещё осталось $k - 1$ копий $z_i$, то есть $z_{i+1}$ --- это либо префикс $z_i$, либо наоборот. +Допустим, что $|z_{i+1}| < |z_i|$, тогда по лемме 0 строка $z_i^k$ $gcd$-периодична, что даёт противоречие с минимальностью её длины. +Если этот процесс остановился, то у нас осталась строка $w_4www\dots$ ($w_4$ --- суффикс $w$), тогда берём разбиение $w = w_3w_4$, где $w_3$ --- оставшийся префикс. +Иначе процесс стабилизировался на длине $m < |w|$, но тогда у оставшейся строки есть период $m$ и $m < |w|$ --- это значит, что по лемме 0 она $gcd$-периодична и строка $w$ не базовая. +Следовательно, процесс обязательно остановится. + +\textbf{Замечание 1.} $|z_{i+1}| \ge (k - 2)|z_i|$. +От противного, тогда на момент удаления $|z_{i+1}| + |z_i| \le (k - 1)|z_i| = |z_i^{k-1}|$. +Вспомним, что на момент удаления $z_{i+1}$ она была префиксом строки $z_i^{k-1}$, то есть, применяя к префиксу $z_i^{k-1}$ длины $|z_{i+1}| + |z_i|$ лемму 0, получаем противоречие с минимальностью $z_{i+1}$. + +\textbf{Замечание 2.} $z_i^{k-2}$ является префиксом строки, полученной после удаления $z_i$ --- это понятно. +Но по замечанию 1 она также является префиксом $z_{i+1}$ и префиксом $z_{i+1}^{k-2}$, а она, в свою очередь, является префиксом строки, полученной после удаления $z_{i+1}$. +Продолжая рассуждение, получаем, что $z_i^{k-2}$ будет префиксом \textit{всех} последующих строк. + +\textbf{Замечание 3.} Этот процесс удалит менее $|w|$ символов. +Допустим, что мы удалили $p > |w|$ символов. +Посмотрим на позицию $p - |w|$: если мы удалили строку $z$ с началом в этой позиции, то мы и сейчас можем её удалить в силу периодичности строки $S$. +Следовательно, существует строка $z$, которая началась до позиции $p - |w|$, закончилась --- после, и которую мы удалили. + +\begin{figure}[ht] + \centering + \incfig{galil1}{0.5\linewidth} +\end{figure} + +Вспоминая замечание 2, получаем, что $z^{k-2}$ --- префикс оставшейся строки, начиная с позиции $p + 1$. +И в силу периодичности $z^{k-2}$ --- префикс строки, начиная с позиции $p - |w| + 1$. + +\begin{figure}[ht] + \centering + \incfig{galil2}{0.5\linewidth} +\end{figure} + +Следовательно, строка $z$ имеет нетривиальный период --- противоречие с минимальностью. + +Таким образом, это можно даже написать за квадрат и $O(1)$ дополнительной памяти. + +\textbf{Доказательство.} (Теоремы о композиции) +Будем повторять следующие действия, пока у строки $R$ есть хотя бы два префиксных периода $p_1$ и $p_2$: +\begin{itemize} + \item Найдём $i \le p_2$, такой что $R[i..|R|]$ не имеет префиксный период короче $p_2$ (по лемме 3). + \item Присвоим $R \leftarrow R[i..|R|]$. +\end{itemize} +Теперь положим $v = R$ и $u$ --- удалённый префикс. +То, что у $v$ не более одного префиксного периода, следует из условия цикла. +Докажем, что $|u| = O(\shift_v(|v|))$. + +Рассмотрим периоды, которые возникали: пусть $p_{1,1}, \dots, p_{1,l}$ --- первые периоды, $p_{2,1}, \dots, p_{2,l}$ --- вторые. +Тогда для всех $i$ $p_{1,i} \cdot (k - 1) < p_{2,i}$ и $p_{2,i} \le p_{1,i+1}$. +Мы отпилили не более $p_{2,1} + p_{2,2} + \dots + p_{2,l} \le p_{2,l} \left( \dots + \frac{1}{(k-1)^2} + \frac{1}{k-1} + 1 \right) = \Theta(p_{2,l})$. + +Так как на последнем шаге мы отпилили префикс длины $p_{2,l}$, являющийся префиксным периодом, мы знаем, что $|v| \ge p_{2,l}^{k-1}$. +Теперь если $\shift_v(|v|) < p_{2,l}$, то традиционно применяем лемму 0 к префиксу длины $p_{2,l}^{k-1}$ и получаем противоречие с базовостью префикса длины $p_{2,l}$. +Следовательно, $|u| = O(p_{2,l})$ и $\shift_v(|v|) \ge p_{2,l}$. + +\subsubsection{Принцип работы алгоритма} +Пусть мы находим вхождения строки $R$ в строку $S$. +Глобально, алгоритм работает по следующей схеме: пусть $p$ --- текущая позиция в строке $S$, $q$ --- длина префикса $R$, про который мы точно знаем, что $S[p..p + q) = R[0..q)$, $f$ --- магическая функция, которая считает, куда надо прыгать, в которой и заключается весь алгоритм: +\begin{algorithm}[H] + \DontPrintSemicolon + $(p, q) \leftarrow (1, 0)$ \; + + \While {$p \le |S|$} { + \While {$S_{p+q} = R_{q + 1}$} { + $q \leftarrow q + 1$ \; + } + \If {$q = |R|$} { + Нашли вхождение $S[p..p+q) = R$ \; + } + $(p, q) \leftarrow f(p, q)$ \; + } +\end{algorithm} + +Например, если взять $f(p, q) = (p + 1, 0)$, то мы получим наивный поиск за $O(|S| \cdot |R|)$. +Но теперь к тому, почему теорема о декомпозиции так важна. +Заметим, что если бы нам везло и при подсчёте $f$ всегда бы случалось так, что $\shift_R(q) > \frac{q}{k}$, то мы бы могли просто брать $f(p, q) = (p + \max(1, \lceil q / k \rceil), 0)$, получая линейное время работы. +Действительно, шифт --- это по определению минимальный прыжок, который нужно сделать, чтобы был смысл в поиске вхождения. + +Итак, применим теорему о декомпозиции: $R = uv$. +Если у $v$ нет префиксных периодов, то $\shift_v(|v|) > \frac{q}{k}$ и мы можем применять переход выше. +Но если есть префиксный период длины $p_1$, то переход становится сложнее: +\[ + f(p, q) = + \begin{cases} + (p + p_1, q - p_1), & \text{если $kp_1 \le q \le \reach_v(p_1)$}, \\ + (p + \max(1, \lceil q / k \rceil), 0), & \text{иначе}. + \end{cases} +\] +Откуда это берётся: заметим, что условия очень похожи на лемму 2. +Действительно, если не выполнены неравенства, то $\shift_v(q) > \frac{q}{k}$, и мы можем смело прыгать дальше. +А если выполнены, то в силу базовости префикса длины $p_1$ мы тоже можем прыгать сразу на него (иначе, не поверите, лемма 0). +Таким образом, нам остаётся построить декомпозицию и найти $p_1$ с $\reach_v(p_1)$. + +\subsubsection{Быстрое построение декомпозиции} +На самом деле, процедуру из доказательства теоремы можно эффективно реализовать. + +\textbf{Нахождение самого короткого префиксного периода} + +Для начала нужно научиться находить самый короткий префиксный период, чтобы применять лемму 3. +Для этого будем использовать алгоритм выше на строке $S$ и ей же самой, начиная с $p = 2, q = 0$. +Понятно, что вхождение мы не найдём, нас интересует другое: если оказалось, что $p + q = i$, и такое значение $i$ мы встретили впервые, то $\shift_S(i) = p - 1$. + +Докажем, что $\shift_S(i) \le p - 1$ для всех позиций $p$, где встретилось $i$. +Действительно, если $S[p..p + q)$ совпадает с $S[1..q]$, то строка $S[1..i]$, как минимум, $(p - 1)$-периодична. +Теперь неравенство в другую сторону следует из того, что мы встретили $i$ впервые, то есть $p$ минимально. + +Что нам теперь с этим делать? +Заметим, что если $\shift_S(i) \le \frac{i}{k}$, то мы нашли какой-то префиксный период по лемме 1, а если нет, то можно прыгать в $(p + \max(1, \lceil q / k \rceil), 0)$. +Но найдём ли мы префиксный период минимальной длины? +Пусть $p_1$ --- длина минимального префиксного периода. +Тогда по рассуждениям выше мы не могли перепрыгнуть позицией $p$ через $p_1 + 1$ в силу базовости (в этом случае перед этим прыжком $q \ge k p_1$ и $p \in (1, p_1 + 1)$, так что опять лемма 0), а при попадании в неё вхождение точно найдётся. + +Время работы: если не нашли, то мы просто пройдём всю строку за $O(|S|)$, а если нашли, то остановимся в позиции $p_1$, то есть $O(p_1)$. + +\textbf{Нахождение префиксного периода меньше данного} + +Пусть мы хотим найти префиксный период длины менее $p_2$. +Аналогично предыдущему мы можем искать минимальный. +Если нашёлся $p_1 < p_2$, то время работы будет $O(p_1)$. +А если не нашёлся, то найдётся префиксный период длины $p_2$, и будет $O(p_2)$. + +\textbf{Нахождение второго по длине префиксного периода} + +Принцип тот же самый. Для начала найдём самый короткий префиксный период $p_1$ и посчитаем $\reach_S(p_1)$ за $O(\reach_S(p_1))$. +Теперь, как и в самом алгоритме, мы можем взять функцию перехода +\[ + f(p, q) = + \begin{cases} + (p + p_1, q - p_1), & \text{если $kp_1 \le q \le \reach_S(p_1)$}, \\ + (p + \max(1, \lceil q / k \rceil), 0), & \text{иначе}. + \end{cases} +\] +Не совсем очевидно, почему первый переход легален в случае, когда у нас потенциально несколько префиксных периодов: могло произойти такое, что мы перепрыгнули через второй префиксный период $p_2$. +Пусть мы так перепрыгнули, стартуя из $(p, q)$. +Тогда $\shift_S(q) \le \frac{q}{k}$, иначе мы бы пошли вторым переходом, который легален. +Более того, $\shift_S(q) \ne p_1$ означал бы, что мы нашли уже здесь второй префиксный период. +Следовательно, $\shift_S(q) = p_1$, а на $p_1$ прыгать можно по определению шифта. + +За какое время мы найдём $p_2$ (или поймём, что его нет)? +Нахождение $\reach_S(p_1)$ может вызывать сомнения, но заметим, что если $p_2 < \reach_S(p_1) - p_1$, то у нас опять противоречие по лемме 0. +Следовательно, $\reach_S(p_1) = O(p_2)$, а дальше ничего нового: как и в поиске минимального префиксного периода $O(p_2)$, если нашли, $O(|S|)$, если нет. + +\textbf{Собираем всё вместе} + +Итак, оценим, за сколько мы умеем находить разбиение из леммы 3. +На нахождение минимального префиксного периода длины $p_1$ уходит $O(p_1)$, после чего мы отпиливаем $p_1$ символов. +Следовательно, здесь $O(|S_1|)$, где $S = S_1 S_2$ --- разбиение. +В теореме о декомпозиции мы ещё ищем второй префиксный период $p_2$, так что, пользуясь тем, что $|S_1| \le p_2$, получаем время работы на одну итерацию $O(|S_1|) + O(p_2) = O(p_2)$ (либо $O(|S|)$, и это последняя итерация). + +Остаётся понять, за сколько суммарно это будет работать. +Пусть $p_2$ и $p_2'$ --- длины двух последовательных вторых префиксных периодов, которые мы нашли. +Вспоминим, что между нахождением $p_2$ и $p_2'$ мы удалили не более $p_2$ символов, то есть оставшаяся строка имеет $p_2$-периодичный префикс длины хотя бы $(k - 1) p_2$. +Тогда если $p_2' \le p_2 (k - 2)$, то по лемме 0 получаем противоречие с базовостью. +Следовательно, каждый следующий $p_2$ хотя бы в 2 раза больше предыдущего, и время работы всего цикла --- $O(|S| (1 + \frac{1}{2} + \frac{1}{4} + \dots)) = O(|S|)$. + +Это нам позволяет построить декомпозицию строки $R$ за $O(|R|)$, после чего найти все вхождения за $O(|S|)$. + +\subsection{Суффиксный автомат} +Для ответа на запросы принадлежности подстроки строке можно построить бор на суффиксах за квадрат, но можно лучше. + +\textbf{Определение.} Суффиксный автомат $\DAWG(s)$ --- это минимальный ДКА, языком которого является множество суффиксов строки $s$. + +\textbf{Определение.} Пусть $x$ --- подстрока $S$. +Тогда правым контекстом $R_S(x)$ называется $\{y~|~\text{$xy$ --- суффикс $s$}\}$. + +\textbf{Определение.} $x_1 \sim x_2$, если $R_S(x_1) = R_S(x_2)$. + +\textbf{Утверждение.} Пусть $x_1 \sim x_2$ и $|x_1| > |x_2|$. Тогда $x_2$ --- суффикс $x_1$. +Посмотрим на строку и на определения, очевидно. +Более того, если $x$ --- суффикс $x_1$, такой что $|x_1| > |x| > |x_2|$, то $R_S(x) = R_S(x_1) = R_S(x_2)$. + +\textbf{Определение.} Пусть $x$ --- подстрока $S$. Тогда +\begin{itemize} + \item $[x]_S$ --- класс эквивалентности $x$ по $S$. + \item $\longest([x]_S)$ --- самая длинная строка в $[x]_S$. + \item $\len([x]_S) = |\longest([x]_S)|$. +\end{itemize} + +\textbf{Утверждение.} Если нам даны longest-ы, то класс эквивалентности --- это longest и его суффиксы, пока не упрёмся в longest. +Но не могло ли произойти так, что мы упёрлись в строку из другого класса эквивалентности, не являющуюся longest-ом? +Нет, от противного: пусть есть строка $y$ и символы $a$ и $b$, такие что $ay \not\sim by$, но $y \sim by$. +Так как $R_S(ay) \subset R_S(y)$ и $R_S(y) = R_S(by)$, получаем $R_S(ay) \subset R_S(by)$. +Аналогично в обратную сторону и выходит $ay \sim by$. + +\textbf{Лемма.} Пусть $x$ --- подстрока $S$. Тогда $x = \longest([x]_S)$ тогда и только тогда, когда ($\exists a \ne b:$ $ax, bx$ --- подстроки $S$) или ($x$ --- префикс $S$). + +\textbf{Определение.} Суффиксная ссылка --- +\[ + \suff([x]_S) = \{[y]_S~|~\text{$y$ --- суффикс $x$, $[x]_S \ne [y]_S$, $|y| \to \max$}\}. +\] +Определение написано, как множество, но $y$ определяется однозначно засчёт максимизации длины. +Не определена для пустого слова и только для него. + +\textbf{Определение.} Дерево суффиксных ссылок --- дерево, в котором ребро из родителя в ребёнка идёт тогда и только тогда, когда суффиксная ссылка из ребёнка ведёт в родителя. + +\textbf{Замечание.} Количество детей у строки в суффиксном дереве --- количество способов приписать слева символ так, чтобы она осталась подстрокой. + +\textbf{Утверждение.} В дереве суффиксных ссылок есть не более $|S| + 1$ вершин с не более, чем 1 ребёнком (просто все префиксы строки). +Более того, не более $|S|$, если строка не имеет вид $a^n$. + +\textbf{Утверждение.} (Глобально про деревья) Пусть у дерева $p$ листов и $q$ вершин с одним ребёнком. +Тогда у него не более $2p + q - 1$ вершин. +Можно смотреть на это так: сначала есть $p$ листьев, потом при добавлении каждой вершины мы либо уменьшаем $q$, либо объединяем хотя бы две вершины в одну. + +\textbf{Теорема.} Пусть $|S| \ge 2$. Тогда $\DAWG(S)$ содержит не более $2|S| - 1$ вершин, причём если $|S| \ge 3$, то ровно $2|S| - 1$ тогда и только тогда, когда $S = ab^{n-1}$. +Следует из двух предыдущих утверждений. + +\textbf{Теорема.} Если $|S| \ge 3$, то в $\DAWG(S)$ не более $3|S| - 4$ рёбер. + +\textbf{Доказательство.} У автомата есть конечная вершина $[S]_S$, запустим из неё DFS по обратным рёбрам и построим дерево. +Тогда в дереве не более $2|S| - 2$ рёбер. +Но мы живём в ориентированном графе, поэтому остались ещё дополнительные рёбра. +Каждому такому ребру можно сопоставить путь, который как-то ходит по автомату, проходит по этому ребру и потом идёт строго по дереву. +Заметим, что строка, полученная проходом по этому пути, --- суффикс $S$, так как она эквивалентна $[S]_S$. +Более того, каждому суффиксу мы сопоставили не более одного ребра, так как автомат детерминированный, то есть путь по строке восстанавливается однозначно, ребро по пути --- тоже, как последнее ребро не в дереве DFS. +Следовательно, таких рёбер не более $|S| - 1$: вычли два, ибо путь суффикса длины $|S|$ состоит полностью из рёбер дерева DFS, пустой суффикс не берём. +Получили $3|S| - 3$. Теперь вспомним, что ровно $2|S| - 2$ рёбер DFS-а может быть ровно в одном случае (описан в предыдущей теореме). +Можно проверить, что в нём не наберётся достаточно рёбер, так что $3|S| - 3$ не достигается. + +\subsubsection{Алгоритм построения} +Будем добавлять символы в конец, обновляя автомат, чтобы он содержал новые суффиксы. +Рассмотрим, как автомат меняется при переходе $S \to Sc$. + +\textbf{Утверждение.} $[Sc]_{Sc}$ --- множество всех суффисов $Sc$, не входящих в $S$, как подстроки. + +\textbf{Теорема.} Пусть $x = \longest([x]_{Sc})$. Тогда верно одно из следующих утверждений: +\begin{itemize} + \item $x = \longest([x]_S)$. + \item $x = Sc$. + \item $x$ --- суффикс $Sc$ и перед всеми вхождениями $x$ в $S$ был один и тот же символ. + Причём это максимальный такой суффикс: суффиксы длины меньше будут входить в самый длинный, и перед их вхождениями не появятся разные буквы. + В частности, это максимальный суффикс $Sc$, являющийся подстрокой $S$, возможно, равный пустому слову. +\end{itemize} + +Таким образом, можно брать вершину $[S]$, идти по суффиксным ссылкам, пока нет перехода по символу $c$, и добавлять переход по символу $c$ в состояние $[Sc]$. +Так как суммарно рёбер в автомате всегда мало, это работает быстро. +Пусть $S_0$ --- максимальный суффикс $Sc$, входящий в $S$, как подстрока. + +Если мы по суффиксным ссылкам пришли в пустое слово, проведём в него суффиксную ссылку из $[Sc]$ и завершимся --- это происходит, если $c$ ещё не встречался в $S$. +Пусть мы дошли до вершины $p$, из которой есть переход по символу $c$. +Утверждение: по символу $c$ ребро идёт ровно в $[S_0]_S$, следует из определения $S_0$. + +Теперь нужно проверить, является ли $S_0$ longest-ом в $[S_0]_S$. +Если это так, то $\len(p) + 1 = \len([S_0]_S)$, и нам повезло. +Иначе $S_0c$ станет longest-ом, и состояние $[S_0]_S$ придётся раздвоить и добавить между ними переход по $c$. +Остаётся разобраться с переходами в $[S_0]_S$. Но тут достаточно дальше пройти по суффиксным ссылкам из $p$, пока есть переход в $[S_0]_S$ по $c$, и перенаправить ребро в новую вершину. + +Линейность построения всё ещё не доказана, так как мы переподвешиваем рёбра при клонировании вершины. +Доказательство будет добавлено в скором времени™. + +\subsubsection{Применение} +\textbf{Задача 0.} Проверить, входит ли подстрока в строку. + +\textbf{Задача 1.} Посчитать количество вхождений подстроки в строку. +Достаточно посчитать динамику на автомате, как на ориентированном ациклическом графе. + +\textbf{Задача 2.} Найти размер класса эквивалентности вершины $q$. Ответ: $\len(q) - \len(\suff(q))$. + +\textbf{Задача 3.} Алиса и Боб играют в следующую игру: дана строка $S$ и её подстрока $p$. +Игроки по очереди дописывают символ в конец строки $p$. +Проигрывает тот, кто дописал символ, после которого $p$ перестала быть подстрокой $S$. + +В таком варианте можно вновь написать динамику на DAG-е. +Есть усложнённый вариант: дана $S$, нужно вывести $k$-ую в лексикографическом порядке стартовую подстроку $p$, с которой Алиса выигрывает. +Напишем ту же динамику, теперь в каждой вершине посчитаем, сколько выигрышных подстрок достижимы из неё. +Обойдём автомат, идя каждый в наименьший лексикографически символ и найдём порядковую статистику классическим способом. + +Теперь то же самое, но в случае, если мы дописываем символы в начало. +Для начала научимся решать эту задачу для longest-ов: приписывание символа в начало --- это проход по обратной суффиксной ссылке. +Теперь насчитываем динамику, переходя по ним. +Есть оговорка, что при приписывании символа мы могли попасть не в longest, но из вершин, не являющихся longest, ход существует ровно один по определению, так что нужно смотреть на разность длин. +Теперь для поиска $k$-ой в лексикографическом порядке строки можно заметить, что для определения выигрышности подстроки нужно знать выигрышность longest-а и чётность её длины. +Поэтому теперь можно насчитывать ту же динамику, но теперь нужно дополнительно поддерживать чётность длины строки, по которой мы пришли в данное состояние. + +\subsection{Суффиксное дерево} +Вновь возвращаемся к задаче поиска подстроки в строке. +Рассмотрим бор на всех подстроках. Заметим, что в нём мало развилок, поэтому можно вместо путей между развилками хранить только одно ребро из полуинтервала, задающего подстроку, которая раньше была в этом пути. + +\textbf{Определение.} Полученное дерево называется \textit{сжатым суффиксным бором} или \textit{суффиксным деревом}. + +Заметим, что в этом дереве $O(|S|)$ вершин, так как развилок не больше, чем суффиксов строки. +Более того, если внимательно посмотреть на процесс добавления каждого суффикса по-одному, то можно заметить, что каждый раз добавляется не более двух вершин (разрезаем ребро, вставляем вершину посередине и проводим ребро из новой вершины в ещё одну новую) и не более двух рёбер (то же самое). +Можно привести пример, когда эта оценка достигается: допишем в конец символ, который до этого не встречался, к строке вида $a^n$. + +\subsubsection{Построение} +Суффиксное дерево можно построить многими халявными способами: взять суффиксный автомат и пройти по нему DFS-ом, взять суффиксный массив и LCP и др. +Но у всех этих решений есть один маленький недостаток: они работают в оффлайне. +Мы же хотим уметь добавлять символ в конец строки и перестраивать суффиксное дерево, сохраняя корректность. + +Очевидный алгоритм: будем увеличивать длины всех полуинтервалов на рёбрах и сдвигать указатели, соответствующие суффиксам. +В общем, просто обновим все вершины за линию. + +Оптимизация 1: если ребро заканчивается в конце слова, то будем писать на ребре полуинтервал с правым концом в $+\infty$ и не обновлять его при последующих добавлениях символов. + +\textbf{Лемма 1.} Подстрока в суффиксном дереве заканчивается в листе тогда и только тогда, когда она является суффиксом, и это единственное её вхождение. + +\textbf{Доказательство.} $\Rightarrow$. Действительно, пусть вхождение строки $x$ заканчивается в листе. +Если она не является суффиксом, то в боре есть подстрока $xc$, где $c$ --- символ, то есть у вхождения строки $x$ должен быть потомок с символом $c$. +Если вхождение не единственно, то другое вхождение не будет суффиксом, аналогично должен быть потомок. + +$\Leftarrow$. Опять же, если есть потомок, то у текущей строки есть вхождение не в виде суффикса. + +\textbf{Следствие.} Если пронумеровать суффиксы слева направо, то сначала несколько (хотя бы один --- вся строка) суффиксов заканчиваются в листах, а потом ни один не заканчивается в листе. +Следует из того, что суффиксы вложены друг в друга. + +\textbf{Определение.} FirstNotLeaf (FNL) --- минимальный номер суффикса, не заканчивающегося в листе. + +Оптимизация 2: не будем поддерживать указатели на все суффиксы и двигать их после каждого добавления символа, а оставим только указатель на FNL. + +\textbf{Утверждение.} Если при добавлении символа $c$ обнаружилось, что из FNL есть переход по символу $c$ и ничего добавлять не нужно, то это верно и для всех остальных суффиксов. + +\textbf{Доказательство.} Для суффиксов с меньшими номерами совсем халява --- по оптимизации 1 ничего не нужно делать. +А для суффиксов с бóльшими номерами замечаем, что они вложены в FNL, поэтому из них переход тоже заведомо есть. + +Таким образом, если переход есть, то мы двигаем FNL, и добавлять ничего не нужно. +А если перехода нет, то придётся добавить новую вершину, сдвинуть FNL и повторить всё заново. +Добавление рёбер и вершин работает быстро, так как итоговый размер линеен и мы ничего не удаляем, а вот с поиском нового FNL возникают проблемы. +Для этого будем использовать, как ни странно, суффиксные ссылки. + +\textbf{Определение.} $\path(pos)$ --- строка, по которой мы приходим в позицию $pos$. +Аналогично определяется $\path(v)$ для вершины $v$. + +\textbf{Определение.} $\suff(v)$ --- это такая позиция $pos$, что $\path(pos)$ --- это суффикс $\path(v)$ и $|\path(pos)| = |\path(v)| - 1$. + +\textbf{Утверждение.} Если $v$ --- не лист, то $\suff(v)$ --- это вершина (а не позиция посреди ребра). + +\textbf{Доказательство.} Рассмотрим вершину $v$. Пусть $Q = \path(v)$, $Q'$ --- строка $Q$ без первого символа. +Так как дерево сжатое, у вершины $v$ есть хотя бы два потомка со строками $Qa$ и $Qb$, которые являются подстроками. +Но тогда и $Q'a$ с $Q'b$ являются подстроками. +Замечаем, что вершина, отвечающая строке $Q'$ --- в точности суффиксная ссылка (это вершина, так как степень --- хотя бы 2). + +Однако в процессе алгоритма может случится такое, что по суффиксной ссылке вершины всё-таки нет. +Получается, доказательство некорректное? Нет, просто вершина должна добавиться на этом шаге, так что в этом случае вершину можно просто добавить. + +Теперь к подсчёту суффиксных ссылок. +Наивный способ: если родитель --- не корень, то перейдём по суффиксной ссылке родителя, потом пройдём по строке, по которой мы поднялись в родителя. +Если же родитель --- корень, то пропускаем шаг перехода по суффиксной ссылке. +Так, мы поднимаемся в родителя и переходим по суффиксной ссылке за константу, а потом спускаемся за количество вершин на пути, откуда получается квадрат. + +А точно квадрат? + +\textbf{Определение.} Глубина вершины $d(v)$ --- количество рёбер на пути от корня до $v$. Здесь мы именно считаем настоящие, не сжатые, рёбра. + +\textbf{Утверждение.} Для любой вершины $v$ $d(\suff(v)) \ge d(v) - 1$. + +\textbf{Доказательство.} Посмотрим на $A$ --- путь от корня до $v$ и на $B$ --- путь от корня до $\suff(v)$. +Заметим, что из каждой вершины на пути $A$ суффиксная ссылка ведёт в точности на вершину на пути $B$, кроме, возможно, самой первой (если длина её строки равна 1, то в корень, иначе в $B$). +Отсюда искомая оценка. + +Внимательно посмотрим на то, как изменяется глубина вершины FNL. +Изначально она равна нулю. +При переходе по суффиксной ссылке она уменьшается не более, чем на 1, при переходе в родителя --- ещё на 1. +А во время спуска она как-то увеличивается, но больше длины строки она стать не сможет. +Следовательно, суммарно глубина изменяется не более, чем на $3n$. + +\subsection{Суффиксный массив} +Будем индексировать строку с нуля, $i$-ый суффикс --- суффикс с $i$-ой позиции. +Есть всякие дурацкие способы построения, но мы будем рассматривать алгоритм Карпа-Миллера-Розенфельда за $O(|S| \log(|S|))$. +Хотя и есть способы за $O(|S|)$ (например, из суффиксного дерева), но в общем случае, когда размер алфавита не ограничен и буквы --- это камешки, которые мы умеем только сравнивать, лучше не получится. + +Припишем в конец $\#$ и будем сортировать циклические сдвиги. +Будем сортировать сдвиги длины 1, 2, 4, и так далее $O(\log(|S|))$ раз. +Первую итерацию можно отсортировать любой сортировкой, теперь присвоим всем суффиксам классы эквивалентности и будем сортировать подсчётом пары. +Неасимптотическая оптимизация: можно пары сортировать не в две сортировки, а в одну, так как можно переиспольозвать информацию об отсортированности суффиксов меньшей длины. + +\subsubsection{Поиск подстроки в строке за $O(|P| + \log(|S|))$} +Найдём подстроку $P$ в строке $S$ используя хэши, бинарный поиск и... суффиксный массив. + +\textbf{Определение.} $\LCP(S, T)$ --- самый длинный общий префикс строк $S$ и $T$. + +Сделаем бинарный поиск по суффиксному массиву, пусть $l$ и $r$ --- границы, $lcpL, lcpR$ --- соответствующие LCP. +Мы знаем, что $l$-ый суффикс меньше $P$, а $r$-ый суффикс --- больше. + +\textbf{Инвариант.} +\begin{itemize} + \item $S[sa_l..|S|-1] < P < S[sa_r..|S|-1]$. + \item $lcpL = \LCP(S[sa_l..|S|-1], P)$. + \item $lcpR = \LCP(S[sa_r..|S|-1], P)$. +\end{itemize} +Не умаляя общности, $lcpL \le lcpR$, сравним $mid$-тый суффикс со строкой $P$. +Хотелось бы сказать, что $lcpM$ можно просто увеличивать, так как суммарно LCP границ не уменьшается. +Но если зайти за $lcpR$, то прогресс придётся сбросить и асимптотика сломается. +Поэтому можно использовать хэши, чтобы проверить, правда ли, что $lcpM \ge lcpR$, и потом уже двигаться по-одному. + +\subsubsection{Массив LCP} +\textbf{Определение.} $lcp$ --- массив, такой что +\[ + lcp[i] = \LCP(S[sa_i..|S|-1], S[sa_{i+1}..|S|-1]). +\] + +\textbf{Утверждение.} LCP $i$-ого и $j$-ого суффикса для $i < j$ --- это\\ $\min(lcp[i], lcp[i + 1], \dots, lcp[j])$. +В качестве упражнения. + +\textbf{Замечание.} $lcp$ позволяет быстро строить суффиксное дерево. + +Построить можно алгоритмом Аримуры-Арикавы-Касаи-Ли-Парка. +Для доказательства асимптотики рассмотрим два соседних суффикса, удалим первый символ и посмотрим на значения LCP $i$-ого и $(i-1)$-ого суффикса. diff --git a/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/title_page.tex b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/title_page.tex new file mode 100644 index 00000000..164d8d84 --- /dev/null +++ b/Lectures/3_Semester/Algorithms_and_Data_Structures/2023_Rukhovich/title_page.tex @@ -0,0 +1,27 @@ +\begin{titlepage} + \clearpage\thispagestyle{empty} + \centering + + \textbf{Московский физико-технический институт \\ Физтех-школа прикладной математики и информатики} + \vspace{33ex} + + {\textbf{\FullCourseNameFirstPart}} + + \SemesterNumber\ СЕМЕСТР + \vspace{1ex} + + Лектор: \textit{\LecturerInitials} + + \includegraphics[width=0.4\textwidth]{logo_ltc.png} + + \begin{flushright} + \noindent + Автор: \href{\TGLink}{\textit{\AuthorInitials}} + \\ + \href{\GithubLink}{\textit{Проект на Github}} + \end{flushright} + + \vfill + \CourseDate + \pagebreak +\end{titlepage} diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/diffeqs.tex b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/diffeqs.tex new file mode 100644 index 00000000..ccecd5c5 --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/diffeqs.tex @@ -0,0 +1,2024 @@ +\section{Введение} +\textbf{Определение.} Пусть $\Omega \subset \mathbb R \times \underbrace{\mathbb R^n \times \dots \times \mathbb R^n}_{\text{$k + 1$ раз}}$, $F: \Omega \to \mathbb R^m$. +\textit{Обыкновенным дифференциальным уравнением (или системой) $k$-ого порядка} (ОДУ) называется уравнение +\begin{equation} + F(t, x, x', \dots, x^{(k)}) = 0. +\end{equation} +Его \textit{решением} называется функция $x: I \to \mathbb R^n$, где: +\begin{itemize} + \item $I \subset \mathbb R$ --- интервал. + \item $x \in C^k(I, \mathbb R^n)$ --- $k$ раз непрерывно дифференцируемая функция. + \item Для любого $t \in I$ выполнено $(t, x(t), \dots, x^{(k)}(t)) \in \Omega$, то есть попадает в область определения $F$. + \item $F(t, x(t), \dots, x^{(k)}(t)) \equiv 0$ на $I$. +\end{itemize} + +Как правило, рассматривать совсем общие уравнения неинтерестно, так как они слишком сложные, поэтому мы обычно будем рассматривать частный случай. + +\textbf{Определение.} Пусть $\Gamma \subset \mathbb R \times \underbrace{\mathbb R^n \times \dots \times \mathbb R^n}_{\text{$k$ раз}}$, $F: \Gamma \to \mathbb R^n$. +\textit{Нормальным ОДУ} (или системой) $k$-ого порядка называется уравнение +\begin{equation} + x^{(k)} = F(t, x, x', \dots, x^{(k-1)}). +\end{equation} + +\textbf{Примеры:} +\begin{enumerate} + \item $x' = x$, решение --- $x(t) = ce^t$ для всех $c \in \mathbb R$ и интервалов $I \subset \mathbb R$. + Решением является и функция и область определения. + \item $t^2 + x^2 + (x')^2 = 0$. Решений нет, так как решение должно быть определено на \textit{интервале}, то есть только в нуле определить нельзя. + \item $x' = 1 + x^2$. Понятно, что $x(t) = \tg(t)$ подходит, но что с областью определения? + Нам подходят $t \in \mathbb R \setminus \{ \frac{\pi}{2} + \pi n~|~n \in \mathbb Z\}$, откуда получается, что решения --- это все функции, определённые на подынтервалах этого множества. +\end{enumerate} + +\subsection{Простейшие типы дифференциальных уравнений} +\subsubsection{Уравнения с разделяющимися переменными} +Пусть $I, J$ --- интервалы, $f: I \to \mathbb R$, $g: J \to \mathbb R$ --- непрерывные функции. + +\textbf{Определение.} \textit{Уравнение с разделяющимися переменными} --- это уравнение вида $x' = f(t) g(x)$. + + +Рассмотрим два случая. + +Второй --- $g(\cdot)$ не обнуляется. +Зафиксируем какое-то решение $x(\cdot)$. Заметим, что получится тождество $x'(t) \equiv f(t) g(x)$. Тогда можно разделить на $g(x(t))$: +\[ + \frac{x'(t)}{g(x(t))} \equiv f(t) +\] +Проинтегрируем обе части. Здесь и далее под интегралом подразумевается какая-то фиксированная первообразная. +\[ + \int \frac{x'(t)}{g(x(t))} dt \equiv \int f(t)dt + C +\] +Внесём $x$ под дифференциал. +\[ + \int \frac{dx}{g(x(t))} \equiv \int f(t)dt + C +\] +Положим $G(t) = \int \frac{dx}{g(x)}$ и $F(t) = \int f(t) dt$, тогда получаем +\[ + G(x(t)) \equiv F(t) + C +\] +Теперь заметим, что $g(\cdot)$ --- это непрерывная функция на интервале, которая не обнуляется. +Иными словами, она строго больше нуля или строго меньше, а это значит, что $G(\cdot)$ строго возрастает или строго убывает, то есть к ней применима теорема об обратной функции. +\[ + x(t) \equiv G^{-1}(F(t) + C) +\] +Так как везде были тождества, сие уравнение эквивалентно исходному. +Важно только помнить, что $G^{-1}$ определена на $G(J)$, так что подходят не совсем все пары $(t, C)$. + +Но что делать со случаем, когда $g(\cdot)$ всё-таки обнуляется? +Тут возникают всякие неприятности, как минимум, если для какого-то $\overline{x} \in J$ выполнено $g(\overline{x}) = 0$, то $x(t) \equiv \overline{x}$ --- решение для всех $t \in I$. +Но можно пойти дальше. + +\textbf{Упражнение.} Пусть существует $\overline x \in J$, такое что $g(\overline x) = 0$, а при $x > \overline x$ выполнено $g(x) \ne 0$. +Пусть также найдётся $\overline t \in I$, такое что $f(\overline t) \ne 0$, а интеграл $\int_{\overline x}^x \frac{d\xi}{g(\xi)}$ сходится при $x > \overline x$. +Тогда найдётся функция $y(t)$ для $t > \overline t$ и функция +\[ + \widehat x(t) = + \begin{cases} + \overline x, & t \le \overline t \\ + y(t), & t > \overline t + \end{cases}, +\] +являющаяся решением. + +Что это всё значит: мы нашли тривиальное решение $x(t) \equiv \overline x$, потом нашли решение уравнения $y(\cdot)$ методом выше (так как там уже $g(\cdot)$ не обнуляется), а теперь взяли, склеили их и получили новое решение. +В виде картинки: + +\begin{figure}[ht] + \centering + \incfig{001}{0.4\linewidth} + \caption{Третье решение.} +\end{figure} + +\subsubsection{Линейные уравнения I порядка} +Пусть задан интервал $I \subset \mathbb R$ и две непрерывные функции $a, b: I \to \mathbb R$. + +\textbf{Определение.} Линейное уравнение первого порядка --- уравнение вида $x' + a(t)x = b(t)$. +Если $b(t) \equiv 0$, то уравнение называется \textit{однородным}, иначе --- \textit{неоднородным}. + +Однородное уравнение --- это уравнение с разделяющей переменной. Его мы уже умеем решать: +\[ + \frac{dx}{dt} = -a(t)x +\] +При $x(t) \equiv 0$ верно, далее рассматриваем на интервалах, на которых не обнуляется. +\[ + \frac{dx}{x} = -a(t) dt +\] +\[ + \ln \left( |x| \right) = -\int a(t) dt + C +\] +\[ + |x(t)| = \widetilde{C} \exp \left(-\int_{t_0}^t a(s) ds \right) +\] +\[ + x(t) = C \exp \left(- \int_{t_0}^t a(s) ds \right), t \in I +\] +Здесь $C$ несколько раз переопределялась, конкретные переходы должны быть понятны. + +Для решения неоднородных уравнений можно использовать \textit{метод вариации произвольной постоянной}. Пусть $C = C(t)$, тогда +\[ + x(t) = C(t) \exp \left(- \int_{t_0}^t a(s) ds \right), t \in I +\] +Подставим в исходное неоднородное уравнение: +\[ + C'(t) \exp \left(- \int_{t_0}^t a(s) ds \right) - C(t) \exp \left(- \int_{t_0}^t a(s) ds \right) a(t) + a(t) C \exp (\dots) = b(t) +\] +\[ + C' = b(t) \exp \left( \int_{t_0}^t a(s) ds \right) +\] +\[ + C(t) = \int_{t_0}^t b(s) \exp \left( \int_{t_0}^s a(\xi) d\xi \right) ds + C +\] +По итогу +\[ + x(t) = \left( \int_{t_0}^t b(s) \exp \left( \int_{t_0}^s a(\xi) d\xi \right) ds + C \right) \cdot \exp \left( - \int_{t_0}^t a(s) ds \right). +\] +При желании эту формулу можно запомнить, но лучше просто знать метод и применять его. + +\subsubsection{Уравнение Бернулли} +Пусть задан интервал $I \subset \mathbb R$, константа $\alpha \in (0, 1) \cup (1, +\infty)$ и две непрерывные функции $a, b: I \to \mathbb R$. +Рассмотрим \textit{уравнение Бернулли}: +\[ + x' = a(t) x + b(t) x^\alpha. +\] +Для решения разделим на $x^\alpha$: +\[ + x^{-\alpha} x' = x^{1 - \alpha} a(t) + b(t) +\] +Замена: $y(t) = x(t)^{1 - \alpha}$, тогда уравнение выше перепишется в виде $y'(t) = (1 - \alpha)x^{-\alpha} x'(t)$ или же +\[ + \frac{y'}{1 - \alpha} = a(t) y + b(t) +\] +Получили линейное уравнение первого порядка. + +\subsubsection{Уравнение Риккати} +Пусть $a, b, c: I \to \mathbb R$ --- непрерывные функции, рассмотрим уравнение +\[ + x' = a(t) x^2 + b(t) x + c(t). +\] +Пусть с небес нам дали одно из его решений $y(\cdot)$. +Тогда можно сделать замену $z(t) = x(t) - y(t)$, и уравнение перепишется в виде +\[ + z' + y' = az^2 + 2azy + ay^2 + bz + by + c = +\] +(По условию $ay^2 + by + c = y'$) +\[ + = az^2 + 2azy + bz + y'. +\] +По итогу получается +\[ + z' = az^2 + (2ay + b)z +\] +--- уравнение Бернулли. + +\setcounter{equation}{0} +\subsection{Уравнения в дифференциалах} +Пусть $\Omega \subset \mathbb R^2$, $M, N: \Omega \to \mathbb R$. Рассмотрим уравнение +\[ + M(t, x) dt + N(t, x) dx = 0. +\] +Здесь решением может является и функция $x = x(t)$, и функция $t = t(x)$, удовлетворяющая всем условиям. + +\subsubsection{Однородные уравнения} +Пусть найдётся $p \ge 0$, такое что для любого $k > 0$ выполнено $M(kt, kx) \equiv k^p(t, x)$ и $N(kt, kx) = k^p N(t, x)$. +Тогда уравнение будет называться \textit{однородным}, и решается оно заменой $x(t) = t \cdot z(t)$. +При $t > 0$ уравнение перепишется в виде +\[ + t \cdot z' + z = - \frac{M(1, z)}{N(1, z)}, +\] +а при $t < 0$ будет +\[ + t \cdot z' + z = - \frac{M(-1, -z)}{N(-1, -z)}. +\] +Получили уравнение с разделяющимися переменными. + +\textbf{Замечание.} Да, нужно рассматривать два случая отдельно, просто выносить $k < 0$ не получится. +Например, для $M(t, x) = |x|$ отрицательные $k$ не вынесутся, а с положительными всё в порядке. + +\subsubsection{Уравнения в полных дифференциалах} +Пусть $M$ и $N$ непрерывны, $\Omega$ открыто и существует непрерывно дифференцируемая функция $f: \Omega \to \mathbb R$, такая что $\frac{\partial f}{\partial t} (t, x) \equiv M(t, x)$ и $\frac{\partial f}{\partial x} (t, x) \equiv N(t, x)$. +Тогда уравнение (1) будет называться \textit{уравнением в полных дифференциалах}. + +\textbf{Теорема.} (Из матанализа, б/д) Пусть множество $\Omega$ выпукло и $\frac{\partial M}{\partial x} (t, x) \equiv \frac{\partial N}{\partial t} (t, x)$. +Тогда найдётся дважды непрерывно дифференцируемая функция $f: \Omega \to \mathbb R$, такая что $\frac{\partial f}{\partial t} = M$ и $\frac{\partial f}{\partial x} = N$. + +\textbf{Утверждение.} Уравнение в полных дифференциалах эквивалентно уравнению $f(t, x) = C$, где $C$ --- константа. + +\textbf{Доказательство.} Пусть $x(\cdot)$ --- решение уравнения (1). Запишем цепочку эквивалентных утверждений: +\[ + x'(t) \equiv -\frac{M(t, x(t))}{N(t, x(t))} +\] +\[ + N(t, x(t)) x' + M(t, x(t)) \equiv 0 +\] +\[ + \frac{\partial f}{\partial x} (t, x(t)) x'(t) + \frac{\partial f}{\partial t} (t, x(t)) \equiv 0 +\] +(Заметим, что это производная композиции) +\[ + \frac{d}{dt}(f(t, x(t))) \equiv 0 +\] +\[ + f(t, x(t)) = C. +\] + +\QED + +\subsubsection{Интегрирующий множитель} +Пусть $M, N: \Omega \to \mathbb R$ --- непрерывно дифференцируемые функции, $\Omega$ --- односвязная область, уравнение то же. +Уравнение в дифференциалах можно свести к уравнению в полных дифференциалах умножением на специальную функцию $\mu(t, x)$, правда, новое уравнение не обязательно будет эквивалентно исходному. + +\textbf{Определение.} Функция $\mu: \Omega \to \mathbb R$ называется \textit{интегрирующим множителем}, если $\mu \ne 0$ на $\Omega$ и уравнение $\mu M dt + \mu N dx = 0$ является уравнением в полных дифференциалах. + +Общего способа подбора интегрирующего множителя нет (как правило, это не проще, чем решить само уравнение), и здесь будет рассмотрен только самый простой случай. + +\textbf{Утверждение.} Если $M(t, x) \ne 0$ при всех $(t, x) \in \Omega$ и $(\frac{\partial M}{\partial x} - \frac{\partial N}{\partial t})\frac{1}{N}$ зависит только от $t$, то существует интегрирующий множитель $\mu$, зависящий только от $t$ и такой, что $\mu(t) \ne 0$ при всех $t$. + +\textbf{Доказательство.} Чтобы уравнение было уравнением в полных дифференциалах, дифференциалы должны совпадать (по теореме выше). То есть +\[ + \frac{\partial}{\partial x} \left( \mu(t) M(t, x) \right) \equiv \frac{\partial}{\partial t} \left( \mu(t) N(t, x) \right) +\] +Раскроем производные: +\[ + \mu \frac{\partial M}{\partial x} \equiv \mu'_t N + \mu \frac{\partial N}{\partial t} +\] +\[ + \mu'_t = \frac{\mu}{N} \left( \frac{\partial M}{\partial x} - \frac{\partial N}{\partial t} \right) +\] +По условию дробь зависит только от $t$, откуда получается уравнение с разделяющимися переменными для функции $\mu(t)$, и её можно найти стандартными техниками. + +\QED + +\section{Методы понижения порядка ОДУ} +(Не знаю, откуда взялся этот параграф в конспекте, но на всякий случай оставлю его) + +Пусть у нас есть ОДУ $F(t, x, x', x'', \dots, x^{(n)}) = 0$ (1). Рассмотрим случаи: + +\textbf{1)} $F(t, x^{(k)}, \dots, x^{(n)}) = 0$. Сделаем замену $y(t) = x^{(k)}$, порядок понизился. + +\textbf{2)} $F(x, x', \dots, x^{(n)}) = 0$. Введём новую функцию $p(x) = x'$, тогда $x'' = p'_x(x) x' = p'_x p$. +Исходное уравнение можно записать в виде $F(x, p, p'_xp, \dots) = 0$. Теперь решаем уравнение относительно $p$ и $x$. + +\textbf{3)} $F(t, x, x', \dots, x^{(n)}) = 0$ и при фиксированном $t$ функция $F(t, \cdot)$ \textit{положительно однородная}, то есть +\[ + F(t, \lambda x, \lambda x', \dots, \lambda x^{(n)}) = 0 \iff F(t, x, x', \dots, x^{(n)}) = 0~\forall \lambda > 0, x, x', \dots +\] +Пример положительно однородной функции: $t(x')^2 + (x'')^2 + e^tx^2 = 0$. +Решается заменой: $x' = xz$, где $z$ --- новая функция от $t$. Тогда $x'' = x'z + xz' = x(z^2 + z')$. +Подставляя в исходное уравнение, имеем $F(t, x, xz, x(z^2 + z'), \dots) = 0$. +Вспоминая про положительную однородность, мы можем избавиться от $x$, рассмотрев случаи, когда $x > 0$ и $x < 0$: +\[ + \left[ + \begin{array}{ll} + F(t, 1, z, z^2 + z', \dots) = 0 \\ + F(t, -1, -z, -z^2 - z', \dots) = 0 + \end{array} + \right .. +\] +Эта система \textbf{не эквивалентна} исходной, у неё могут быть новые решения. + +\section{Задача Коши} +\textbf{Определение.} Пусть у нас есть нормальная система ОДУ, а также $t_0 \in \mathbb R$ и $x_0, x_0^1, \dots, x_0^{k-1} \in \mathbb R^n$. Система уравнений +\[ + \begin{cases} + F(t, x, x', \dots, x^{(k)}) = 0 \\ + x(t_0) = x_0 \\ + x'(t_0) = x_0^1 \\ + \vdots \\ + x^{(k-1)}(t_0) = x_0^{k-1} + \end{cases} . +\] +называется \textit{задачей Коши}. +Соотношения про значения в точке $t_0$ принято называть \textit{начальным условием}. +Важно, что в задаче Коши $k$-ого порядка должно быть ровно $k$ начальных условий. +Её решением называется решение вышеуказанной системы, то есть решение дифференциального уравнения, удовлетворяющее начальному условию. +На данный момент у дифференциального уравнения есть одно решение с точностью до области определения. Чтобы убрать и эту неоднозначность, введём следующее + +\textbf{Определение.} Функция $x: I \to \mathbb R^n$ называется \textit{непродолжаемым (глобальным)} решением системы, если для любого решения $\tilde{x}: \tilde{I} \to \mathbb R^n$, такого что $I \subset \tilde{I}$ и $x \equiv \tilde{x}$ на $I$, выполняется $I = \tilde{I}$. + +Дальше нас будут в основном интересовать непродолжаемые решения. + +\subsection{Теоремы о существовании и о единственности решения} +В этом пункте мы будем рассматривать только нормальные задачи Коши первого порядка. Напоминание: + +\textbf{Определение.} Пусть $X, Y$ --- метрические пространства, $\beta \ge 0$, $g: X \to Y$. Отображение $g$ называется \textit{липшицевым} (с константной Липшица $\beta$), если для всех $x, u \in X$ выполняется неравенство +\[ + \rho_Y(g(x), g(u)) \le \beta \rho_X(x, u). +\] + +\textbf{Обозначение.} $O(x, R)$ --- открытый шар радиуса $R$ с центром в $x$. $B(x, R)$ --- замкнутый. + +\textbf{Теорема.} (О существовании и единственности решения задачи Коши) +Пусть $\Gamma \subset \mathbb R^2$ открыто, $f: \Gamma \to \mathbb R^n$, --- непрерывное отображение, $(t_0, x_0) \in \Gamma$. +Зафиксируем $r > 0$, такое что $B := B((t_0, x_0), r) \subset \Gamma$ (найдётся из открытости). +Положим $m := \sup_{(t, x) \in B} |f(t, x)|$ и $d := \frac{r}{\sqrt {1 + m^2}}$. +Пусть существуют $\frac{\partial f_i}{\partial x_j}(t, x)$ для всех $(t, x) \in \Gamma$ и все $\frac{\partial f_i}{\partial x_j}$ непрерывны на $\Gamma$. +Тогда задача Коши имеет решение $x: (t_0 - d, t_0 + d) \to \mathbb R^n$, такое что для любого другого решения $\widehat{x}: J \to \mathbb R^n$ верно, что $x \equiv \widehat{x}$ на $(t_0 - d, t_0 + d) \cap J$. + +Для доказательства нам потребуется несколько вспомогательных фактов. + +\textbf{Теорема.} (Принцип сжимающих отображений) Пусть $(X, \rho)$ --- полное метрическое пространство, и существует такое отображение $\Phi: X \to X$, что $f \circ \Phi$ --- липшицево с $\beta \in [0, 1)$. +Тогда у $\Phi$ существует единственная стационарная точка. + +\textbf{Доказательство.} Рассмотрим последовательность $\{x_n\}$, такую что $x_{n+1} = \Phi(x_n)$. +Будем доказывать, что последовательность фундаментальна, и поэтому она сходится в силу полноты пространства. +Оценим $\rho(x_n, x_{n+k})$. По неравенству треугольника +\[ + \rho(x_n, x_{n+k}) \le \sum_{i=n}^{n+k-1} \rho(x_i, x_{i+1}) = + \sum_{i=n}^{n+k-1} \rho(\Phi^i(x_0), \Phi^{i+1}(x_0)) = +\] +\[ + = \sum_{i=n}^{n+k-1} \rho(\Phi^i(x_0), \Phi^{i}(\Phi(x_0))) \le +\] +Применим определение сжимающего отображения: +\[ + \le \sum_{i=n}^{n+k-1} \beta^i \rho(x_0, \Phi(x_0)) + \le \sum_{i=n}^{\infty} \beta^i \rho(x_0, \Phi(x_0)) + = \frac{\beta^n}{1-\beta} \rho(x_0, \Phi(x_0)). +\] +Следовательно, последовательность $\{x_n\}$ фундаментальна, и в силу полноты пространства $\exists x \in X: x_n \to x$. +Докажем, что эта точка $x$ и есть искомая неподвижная. +Зафиксируем $n \in \mathbb N$, тогда +\[ + \rho(x, \Phi(x)) \le \rho(x, x_n) + \rho(x_n, \Phi(x_n)) + \rho(\Phi(x_n), \Phi(x)) \le +\] +\[ + \le \rho(x, x_n) + \frac{\beta^n}{1 - \beta} \rho(x_0, \Phi(x_0)) + \beta \rho(x_n, x). +\] +Заметим, что левая часть не зависит от $n$, а правая стремится к нулю при росте $n$, поэтому $\rho(x, \Phi(x))$ можно сделать меньше любого $\varepsilon > 0$. + +Докажем единственность. Пусть $\xi = \Phi(\xi)$. +Тогда +\[ + \rho(x, \xi) = \rho(\Phi(x), \Phi(\xi)) \le \beta \rho(x, \xi). +\] +Так как $\beta < 1$, это возможно только при $x = \xi$. + +\QED + +\textbf{Пример.} Как найти решение уравнения $x = \cos(x)$, используя только калькулятор с тригонометрическими функциями? +Можно просто применять косинус к нулю, пока не сойдётся, так как $X = [0, \frac{\pi}{2} - \varepsilon]$ является подходящим под условие теоремы полным метрическим пространством. + +\textbf{Следствие.} Пусть $(X, \rho)$ --- полное метрические пространство, $\Phi: X \to X$ --- произвольное отображение, но для какого-то $N$ отображение $\Phi^N$ сжимающее. +Тогда у $\Phi$ существует единственная неподвижная точка. + +\textbf{Доказательство.} Существование. Возьмём единственный $x$ из принципа сжимающих отображений, такой что $x = \Phi^N(x)$. +Тогда $\Phi(x) = \Phi^N(\Phi(x))$. +Следовательно, $\Phi(x)$ --- неподвижная точка $\Phi^N$, то есть $x = \Phi(x)$ в силу единственности. + +Единственность. Пусть $\xi$ --- неподвижная точка $\Phi$, то есть $\xi = \Phi(x)$. +Применим $N - 1$ раз отображение $\Phi$: $\xi = \Phi^N(\xi)$, то есть $\xi = x$, опять же в силу единственности стационарной точки у отображения $\Phi^N$. + +\QED + +\textbf{Утверждение.} (б/д) Пусть $T \subset \mathbb R$, $K \subset \mathbb R^n$ --- компакт, $K \ne \varnothing$. +$C(T, K)$ --- пространство непрерывных функций, действующих из $T$ в $K$ с метрикой $\rho(x_1, x_2) = \sup_{t \in T} |x_1(t) - x_2(t)|$, и оно является полным. + +\textbf{Утверждение.} (б/д) Для всех $A \in \mathbb R^{n \times n}$ и $x \in \mathbb R^n$ выполнено $|Ax| \le \| A \| \cdot |x|$. + +\textbf{Утверждение.} Пусть $\Gamma$ открыто, $f$ --- непрерывное отображение, частные производные $\frac{\partial f_i}{x_j}$ существуют и непрерывны. +Тогда найдётся $l \ge 0$, такой что для всех $(t, x_1), (t, x_2) \in B$ (где $B$ определяли в теореме о существовании и единственности) выполнено $|f(t, x_1) - f(t, x_2)| \le l|x_1 - x_2|$ (отображение липшицево по $x$ при каждом $t$). + +\textbf{Доказательство.} Зафиксируем $t, x_1, x_2$. Положим $a(s) := f(t, x_1 + s(x_2 - x_1))$ для $s \in [0, 1]$. +Тогда, беря интеграл вектор-функции, как покоординатный интеграл, +\[ + |f(t, x_2) - f(t, x_1)| = |a(1) - a(0)| = \left| \int_{0}^{1} a'(s) ds \right| = +\] +\[ + = \left| \int_{0}^{1} \frac{\partial f}{\partial x} (t, x_1 + s(x_2 - x_1)) (x_2 - x_1) ds \right| \le +\] +(по утверждению про норму матрицы) +\[ + \le \left| \int_{0}^{1} \left\| \frac{\partial f}{\partial x} (t, x_1 + s(x_2 - x_1)) \right\| \cdot |x_2 - x_1| ds \right| = +\] +\[ + = \left| \int_{0}^{1} \left\| \frac{\partial f}{\partial x} (t, x_1 + s(x_2 - x_1)) \right\| ds \right| \cdot |x_2 - x_1| \le + l |x_2 - x_1|, +\] +где $l = \max_{(\tau, x) \in B} \| \frac{\partial f}{\partial x} (\tau, x) \|$, он достигается в силу замкнутости шара $B$. + +\QED + +\textbf{Доказательство теоремы.} Возьмём произвольный интервал $T$, такой что $t_0 \in T \subset (t_0 - d, t_0 + d)$. +Положим $R := \sqrt {r^2 - d^2}$ (можно проверить, что выражение под корнем положительное), $X := C(R, B(x_0, R))$ --- полное метрическое пространство. + +Замечание: для всех $x \in X$ и $t \in T$ выполняется $(t, x(t)) \in B$, так как +\[ + |t - t_0|^2 + |x(t) - x_0|^2 \le d^2 + R^2 = r^2. +\] +Зададим отображение $\Phi: X \to X$ так, что $\Phi(x)(t) = x_0 + \int_{t_0}^{t} f(s, x(s))ds$. +Необходимо проверить корректность определения, ибо $\Phi(\cdot)$ не обязательно лежит в $X$, то есть для всех $x, t$ значение $\Phi(x)(t)$ должно лежать в $B(x_0, R)$: +\[ + |\Phi(x)(t) - x_0| = \left| \int_{t_0}^{t} f(s, x(s)) ds \right| \le \left| \int_{t_0}^{t} |f(s, x(s))|ds \right| \le +\] +(два модуля нужны, так как $t_0$ может превосходить $t$) +\[ + \le \left| \int_{t_0}^{t} m \cdot ds \right| = m|t - t_0| \le md = \frac{rm}{\sqrt {1 + m^2}} = R. +\] +Последнее равенство получено подстановкой $d$ в определение $R$. +Докажем, что +\[ + |\Phi^N(x_1)(t) - \Phi^N(x_2)(t)| \le \frac{(l |t - t_0|)^N}{N!} \rho(x_1, x_2) +\] +для всех $x_1, x_2 \in X, N \in \mathbb N, t \in T$. Здесь $l$ берётся из утверждения про липшицевость. +Имеем +\[ + |\Phi^N(x_1)(t) - \Phi^N(x_2)(t)| = \left| \int_{t_0}^{t} \left( f(x, \Phi^{N-1}(x_1)(s)) - f(s, \Phi^{N-1}(x_2)(s) \right) ds \right| \le +\] +\[ + \le l \left| \int_{t_0}^{t} |\Phi^{N-1}(x_1)(s) - \Phi^{N-1}(x_2)(s)ds| \right| +\] +Посмотрим на первые несколько $N$. При $N = 1$: +\[ + \left| \Phi^1(x_1)(t) - \Phi^1(x_2)(t) \right| \le l \left| \int_{t_0}^{t} |x_1(s) - x_2(s)|ds \right| \le +\] +(по определению расстояния между функциями) +\[ + \le l \left| \int_{t_0}^{t} \rho(x_1, x_2) ds \right| = l \rho(x_1, x_2) |t - t_0|. +\] +При $N = 2$: +\[ + \left| \Phi^2(x_1)(t) - \Phi^2(x_2)(t) \right| \le l \left| \int_{t_0}^{t} |\Phi^1(x_1)(s) - \Phi^1(x_2(s)| ds \right| \le +\] +(применим доказанное в предыдущем пункте) +\[ + \le l^2 \rho(x_1, x_2) \left| \int_{t_0t}^{t} |s-t_0|ds \right| = \frac{l^2}{2!} |t - t_0|^2 \rho(x_1, x_2). +\] +При $N = 3$: +\[ + \left| \Phi^3(x_1)(t) - \Phi^3(x_2)(t) \right| \le l \left| \int_{t_0}^{t} |\Phi^2(x_1)(s) - \Phi^2(x_2(s)| ds \right| \le +\] +(применим доказанное) +\[ + \le \frac{l^3}{2!} \rho(x_1, x_2) \left| \int_{t_0}^{t} |s-t_0|^2 ds \right| = \frac{l^3}{3!} |t - t_0|^3 \rho(x_1, x_2). +\] +Аналогично можно доказать и для всех $N$, формально нужно применить математическую индукцию. + +Из доказанной формулы получаем, что для всех $x_1, x_2 \in X$ +\[ + \rho(\Phi^N(x_1), \Phi^N(x_2)) = \sup_{t \in T} \left| \Phi^N(x_1)(t) - \Phi^N(x_2)(t) \right| \le +\] +\[ + \le \frac{l^N}{N!} \sup_{t \in T} |t - t_0|^N \rho(x_1, x_2) \le \frac{l^Nd^N}{N!} \rho(x_1, x_2). +\] +Последний переход сделан из соображения, что $T \subset B(t_0, d)$. Так как последнее выражение стремится к нулю при увеличении $N$, найдётся $N$, такое что $\frac{l^Nd^N}{N!} < 1$, и, значит, $\Phi^N$ --- сжимающее отображение. +По следствию из принципа сжимающих отображений существует единственная неподвижная точка $x$ у $\Phi(\cdot)$. +То есть для всех $t \in T$ +\[ + x = \Phi(x) \iff x(t) \equiv \Phi(x)(t) \iff x(t) \equiv x_0 + \int_{t_0}^{t} f(s, x(s))ds \iff +\] +\[ + \iff + \begin{cases} + x'(t) \equiv f(t, x(t)), \\ + x(t_0) = x_0. + \end{cases} +\] +Последний переход получен дифференцированием, теоремы про дифференцирование интегралов будут позже в матанализе. +Следовательно, $x$ --- решение задачи Коши, и оно единственно на любом интервале $T \subset (t_0 - d, t_0 + d)$. + +Докажем вторую часть теоремы. Возьмём произвольное решение $\widehat{x}: J \to \mathbb R^n$ и положим $T := (t_0 - d, t_0 + d) \cap J$. +Из доказанного следует, что $x(t) \equiv \widehat{x}(t)$ на $T$, что и требовалось доказать. + +\QED + +\section{Теоремы о продолжении решений} +Пусть дано открытое множество $\Gamma \subset \mathbb R \times \mathbb R^n$ и отображение $f: \cl(\Gamma) \to \mathbb R^n$ (замыкание $\Gamma$), $(t_0, x_0) \in \Gamma$ --- начальное условие задачи Коши. + +\textbf{Теорема.} (О продолжении решения до границы компакта) +Пусть $\cl(\Gamma)$ --- компакт, $f$ непрерывно, существуют непрерывные $\frac{\partial f_i}{\partial x_j}$ на $\Gamma$. +Тогда существует решение задачи Коши $x: (a, b) \to \mathbb R^n$, такое что $(a, x(a + 0)), (b, x(b - 0)) \in \partial \Gamma$ (нули --- это пределы справа/слева, $\partial \Gamma$ --- граница $\Gamma$). + +Иными словами, решение можно продолжить до границ области определения функции. + +\textbf{Доказательство.} Поскольку $\cl(\Gamma)$ --- компакт и $f$ непрерывно, функция $f$ ограничена, то есть $\exists M \ge 0: |f(t, x)| \le M$. +Положим $r_0 := \rho((t_0, x_0), \partial \Gamma)$ --- инфимум расстояния от точки до точки во множестве, $d_0 := \frac{r_0}{\sqrt {1 + M^2}}$. +Тогда по теореме о существовании и единственности найдётся решение задачи Коши $\phi_1: (t_0 - d_0, t_0 + d_0) \to \mathbb R^n$. +Построим решение $x(t)$. Определим $x(t) := \phi_1(t)$ при $t \in [t_0, t_0 + \frac{d_0}{2})$ + +Теперь положим $t_1 := t_0 + \frac{d_0}{2}$, $x_1 := \phi_1(t_1)$, $r_1 := \rho((t_1, x_1), \partial \Gamma)$, $d_1 := \frac{r_1}{\sqrt {1 + M^2}}$. +Вновь по теореме о существовании и единственности найдётся единственное решение задачи Коши $\phi_2: (t_1 - d_1, t_1 + d_1) \to \mathbb R^n$. +Определим $x(t) = \phi_2(t)$ при $t \in [t_1, t_1 + \frac{d_1}{2})$. +% Тогда имеем, что $x$ --- единственное решение задачи Коши на $(t_0 - d_0, t_0 + d_0) \cap (t_1 - d_1, t_1 + d_1)$, так как на этом интервале $\phi_1 \equiv \phi_2$. + +Продолжаем так строить и доопределять $x$ на полуинтервалах вида $[t_k, t_k + \frac{d_k}{2})$. +Теперь у нас есть два случая. Первый --- процесс завершился, то есть $\exists k: (t_k, x(t_k - 0)) \in \partial \Gamma$. Тогда $b := t_k$. +Второй --- такого $k$ нет. +Так как $\cl(\Gamma)$ --- компакт, последовательность $\{t_k\}$ ограничена, а по построению она возрастает. +Значит, существует предел $b := \lim_{k \to \infty}(t_k)$. + +Докажем, что существует предел $x(b - 0)$. +Функция $x$ определена на $\bigcup_{k=0}^{\infty} [t_k, t_{k+1})$, поэтому $x( \cdot )$ определена на $[t_0, b)$. +Тогда имеем +\[ + |x'(t)| = |f(t, x(t))| \le M \Rightarrow |x(t) - x(s)| \le M |t - s|. +\] +Иными словами, функция $x$ липшицева, и по критерию Коши существует предел $x(b - 0)$. + +Докажем, что $(b, x(b - 0)) \in \partial \Gamma$. +По построению имеем $t_{k+1} = t_0 + d_0 + \frac{d_1}{2} + \dots + \frac{d_k}{2} \to_{k \to \infty} b$, то есть $d_k \to 0$. +По определению $d_k$ --- это расстояние до границы, умноженное на константу, поэтому $\rho((t_k, x_k), \partial \Gamma) \to 0$. +Так как $\cl(\Gamma)$ --- компакт, $\partial \Gamma$ --- это тоже компакт. +По определению расстояния до множества найдётся точка $(t_k', x_k') \in \partial \Gamma$, такая что $\rho((t_k, x_k), \partial \Gamma) = |(t_k, x_k) - (t_k', x_k')|$. +Отсюда получаем при $k \to \infty$ +\[ + |(b, x(b - 0)) - (t_k', x_k')| \le |(b, x(b - 0)) - (t_k, x_k)| + \rho((t_k, x_k), \partial \Gamma) \to 0. +\] +(Это просто неравенство треугольника) + +Первое слагаемое стремится к нулю, так как это предел, второе --- так как точки стремятся к границе. +Следовательно, $(t_k', x_k') \to (b, x(b - 0))$, и, так как $\partial \Gamma$ --- компакт, предел этой последовательности тоже лежит в $\partial \Gamma$, то есть $(b, x(b - 0)) \in \partial \Gamma$. + +Аналогично можно продолжить $x$ и до левой границы. + +\QED + +\textbf{Замечание.} Данная теорема не гарантирует существование решения на всей проекции множества по одной из координат, ибо $x(\cdot)$ может продолжиться до границ по разным координатам. +Пример: + +\begin{figure}[ht] + \centering + \incfig{continuation-theorem}{0.5\linewidth} + \caption{Продолжение решения не до всей проекции} +\end{figure} + +\textbf{Лемма.} (О дифференциальном неравенстве) Пусть $I \subset \mathbb R$ --- интервал, $t_0 \in I$, $z \in C^1(I, \mathbb R^n)$, $A > 0$, $B \ge 0$, $|z'(t)| \le |A(z(t))| + B$ для всех $t \in I$. +Тогда +\[ + |z(t)| \le |z(t_0)|e^{A(t - t_0)} + \frac{B}{A} \left( e^{A|t - t_0|} - 1 \right). +\] + +\textbf{Замечание.} При $A = 0$ имеем $|z'(t)| \le B$. Тогда по теореме Лагранжа $|z(t)| \le |z(t_0)| + B|t - t_0|$ для всех $t \in I$. + +\textbf{Доказательство.} Будем доказывать при $t > t_0$ (при $t = t_0$ очевидно, при $t < t_0$ аналогично). +Пусть $z(t) \ne 0$, при равенстве нулю очевидно. +Если $z(\tau) \ne 0$ при $\tau \in (t_0, t)$, то положим $t^* := t_0$. +Иначе положим $t^* = \sup \{\tau \in (t_0, t): z(\tau) = 0\}$. +В любом случае получаем, что $z(t) \ne 0$ на интервале $(t^*, t)$. +Докажем, что $\frac{d}{d t} |z(\tau)| \le |z'(\tau)|$ при $\tau \in (t^*, t)$. +Замечание: продифференцировать модуль можно, так как он не обращается в ноль. + +Как известно, $|z(\tau)|^2 \equiv \left< z(\tau), z(\tau) \right>$ (скалярное произведение). +Продифференцируем: +\[ + 2|z(\tau)| \frac{d}{dt} |z(\tau)| \equiv 2 \left< z(\tau), z'(\tau) \right> \le 2|z(\tau)| \cdot |z'(\tau)|. +\] +Последнее неравенство --- по неравенству Коши-Буняковского. +В процессе мы продифференцировали скалярное произведение. Выведем его: пусть $\gamma(\tau) := \left< z(\tau), z(\tau) \right>$. +Распишем, как сумму координат и заметим, что получится ровно $\gamma' = \sum_{i=1}^{n} 2z_iz_i'$. + +Обратно к исходной задаче. Мы получили, что $\frac{d}{dt} |z(\tau)| \le |z'(\tau)| \le A|z(\tau)| + B$. +Перенесём $A|z(\tau)|$ в левую часть неравенство и домножим: +\[ + \left(\frac{d}{dt} |z(\tau)| - Az(\tau) \right) e^{-A(\tau - t^*)} \le Be^{-A(\tau - t^*)}. +\] +Дальше можно вынести производную и получить +\[ + \frac{d}{dt} \left( |z(\tau)| e^{-A(\tau - t^*)} \right) \le Be^{-A(\tau - t^*)}. +\] +Возьмём определённый интеграл от обеих частей: +\[ + |z(t)| e^{-A(t - t^*)} - |z(t^*)| \le -\frac{B}{A} e^{-A(t - t^*)} + \frac{B}{A}. +\] +Тогда +\[ + |z(t)| \le |z(t^*)| e^{A(t - t^*)} + \frac{B}{A} \left( e^{A(t - t^*)} - 1 \right). +\] +Получили почти то, что нужно, но тут вместо $t_0$ стоит $t^*$. +Но по построению имеем, что $t - t^* \le t - t_0$ и $|z(t^*)| \le |z(t_0)|$, ибо мы выбирали $t^*$ так, что либо $z(t^*) = 0$, либо $t^* = t_0$. + +\QED + +\textbf{Теорема.} (Вторая о продолжении решения) Пусть $I \subset \mathbb R$ --- интервал, $f: I \times \mathbb R^n \to \mathbb R^n$, $t_0 \in I$, $x_0 \in \mathbb R^n$. +Также пусть: +\begin{itemize} + \item Для $f$ выполняются предположения теоремы о существовании и единственности решения. + \item Найдутся $a, b \in C(I, \mathbb R_+)$, такие что для всех $t \in I, x \in \mathbb R^n$ выполняется $|f(t, x)| \le a(t)|x| + b(t)$ --- условие ограниченного роста. +\end{itemize} +Тогда существует решение $x: I \to \mathbb R^n$ задачи Коши. +От предыдущих теорем эта отличается тем, что решение определено на всём данном интервале. + +\textbf{Доказательство.} I. Возьмём числа $\alpha, \beta \in I$, такие что $\alpha < t_0 < \beta$. +Тогда найдутся $A, B > 0$, такие что $|a(t)| \le A$ и $|b(t)| \le B$ для всех $t \in [\alpha, \beta]$. +Положим $\Gamma := (\alpha, \beta) \times O(0, R + 1) \subset I \times \mathbb R^n$. +Здесь +\[ + R := \max_{\alpha \le t \le \beta} \left( |x_0|e^{A|t - t_0|} + \frac{B}{A} \left( e^{A|t - t_0|} - 1 \right) \right) +\] +Из теоремы о продолжении решения до границы следует, что существует решение $x: (\overline{\alpha}, \overline{\beta}) \to \mathbb R^n$, такое что $\forall t~x(t) \in \Gamma$ и $(\alpha, x(\overline{\alpha} + 0)), (\beta, x(\overline{\beta} - 0)) \in \partial \Gamma$. +Из леммы имеем, что $|x(t)| \le R$. +Поэтому $\overline{\alpha} = \alpha$ и $\overline{\beta} = \beta$, так как их проекция на $\mathbb R^n$ не может лежать на границе $O(0, R + 1)$, то есть проекция на $I$ лежит на границе. +Таким образом, решение $x(\cdot)$ определено на $(\alpha, \beta)$. + +II. Возьмём числа $\alpha_i$, $\beta_i$, такие что $\alpha_i \to \inf(I)$, $\beta_i \to \sup(I)$, причём обе монотонны. +Тогда для всех $i$ выполнено $\alpha_i < t_0 < \beta_i$, интервалы $(\alpha_i, \beta_i)$ образуют цепочку вложений, и $I = \bigcup_{i=1}^\infty (\alpha_i, \beta_i)$. +Для всех $i$ существует решение $x^i: (\alpha_i, \beta_i) \to \mathbb R^n$. +Рассмотрим произвольный $t \in I$. Для всех пар индексов $i, j$, таких что $t \in (\alpha_i, \beta_i) \cap (\alpha_j, \beta_j)$, верно по теореме о существовании и единственности решения, что $x^i(t) = x^j(t)$. +Поэтому можно положить $x(t) := x^i(t)$, и оно будет определено однозначно вне зависимости от $i$. +Следовательно, мы определили $x(\cdot)$ во всех точках, и он является искомым решением задачи Коши. + +\QED + +\section{Уравнения, не разрешённые относительно производной} +Рассмотрим уравнение $f(t, x, x') = 0$. +Здесь $f: \Omega \to \mathbb R$, где $\Omega \subset \mathbb R^3$. + +\textbf{Пример.} (Задача Коши, у которой много решений) +\[ + \begin{cases} + (x')^2 - x^2 = 0 \\ + x(0) = x_0 + \end{cases}. +\] +Оно эквивалентно одному из двух уравнений $x' = x$ и $x' = -x$. +Их решениями являются $x = x_0 e^{-t}$ и $x = x_0 e^t$ --- произошла неоднозначность. + +\subsection{Теорема о существовании и единственности} +\textbf{Теорема.} (О существовании и единственности решения задачи Коши для неявного уравнения) Пусть $(t_0, x_0, v_0) \in \Omega$, $f \in C^1(\Omega, \mathbb R)$. +Если $f(t_0, x_0, v_0) = 0$ и $\frac{\partial f}{\partial x'} (t_0, x_0, v_0) \ne 0$, то существует $d > 0$ и решение $x: (t_0 - d, t_0 + d) \to \mathbb R$ задачи Коши, являющееся единственным, удовлетворяющим равенству $x'(t_0) = v_0$. + +\textbf{Доказательство.} Посмотрим на $f(t, x, x') = 0$, как на уравнение относительно трёх переменных и разрешим его относительно $x'$. +По теореме о неявной функции найдутся числа $r, \varepsilon > 0$ и отображение $g: O((t_0, x_0), r) \to \mathbb R$, такие что $g \in C^1$, $f(t, x, g(t, x)) \equiv 0$, $g(t_0, x_0) = v_0$ (следует из того, что $f(t_0, x_0, v_0) = 0$ и производная не равна нулю), и данное решение единственно в $\varepsilon$-окрестности точки $v_0$. +Рассмотрим новую задачу Коши: +\[ + \begin{cases} + x' = g(t, x) \\ + x(t_0) = x_0 + \end{cases}. +\] +Теперь у нас явно выражен $x'$, поэтому можно применить теорему о существовании и единственности решения, то есть найдётся $d > 0$ и $x: (t_0 - d, t_0 + d) \to \mathbb R$, являющийся решением. +Проверим, что это решение подходит в исходную систему: +\[ + f(t, x(t), x'(t)) \equiv f(t, x(t), g(t, x(t))) \equiv 0, t \in (t_0 - d, t_0 + d). +\] +Выполнение начального условия следует из того, что $x$ удовлетворяет начальному условию в новой задаче Коши. +Проверим для $x'(t_0)$: +\[ + x'(t_0) = g(t_0, x(t_0)) = g(t_0, x_0) = v_0. +\] +Следовательно, мы нашли решение исходной задачи Коши. + +Докажем, что оно единственно. +Уменьшим $d$ так, чтобы для всех $t \in (t_0 - d, t_0 + d)$ выполнялось $(t, x(t)) \in O((t_0, x_0), \frac{r}{2})$. +Предположим противное: существует ещё одно решение $\phi: I \to \mathbb R$, такое что $\phi(t_0) = x_0$, $\phi'(t_0) = v_0$ и существует $\widehat t \in J := (t_0 - d, t_0 + d) \cap I$, такое что $\phi(\widehat t) \ne x(\widehat t)$. +Не умаляя общности, $\widehat t > t_0$. +Положим $t_1 = \inf \{t \in J: t > t_0, x(t) \ne \phi(t)\}$. +По допущению множество непусто, поэтому инфимум брать можно, теперь мы знаем, что $x(t) \equiv \phi(t)$ на отрезке $[t_0, t_1]$. +В самом начале доказательства единственности мы уменьшили $d$: засчёт этого $(t_1, \phi(t_1)) = (t_1, x(t_1)) \in O((t_0, x_0), \frac{r}{2})$, что, в силу непрерывности $\phi$, позволяет выбрать $t_3 > t_1$ так, что $(t, \phi(t)) \in O((t_0, x_0), r)$ на $[t_0, t_3]$. +Дополнительно уменьшим $t_3$ так, чтобы $\phi'(t)$ лежало в $O(v_0, \varepsilon)$ при $t \in [t_0, t_3]$. +Наконец, возьмём $t_2$ из полуинтервала $(t_1, t_3)$, по построению $\phi(t_2) \ne x(t_2)$. + +\begin{figure}[ht] + \centering + \incfig{implicit-equation-t}{0.75\linewidth} + \caption{Иллюстрация конструкции} +\end{figure} + +Поскольку $f(t, \phi(t), \phi'(t)) \equiv 0$ на $[t_0, t_3]$, $(t, \phi(t)) \in O((t_0, x_0), r)$ и $\phi'(t) \in O(v_0, \varepsilon)$, мы можем применить единственность из теоремы о неявной функции и получить $\phi'(t) \equiv g(t, \phi(t))$ на отрезке $[t_0, t_3]$. +Кроме того, $\phi(t_0) = x_0$, поэтому $\phi$ --- это решение новой задачи Коши на $[t_0, t_3]$. +Следовательно, $\phi(t) \equiv x(t)$ на $[t_0, t_3]$, и, в частности, $\phi(t_2) = x(t_2)$ --- противоречие. + +\QED + +\textbf{Замечание.} Может захотеться доказать единственность проще: решение новой задачи Коши единственно, функция в теореме о неявной функции --- тоже. +Однако мы не можем просто так подставить $f(t, \phi(t), \phi'(t))$ и после этого сказать, что $\phi'(t) \equiv g(t, \phi(t))$, ибо не гарантируется, что $\phi'(t)$ попадает в $\varepsilon$-окрестность точки $v_0$. +В этом же доказательстве, мы приближаем $t_3$ к $t_1$, чтобы всё попадало, ибо производные $x(\cdot)$ и $\phi(\cdot)$ на $[t_0, t_1]$ совпадают. + +\subsection{Особые решения} +\textbf{Определение.} Множество +\[ + \left\{ (t, x)~|~\exists v: (t, x, v) \in \Omega, f(t, x, v) = 0, \frac{\partial f}{\partial x'} (t, x, v) = 0 \right\} +\] +называется \textit{дискриминантной кривой}. На нём решение может не быть единственным. + +\textbf{Определение.} $\widehat{x}(\cdot)$ называется \textit{особым решением} ОДУ $f(t, x, x') = 0$, если для всех $t_0$ существует решение $x(\cdot)$, такое что $\widehat{x}(t_0) = x(t_0)$, $\widehat{x}'(t_0) = x'(t_0)$ и $\widehat{x}(t) \not\equiv x(t)$ на интервале $(t_0 - d, t_0 + d)$ для всех $d$. +Они нас интересуют из-за того, что в них можно ``склеивать`` два других решения. + +\textbf{Пример.} $x' = \sqrt[3]{x}$. $x(t) \equiv 0$ --- особое решение. +Пример склеивания решений был в параграфе про уравнения с разделяющимися переменными. + +\textbf{Утверждение.} Если $\widehat{x}: I \to \mathbb R$ --- особое решение, то для всех $t \in I$ точка $(t, \widehat{x}(t))$ лежит на дискриминантной кривой. + +\textbf{Доказательство.} Зафиксируем $\tau \in I$. Так как $\widehat x$ --- решение, $f(t, \widehat x(t), \widehat x'(t)) \equiv 0$ на $I$. +Если $\frac{\partial f}{\partial x'} (\tau, \widehat x(\tau), \widehat x'(\tau)) \ne 0$, то $\widehat x(\cdot)$ --- единственное решение задачи Коши +\[ + \begin{cases} + f(t, x, x') = 0 \\ + x(\tau) = \widehat x(\tau) + \end{cases}, +\] +удовлетворяющее условию $x'(\tau) = \widehat x'(\tau)$ по теореме о существовании и единственности для неявного уравнения. +Но для того, чтобы оно было особым, нам нужно ещё какое-то решение, которое будет его касаться, так что случай не подходит. +Таким образом, $\frac{\partial f}{\partial x'} (\tau, \widehat x(\tau), \widehat x'(\tau)) = 0$, то есть $(\tau, \widehat x(\tau))$ лежит в дискриминантной кривой. + +\QED + +\textbf{Пример.} $(x')^2 - 4x^3(1-x) = 0$. +Найдём дискриминатную кривую: +\[ + \begin{cases} + v^2 - 4x^3(1-x) = 0 \\ + 2v = 0. + \end{cases} +\] +Нетрудно заметить, что дискриминатная кривая --- это две прямые $(t, 0)$ и $(t, 1)$. +Чтобы найти особые решения, нужно решить исходное уравнение: $x(t) = \frac{1}{(t + c)^2 + 1}$, $x(t) = 0$ и $x(t) = 1$. +Особым решением является $x \equiv 1$, так как его касаются все решения $\frac{1}{(t + c)^2 + 1}$, и по этой прямой можно склеивать решения для разных $c$. + +\section{Некоторые следствия теорем о существовании решений} +Мы будем рассматривать два типа уравнений: + +\subsection{Уравнения старших порядков} +Дано открытое множество $\Gamma \subset \mathbb R^{k+1}$, отображение $f: \Gamma \to \mathbb R$, вектор $(t_0, x_0^0, x_0^1, \dots, x_0^{k-1}) \in \Gamma$. +Задача Коши вида +\[ + \begin{cases} + x^{(k)} = f(t, x, x', \dots, x^{(k-1)}) \\ + x(t_0) = x_0^0 \\ + \vdots \\ + x^{(k-1)}(t_0) = x_0^{k-1} + \end{cases} . +\] +Хотелось бы свести эту задачу к задаче с меньшим порядком производной, чтобы применить теорему о существовании и единственности. +Положим $y_i := x^{i-1}$ для $i \in [1, k]$. +Тогда система сводится к виду +\[ + \begin{cases} + y_1' = y_2 \\ + y_2' = y_3 \\ + \vdots \\ + y_{k-1}' = y_k \\ + y_k' = f(t, y_1, y_2, \dots, y_k) \\ + y_1(t_0) = x_0^0 \\ + y_2(t_0) = x_0^1 \\ + \vdots \\ + y_k(t_0) = x_0^{k-1} + \end{cases} . +\] +Введём отображение $F: \Gamma \to \mathbb R^k$, такое что $F(t, y) = (y_2, y_3, \dots, f(t, y))^T$. +Положим $y_0 = (x_0^0, x_0^1, \dots, x_0^{k-1})^T$, тогда эту задачу можно записать в виде +\[ + \begin{cases} + y' = F(t, y) \\ + y(t_0) = y_0 + \end{cases}. +\] +В частности, если $x$ --- решение исходной задачи, то $y = (x, x', \dots)^T$ --- это решение новой, и, наоборот, если $y$ --- решение новой задачи, то $x = y_1$ --- решение исходной. + +\textbf{Теорема.} Пусть $f$ непрерывна, для всех $(t, x_0, x_1, \dots, x_{k-1})$ существуют и являются непрерывными частные производные $\frac{\partial f_i}{\partial x^{(j)}}$. +Тогда существует $d > 0$ и решение $x: (t_0 - d, t_0 + d) \to \mathbb R$, являющееся единственным решением задачи Коши. +Следует напрямую из теоремы о существовании и единственности и замены, описанной выше. + +\subsection{Линейные уравнения} +Пусть нам дана непрерывная функция $A: I \to \mathbb R^{n \times n}$, функция $b: I \to \mathbb R^n$, число $t_0 \in I$ и $x_0 \in \mathbb R^n$. +Рассмотрим систему линейных уравнений +\[ + \begin{cases} + x' = A(t) \cdot x + b(t) \\ + x(t_0) = x_0 + \end{cases} . +\] + +\textbf{Теорема.} Если $A$ и $b$ непрерывны, то существует единственное решение $x: I \to \mathbb R^n$ данной задачи Коши. +Это не просто теорема о существовании и единственности решения задачи Коши, так как здесь решение определено на всём интервале $I$. + +\textbf{Доказательство.} Положим $\widehat a(t) := \| A(t) \|$, $t \in I$ и $\widehat b(t) = |b(t)|$, $t \in I$. +Тогда +\[ + |A(t)x + b(t)| \le |A(t)x| + |b(t)| \le \|A(t) \| \cdot |x| + |b(t)| \le \widehat a(t)|x| + \widehat b(t). +\] +Применяя вторую теорему о продолжении, получаем, что решение существует на всём интервале $I$. +Докажем единственность. Пусть $\widehat x, \phi: I \to \mathbb R^n$ --- решения, покажем, что они совпадают. +Не умаляя общности, существует $t > t_0$, такое что $\widehat x(t) \ne \phi(t)$. +Положим $\tau = \inf \{t > t_0: \widehat x(t) \ne \phi(t)\}$, тогда $\widehat x(\tau) = \phi(\tau)$ (доказывается от противного, получится, что $\tau$ --- не инфимум). +Следовательно, в любой окрестности точки $\tau$ задача Коши +\[ + \begin{cases} + x' = A(t)x + b(t) \\ + x(\tau) = \widehat x(\tau) + \end{cases} +\] +имеет хотя бы два решения --- противоречие. + +\QED + +\section{Линейные однородные системы ОДУ} +Пусть нам дан интервал $I \subset \mathbb R$ и линейные пространства $C(I, \mathbb R^n)$, $C^1(I, \mathbb R^n)$ (непрерывные и непрерывно дифференцируемые функции). + +\textbf{Напоминание.} Система функций $x^1, \dots, x^k \in C(I, \mathbb R^n)$ называется \textit{линейно зависимой}, если существует линейная комбинация с не всеми нулевыми коэффициентами, тождественно равная нулю. + +\textbf{Упражнение.} Если $x^1, \dots, x^k$ линейно зависимы, то для всех $t \in I$ векторы $x^1(t), \dots, x^k(t)$ линейно зависимы. + +\textbf{Замечание.} В обратную сторону неверно, например, $x^1(t) = 1$ и $x^2(t) = t$. + +\textbf{Определение.} Пусть даны функции $x^1, \dots, x^n \in C(I, \mathbb R^n)$. +\textit{Определителем Вронского} этой системы $\omega(t) = \det(x^1(t), \dots, x^n(t))$. +Нетрудно заметить, что если векторы линейно зависимы, то $\omega(t) \equiv 0$, и обратно неверно: $x^1(t) = (1~1)^T$, $x^2(t) = (t~t)^T$. + +Пусть нам даны функции $a_{j,k} \in C(I, \mathbb R)$, где $j, k \in [1, n]$. +Положим матрицу $A(t) = (a_{j,k}(t))_{j,k \in [1, n]}$. +Рассмотрим систему +\begin{equation} + \begin{cases} + x_1' = a_{11}(t)x_1 + \dots + a_{1n}(t)x_n \\ + \vdots \\ + x_n' = a_{n1}(t)x_1 + \dots + a_{nn}(t)x_n + \end{cases} +\end{equation} +Или, что эквивалентно, $x' = A(t)x$. + +\textbf{Определение.} Эта система называется \textit{линейной однородной системой ОДУ}. + +\textbf{Замечание.} Почему эта система называется линейной? Введём линейный оператор $L: C^1(I, \mathbb R^n) \to C(I, \mathbb R^n)$, такой что $(Lx)(t) = x'(t) - A(t)x(t)$. +Заметим, что множество решений уравнений совпадает с ядром данного линейного оператора. + +\textbf{Утверждение.} Пусть $x^1, \dots, x^n$ --- решения системы (1). Если существует $\tau \in I$, такое что $\omega(\tau) = 0$, то все решения $x^1, \dots, x^n$ линейно зависимы. + +\textbf{Доказательство.} Если $\omega(\tau) = 0$, то $x^1(\tau), \dots, x^n(\tau)$ линейно зависимы (именно значения в этой точке), то есть существуют $\lambda_1, \dots, \lambda_n$, такие что $\sum_{j=1}^{n} \lambda_j x^j(\tau) = 0$. +Положим $x := \sum_{j=1}^{n} \lambda_j x^j$. +По построению $x(\tau) = 0$, то есть $x$ является решением задачи Коши +\[ + \begin{cases} + y' = A(t)y \\ + y(\tau) = 0. + \end{cases} +\] +По теореме о существовании и единственности решения для линейных уравнений у этой задачи есть очевидное и уникальное решение --- $y = 0$ на всём интервале $I$. +Следовательно, $x(t) \equiv 0$, то есть $\sum_{j=1}^{n} \lambda_jx^j(t) \equiv 0$, то есть $x^1, \dots, x^n$ линейно зависимы. + +\QED + +\textbf{Замечание.} Смысл утверждения состоит в том, что ранее мы сказали, что если функции линейно зависимы, то определитель Вронского является тождественным нулём, но обратное не всегда верно; однако если функции являются решением системы (1), то это уже выполняется в обе стороны. + +\textbf{Определение.} \textit{Фундаментальной системой решений} называется упорядоченный набор из $n$ линейно независимых решений системы (1). + +\textbf{Утверждение.} ФСР существует. + +\textbf{Доказательство.} Зафиксируем $t_0$ и рассмотрим задачу Коши +\[ + \begin{cases} + x' = A(t) \cdot x \\ + x(t_0) = e_j + \end{cases} , +\] +где $e_j$ --- базисный вектор. По теореме о существовании у неё существует решение $x^j \in C^1(I, \mathbb R^n)$ при любом $j \in [1, n]$. +Покажем, что все $x^j$ линейно независимы. Действительно, $x^j(t_0) = e_j$, то есть все $x^j(t_0)$ линейно независимы, поэтому можно доказать от противного, что и сами решения линейно независимы. + +\QED + +\textbf{Определение.} \textit{Общим решением} называется множество всех решений системы (1). + +\textbf{Теорема.} Если $x^1, \dots, x^n$ --- ФСР, то общее решение --- это линейная оболочка $x^1, \dots, x^n$. + +\textbf{Доказательство.} Докажем два вложения. $\supset$: очевидно. $\subset$. Пусть $\widehat x(\cdot)$ --- решение системы (1). +Возьмём произвольное $t_0 \in I$, тогда, так как $x^j$ образуют ФСР, $x^j(t_0)$ линейно независимы по утверждению выше. +Следовательно, существует представление $\widehat x(t_0) = \sum_{j=1}^{n} \lambda_jx^j(t_0)$. +Рассмотрим задачу Коши +\[ + \begin{cases} + x' = A(t) \cdot x \\ + x(t_0) = \widehat x(t_0) + \end{cases} . +\] +У неё есть два решения --- $\widehat x(\cdot)$ и $\sum_{j=1}^{n} \lambda_jx^j(\cdot)$, а по теореме о существовании и единственности для линейного уравнения на интервале $I$ решение только одно. +Следовательно, они совпадают, что и доказывает включение. + +\QED + +\textbf{Определение.} Пусть $x^1, \dots, x^n \in C^1(I, \mathbb R^n)$ --- ФСР. +Тогда $X(t) = (x^1(t), \dots, x^n(t))$ для $t \in I$ называется \textit{фундаментальной матрицей решений} (ФМР). + +\textbf{Замечание.} Общее решение системы (1) можно переписать через ФМР: $\{X(\cdot) \cdot c: c \in \mathbb R^n\}$. + +\textbf{Утверждение.} $X'(t) \equiv A(t) X(t)$, $t \in I$. Доказывается прямой проверкой. + +\textbf{Теорема.} (Об описании множества всех ФМР) Пусть $X(\cdot)$ --- фундаментальная матрица решений. +Тогда множество всех ФМР системы (1) записывается в виде $\{X(\cdot) C: C \in \mathbb R^{n \times n}, \det(C) \ne 0\}$. + +\textbf{Доказательство.} $\supset$. Возьмём такую матрицу $C$. Тогда +\[ + X(t) C = \left(\sum_{j=1}^{n} C_{j1} x^j(t)~\dots~\sum_{j=1}^{n} C_{jn}x^j(t) \right). +\] +Каждый столбец является линейной комбинацией столбцов $X$, то есть решением системы. +Более того, $\det(XC) = \det(X) \cdot \det(C) \ne 0$, поэтому столбцы линейно независимы, то есть образуют ФМР. + +$\subset$. Пусть $Y(\cdot)$ --- фундаментальная матрица решений, зафиксируем произвольное $t_0 \in I$ и положим $C = X^{-1}(t_0) \cdot Y(t_0)$. +Рассмотрим матрицу $X(\cdot) C$ --- она является ФМР по первому пункту и совпадает с $Y$ в точке $t_0$. +Пусть $e_j$ --- базисный вектор. +Рассмотрим задачу Коши +\[ + \begin{cases} + x' = Ax \\ + x(t_0) = Y e_j (t_0) + \end{cases} . +\] +У неё есть два решения: $x = Y e_j$ и $x = XC e_j$, следовательно, они совпадают на интервале $I$. +Таким образом, все столбцы матриц $Y$ и $XC$ совпадают. + +\QED + +\textbf{Теорема.} (Формула Лиувилля-Остроградского) Пусть $x^1, \dots, x^n$ --- ФСР, $\omega(\cdot)$ --- её определитель Вронского, тогда для всех $t_0 \in I$ верно +\[ + \omega(t) \equiv \omega(t_0) \exp \left( \int_{t_0}^{t} \tr(A(s)) ds \right). +\] + +\textbf{Лемма.} Пусть +\[ + \omega_j(t) = \det + \begin{pmatrix} + x_1^1(t) & \dots & x_1^n(t) \\ + \vdots \\ + (x^1_j)'(t) & \dots & (x^n_j)'(t) \\ + \vdots \\ + x_n^1(t) & \dots & x_n^n(t) + \end{pmatrix} . +\] +(производные только в $j$-ой строке). Тогда $\omega'(t) = \sum_{j=1}^{n} \omega_j(t)$ для всех $t \in I$. + +\textbf{Доказательство.} Вспомним, что определитель --- это сумма произведений по всех перестановкам. +\[ + \omega'(t) = \frac{d}{dt} \left( \sum_{\pi} \sigma(\pi) x_1^{\pi(1)}(t) \dots x_n^{\pi(n)}(t) \right) = +\] +Теперь продифференцируем: +\[ + = \sum_\pi \sigma(\pi) \left( (x_1^{\pi(1)})' x_2^{\pi(2)} \dots x_n^{\pi(n)} + \dots + x_1^{\pi(1)} \dots (x_n^{\pi(n)})' \right). +\] +Разобъём на $n$ сумм, где в $i$-ой сумме берётся производная у $x_i$, и получим искомое. + +\QED + +\textbf{Доказательство теоремы.} По лемме +\[ + \omega'(t) = \sum_{j=1}^{n} \det + \begin{pmatrix} + x_1^1(t) & \dots & x_1^n(t) \\ + \vdots & \vdots & \vdots \\ + (x_j^1)'(t) & \dots & (x_j^1)'(t) \\ + \vdots & \vdots & \vdots \\ + x_n^1(t) & \dots & x_n^b(t) + \end{pmatrix} . +\] +Теперь вспомним, что каждый столбец является решением системы, поэтому производную по тождеству $x_i' = Ax_i$ можно переписать в виде +\[ + \sum_{j=1}^{n} \det + \begin{pmatrix} + x_1^1(t) & \dots & x_1^n(t) \\ + \vdots & \vdots & \vdots \\ + \sum_{k=1}^{n} a_{jk}(t) x_k^1 & \dots & \sum_{k=1}^{n} a_{jk}(t) x_k^n(t) \\ + \vdots & \vdots & \vdots \\ + x_n^1(t) & \dots & x_n^n(t) + \end{pmatrix} . +\] +Теперь умножим $i$-ую строку ($i \ne j$) на $a_{ji}$ и вычтем из $j$-ой строки. +Тогда в $j$-ой строке в сумме останется лишь одно слагаемое --- $a_{jj}(t) \cdot x_j^i$, где $i$ --- номер столбца. +Остаётся по линейности определителя вынести $a_{jj}$ из $j$-ой строки, и в матрице останется просто $\omega(t)$, то есть +\[ + \omega'(t) = \sum_{j=1}^{n} a_{jj}(t) \omega(t) \equiv \omega(t) \tr(A(t)). +\] +Теперь посмотрим на это, как на дифференциальное уравнение. Это уравнение с разделяющими переменными, его можно решить и получить +\[ + \omega(t) = C \exp \left( \int_{t_0}^{t} \tr(A(s)) ds \right). +\] +Теперь подставим $t = t_0$ и получим, что $C = \omega(t_0)$. + +\QED + +\textbf{Замечание.} Звучит, как что-то странное и нигде не нужное, но на практике это помогает, когда мы смогли угадать одно решение системы и хотим найти остальные. + +\section{Линейные неоднородные системы ОДУ.\\ Линейные ОДУ высших порядков} +\subsection{Линейные неоднородные системы ОДУ} +\setcounter{equation}{0} +Пусть нам даны $n \in \mathbb N$, интервал $I \subset \mathbb R$ и функции $A \in C(I, \mathbb R^{n \times n})$, $b \in C(I, \mathbb R^n)$. +Мы уже умеем решать систему вида +\begin{equation} + x' = A(t)x +\end{equation} +Нас интересуют решения системы +\begin{equation} + x' = A(t)x + b(t). +\end{equation} + +\textbf{Теорема.} Пусть $\widehat x(\cdot)$ --- частное решение системы (2). +Тогда общее решение системы (2) --- множество всех функций вида $x(\cdot) + \widehat x(\cdot)$, где $x(\cdot)$ --- решение системы (1). +Очевидно, так как это линейное уравнение. + +\subsubsection{Метод вариации постоянных} +Позволяет находить частное решение системы (2). + +Пусть $X(\cdot) = (x_1(\cdot), \dots, x_n(\cdot))$ --- фундаментальная матрица решений (1), $t_0 \in I$. +Тогда $x(t) = X(t) C$ --- общее решение (1). +Найдём частное решение (2) в виде +\[ + x(t) + X(t) C(t), t \in I. +\] +Продифференцируем: +\[ + X'(t) C(t) + X(t) C'(t) = A(t) X(t) C(t) + b(t). +\] +Так как $A(t) X(t) = X'(t)$, можно упростить: +\[ + X(t) C'(t) = b(t). +\] +Тогда +\[ + C'(t) = X^{-1}(t) b(t), +\] +то есть +\[ + C(t) = \int_{t_0}^{t} X^{-1}(s) b(s) ds. +\] +Таким образом, частное решение записывается в виде +\[ + \widehat x(t) = X(t) \int_{t_0}^{t} X^{-1}(s) b(s) ds. +\] +И общее решение --- это +\[ + x(t) = X(t) C + X(t) \int_{t_0}^{t} X^{-1}(s) b(s) ds. +\] +Корректность следует из того, что все переходы верны в обе стороны. + +\subsection{Линейные однородные ОДУ} +Пусть даны $n \in \mathbb N$, интервал $I \subset \mathbb R$ и функции $b, a_0, a_1, \dots, a_n \in C(I, \mathbb R (\mathbb C))$ --- можно и для вещественных, и для комплексных функций. +Дополнительное ограничение: $a_0$ не обращается в ноль. +Нас интересует уравнение +\begin{equation} + \sum_{j=0}^{n} a_{n-j}(t) x^{(j)} = 0 \sim a_0(t) x^{(n)} + \dots + a_{n-1}(t) x' + a_n(t) x = 0. +\end{equation} +И уравнение +\begin{equation} + \sum_{j=0}^{n} a_{n-j}(t) x^{(j)} = b(t) \sim a_0(t) x^{(n)} + \dots + a_{n-1}(t) x' + a_n(t) x = b(t). +\end{equation} +(В обоих случаях написаны две эквивалентные формы) + +Сделаем замену: +\begin{equation} + y^1 = x, y^2 = x', \dots, y^n = x^{(n-1)}. +\end{equation} +Тогда уравнение (3) записывается в виде +\begin{equation} + \begin{cases} + (y^1)' = y^2 \\ + \vdots \\ + (y^{n-1})' = y^n \\ + (y^n)' = -\frac{a_1(t)}{a_0(t)}y^n - \dots - \frac{a_n(t)}{a_0(t)} y^1 + \end{cases} . +\end{equation} +Сделаем то же самое для уравнения (4): +\begin{equation} + \begin{cases} + (y^1)' = y^2 \\ + \vdots \\ + (y^{n-1})' = y^n \\ + (y^n)' = -\frac{a_1(t)}{a_0(t)}y^n - \dots - \frac{a_n(t)}{a_0(t)} y^1 + \frac{b(t)}{a_0(t)} + \end{cases} . +\end{equation} +Эквивалентности $(3) \sim (6)$ и $(4) \sim (7)$ доказываются прямой проверкой. + +\textbf{Лемма.} Пусть $x_1(\cdot), \dots, x_k(\cdot)$ --- решения уравнения (3), а $y_1(\cdot), \dots, y_k(\cdot)$ --- соответствующие после замены решения системы (6). +Система функций $x_1, \dots, x_k$ линейно зависима тогда и только тогда, когда система $y_1, \dots, y_k$ линейно зависима. + +\textbf{Доказательство.} Из определения линейной зависимости существует ненулевой $\lambda \in \mathbb R^k (\mathbb C^k)$, такой что $\sum_{j=1}^{n} \lambda_j x_j (t) \equiv 0$. +Продифференцируем сумму $n$ раз: +\[ + \exists \lambda \in \mathbb R^k (\mathbb C^k): + \begin{cases} + \sum_{j=1}^{n} \lambda_j x_j(t) \equiv 0 \\ + \sum_{j=1}^{n} \lambda_j x_j'(t) \equiv 0 \\ + \sum_{j=1}^{n} \lambda_j x_j''(t) \equiv 0 \\ + \vdots + \end{cases} +\] +Подставим $y_i$ и просуммируем покоординатно (то есть $y_j = (y_j^1, \dots, y_j^n)$: +\[ + \iff \exists \lambda \in \mathbb R^k (\mathbb C^k): + \sum_{j=1}^{n} \lambda_j y_j(t) \equiv 0 +\] +Первое утверждение эквивалентно линейной зависимости $x_1, \dots, x_k$, второе --- $y_1, \dots, y_k$. + +\QED + +\textbf{Теорема.} Существуют линейно независимые решения $x_j(\cdot)$, где $j \in [1, n]$, уравнения (3). +Более того, решений ровно $n$, то есть его общее решение будет имеет вид +\[ + x(t) = c_1x_1(t) + \dots + c_nx_n(t), t \in I, c_j \in \mathbb R (\mathbb C). +\] +Следует из эквивалентности системе (6), для которой аналогичные утверждения были доказаны ранее. + +\QED + +\textbf{Замечание.} Для комплексных чисел аналогичной утверждение не было доказано, но в этом случае на систему из $n$ комплексных уравнений можно смотреть, как на систему из $2n$ вещественных уравнений. + +\textbf{Определение.} Пусть $x_1, \dots, x_n \in C^{n-1}(I, \mathbb R(\mathbb C))$. +\textit{Определителем Вронского} этой системы функций называется +\[ + \omega(t) = + \begin{vmatrix} + x_1(t) & \dots & x_n(t) \\ + x_1'(t) & \dots & x_n'(t) \\ + \vdots & \ddots & \vdots \\ + x_1^{(n-1)}(t) & \dots & x_n^{(n-1)}(t) + \end{vmatrix} +\] +Нетрудно проверить, что для линейно зависимых функций определитель Вронского равен нулю, но в обратную сторону это неверно: $x_1(t) = t^2$, $x_2(t) = t|t|$. +(Здесь небольшое дежавю, но ранее мы определяли его для более узкого случая). + +\textbf{Утверждение.} (О связи определителя Вронского для функций и для вектор-функций) +Пусть $x_1, \dots, x_n$ --- решение уравнения (3), $y_1, \dots, y_n$ --- решение системы (6), связанное с $x_1, \dots, x_n$ заменой (5). +Тогда $\omega(t)$ совпадает с определителем Вронского вектор-функций $y_1, \dots, y_n$. +Доказывается прямой проверкой. + +\textbf{Утверждение.} Пусть $x_1, \dots, x_n$ --- решение уравнения (3). +Тогда если существует $\tau$, такое что $\omega(\tau) = 0$, то $\omega(t) \equiv 0$ и функции линейно зависимы. + +Доказывается переходом к вектор-функциям $y_i$: возьмём $\tau$, получим линейную зависимость функций $y_i$ в какой-то точке, значит, они линейно зависимы, так что $\omega(t) \equiv 0$ и для функций $y_i$, и для функций $x_i$ по утверждению выше. + +\textbf{Утверждение.} (Формула Лиувилля-Остроградского) +\[ + \omega(t) \equiv \omega(t_0) \exp \left( -\int_{t_0}^{t} \frac{a_1(s)}{a_0(s)}ds \right). +\] + +\textbf{Доказательство.} Найдём матрицу $A$ для вектор-функций $y_i$: +\[ + A(t) = + \begin{pmatrix} + 0 & 1 & 0 & \dots & 0 \\ + 0 & 0 & 1 & \dots & 0 \\ + \vdots & \vdots & \vdots & \ddots & \vdots \\ + -\frac{a_n}{a_0} & -\frac{a_{n-1}}{a_0} & -\frac{a_{n-2}}{a_0} & \dots & -\frac{a_1}{a_0} + \end{pmatrix} +\] +Соответственно её след равен $-\frac{a_1}{a_0}$. + +\QED + +\textbf{Теорема.} (О решении уравнения (4)) $x_{\text{общ.}(4)} = x_{\text{част.}(4)} + x_{\text{общ.}(3)}$. +Частное решение уравнения (4) можно найти методом вариации постоянной: пусть $x_1, \dots, x_n$ --- линейно независимые решения уравнения (3). +Будем искать частное решение (4) в виде +\[ + x(t) = \sum_{j=1}^{n} C_j(t) x_j(t). +\] +Возьмём $C_j(\cdot)$, которые получаются при применении метода вариации постоянной для системы (7). +Заметим, что они подойдут и для системы (4), делается прямой проверкой. +Как доказывалось в разделе про линейные системы, $C_j(\cdot)$ обладают следующим свойством: если мы ищем частное решение системы $x' = A(t) x + b(t)$, то $X(t) C' = b(t)$, где $X(\cdot)$ --- фундаментальная матрица решений. +Подставим в эту формулу систему (7): +\[ + \begin{pmatrix} + x_1(t) & \dots & x_n(t) \\ + x_1'(t) & \dots & x_n'(t) \\ + \vdots & \ddots & \vdots \\ + x_1^{(n-1)}(t) & \dots & x_n^{(n-1)}(t) + \end{pmatrix} + \begin{pmatrix} + C_1'(t) \\ + C_2'(t) \\ + \vdots \\ + C_n'(t) + \end{pmatrix} + = + \begin{pmatrix} + 0 \\ + 0 \\ + \vdots \\ + \frac{b(t)}{a_0(t)} + \end{pmatrix} . +\] +Остаётся выразить $C(t)$, решать такие системы мы умеем. + +\textbf{Пример.} $x'' - 3x' + 2x = e^{-t}$. +Здесь $n = 2$, $a_0(t) \equiv 1$, $a_1(t) \equiv -3$, $a_2(t) \equiv 2$, $b(t) \equiv e^{-1}$ --- линейное ОДУ. +Будем искать решение вида $x(t) = e^{\lambda t}$. +Тогда однородное уравнение переписывается в виде $(\lambda^2 - 3\lambda + 2) e^{\lambda t} = 0$, то есть решение --- $x(t) = c_1e^t + c_2 e^{2t}$. +Найдём частное решение: +\[ + \begin{pmatrix} + e^t & e^{2t} \\ + e^t & 2e^{2t} + \end{pmatrix} + \begin{pmatrix} + c_1' \\ + c_2' + \end{pmatrix} + = + \begin{pmatrix} + 0 \\ + e^{-t} + \end{pmatrix} +\] +Умножим на обратную матрицу: +\[ + \begin{pmatrix} + c_1' \\ + c_2' + \end{pmatrix} + = + \frac{1}{e^{3t}} + \begin{pmatrix} + 2e^{2t} & -e^{2t} \\ + -e^t & e^t + \end{pmatrix} + \begin{pmatrix} + 0 \\ + e^{-t} + \end{pmatrix} +\] +То есть $c_1' = -e^{-2t}$ и $c_2' = e^{-3t}$. +Интегрируя, получаем $c_1 = \frac{1}{2} e^{-2t}$ и $c_2 = -\frac{1}{3} e^{-3t}$. +Тогда частным решением будет +\[ + x(t) = \frac{1}{2} e^{-2t} e^t - \frac{1}{3} e^{-3t}e^{2t} = \frac{1}{6} e^{-t}. +\] +Общее решение --- сумма общего однородного и частного. + +\setcounter{equation}{0} +\section{Линейные ОДУ с постоянными коэффициентами} +\subsection{Линейные однородные ОДУ с постоянными коэффициентами} +Пусть $n \in N$, $a_0, \dots, a_n \in \mathbb C$, причём $a_0 \ne 0$. +Рассмотрим уравнение +\begin{equation} + a_0 x^{(n)} + \dots + a_n x =0. +\end{equation} +Сделаем замену $x(t) = e^{\lambda t}$, тогда уравнение приводится к виду $M(\lambda) = a_0 \lambda^n + \dots + a_n = 0$. +Тогда, если $\lambda_1, \dots, \lambda_n$ --- корни этого уравнения, решением задачи будут функции $x(t) = e^{\lambda_i t}$ и любые их линейные комбинации. + +Положим $Lx(t) = \sum_{j=0}^{n} a_{n-j} x^{(j)} (t)$ --- линейный оператор, подставляющий $x$ в уравнение (1). + +\textbf{Лемма.} Пусть $\gamma \in \mathbb C$ --- корень $M$ кратности $k \in \mathbb N \cup \{0\}$, $s$ --- неотрицательное целое число. +Тогда +\[ + L(t^s e^{\gamma t}) = + \begin{cases} + 0, & s \le k - 1 \\ + P(t) e^{\gamma t}, & s \ge k + \end{cases} , +\] +где $P$ --- какой-то многочлен степени $s - k$. + +\textbf{Доказательство.} +\[ + L(t^s e^{\gamma t}) \equiv \sum_{j=0}^{n} a_{n-j} \frac{\partial^j}{\partial t^j} (t^s e^{\gamma t}) \equiv \sum_{j=0}^{n} a_{n-j} \frac{\partial^j}{\partial t^j} \left( \frac{\partial^s}{\partial \gamma^s} e^{\gamma t} \right) \equiv +\] +(Поменяем частные производные местами) +\[ + \equiv \sum_{j=0}^{n} a_{n-j} \frac{\partial^s}{\partial \gamma^s} (\gamma^j e^{\gamma t}) \equiv \frac{\partial^s}{\partial \gamma^s} (e^{\gamma t} M(\gamma)) \equiv \sum_{j=0}^{s} C_s^j M^{(j)}(\gamma) t^{s-j} e^{\gamma t} \equiv +\] +(так как $\gamma$ --- корень кратности $k$) +\[ + \equiv \sum_{j=k}^{s} C_s^j M^{(j)}(\gamma) t^{s-j} e^{\gamma t}. +\] +Получили искомый многочлен. + +\QED + +\textbf{Теорема.} Пусть $\lambda_1, \dots, \lambda_m$ --- это попарно различные корни кратностей $k_1, \dots, k_m$ соответственно. +Тогда $t^s e^{\lambda_j t}$ ($s \in [0, k_j), j \in [1, m]$) является фундаментальной системой решений. + +\textbf{Доказательство.} Очевидно, что эти функции являются решениями (применим оператор $L$ и по лемме получаем 0). +Докажем, что они линейно независимы. +Пусть $\sum c_{j,s} \cdot t^s e^{\lambda_j t} \equiv 0$. +Тогда существуют многочлены, такие что +\[ + p_1(t) e^{\lambda_1 t} + \dots + p_m(t) e^{\lambda_m t} \equiv 0. +\] +Разделим: +\[ + p_1(t) + \dots + p_m(t) e^{(\lambda_m - \lambda_1)t} \equiv 0. +\] +Продифференцируем достаточное число раз, чтобы $p_1(t)$ обнулился. Получаем новые многочлены +\[ + \widehat p_2(t) e^{\lambda_2 - \lambda_1)t} + \dots + \widehat p_m e^{(\lambda_m - \lambda_1)t} \equiv 0. +\] +Нетрудно доказать, что $\deg(p_i) = \deg(\widehat p_i)$, поэтому эту операцию можно дальше продолжать, пока не получим +\[ + \widehat p_m(t) e^{(\lambda_m - \lambda_{m-1})t} \equiv 0. +\] +Получаем, что многочлен $\widehat p_m$ нулевой, то есть у него степень $-\infty$, то есть и у исходного многочлена $p_m$ была такая степень. +Повторяя эту процедуру для остальных многочленов, получаем, что все многочлены нулевые. +Следовательно, все коэффициенты линейной комбинации нулевые. + +\QED + +\subsection{Линейные неоднородные ОДУ с постоянными коэффициентами} +Всё то же самое, но теперь +\begin{equation} + a_0 x^{(n)} + \dots + a_{n-1} x' + a_n x = b(t). +\end{equation} +Если $b(\cdot)$ --- многочлен, то достаточно найти частное решение для случая, когда $b(\cdot)$ является мономом, а это делается методом неопределённых коэффициентов. +Рассмотрим случай, когда $b(t) = p(t) e^{\gamma t}$ --- квазимногочлен. + +\textbf{Теорема.} Существует решение $x(\cdot)$ уравнения (2) вида $x(t) = t^k q(t) e^{\gamma t}$, где $k$ --- кратность корня $\gamma$ многочлена $M$, а $q$ --- какой-то многочлен, степень которого не превосходит степень $p$. + +\textbf{Доказательство.} Пусть $m = \deg(p)$, $p(t) = q_0 t^m + \dots + q_{m-1} t + q_m$. +Положим $x_1(t) = a t^{m+k} e^{\gamma t}$ (число $a$ определим позже). +Тогда по лемме +\[ + L x_1(t) = a(\Theta t^m + r(t)) e^{\gamma t}, \deg(r) < m. +\] +Положим $a = \frac{p_0}{\Theta}$. Тогда $Lx_1(t) = (p_0 t^m + \widehat r(t)) e^{\gamma t}$. +Докажем теорему индукцией по $m$. При $m = 0$ имеем $x = x_1$ --- искомый многочлен. +Пусть теорема верна для многочленов степени меньше $m$. +Будем искать решение в виде $x = x_1 + x_2$, где $x_2$ --- квазимногочлен, то есть мы хотим, чтобы $L(x_1 + x_2)(t) \equiv p(t) e^{\gamma t}$. +Распишем $x_1$ и $x_2$: +\[ + (p_0 t^m + \widehat r(t)) e^{\gamma t} + Lx_2(t) = (p_0 t^m + p_1 t^{m-1} + \dots + p_m) e^{\gamma t}. +\] +Сократим $p_0 t^m e^{\gamma t}$: +\[ + Lx_2(t) \equiv (-\widehat r(t) + p_1 t^{m-1} + \dots + p_m) e^{\gamma t}. +\] +Справа имеем многочлен степени менее $m$, поэтому можно применить предположение индукции: +\[ + \exists q_2: L(t^k q_2(t) e^{\gamma t}) \equiv (-\widehat r(t) + p_1 t^{m-1} + \dots) e^{\gamma t}, \deg(q_2) \le m - 1. +\] +Таким образом, +\[ + x(t) = \frac{p}{\Theta} t^{m+k} e^{\gamma t} + t^k q_2(t) e^{\gamma t} +\] +является решением уравнения (2). + +\QED + +\textbf{Пример.} $x'' - x = t^3 e^t$. +Характеристический многочлен --- $\lambda^2 - 1 = 0$. Возьмём корень $\gamma = 1$ кратности 1. +Тогда решение имеет вид +\[ + x(t) = t^1 (q_0t^3 + q_1t^2 + q_2 t + q_3) e^t. +\] +Теперь это можно поставить в исходное уравнение и получить систему уравнений, из которой получается решение. + +\subsection{Вещественные решения} +Теперь коэффициенты вещественные, уравнение однородное и мы хотим найти вещественные решения. +Тогда характеристический многочлен имеет решения трёх типов: вещественные и пары сопряжённых комплексных. +Рассмотрим пары комплексных $\lambda = \alpha \pm i \beta$. +Тогда $t^s e^{\lambda t}$ и $t^s e^{\overline{\lambda} t}$ --- решения (1). +В силу линейности решениями также являются +\[ + \frac{t^s e^{\lambda t} + t^s e^{\overline \lambda t}}{2},~~ + \frac{t^s e^{\lambda t} - t^s e^{\overline \lambda t}}{2i}. +\] +Складывая эти решения, получаем по определению синуса и косинуса решения вида $t^s e^{\alpha t} \cos(\beta t)$ и $t^s e^{\alpha t} \sin(\beta t)$ --- вещественные. + +\textbf{Теорема.} Вместе с корнями $\lambda \in \mathbb R$ многочлена $M$ эти решения образуют фундаментальную систему решений. + +\textbf{Доказательство.} Пусть $\lambda_j = \alpha_j + i \beta_j$, $\overline{\lambda_j} = \alpha_j - i \beta_j$ для $j \in [1, l]$ и $\lambda_j \in \mathbb R$ для $j \in [2l + 1, n]$ --- все решения в комплексных числах. +Положим $z_j^s(t) = t^s e^{\lambda_j t}$, $z_{j+l}^s(t) = t^s e^{\overline{\lambda_j} t}$, $z_j^s(t) = t^s e^{\lambda_j t}$ --- соответствующие этим $\lambda$ решения. +Докажем линейную независимость, пусть +\[ + \sum_s \left(\sum_{j=1}^{l} c_j^s \frac{z_j^s + z_{j+l}^s}{2} + \sum_{j=1}^{l} c_{j+l}^s \frac{z_j^s - z_{j+l}^s}{2i} + \sum_{j=2l+1}^{m} c_j^s z_j \right) \equiv 0. +\] +Приведём подобные слагаемые: +\[ + \left( \frac{c_1^s}{2} + \frac{c_{l+1}^s}{2i} \right) z_1^s + \left( \frac{c_1^s}{2} - \frac{c_{l+1}^s}{2i} \right) z_{l+1}^s + \dots + \sum_{j=2l+1}^{m} c_j^s z_j^s \equiv 0. +\] +В силу равенства нулю все коэффициенты равны нулю. +Из этих слагаемых видим, что $c_1^s = c_{l+1}^s = c_{2l+1}^s = 0$. +Аналогично для остальных. + +\QED + +Случай неоднородных уравнений: выражение в правой части можно привести к виду $(P_1(t) \cos(\mu t) + B(t) \sin(\mu t)) e^{\eta t}$. +Решение тогда ищется в виде +\[ + x(t) = t^k (Q_1(t) \cos(\mu t) + Q_2(t) \sin(\mu t)) e^{\eta t}, +\] +где $k$ --- кратность корня $\gamma = \eta + i \mu$. + +\setcounter{equation}{0} +\section{Системы линейных ОДУ с постоянными коэффициентами} +\subsection{Комплексные однородные системы} +Пусть нам даны $n \in \mathbb N$ и матрица $A \in \mathbb C^{n \times n}$. +Рассмотрим систему +\begin{equation} + x' = Ax. +\end{equation} + +Как мы знаем из алгема, матрицу $A$ можно привести к жордановой нормальной форме, то есть найдутся матрицы $B, C \in \mathbb C^{n \times n}$, причём $\det(C) \ne 0$, такие что $B = C^{-1} A C$, и матрица $B$ имеет вид +\[ + \begin{pmatrix} + K_1 & 0 & 0 \\ + \vdots & \ddots & \vdots \\ + 0 & \dots & K_s + \end{pmatrix}, +\] +где $K_j$ --- жорданова клетка с собственным значением $\lambda_j$ и собственным вектором $h_j$. + +\textbf{Определение.} $h_{j,1}, \dots, h_{j,k_j}$ называется \textit{серией} с собственным значением $\lambda_j$, если $Ah_{j,1} = \lambda_j h_{j,1}$, $Ah_{j,2} = \lambda_j h_{j,2} + h_{j,1}$, и так далее, $Ah_{j,k_j} = \lambda h_{j,k_j} + h_{j,k_j - 1}$. +У Штепина это, кажется, называлось жордановой диаграммой. + +Научимся их находить проще. +Пусть $e_1, \dots, e_n$ --- базис, тогда, просто подставляя в определение $B$, получаем $Be_1 = \lambda_1 e_1$, $Be_2 = \lambda_1 e_2 + e_1$, и так далее, $Be_{k_1} = \lambda_1 e_{k_1} + e_{k_1 - 1}$. +Теперь выразим $B$ через $A$: +\[ + C^{-1} A C e_1 = \lambda_1 e_1 \Rightarrow A(Ce_1) = \lambda_1 (Ce_1). +\] +Аналогично $A(Ce_2) = \lambda_1 (Ce_2) + Ce_1$. + +Таким образом, зная матрицу $C$, мы можем вычислить серию довольно нехитрым образом: $h_{1,i} = Ce_i$, аналогично для остальных клеток. + +На этом воспоминания из алгема заканчиваются, вернёмся к диффурам. +Положим +\[ + \omega_{j,r}(t) := \frac{t^{r-1}}{(r-1)!} h_{j,1} + \frac{t^{r-2}}{(r-2)!} h_{j,2} + \dots + h_{j,r}, +\] +где $j = \overline{1,s}$ и $r = \overline{1,k_j}$. +Заметим, что всего функций будет $n$ из простых комбинаторных соображений. + +\textbf{Теорема.} Набор функций $\omega_{j,r}(t) e^{\lambda_j t}$ является фундаментальной системой решений. +Так, мы научились явно строить решение системы. + +\textbf{Доказательство.} Проверим, что все $n$ функций действительно являются решениями. +Для этого нам понадобится два тождества. +Первое: +\[ + \omega_{j,r}'(t) \equiv \omega_{j,r-1}(t). +\] +(здесь мы считаем, что $\omega_{j,0}(t) \equiv 0$) + +Второе: +\[ + A \omega_{j,r}(t) \equiv \lambda_j \omega_{j,r}(t) + \omega_{j,r-1}(t). +\] +Следует из соотношений на $h_{j,\cdot}$, как на серию. + +Теперь подставим в систему: +\[ + \frac{d}{dt} \left( \omega_{j,r}(t) e^{\lambda_j t} \right) \equiv \left( \omega_{j,r}'(t) + \lambda_j \omega_{j,r} \right) e^{\lambda_j t} \equiv (\omega_{j,r-1}(t) + \lambda_j \omega_{j,r}) e^{\lambda_j t} \equiv +\] +\[ + \equiv A\omega_{j,r}(t) \cdot e^{\lambda_j t} \equiv A (\omega_{j,r}(t) e^{\lambda_j t}). +\] +Следовательно, решением являются. + +Проверим линейную независимость. +Заметим, что $\omega_{j,r}(t) e^{\lambda_j t} |_{t=0} = h_{j,r}$. +Из простых соображений все $h_{j,r}$ линейно независимы, откуда и $\omega_{j,r}(t) e^{\lambda_j t}$ линейно независимы. + +\QED + +\subsection{Вещественные однородные системы} +Пусть нам даны $n \in \mathbb N$ и $A \in \mathbb R^{n \times n}$, система та же. +Теперь нас напрягают комплексные собственные значения. + +Пусть $\lambda_1, \dots, \lambda_l \in \mathbb C$, а $\lambda_{l+1}, \dots, \lambda_{2l}$ --- сопряжённые к ним соответственно, и оставшиеся $\lambda_{2l+1}, \dots, \lambda_s \in \mathbb R$. +Тогда серию можно построить так, что $h_{l+1, r} = \overline h_{1,r}, \dots, h_{2l,r} = \overline h_{l,r}$. + +Определение $\omega_{j,r}$ остаётся тем же, но теперь для $j = \overline{1,l}$ мы рассмотрим функции +\[ + \frac{1}{2} \left( \omega_{j,r}(t) e^{\lambda_j t} + \overline{\omega_{j,r}(t) e^{\lambda_j t}} \right) +\] +и +\[ + \frac{1}{2i} \left( \omega_{j,r}(t) e^{\lambda_j t} - \overline{\omega_{j,r}(t) e^{\lambda_j t}} \right). +\] +Нетрудно заметить, что они вещественные, являются решениями и линейно независимы (это доказывалось в предыдущем параграфе). +Остаются вещественные собственные значения, но для них всё просто: $\omega_{j,r}(t) e^{\lambda_j t}$ подойдёт. + +Перепишем решения для $j = \overline{1,l}$ в более удобном виде. +Пусть $\lambda_j = \alpha_j + i\beta_j$, $h_{j,r} = a_{j,r} + ib_{j,r}$ --- алгебраическая форма записи комплексного числа. +Тогда первая группа решений будет иметь вид +\[ + Re \left( \omega_{j,r}(t) e^{\lambda_j t} \right) = \left( \frac{t^{r-1}}{(r-1)!} a_{j,1} + \dots + a_{j,r} \right) \cos(\beta_j t) e^{\alpha_j t} - +\] +\[ + - \left( \frac{t^{r-1}}{(r-1)!} b_{j,1} + \dots + b_{j,r} \right) \sin(\beta_j t) e^{\alpha_j t} +\] +--- произведение действительных частей минус произведение мнимых. + +Вторая --- +\[ + \left( \frac{t^{r-1}}{(r-1)!} b_{j,1} + \dots + b_{j,r} \right) \cos(\beta_j t) e^{\alpha_j t} + \left( \frac{t^{r-1}}{(r-1)!} a_{j,1} + \dots + a_{j,r} \right) \sin(\beta_j t) e^{\alpha_j t}. +\] + +\subsection{Компексные неоднородные системы} +Как и ранее, у нас есть $n \in \mathbb N$, $A \in \mathbb C^{n \times n}$, многочлен $p: \mathbb R \to \mathbb C^n$ и число $\gamma \in \mathbb C$. +Рассмотрим систему +\begin{equation} + x' = Ax + p(t) e^{\gamma t}. +\end{equation} + +\textbf{Определение.} $p(t) e^{\gamma t}$ будем называть \textit{правой частью специального вида}. +В этом случае мы умеем находить частное решение даже без метода вариации постоянной. + +Перепишем систему в более удобном виде +\begin{equation} + z' = Bz + \tilde p(t) e^{\gamma t}, +\end{equation} +где $B = C^{-1} A C$ и $\tilde p(t) = C^{-1} p(t)$. + +Какая связь между системами (2) и (3)? +Пусть $z(\cdot)$ --- решение (3), положим $x(\cdot) := C z(\cdot)$, тогда $z = C^{-1} x$. +Подставим в систему (2): $C^{-1} x' = BC^{-1} x + \tilde p e^{\gamma t}$, откуда $x' = CBC^{-1} x + C \tilde p e^{\gamma t}$, то есть $x' = Ax + p e^{\gamma t}$. +Иными словами, системы эквивалентны, засим будем решать систему (3), ибо она проще из жордановых соображений. +В частности, нас только интересует какое-то одно частное решение, ибо остальные получаются по линейности. + +Пусть +\[ + B = + \begin{pmatrix} + K_1 & 0 & 0 \\ + \vdots & \ddots & \vdots \\ + 0 & \dots & K_s + \end{pmatrix}, +\] +$k_i$ --- размер клетки $K_i$, $\lambda_i$ --- собственные значения. +Напишем систему (3) построчно: +\[ + \begin{cases} + z_1' = \lambda_1 z_1 + z_2 + \tilde p_1 e^{\gamma t} \\ + \vdots \\ + z_{k_1-1}' = \lambda_1 z_{k_1 - 1} + z_{k_1} + \tilde p_{k_1 - 1} e^{\gamma t} \\ + z_{k_1}' = \lambda_1 z_{k_1} + \tilde p_{k_1} e^{\gamma t} \\ + \vdots + \end{cases} +\] +Проанализируем эти уравнения. +Если $\gamma \ne \lambda_1$, то решение $k_1$-ой строчки можно написать в виде $z_{k_1}(t) = q_{k_1} e^{\gamma t}$, где $\deg(q_{k_1}) \le \deg(p)$, по теореме для линейных однородных уравнений. +Аналогично $z_{k_1 - 1}(t) = q_{k_1-1}(t) e^{\gamma t}$, где $\deg(q_{k_1-1}) \le \deg(p)$. +Такую штуку можно провернуть для всех уравнений, что даёт нам искомое решение. + +Если же $\gamma = \lambda_1$, то $k_1$-ое уравнение решается, как $z_{k_1}(t) = t \cdot q_{k_1}(t) e^{\gamma t}$ для $\deg(q_{k_1}) \le \deg(p)$. +Загоним $t$ в $q_{k+1}$, тогда у нас получится всё, как в предыдущем случае, но теперь $\deg(q_{k_1}) \le 1 + \deg(p)$, $\deg(q_{k_1-1}) \le 2 + \deg(p)$ и так далее. +По итогу, + +\textbf{Теорема.} Если $\gamma \ne \lambda_j$ для всех $j$, то существует частное решение системы (2), имеющее вид $x(t) = P(t) e^{\gamma t}$, где $\deg(P) \le \deg(p)$. + +А если же $\gamma = \lambda_j$, то существует частное решение системы (2), имеющее вид $x(t) = P(t) e^{\gamma t}$, где $\deg(P) \le \deg(p) + \max\{k_l\}$, где максимум берётся по таким $l$, что $\lambda_l = \lambda_j$, ибо в таких клетках как раз реализуется второй случай и оценка на степень ухудшается. + +Таким образом, для нахождения частного решения можно просто применить метод неопределённых коэффициентов. + +\setcounter{equation}{0} +\subsection{Вещественные неоднородные системы с правой частью специального вида} +Пусть дана $A \in \mathbb R^{n \times n}$, числа $\alpha, \beta \in \mathbb R$ и многочлены $U, V: \mathbb R \to \mathbb R^n$. +Рассмотрим систему +\begin{equation} + x' = Ax + e^{\alpha t}(V(t) \cos(\beta t) + V(t) \sin(\beta t)) +\end{equation} +и систему +\begin{equation} + z' = Az + (U(t) - i V(t)) e^{(\alpha + i \beta) t}. +\end{equation} + +У второй системы, как известно, есть решение вида +\[ + z(t) = (F(t) + i G(t)) e^{(\alpha + i\beta)t}, +\] +где $F$ и $G$ --- многочлены, степени которых не превосходят $\max(\deg(U), \deg(V)) + k$, где $k$ --- размер наибольшей жордановой клетки, содержащей собственное значение $\lambda = \alpha + i\beta$, в жордановой форме $A$. + +Решение первой системы тогда записывается в виде +\[ + x(t) = Re(z(t)) = e^{\alpha t} (F(t) \cos(\beta t) - G(t) \sin(\beta t)). +\] +Проверим это: при подстановке $Re(z(t))$ во вторую систему мы получим в точности систему (1). + +\section{Матричная экспонента} +\subsection{Определение} +Пусть дана матрица $A \in \mathbb R^{n \times n}$ (можно и в $\mathbb C^{n \times n}$). +Тогда +\[ + e^A := \sum_{j=0}^{\infty} \frac{A^j}{j!}, +\] +где $0! = 1$ и $A^0 = E$. + +\textbf{Лемма.} Для любого $r > 0$ ряд $\sum_{j=0}^{\infty} \frac{t^j A^j}{j!}$ сходится абсолютно и равномерно при $|t| \le r$. + +\textbf{Доказательство.} Оценим норму одного слагаемого: +\[ + \left\| \frac{t^j A^j}{j!} \right\| \le \frac{t^j}{j!} \| A \|^j, +\] +так как норма произведение не превосходит произведение норм. +Ряд слагаемых справа сходится абсолютно и равномерно, как экспонента, поэтому и слева то же самое. +Более того, норма суммы не превосходит сумму норм, поэтому +\[ + \left\| \sum_{j=0}^{\infty} \frac{t^j A^j}{j!} \right\| \le + \sum_{j=0}^{\infty} \left\| \frac{t^j A^j}{j!} \right\| \le + e^{t\|A\|}. +\] + +\QED + +\subsection{Свойства} +\textbf{Свойство 1.} Пусть матрицы $A$ и $B$ коммутируют, тогда $e^{A + B} = e^A e^B$. + +\textbf{Доказательство.} +Вычислим левую и правую части: +\[ + e^{A+B} = \sum_{j=0}^{\infty} \frac{(A+B)^j}{j!} = \sum_{j,k=0}^{\infty} \Theta_{j,k} A^j B^k. +\] +\[ + e^A e^B = \sum_{j=0}^{\infty} \frac{A^j}{j!} \sum_{k=0}^{\infty} \frac{B^k}{k!} = \sum_{j,k=0}^{\infty} \mu_{j,k} A^j B^k. +\] +Можно вычислить значения $\Theta_{j,k}$ и $\mu_{j,k}$, но лучше заметим, что они не зависят от $n$, поэтому их можно вычислить при $n = 1$ и подставить в общую формулу. +Так вот, при $n = 1$ получаем, что $A$ и $B$ --- это числа, и свойство заведомо верно. +Следовательно, $\Theta_{j,k} = \mu_{j,k}$ при $n = 1$ и при всех $n$. + +\QED + +\textbf{Замечание.} Если $AB \ne BA$, то свойство не обязательно верно. +Возьмём +\[ + A = + \begin{pmatrix} + 0 & 1 \\ + 0 & 0 + \end{pmatrix} + , + B = + \begin{pmatrix} + 0 & 0 \\ + 1 & 0 + \end{pmatrix} +\] +Тогда $A^2 = B^2 = 0$ и +\[ + A + B = + \begin{pmatrix} + 0 & 1 \\ + 1 & 0 + \end{pmatrix}, + AB = + \begin{pmatrix} + 1 & 0 \\ + 0 & 0 + \end{pmatrix}, + BA = + \begin{pmatrix} + 0 & 0 \\ + 0 & 1 + \end{pmatrix} +\] +То есть $e^A e^B \ne e^B e^A$, но $e^{A + B} = e^{B + A}$. + +\textbf{Свойство 2.} Функция $t \to e^{tA}$ дифференцируема и $\frac{d}{dt} e^{tA} = A e^{tA}$. + +\textbf{Доказательство.} +Продифференцируем ряд $e^{tA} = \sum_{j=0}^{\infty} \frac{t^j A^j}{j!}$: +\[ + \frac{d}{dt} \left( \frac{t^j A^j}{j!} \right) \equiv \frac{t^{j-1} A^j}{(j-1)!}. +\] +Оценим норму одного слагаемого производной: +\[ + \left\| \frac{t^{j-1} A^j}{(j - 1)!} \right\| \le \frac{|t|^{j-1}}{(j-1)!} \|A\|^j. +\] +Этот ряд сходится абсолютно и равномерно. +Следовательно, функция дифференцируема и её можно дифференцировать почленно. +\[ + \frac{d}{dt} \left( e^{tA} \right) \equiv \sum_{j=1}^{\infty} \frac{t^{j-1} A^j}{(j-1)!} \equiv A \sum_{j=1}^{\infty} \frac{t^{j-1} A^{j-1}}{(j-1)!} \equiv A e^{tA}. +\] + +\QED + +\textbf{Замечание.} Матрицу $A$ можно было вынести и справа и получить $e^{tA} A$. + +\textbf{Свойство 3.} $X(t) = e^{tA}$ является решением задачи Коши $X' = AX$, $X(0) = E$. +Первое следует из свойства 2, второе --- из определения. +В частности, $X(t)$ является фундаментальной системой решений системы $x + = Ax$. + +\textbf{Свойство 4.} $\det(e^{tA}) \equiv e^{t \cdot \tr(A)}$. +Следует из теоремы Лиувилля-Остроградского для уравнения $x' = Ax$: берём $t_0 = 0$, тогда матрица $A(s)$ не зависит от $s$ и интеграл тривиален. + +\textbf{Свойство 5.} Пусть +\[ + K = + \begin{pmatrix} + \lambda & 1 & 0 & \dots & 0 \\ + 0 & \lambda & 1 & \dots & 0 \\ + \vdots & \vdots & \vdots & \ddots & \vdots \\ + 0 & 0 & 0 & \dots & \lambda + \end{pmatrix}, + F = + \begin{pmatrix} + 0 & 1 & 0 & \dots & 0 \\ + 0 & 0 & 1 & \dots & 0 \\ + \vdots & \vdots & \vdots & \ddots & \vdots \\ + 0 & 0 & 0 & \dots & 0 + \end{pmatrix} +\] +(то есть $K = \lambda E + F$ --- жорданова клетка, матрицы размера $m \times m$). +Тогда +\[ + e^{tF} = \sum_{j=0}^{m-1} \frac{t^j F^j}{j!} = + \begin{pmatrix} + 1 & \frac{t}{1!} & \frac{t^2}{2!} & \dots & \frac{t^{m-1}}{(m-1)!} \\ + 0 & 1 & \frac{t}{1!} & \dots & \frac{t^{m-2}}{(m-2)!} \\ + \vdots & \vdots & \vdots & \ddots & \vdots \\ + 0 & 0 & 0 & \dots & 1 + \end{pmatrix} +\] +Также +\[ + e^{t \lambda E} \equiv e^{t \lambda} E. +\] +И по итогу +\[ + e^{tK} = e^{t \lambda E + tF} \equiv e^{t \lambda E} e^{tF} \equiv e^{t\lambda} e^{tF}. +\] + +\textbf{Свойство 6.} Пусть +\[ + B = + \begin{pmatrix} + K_1 & 0 & \dots & 0 \\ + 0 & K_2 & \dots & 0 \\ + \vdots & \vdots & \ddots & \vdots \\ + 0 & 0 & \dots & K_s + \end{pmatrix} , +\] +где $K_i$ --- жордановы клетки. Тогда +\[ + e^{tB} = + \begin{pmatrix} + e^{tK_1} & 0 & \dots & 0 \\ + 0 & e^{tK_2} & \dots & 0 \\ + \vdots & \vdots & \ddots & \vdots \\ + 0 & 0 & \dots & e^{tK_s} + \end{pmatrix}. +\] +Очевидно, так как мы возводим блочную матрицу в степень понятным образом. + +\textbf{Свойство 7.} Если $B, C \in \mathbb C^{n \times n}$ и $\det(C) \ne 0$, причём $B = C^{-1} A C$, то $e^{tA} = C e^{tB} C^{-1}$. + +\textbf{Доказательство.} Распишем $e^{tB}$ по определению, в каждом множителе $C^{-1}$ и $C$ посередине сократятся, а вхождения по краям можно вынести и получить искомое. + +\QED + +\section{Теорема Штурма} +\setcounter{equation}{0} +Пусть $I \subset \mathbb R$ --- интервал, $a \in C^1(I, \mathbb R)$, $b \in C(I, \mathbb R)$ --- функции. +Рассмотрим уравнение +\begin{equation} + x'' + a(t)x' + b(t)x = 0. +\end{equation} +Правильной заменой его можно свести к уравнению +\begin{equation} + y'' + q(t)y = 0. +\end{equation} +Найдём такую замену: пусть $x(t) = u(t) y(t)$, тогда $x' = u'y + uy'$ и $x'' = u''y + 2u'y' + uy''$. +Тогда уравнение (1) записывается в виде +\[ + u''y + 2u'y' + au'y + auy' + buy = 0. +\] +Теперь будем искать решение, удовлетворяющее уравнению $2u' + au = 0$, тогда $u' = -\frac{1}{2} au$ и +\[ + u'' = -\frac{1}{2} a'u - \frac{1}{2} au' = \left( -\frac{1}{2} a' + \frac{1}{4} a^2 \right) u. +\] +Подставим в исходное: +\[ + uy'' + \left( \left( -\frac{1}{2} a' + \frac{1}{4} a^2 \right) u - \frac{1}{2} a^2 u + bu \right) y = 0. +\] +Если $2u' + au = 0$, то +\[ + u(t) = \exp \left( -\frac{1}{2} \int_{t_0}^{t} a(s) ds \right), +\] +поэтому она всегда положительна, и на неё можно разделить: +\[ + y'' + \left(-\frac{1}{2} a' - \frac{1}{4} a^2 + b \right) y = 0. +\] +Теперь будем рассматривать только уравнение (2). + +\subsection{Свойства} +\textbf{Свойство 1.} Если $y(\cdot)$ --- нетривиальное решение, то все нули функции $y(\cdot)$ являются простыми, то есть если $y(t_0) = 0$, то $y'(t_0) \ne 0$. + +\textbf{Доказательство.} Рассмотрим задачу Коши +\[ + \begin{cases} + y'' + q(t) y = 0 \\ + y(t_0) = 0 \\ + y'(t_0) = 0 + \end{cases} +\] +У неё есть ровно одно решение $y(t) \equiv 0$ --- тривиальное. + +\QED + +\textbf{Определение.} $\widehat t$ называется \textit{точкой прикосновения множества} $T \subset \mathbb R$, если для любого $\varepsilon > 0$ множество $T \cap O_\varepsilon(\widehat t)$ непусто. +В отличие от предельных точек здесь шар не проколотый. + +\textbf{Свойство 2.} Если $y(\cdot)$ --- нетривиальное решение, то множество нулей $\{t \in I: y(t) = 0\}$ не имеет предельных точек, то есть нет сходящейся последовательности нулей. + +\textbf{Доказательство.} От противного: существует последовательность $\{t_j\} \subset I$ и $t \in I$, такие что $t_j \to t$, все $y(t_j) = 0$ и $y(t) = 0$. +Тогда между соседними $t_j$ производная $y'$ обращается в ноль по теореме Ролля, так как значения на концах равны. +Отсюда $y'(t) = 0$ --- противоречие со свойством 1. + +\QED + +\subsection{Теорема Штурма} +Пусть даны $q, Q \in C(I, \mathbb R)$, числа $t_1, t_2 \in I$, такие что $t_1 < t_2$ и уравнение +\begin{equation} + z'' + Q(t) z = 0. +\end{equation} +Пусть также: +\begin{enumerate} + \item $q(t) \le Q(t)$ на $I$. + \item $y$ --- нетривиальное решение (2). + \item $y(t_1) = y(t_2) = 0$. + \item $y(t) \ne 0$ на $(t_1, t_2)$ (по свойству 2 это натуральное предположение). + \item $z$ --- нетривиальное решение (3). +\end{enumerate} +Тогда либо +\begin{itemize} + \item Существует $t_0 \in (t_1, t_2)$, такое что $z(t_0) = 0$. + \item $z(t_1) = z(t_2) = 0$. +\end{itemize} + +\textbf{Доказательство.} Пусть для определённости $y(t) > 0$ на $(t_1, t_2)$ (так как она непрерывна и не равна нулю на интервале, так считать можно). +Тогда $y'(t_1) \ge 0$ и $y'(t_2) \le 0$. +Более того, по свойству 1 $y'(t_1) > 0$ и $y'(t_2) < 0$. +Умножим (2) на $z$, (3) --- на $y$ и вычтем: +\[ + y''(t) z(t) - z''(t) y(t) \equiv (Q(t) - q(t)) y(t) z(t). +\] +Заметим, что в левой части производная: +\[ + \frac{d}{dt} \left( y'(t) z(t) - y(t) z'(t) \right) \equiv (Q(t) - q(t)) y(t) z(t). +\] +Проинтегрируем по $t$ от $t_1$ до $t_2$: +\[ + y'(t_2) z(t_2) - y(t_2) z'(t_2) - y'(t_1) z(t_1) + y(t_1) z'(t_1) = \int_{t_1}^{t_2} (Q(t) - q(t)) y(t) z(t) dt. +\] +Вспомним, что $t_1$ и $t_2$ --- нули функции $y$: +\begin{equation} + y'(t_2) z(t_2) - y'(t_1) z(t_1) = \int_{t_1}^{t_2} (Q(t) - q(t)) y(t) z(t) dt. +\end{equation} + +Предположим, что $z(t) > 0$ на $(t_1, t_2)$ (при $z(t) < 0$ аналогично). +Тогда есть 4 случая: $z(t) > 0$ на $[t_1, t_2]$, $z(t) > 0$ на $[t_1, t_2)$ и $z(t_2) = 0$ и наоборот, $z(t_1) = z(t_2) = 0$. +В первых трёх случаях правая часть уравнения (4) неотрицательна, а левая --- отрицательна, так как мы вычитаем из неположительного неотрицательное, и хотя бы одно из них отлично от нуля, противоречие. + +Таким образом, мы предположили отрицание первого следствия и получили второе следствие, то есть теорема доказана. + +\QED + +\textbf{Пример.} +\[ + y'' + \frac{1}{4(1 + t^2)}y = 0, t > 0. +\] +Тогда его решение $y(\cdot)$ имеет не более двух нулей. +Рассмотрим уравнение +\[ + z'' + \frac{1}{4t^2} z = 0. +\] +Его решением является $z(t) = \sqrt t (c_1 \ln(t) + c_2)$ --- не более одного нуля. Положим +\[ + q(t) := \frac{1}{4(1 + t)^2}, Q(t) := \frac{1}{4t^2}. +\] +По теореме Штурма и перебору случаев получаем искомое. + +\textbf{Пример 2.} +\[ + z'' + (1 + t^2) z = 0, t \in [1, 5]. +\] +Любое нетривиальное решение имеет хотя бы один нуль. +Рассмотрим уравнение +\[ + y'' + 1 \cdot y = 0. +\] +Его решением является $y(t) = c_1 \sin(t + c_2)$. +У него либо 1, либо 2 нуля в зависимости от $c_2$. Рассмотрим решения с двумя. +По теореме Штурма между этими двумя нулями есть нуль функции $z(t)$. + +\textbf{Следствие 1.} Пусть $q(t) \le 0$. Тогда для любого нетривиального решения $y(\cdot)$ мощность множества его нулей не превосходит 1. + +\textbf{Доказательство.} Положим $Q(t) \equiv 0$. Тогда уравнение (3) имеет вид $z'' = 0$, и у него есть нетривиальное решение $z(t) \equiv 1$. +Если у решения $y(\cdot)$ хотя бы 2 нуля, то по теореме Штурма у $z(t) \equiv 1$ есть хотя бы один нуль. + +\QED + +\textbf{Следствие 2.} Пусть $y_1, y_2$ --- линейно независимые решения (2), $t_1$ и $t_2$ --- последовательные нули $y_1(t)$. +Тогда существует единственная точка $t \in (t_1, t_2)$, такая что $y_2(t) = 0$. +Иными словами, их нули чередуются (если два нуля совпали, то решения линейно зависимы). + +\textbf{Доказательство.} Положим $Q(t) = q(t)$, тогда по теореме Штурма существует $t \in [t_1, t_2]$, такое что $y_2(t) = 0$. +Если $t = t_1$, то определитель Вронского +\[ + \omega(t) = + \begin{vmatrix} + y_1(t) & y_2(t) \\ + y_1'(t) & y_2'(t) + \end{vmatrix} +\] +равен нулю, так как верхняя строчка равна нулю, что противоречит линейной независимости $y_1$ и $y_2$. +При $t = t_2$ то же самое, поэтому все нули лежат в интервале. +Докажем единственность. +Пусть существуют $\tau_1, \tau_2 \in (t_1, t_2)$, такие что $\tau_1 < \tau_2$ и $y_2(\tau_1) = y_2(\tau_2) = 0$. +Тогда по теореме Штурма существует нуль решения $y_1$ в интервале $(\tau_1, \tau_2)$ --- противоречие. + +\QED + +\textbf{Следствие 3.} Пусть существует нетривиальное решение $\widehat y$ уравнения (2), такое что множество его нулей бесконечно. +Тогда для любого решения $y$ этого уравнения множество его нулей тоже бесконечно. +Очевидно из следствия 2: либо линейно зависимы, тогда множества нулей совпадают, либо независимы, тогда бесконечно между нулями $\widehat y$. + +\section{Зависимость решения задачи Коши от параметра} +\textbf{Теорема 1.} Пусть $\Omega \subset \mathbb R \times \mathbb R^n$ открыто, $f: \Omega \to \mathbb R^n$ непрерывно, $\frac{\partial f}{\partial x}$ существует и непрерывна, $(t_0, x_0) \in \Omega$ --- произвольные. +Рассмотрим задачу Коши +\[ + \begin{cases} + x' = f(t, x) \\ + x(t_0) = x_0 + \end{cases} . +\] +Пусть $\phi: I \to \mathbb R^n$ --- её решение, $[\alpha, \beta]$ --- отрезок, такой что $t_0 \in [\alpha, \beta] \subset I$, $\rho > 0$ --- число, такое что $V = \{(t, x): |x - \phi(t)| \le \rho, t \in [\alpha, \beta]\} \subset \Omega$. + +Тогда $\forall \varepsilon > 0~\exists \delta > 0: \forall g: \Omega \to \mathbb R^n$ с теми же ограничениями, что и на $f$, таких что $|f - g| \le \delta$ на $V$, а также для любого $y_0 \in \mathbb R^n$, такого что $|y_0 - x_0| \le \delta$, решение $y(\cdot)$ задачи Коши +\[ + \begin{cases} + y' = g(t, y) \\ + y(t_0) = y_0 + \end{cases} +\] +существует на $[\alpha, \beta]$ и $|\phi(t) - y(t)| < \varepsilon$ на $[\alpha, \beta]$. + +Смысл всего этого текста: пусть у нас есть задача Коши с функцией $f$ и начальным условием $(t_0, x_0)$. +Если мы взяли функцию $g$, близкую к $f$, и начальное условие $(t_0, y_0)$, близкое к $(t_0, x_0)$, то и решения двух задач будут близки друг к другу. + +\textbf{Доказательство.} Так как $V$ является компактом, на нём функция $f$ ограничена числом $m$ и липшицева с константой $k$. +Пусть $J \subset [\alpha, \beta]$ --- отрезок, такой что $t_0 \in J$ и при $t \in J$ $(t, y(t)) \in V$. +Тогда +\[ + |y'(t) - \phi'(t)| = |g(t, y(t)) - f(t, \phi(t))| \le +\] +\[ + \le |g(t, y(t)) - f(t, y(t))| + |f(t, y(t)) - f(t, \phi(t))| \le +\] +\[ + \le \delta +k|\phi(t) - y(t)|, \forall t \in J. +\] +Положим $r = \beta - \alpha$, тогда по лемме о дифференциальном неравенстве $|\phi(t) - y(t)| \le \delta e^{kr} + \frac{\delta}{k} (e^{kr} - 1)$. +Зафиксируем $\varepsilon > 0$ (будем считать, что $\varepsilon < \rho$). +Выберем $\delta$ так, чтобы правая часть неравенства была меньше $\varepsilon$. +По теореме о продолжении решения решение $y(\cdot)$ определено на всём отрезке $[\alpha, \beta]$, так как мы сделали разность с $\phi(\cdot)$ достаточно малой, то есть продолжение $y(\cdot)$ не может дойти до другой границы $V$, ибо в этом случае $|y - \phi| \ge \rho \ge \varepsilon$. +Оценка на модуль разности решений теперь следует из выбора $\delta$. + +\QED + +\textbf{Теорема 2.} Пусть $\Omega \subset \mathbb R \times \mathbb R^n$ открыто, $M \subset \mathbb R^m$, $M \ne \varnothing$, $f: \Omega \times M \to \mathbb R^n$ непрерывно, $a: M \to \mathbb R^n$ непрерывно, $\frac{\partial f}{\partial x}$ существует и непрерывна, $\phi(\cdot, \mu)$ --- непродолжаемое решение задачи Коши +\[ + \begin{cases} + x' = f(t, x, \mu) \\ + x(t_0) = a(\mu) + \end{cases}, +\] +$D := \{(t, \mu): \text{$\phi(t, \mu)$ определено}\}$. +Тогда отображние $\phi(\cdot, \cdot)$ непрерывно, а множество $D$ открыто. + +\textbf{Доказательство.} Зафиксируем $(\widehat t, \widehat \mu) \in D$. +Возьмём отрезок $[\alpha, \beta]$, такой что $t_0 \in (\alpha, \beta)$ и $\widehat t \in (\alpha, \beta)$. +Зафиксируем $\rho > 0$, такое что +\[ + V := \{(t, x): t \in [\alpha, \beta], |\phi(t, \widehat \mu) - x| \le \rho\} \subset \Omega. +\] +Тогда по теореме 1 $\forall \varepsilon > 0~\exists \delta(\varepsilon) > 0$. +Пусть $O(\widehat \mu) \subset M$ --- такая окрестность $\widehat \mu$, что +\[ + \begin{cases} + |f(t, x, \mu) - f(t, x, \widehat \mu)| \le \delta, \forall (t, x) \in V \\ + |a(\mu) - a(\widehat \mu)| \le \delta + \end{cases}. +\] +Почему так можно выбрать: второе условие очевидно в силу непрерывности. +Докажем первое, от противного: для любого $j \in \mathbb N$ найдётся $(t_j, x_j, \mu_j)$, такие что $(t_j, x_j) \in V$, $|\mu_j - \widehat \mu| < \frac{1}{j}$, но при этом $|f(t_j, x_j, \mu_j) - f(t_j, x_j, \widehat \mu)| > \delta$. +Заметим, что $(t_j, x_j)$ ограничена, так как $V$ является компактом, поэтому по теореме Больцано-Вейерштрасса мы можем перейти к сходящейся подпоследовательности. +Более того, опять же в силу компактности $V$, её предел $(t, x)$ будет лежать в $V$. +Вместе с тем, что $\mu_j \to \widehat \mu$, получаем в пределе, что $|f(t, x, \widehat \mu) - f(t, x, \widehat \mu)| \ge \delta$ --- противоречие. + +Тогда по теореме 1 для всех $\mu \in O(\widehat \mu)$ имеем, что $\phi(\cdot, \mu)$ определено на $[\alpha, \beta]$ и $|\phi(t, \mu) - \phi(t, \widehat \mu)| < \varepsilon$ на $[\alpha, \beta]$. +Иными словами, $\phi$ определено на $(\alpha, \beta) \times O(\widehat \mu)$, что даёт открытость $D$. +Так как при фиксированном $\mu$ функция $\phi(\cdot, \mu)$ является решением задачи Коши, она непрерывна по $t$. +Следовательно, существует окрестность $T \ni \widehat t$, такая что $|\phi(t, \widehat \mu) - \phi(\widehat t, \widehat \mu)| < \varepsilon$. +Тогда для всех $(t, \mu) \in T \times O(\widehat \mu)$ имеем +\[ + |\phi(t, \mu) - \phi(\widehat t, \widehat \mu)| \le |\phi(t, \mu) - \phi(t, \widehat \mu)| + |\phi(t, \mu) - \phi(\widehat t, \widehat \mu)| < \varepsilon + \varepsilon. +\] +Таким образом, $\phi(\cdot, \cdot)$ непрерывна. + +\QED + +\textbf{Теорема 3.} (б/д) Дополнительно к условиям теоремы 2 предположим, что $M \subset \mathbb R$ открыто, $\frac{\partial f}{\partial \mu}$ и $a'$ существуют и непрерывны. +Тогда $\phi$ непрерывно дифференцируема, существуют и непрерывны производные $\frac{\partial^2 \phi}{\partial t \partial \mu}$, $\frac{\partial^2 \phi}{\partial \mu \partial t}$, и $\frac{\partial^2 \phi}{\partial \mu \partial t} \equiv \frac{\partial^2 \phi}{\partial t \partial \mu}$. +Более того, $\frac{\partial \phi}{\partial \mu}(t, \widehat \mu)$ является решением задачи Коши +\[ + \begin{cases} + v' = \frac{\partial f}{\partial x} (t, \phi(t, \widehat \mu))v + \frac{\partial f}{\partial \mu} (t, \phi(t, \widehat \mu), \widehat \mu) \\ + v(t_0) = a'(\widehat \mu) + \end{cases}. +\] + +\section{Линейные уравнения, уравнение Эйлера} +Эта тема должна была быть раньше, но Жуковский забыл про неё. + +Пусть $a_0, a_1, \dots, a_n \in \mathbb R$, $b: \mathbb R \to \mathbb R$ непрерывна. +Рассмотрим \textit{уравнение Эйлера} +\[ + a_0t^n x^{(n)} + \dots + a_{n-1}t x' + a_nx = b(t). +\] + +Правильной заменой его можно свести к уравнению с постоянными коэффициентами. +Решим его при $t > 0$, сделав замену $t = e^s$, $y(s) = x(e^s)$. +Получим $y' = x' e^s$, $y'' = x'' e^{2s} + x' + e^s = x'' e^{2s} + y'$ и так далее. +Теперь можно выразить $x' = e^{-s} y'$, $x'' = (y'' - y)e^{-2s}$ и так далее. +Можно доказать, что $k$-ая производная --- это линейная комбинация производных $y$, умноженная на $e^{-ks}$. + +Дальше для $n = 2$: $a_0t^2 x'' + a_1 t x' + a_2 x = b(t)$. +После подстановки получим +\[ + a_0 e^{2s}(y'' - y') e^{-2s} + a_1 e^s y' e^{-s} + a_2y = b(e^s). +\] +Потом нужно отдельно решить для $t < 0$, после чего не гарантируется, что решения получится склеить, например, если $x(t) = \frac{1}{t}$: решение не может содержать точку $t = 0$. diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/001.pdf_tex b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/001.pdf_tex new file mode 100644 index 00000000..d67d802f --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/001.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file '001.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{188.61345426bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.71747798)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{001.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/001.svg b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/001.svg new file mode 100644 index 00000000..a08c4a6e --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/001.svg @@ -0,0 +1,376 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/001.svg.pdf_tex b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/001.svg.pdf_tex new file mode 100644 index 00000000..3ae12021 --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/001.svg.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3 (0e150ed6c4, 2023-07-21), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file '001.svg.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{160.29248455bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.8442442)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{001.svg.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/4-1.pdf_tex b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/4-1.pdf_tex new file mode 100644 index 00000000..ad26271c --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/4-1.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file '4-1.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{194.81296569bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.52888589)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{4-1.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/4-1.svg b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/4-1.svg new file mode 100644 index 00000000..3ca5ef62 --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/4-1.svg @@ -0,0 +1,296 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/811.pdf_tex b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/811.pdf_tex new file mode 100644 index 00000000..3ed31269 --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/811.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file '811.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{192.01028418bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.69589513)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{811.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/811.svg b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/811.svg new file mode 100644 index 00000000..5b0c2737 --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/811.svg @@ -0,0 +1,217 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/circle-portrait.pdf_tex b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/circle-portrait.pdf_tex new file mode 100644 index 00000000..394216bf --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/circle-portrait.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file 'circle-portrait.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{172.12633869bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.8468283)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{circle-portrait.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/circle-portrait.svg b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/circle-portrait.svg new file mode 100644 index 00000000..86077e53 --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/circle-portrait.svg @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/continuation-theorem.pdf_tex b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/continuation-theorem.pdf_tex new file mode 100644 index 00000000..dc654919 --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/continuation-theorem.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file 'continuation-theorem.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{176.93016473bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.85935547)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{continuation-theorem.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/continuation-theorem.svg b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/continuation-theorem.svg new file mode 100644 index 00000000..9b4e7d99 --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/continuation-theorem.svg @@ -0,0 +1,497 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/degenerate-knot.pdf_tex b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/degenerate-knot.pdf_tex new file mode 100644 index 00000000..6f1fbd2b --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/degenerate-knot.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file 'degenerate-knot.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{172.12636032bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.89456616)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{degenerate-knot.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/degenerate-knot.svg b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/degenerate-knot.svg new file mode 100644 index 00000000..704afc11 --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/degenerate-knot.svg @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/dicritical-knot.pdf_tex b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/dicritical-knot.pdf_tex new file mode 100644 index 00000000..80f2e4c2 --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/dicritical-knot.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file 'dicritical-knot.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{172.12633869bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.84682824)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{dicritical-knot.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/dicritical-knot.svg b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/dicritical-knot.svg new file mode 100644 index 00000000..298c3d5a --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/dicritical-knot.svg @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/focus-portrait.pdf_tex b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/focus-portrait.pdf_tex new file mode 100644 index 00000000..817d2ba7 --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/focus-portrait.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file 'focus-portrait.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{172.12633869bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.8468283)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{focus-portrait.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/focus-portrait.svg b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/focus-portrait.svg new file mode 100644 index 00000000..ebd22797 --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/focus-portrait.svg @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/implicit-equation-t.pdf_tex b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/implicit-equation-t.pdf_tex new file mode 100644 index 00000000..a45bf69a --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/implicit-equation-t.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file 'implicit-equation-t.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{247.13009812bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.58539794)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{implicit-equation-t.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/implicit-equation-t.svg b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/implicit-equation-t.svg new file mode 100644 index 00000000..761d11dc --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/implicit-equation-t.svg @@ -0,0 +1,495 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/knot-portrait.pdf_tex b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/knot-portrait.pdf_tex new file mode 100644 index 00000000..16267e85 --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/knot-portrait.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file 'knot-portrait.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{360.73664628bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.40475921)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{knot-portrait.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/knot-portrait.svg b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/knot-portrait.svg new file mode 100644 index 00000000..eeaac70d --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/knot-portrait.svg @@ -0,0 +1,291 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/seat-portrait.pdf_tex b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/seat-portrait.pdf_tex new file mode 100644 index 00000000..71d41d38 --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/seat-portrait.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file 'seat-portrait.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{385.16872616bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.41540755)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{seat-portrait.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/seat-portrait.svg b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/seat-portrait.svg new file mode 100644 index 00000000..b4e49861 --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/figures/seat-portrait.svg @@ -0,0 +1,355 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/header.tex b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/header.tex new file mode 100644 index 00000000..bdc453d7 --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/header.tex @@ -0,0 +1,218 @@ +%\documentclass[a4paper,12pt, draft]{article} +\documentclass[12pt,a4paper]{article} + +%%% Работа с русским языком +\usepackage{cmap} % поиск в PDF +\usepackage{mathtext} % русские буквы в формулах +\usepackage[T2A]{fontenc} % кодировка +\usepackage[utf8]{inputenc} % кодировка исходного текста +\usepackage[english,russian]{babel} % локализация и переносы +\usepackage{indentfirst} % красная строка в первом абзаце +\frenchspacing % равные пробелы между словами и предложениями + +%%% Дополнительная работа с математикой +\usepackage{amsmath,amsfonts,amssymb,amsthm,mathtools} % пакеты AMS +\usepackage{icomma} % "Умная" запятая + +%%% Свои символы и команды +\usepackage{centernot} % центрированное зачеркивание символа +\usepackage{stmaryrd} % некоторые спецсимволы +\usepackage{dsfont} +\usepackage{amsthm} + +\renewcommand{\epsilon}{\ensuremath{\varepsilon}} +\renewcommand{\phi}{\ensuremath{\varphi}} +\renewcommand{\kappa}{\ensuremath{\varkappa}} +\renewcommand{\le}{\ensuremath{\leqslant}} +\renewcommand{\leq}{\ensuremath{\leqslant}} +\renewcommand{\ge}{\ensuremath{\geqslant}} +\renewcommand{\geq}{\ensuremath{\geqslant}} +\renewcommand{\emptyset}{\ensuremath{\varnothing}} + +\DeclareMathOperator{\sgn}{sgn} +\DeclareMathOperator{\ke}{Ker} +\DeclareMathOperator{\im}{Im} +\DeclareMathOperator{\re}{Re} + +\newcommand{\N}{\mathbb{N}} +\newcommand{\Z}{\mathbb{Z}} +\newcommand{\Q}{\mathbb{Q}} +\newcommand{\R}{\mathbb{R}} +\newcommand{\Cm}{\mathbb{C}} +\newcommand{\F}{\mathbb{F}} +\newcommand{\I}{\mathbb{I}} +\newcommand{\id}{\mathrm{id}} +\newcommand{\imp}[2]{ + (#1\,\,$\ra$\,\,#2)\,\, +} +\newcommand{\System}[1]{ + \left\{\begin{aligned}#1\end{aligned}\right. +} +\newcommand{\Root}[2]{ + \left\{\!\sqrt[#1]{#2}\right\} +} +\newcommand{\RR}{\R} +\newcommand{\NN}{\N} +\renewcommand{\subseteq}{\subset} +\newcommand{\sub}{\subset} +\newcommand{\sconstr}{\;\vert\;} +\newcommand{\thus}{\implies} + +\newcommand{\defeq}{\vcentcolon= } +\newcommand{\defev}{\stackrel{\Delta}{\Longleftrightarrow}} +\newcommand{\deriv}[3][1]{% + \ifthenelse{#1>1}{% + \frac{\dlta^{#1} {#2}}{\dlta {#3}^{#1}} + }{% + \frac{\dlta {#2}}{\dlta {#3}} + }% +} + +\renewcommand\labelitemi{$\triangleright$} + +\let\bs\backslash +\let\lra\Leftrightarrow +\let\ra\Rightarrow +\let\la\Leftarrow +\let\emb\hookrightarrow + +%%% Перенос знаков в формулах (по Львовскому) +\newcommand{\hm}[1]{#1\nobreak\discretionary{}{\hbox{$\mathsurround=0pt #1$}}{}} + +%%% Работа с картинками +\usepackage{graphicx} % Для вставки рисунков +\setlength\fboxsep{3pt} % Отступ рамки \fbox{} от рисунка +\setlength\fboxrule{1pt} % Толщина линий рамки \fbox{} +\usepackage{wrapfig} % Обтекание рисунков текстом + +%%% Работа с таблицами +\usepackage{array,tabularx,tabulary,booktabs} % Дополнительная работа с таблицами +\usepackage{longtable} % Длинные таблицы +\usepackage{multirow} % Слияние строк в таблице + +%%% Теоремы +\theoremstyle{plain} +\newtheorem{theorem}{Теорема}[section] +\newtheorem{lemma}{Лемма}[section] +\newtheorem{proposition}{Утверждение}[section] +\newtheorem{property}{Свойство}[section] +\newtheorem*{exercise}{Упражнение} +\newtheorem*{problem}{Задача} + +\theoremstyle{definition} +\newtheorem{definition}{Определение}[section] +\newtheorem*{corollary}{Следствие} +\newtheorem*{note}{Замечание} +\newtheorem*{reminder}{Напоминание} +\newtheorem*{agreement}{Соглашение} +\newtheorem*{example}{Пример} +\theoremstyle{remark} +\newtheorem*{solution}{Решение} + +%%% Оформление страницы +\usepackage{extsizes} % Возможность сделать 14-й шрифт +\usepackage{geometry} % Простой способ задавать поля +\usepackage{setspace} % Интерлиньяж +\usepackage{enumitem} % Настройка окружений itemize и enumerate +\setlist{leftmargin=25pt} % Отступы в itemize и enumerate + +\geometry{top=25mm} % Поля сверху страницы +\geometry{bottom=30mm} % Поля снизу страницы +\geometry{left=20mm} % Поля слева страницы +\geometry{right=20mm} % Поля справа страницы + +\setlength\parindent{15pt} % Устанавливает длину красной строки 15pt +\linespread{1.3} % Коэффициент межстрочного интервала +%\setlength{\parskip}{0.5em} % Вертикальный интервал между абзацами +%\setcounter{secnumdepth}{0} % Отключение нумерации разделов +%\setcounter{section}{-1} % Нумерация секций с нуля +\usepackage{multicol} % Для текста в нескольких колонках +\usepackage{soulutf8} % Модификаторы начертания +\mathtoolsset{showonlyrefs=true} % показывать номера формул только у тех, у которых есть ссылки по eqref +%%% Содержаниие +\usepackage{tocloft} +\tocloftpagestyle{main} +%\setlength{\cftsecnumwidth}{2.3em} +%\renewcommand{\cftsecdotsep}{1} +%\renewcommand{\cftsecpresnum}{\hfill} +%\renewcommand{\cftsecaftersnum}{\quad} + +%%% Шаблонная информация для титульного листа +\newcommand{\CourseName}{Дифференциальные уравнения} +\newcommand{\FullCourseNameFirstPart}{\so{ДИФФЕРЕНЦИАЛЬНЫЕ УРАВНЕНИЯ}} +\newcommand{\SemesterNumber}{III} +\newcommand{\LecturerInitials}{Жуковский Сергей Евгеньевич} +\newcommand{\CourseDate}{осень 2023} +\newcommand{\AuthorInitials}{Лизюра Дмитрий} +\newcommand{\VKLink}{https://vk.com/id738720460} +\newcommand{\TGLink}{https://t.me/dimaliz} +\newcommand{\GithubLink}{https://github.com/MIPT-Group/Lectures_Tex_Club} + +%%% Колонтитулы +\usepackage{titleps} +\newpagestyle{main}{ + \setheadrule{0.4pt} + \sethead{\CourseName}{}{\hyperlink{intro}{\;Назад к содержанию}} + \setfootrule{0.4pt} + \setfoot{ФПМИ МФТИ, \CourseDate}{}{\thepage} +} +\pagestyle{main} + +%%% Нумерация уравнений +\makeatletter +\def\eqref{\@ifstar\@eqref\@@eqref} +\def\@eqref#1{\textup{\tagform@{\ref*{#1}}}} +\def\@@eqref#1{\textup{\tagform@{\ref{#1}}}} +\makeatother % \eqref* без гиперссылки +\numberwithin{equation}{section} % Нумерация вида (номер_секции).(номер_уравнения) +\mathtoolsset{showonlyrefs= true} % Номера только у формул с \eqref{} в тексте. + +%%% Гиперссылки +\usepackage{hyperref} +\usepackage[usenames,dvipsnames,svgnames,table,rgb]{xcolor} +\hypersetup{ + unicode=true, % русские буквы в раздела PDF + colorlinks=true, % Цветные ссылки вместо ссылок в рамках + linkcolor=black!15!blue, % Внутренние ссылки + citecolor=green, % Ссылки на библиографию + filecolor=magenta, % Ссылки на файлы + urlcolor=NavyBlue, % Ссылки на URL +} + +%%% Графика +\usepackage{tikz} % Графический пакет tikz +\usepackage{tikz-cd} % Коммутативные диаграммы +\usepackage{tkz-euclide} % Геометрия +\usepackage{stackengine} % Многострочные тексты в картинках +\usetikzlibrary{angles, babel, quotes} + +%\usepackage{paratype} +%\usepackage{euler} + +%\usepackage{microtype} + +%\everymath{\displaystyle} + +% https://tex.stackexchange.com/questions/44235/is-there-a-way-to-do-an-upside-down-widehat +\DeclareFontFamily{U}{mathx}{\hyphenchar\font45} +\DeclareFontShape{U}{mathx}{m}{n}{ + <5> <6> <7> <8> <9> <10> + <10.95> <12> <14.4> <17.28> <20.74> <24.88> + mathx10 + }{} +\DeclareSymbolFont{mathx}{U}{mathx}{m}{n} +\DeclareFontSubstitution{U}{mathx}{m}{n} +\DeclareMathAccent{\widecheck}{0}{mathx}{"71} + +% \usepackage{transparent} + +\usepackage{pdfpages} +\usepackage{import} +\newcommand{\QED}{$\hfill\square$} +\newcommand{\incfig}[2]{ + \def\svgwidth{#2} + \import{./figures/}{#1.pdf_tex} +} + +\DeclareMathOperator{\cl}{cl} +\DeclareMathOperator{\tr}{tr} diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/logo_ltc.png b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/logo_ltc.png new file mode 100644 index 0000000000000000000000000000000000000000..3938067a8136770c6ec6fe17260d39d4ab32762c GIT binary patch literal 216873 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 Tsu7 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

C`Z3B?#P9d`uo+9wzUMa~|eQn|@5t8U;V|F1{zy zC%j(A6qKUo=YGu2$#XJ6-Zy2sIeP#<)-HHe)(j9*zw+|zBXGj(Ec6UEDh{ccX5PsAhs{bP&P zx$a?z0DF6_`s_A>Y&8`DUogo3m~Cel{EL8mel~w_{K@54HR{X3nqA5#3gBrD;$);d z-FwEmZTbb5OoLhx`z_UbEt~G9nrbGfn{C{K=G{*a%#I_6YRRf3S;lf?y?G@wuC}B3 z`XM$W@@k!It-B@um~AF8JVq3s23J0Vb_JQG;CimRR;);Exy;?K@f{w~nzH6`*bNLx zVJPwni`=-K;&Fh+4gT&i{iQP7hecyLK*Dd5p`o;wi|NdmJjmQ7^c&2qaq8@Z;?5}$ zshx-Kj+)6!pDq#GPAep5oWc0W-%1xgbjv(~k*ehWe&}QnZ9}!ddoxxsKV3pj?!ie8 ziB0V;7ylaS;J|euLT5Y&d{wi+!a$|nK0l0g^QRMnpmHT0{;9IUM4z1Pia0sj860Ih*gQSVS@6;0JYkS4{aO=h z^vshf$g;2@cV=gnsV_0n+;1FUYCxB98#_Xy=8EE#JB>T(&{`J$d{-l6EJHo&inJ%S zwDc(bXK#iBUhQeC0V2+3c;S4LZnvH7**;SbYc)N?ph&A&ar3PSZM-NhRL*{?dUJD> z&`|R7ppLP;%p-jBnvEV8W0Dvb!}#1U$($@${@lzUK2t&MG(sTNj)InK;^XUR#lnS_ zmZoq?hps!oKMXCMCl--xtbvtuu>?Yop_#l^9W9mkZsHlUZ)pPX-(aX((Wh;jZ z%BZ3R^TUV3_@aCiJU1G!%!TAlDhD}27K+AIIE zt>DegD(EY8_`15|(u(Rah`Q>jPFO|l%F6_9q z+Q?PXpNv9UQPR{fCQ|3{O`Q7akqJ8{VFUrRlDa@>hcP5HGIA=I3+)kpDtWkCiS=PH zqOl7L#OXBn>BbC=htp{%11)bNBm}2p!_RgB)Mw(Swe}L^;qQ_?Lh@7xyEC`Ue?~cr8u}V zSl}1s8t{de(&)-OU%R;!TxL=&HDF@I6`Fv)H@D($Y^6_6aJ1c7fcZDK!{|*XYjB&W zTGS*~xnHSUQs*XH>|K!Nh??pnNIP0SPcdYk+@9D&aRNgehGI@3KdQu)5o)7*SIKa2 zz|pldS}hc{1_|yP5#HAS^7&eA^5|>zSifu;NMdxt z;bcph$+p|eHJBWxI@N=Mvt{G{F*|H>Jp0pgYJ@o9v+-3E!rc4?l)GD{)gGmV1~z%B z?>twxL@_IeHW$%CrJ9eA70&lVr>>gb4@QwA;@o={51zd4Z=!F+0jaiY!qO(yB$Zbt zj~rxYY8h6kgJ6+|Oe%c$#aZ*RYi}D$INY9pbwwq2UOHx0`cC?xzjZFKieZZD_bg;yV#S!}jTSN>HMx`zP=v!H zx>NIH6mE2gT0?qz8oQ=Pz0p+=wr`enQ}zVsHwi|}3HXullyV=Joqj`gJ=J?FDyLQ$gK2*H6GWZw{6z@o9!1BR50jq51MYr2n!*ph+pB^bXQh6Iz8= z*F0k_0)b*=Y_soJfXmjzx%v6%1G+D)syzD*JG6HJhySM&MYbJi#I{!kprfpmGy23# zXw;uMXQLC6if?x}&%M}qV($W>uZF@>0m>~6mOGZDqx144o{=80zb#dBUg*5kRSsTq zg5NX&BI(x7Tj+)Rytzs}-V}qSu3-&p=NG-V3!BQHE~kFXKcfIxG$$v=Y>J7w9B56o zz(guX{-@Sp{ z-Y3Nu(PM-Y)P`g~JnG+e@~cn`89Y$=N9kfDP%Mgl0<|1EvxAqh5Hz%S^=j zN6j#5eP*1g-O7^5-JCkInRPGW#0lC!1x3_wz);NO%t=Kz6a7IhX}CZbLWQb2D+vq! zw%qfo_2$@G%ZKvWNWjUzSNGy8*AmhYjMR^Lm-rW0LeH1Pcf>EG>WZaloDY1o)wK0y7YKd~z9)5rOulsKH*c$H{c_O;)R@(*?`gdG%O z3SE~S=Pj@nbgbi*5SLqLuWv@t$ZJ-O&k-k;{rxR#Ke#P46L7Rq6{^ebBm8`@ynl9cOn^GS3j zHj~RHFfP>)9XwQJsiJm8$0|(Bq3?{Q)a6*a?0FAa>+pnz^Eq~51?QW1!mmHCxvyGx zAmftwZTA~`ub+vC&!B{=n2yx41Q0_%TJNLi;^PxOyH)W5E{9t~Ac}NepqyxnFC`Eg zIED{a$t$e)mSMw`%0vV`zcV)s62m#$oVBgLhmAm&$ud52WiKnsS5g7^51O6FJvDsV_ogG z=BqM^9v-Kgkba53NzO7Z=)d9X8yPqapU8i8GEK>-DEkVQs2eoM=eHo~2)T2bbs73Z zS*>*@3HHaLQ1h`X3d=$lwh-I5PGgK^%VbrN?(kE`ysr+F^fhY0A+PM(4UQ?t#=*@( zS)brwA@&g^t#ORv#=@GG>QifLdii^CsMbj4lfFCKddbD)=jS?5aV3lin3gHEIn!+7 zlZ6JWB9-+77jPGh_sCi#qZ^~!dz^>FTi;f>A_ zFMOf7_ACBtD$|EE^_#EuFBB^KSFio?rky|L_~=$6e!F&a28N-n9>KV*qkdy6HPVRB z$36lxlBxaIcI+$V5LkO8%^X31T_hYt(T3y7hRTtWwzq`>}B6j^TgrYuMxa zN$8M=YUJ2dAyF7}>*kDbaxB-@R;0yTxl^4ed4piCy3?lpSn}tmFB&xrn<@-3VJaJ= z7itkEkB(j%kEKlEcOYM$nP?7WVikNy`jLpV={Sg!5q19 zPDm8%wuPFIi>LGymv%N?;@)t(;=MCVZdwdI24QGdz4F5+O!os zZf|8}QZA1vpEP3R=2X<2yGy$gK`7j|+@J%yg{L_Y{ur&UO_MMUtzZrwtTq+bj|U!QMz;g0UbR(z64p+BEO% zNc^{2OjF<+KYU{hDP*AOy~5e2J13k>y)*!OD_3-Wi?+-BAW!gR;mg z?LIw`5Jd_3b@f-Q_kXZOD4jBb_HMLCN##QodtGU2xf?a)QB9|!Bg@QEF1J5s(YiYw zA$H3i>eZX8Dd`#RRxwr5dR;W5)FqTX76lAo-TP}(1j~;GQ1^=;n7`{xX=NxFn7KEun9U|e zr5Ng+`6VzS)KB&nd<$wd(q1L_?s3tfbt%z_2mH2-QKH<|90K23|1eDstF%zx>~~bG zLvg!c9M9#1maUTpg^-jtZwG$i?3XS-$EP}Iohy24=P!?C^EN^4v9${Mb zzP4XbA24$QTa1mZH1YX!j;(s%B=@H7Rc-&YY`Z~IAuxXTnb96IxK|&Rmia)zRTGTg z%EQyMslhL^xxr5eoN6!s(mcsSZ=KqSE96Pymv(mTdDx~gWC0{uv(EG^JC?FGXjoQa zBf6)QvpLD{F`!LY^ywvirEH?8xxho@$UKLS5#&FPOLk#z;%CS%Q`%NGJN3hz2b9JT z=#G$WfzWc|8x=uI%~Ev`M7qWmmQ^wN9g(e7v6`=MI6-S4Q7`2GSAf%SpE71EuhceW z!T8C8!q51P($yj7%=+o*mt7z3zInl8h~;ccIDFpuI7wHEF63vpq_mYmfnH!G1k}mc zxM4!kyb}wH+5_*x1o(fs6>%g4ocYNY1>Q3dtF0W2wdCQ^#KS4RBH#c`zuxhT&_G{` z;J-Z4L0oaa^T^D^+q(m;?DwF z15dhpOx@VlBKRUp-in!t;O@X|=W%5-Jp$qAv|_(|0e` z`N>&)-Z4~I%q)zT>|5&an)gGy$q8MXTZ;v28{{pkHcKke3$$wC^YMw4x5j3RY7JwE z-!r*f{0ZCCnyni9BeGXJ9`5HQY}V~X^GImO?O@y8s?MK>LT zz1o7CwRj#M3anXgot7g+2V;`_ZYOd(7ApC&yoY5bNV;Ga;&0-xEa+J1(veaGmS1dX z>7Ac#iD&LZ{fFY>UqPLK>gXuw{*&^IyfK=?f(Tt5CTH;M!{_YRhQ>uB_(w41ZjJGp zOLywQA?Q8`Hl%6NJY{|@Xyf`?`!qeC*s@wOPuK{&G~at7;jT-lh@>m}L0kvV_YW0E zc&6b;cr5#ZACaR^IuGh-T zDqvaP=*i|v&km$!>Jx(NuR0q zmEcO+hxZ+8?0L06x+wVuOk7Y$j}>(}GkwRpy%wn1TU+`yp;SeoLT}SbfK#q-k8?XZ zLPML)aWH|Tje7634$k4$1E^+PAlf`El(ZP;XD*_3&EJ1AxKL7H+kwy%ge~3C^g~~Q z#Qrrd^qv6SBEf{uZGJkh(%duqi%Rp2`>-01yZ*G&4e$JO(61}*?vExurXVaQyOL=e z$Gwg&8JfgW&aye3bCrUv48E<&@BA|4ibjJPk{9vD5Aicz*-skBi!moxkw54lsM%um56MuwkS zQSJcAWV0qpqP3eh9^HEwoAP+md$F^oGljOqp-ZBF@x%&9e0;AsdUJ23CYgIhZD-Zj zFDrYyt)}8fGSdpCb3gjcrw2wn`)+17bfTGV=c2fE3wJ)fc^APAb3=FB9@i8ou=$2u z;LT4s!*S$3g#|`^)`UT)&PQHd-m*j@X!s%-!{0xp zO?OPBL{!r7R*W3LI1jIABW6aj$a(6m_>7sQJH9n{SG{V;k}59M&h(X>sDB-pRIzjL z^R@3K{0!tqAwe10W5G*-r1)!hj>lJ7*jHCoNZG?vmhMs~9JdRf?WX5v z-x_8Ok6znuYR||sB5{774KMe0T55DPty&N@-+91X0|$L?pbXTWJ1Nysdzl_WU4$Y+zPZ>r81LK|0!B@9^ZGM<0N6gf~KYN)W;c9Ih@|aM( zlcQz&l%mx|f))DPg`8#c|6N0dzT6aiTgKPK_}ay5{kwK#ImP@p4+`i@9!JL0OyYOD zo{guzx9iF_b#D4yGrJ@}{K|v+M*mm%J^9mB~ZJ5Ov+& zN~f8CE89z^y?7y*IrmB1x6O+gV#A%*zR}-Fw0d0{)8ezff)ZjHslRQjun!yd49U>N zB?AR=f;xM=v>yO!xQKtLH1l6rOSkTpwfsg`!8g)^3gZrL*0GLLSW3+qYV`ngc#ix! zK20T=M%&OfcL(6_K3LKh4=Se0*h{^fowSC>ifI9tE?v48cm6Plwj|Ciwt{Z)YjqP7 zQ~=gKbr20bo8}H~!+d&m4rXe1=_N9wo>v#v2!R0_U*}1)>Ta;RbY1Ks_KAPB`1XWT zMnHp%Oj!fxVC{*Rv3^dEBdbwIA+Cd&b1PLBk75^6F)k>4%jXQv;p2OL;l|ay?DS8^ zh6||LSGQWaONz=CJSH+%(<}y^N*^llSivX01y3;rqPUiLb!{gi!8)E^!yA8Sm?epZ z#k})6KhN4Hn_uS-B3B2Ywl24S`&R(F#a7d(tM+h?h``Cii%8Gb^YX;4rug?YZ@yGd zx1p(@j(}ZMDi)WGNs)GOtB*RoUb96|zHm4RV#Fu!;^G=S@Vuhu+GYZIJ$u}0^@w4^ zLL0$W^zhRn`L&n^d!~$VK4`scQ=3dkEx~)vQ{rNfFfeuZxoI{(5!uLlPe|~gf}yGoq15~7@Ktg{F%Ad=uQ_#XI?+~)B}(l2 zL-%&$I6~8~m1m9|tt7|G*AuhUcId;uf2!Lqct1~D5V8clM?WiMg2tuk%W`ub%v z?%7X}!uu>j$&^xVj=!BT6!J%45;)TYwB#MyOgtLs-QyPDTG0%7J8nk8&t7A|@8>Naq1q=VI4G93mXy5HGNJEhtF*r} z<(qzVy}Q9afTb_0G#&S)^eAPcR-@AB#2132V1I^lyl{PG??`?1Rkt>wf-&_{!FeYkuC_5QeIs}5M@3HQYvMP&*ErUEyaXH!2_ao~hIZjj-8cX)bBkWK)jbPi z-j5jt8=FCQ0AX9L3U&m;< zuxDX>|HytLq|SHUg2um1tspn8etD#>4lGPHG78^cZI$jqYwQ`TK9?XL@V?e}{B60z zU6LMP!zKWxRBE%=Zorf!8=fe#8Ao5x90Y}gdyWG8r3loVJo3W!aqJrw2dE~iP$z)h z(E_v99KkKO01aBNq9!vk)Xjb~sy#G5R&nY2VRK%ntMcWG9ki#_m39U)@Eh!_--~1L zv8W_2?V28F;~ao~gztzPEi=lfDX~i_moRr~-`5Qd?0N6Gn<2ldbCPWbY`&g zjI8&3@AiP1pR<0?Rblnhn42t-(sAOs9WQ;{`-3|sR%%CsJYXCS_N3C7EJ{}FDi(WI z0406@D8$w`hI7%U{$~{z@41{&oLq~o-`U%k3KF?mH2cdvOh zq-%JgZOt}KOW|OnbtH`9-=?&OWVvo=%J?e&k?ppwYmQ^g_a4s{h!Xra8?)t&7nT{6 zf4fSiw}K`l0{{NeFWKxA*oWYz6Zu@i^WEacP2rGVy)KXEZO~i=WS{PgMMlSHUTR+` zaeeGFS6<`qP<)i`saX2`wKt>DxDXsJcU-OeL;so7G;bGobr5SYyRcQIMPHwMMKviH zcP$bCM3eOdIPcwf9FV8yG4HMbQMOw?=r>^Ep|67^^#IeT$uf;RLKvosM9x;7w|A>- zVcbtcMAMChEcelBWY#To`g?KLKIar(-vz2R#O=K3H+__-5mbc|Ib^o+Xg5+ijj1RG5Zvq%N<`rtnMJZ7eSNB8cXI^?9lbt-`qteFQpN0!UWV+3IA0R)qb$GU}}SOVos#%{);7S zfXBjkFBQ&0RQG{+p&PE2%9wtQL~UuPO|_g90*bipR-$)i*X(p^TxRn~i6ijWa}r4R z?YEnqRyA+JS^stGNt&t8wsk!!5(IpiF^!rhL9*_1y&9l<>-5lG>B&DC;_n?)H$~{S zKDMEkE603bajZI&A&XS)Y%6V!3LREv(kEBZC^123&R{YNh!hc~>~iIxfY20p&(Ac2 zuYJk$AzFtR?+Vq$GUMIC)_$$X`KipRkth*WHy03i&bHUIHU454RX5 z8>+qwiU4@9v9M)yIX<>{rOw+vKSA>V!`wp~dn%>Oma+DFT>Cam~vwRl- zcVFrqmAAj4y%MY2R=$n=X$9xL?y+#EpJ_3u)z|JXc$4|`DKpU7Sx!>il9{8r)%Rlz zE5#z;E^mJ#v?%G|Tn~!`K&ou?6$f8){je3s`E+Dx(JA4+{+j`BrdhTEC1xKlCn0$H zJ+c2?*eec1mu9q3&^Qb$^@9nVjL6>cZ#@e(N=1&>*MjupJS**aK^v&aXF#?vJtGnr z0SFoby2fxQC}O>^14=ibF6oo3g>ipx0Py*BnsH@=3l zF(OA$hg;1zWj{`D7NT*Y6ISy$bg8^X%2Hq#Fse9tk!u#}h8m8ogb(_M)seNB!q=uK zA4{#Lo-?3jgog!%`wolUd`}$thF(<%_5LybvsCG(9&{FqGXy+rt#(E4N2SzM8X^F2+X1+M3GfdvmQ5T$}l#u5L$To2U zjeJbXu3_;QtWhmFLgD^~Lr8PO0l!4h$TT9pw(_DqruY)(DZK!p{bS1suV0n->`OiP z0q6cZR)O^K>cm3WZN;b6{*8{q?FXuDJ+ud#zhZqviKoA_pu5PMIBmY}?ez*6KV|M? zYKA^QFh8E|s6E(zJJ)qs_!gRXY~_1PYZpox`m1M$C#ED_!m@jb+)h-&XUz}VC>;LO zQ8kInY=-C1F7hf}6>A;cn&@K3&gQB(HeLMXr#jTb!l}vyK^Ergsni8M5OlnhaA*Dm z4#K<5KtDMzm_Awj_~MWvd?9s*gvA1{ZVz_V1O)7=M{{R}9Cnv`2}fusmPSN{3!oRx z{nv|K(Xq&poBdXR8~k|pKQi}5Uv#!#TJu8EvuTDdHmr$MvVK_ z!`r$#)GxM{y&t6N6WJ;zS8-b5LFS|wr*%0P^ww^aGaOb*%DVHM?F2_&!opxp@5YxS zA_+@k(FJP}he2Wd3p4YA%RI)u7o3;7vEB_pnJT2ov)*E~mIb=#gWc}VrXNrD!TtHSP$iL4P$ABw z=fBRD)eO@!MG~&#kiynQ&K;dSRoODuZ}`?5ihT+yiq6`vHPl?zzQ<~Z^+&TPuow<0 zwO-~*o^`$2R5AI*FSo^?j+v32s!iec_mZ~@9&C<;g6;pfKa6IG#}DR)-8r&mx$*7Y zsjuxrNq*s`Zv9%?Xg-sNkpNr#c#K8&(vyt}{g%RU{JqT7AYaZ1xpRg7cza-9i@B~w zyt|1D4zfw%a~#b7YI8h*NhtHu40p8YyU4Fp3xXV>D4*mWE4FVBDyP_G)%JW~LG$rl zJ}zKBpkNP$LZ|&QkCmTi73T*CWPP#-`l7Twwwj)PNGn14<6^pb2;j&GZDwH~kmlj) z1PCvDRw)U%ifg3W(NjQCajCA(mjN8v6A^MeWfjOn=#ipp3+%V{8kz>=?bR*^h&fqc zw9!hwExfux)a%<(K(p2cnzg6Nb*Cqa-#+=>OY%_%$cqkfVJxg~Hm(!jr#Ew<^J+Gm zx{mD(>fK~}GMMIt-Kh%Bf8WvB54kfUBs)%S$k8#xy}cHtd_$ePRB zxFL2}!3YIG=z>bK^GkTT^9p*p$B-Qa>;-l)x&LxJw}g)mmPIs-;<4N2P~0-(7s$My zF91V79w+O4FL&o|MZ5^&L2dH zUFB!}-$K49CLMhg;YZluOxbZVJGB_!VZhRSnsOpx{+5ap;@3ZPRx9m-Z+4gX(}SSs z`-iQd)7zgJ?rdisLW$k^6MG2mOFRKn(dNoKb2p)#i^kUoUs_hX-5YRC5gOOZn!mq1 z+*JLtw=n78q*CQGVX8YDVjBMFcDb=2pD*US%zs8fjsOXMU zbq2HSs3Z=YPw^F-tInFy?IymDmomIeYsWFWnPjZ#w{YBR!!oIIiRF-AAJBEh)zHk5 zZ&M5lZA<-F7F3_|pDQACJ4MAAV-W0FIiR@meQ|H^*oG}5n!;0fX&7J}z9)Mb3qyy7 zCO%17!+Wb#EaxU8MWVj{VFZOngfBJTNjSXpJF>g8{%+20m)IfVx+rYz51~UHC~r)B zin%_>e!tCv>@3)Hc;XaPhW|IT7SlyWm(94OIkT3Ji(#*O&*)n+Kx^)p){`mQ%g3nz zt^L?VH@x<2(#io4xjdZ0&2q%V>6)&PD>#21j-G+xGh3skyzJN~s#i>9V59PE%Kse| zNR0Gf-&}l=-Bru@k_x*E3=;Lqu-i_<{yKQhd3k2@$uBZ~w*GS+QrdPq7YzC8oq}9n zpFGgTBnK#?%Cig~5z22%JT+00e|IYRwL+XY-)e%E^QJ> zImzJzy01d|wxf1&(9^0f&m&*@Q7iDaLG0d(J@M0sE|yfcWDRYqLSTaLz_lZ++qeL@ z>&EArQeFJ%*)MgRp0XXQoJ*HX?OMhcUOH5>uq#I?!S+v<0ekHqs#m_Us z2r)pR%Lv%t_*F0w>Sjt;Y`PHV!6_DSUL$PCE!k2Eyj575M^9Or1ydL^#`vn@xhyUC z=Si;IYgZgV{UdF&J2i;icPo{}CWBkr7~SsbR;nFE5@k!l-j*ZMUQVJoa0#>&dg z!3uOi#%I?Illz!-mKAM&^WoK?`aT~jUVh8sL#Db0fAOJ{yPN2?>w`uvt?NIivR3Tt z6vJY_Qa>^NV>(jwPVZ^T4t|(hb{BPR_F=n1hFu2%>dL>|hJ$~Lk&J>>n)fsA?9ct{ z*dO_s0VvB|imyD`qb~ZZm)tqQLYU`Rg`njoG~K1M04N}`zzUsx2HAOZ7laB%dhn!_ zF{U3^!~)!sHSej`YwcwNF7eW!k5x^E*J61+l68s$t-}i{OBC(l%?BEVniua&T-)_# z=d(4?ILgXRxWG_4!4@XkN>aLB=%2L5eNIA4_&C5JMuI~;n)?eji9^?b3aGw`-fP*_ zPI5g-4*!~14{+~~LvZ%o-WfottC3Sx*dgnyDng>rgcFf5JE?fq39z+t8RY;fq$6tx z1sD^B3pTk~n%8~(JLCa0Z=IV60v6#lFNm$n{z-5?Tc?0#`a$Cg!k{9673u&4C+Rgy z8o%Mm$+djH)*O2niMWmRBV}D0BR8-x#e}0n?mR;0UOd7j*R<*)*h0<|h8MNanG@E z)&_XN2I|(lT4Cc`U0Hh_TxM!!_SmJ?Zmz@13)4a)T?2cFNH9(r?yK-LZM7Lqs8UnI zWV4)_mF}#Xy5UW5wed#2q6n)2bU-dR1VkvGv|Ur!fedx?(;z#+c_AMyxEi3A8GuiIvnOjL; z4X(~btCV_5-7@SyB7woT>~T#C(Uq?`HVwo9v#-8tKl=!g;>GFtrhzd77ejyg)ZvGy z7n99gWD(37PeoaP=_s3p6L(lT?G{eiy6(rN#!fmfd`+J&N~rK;F8?mi`1Zrrv7))$ zjNcUtoKn0!n>4{peSZ%blM-7tdh5Bqxf@a~^EcRoaCI_!S3%dITJ;b+xj)`0hA(1P=S z7D+I5MM_ym@OjMYhNkD&idbKR_i#va?cO{1$(j{-TVb)T0_`Pf?B!OB@})xm@ZHUx zE!;f)9NqkV-n_%+*MQ)1n)bXp8oN_~#L*b@2e01wYnu1!eZNi3${@^mKo%E22slE^2Qf0a$Z-DdXf6vF2jJ3&o7R&6WRH={DJp8tws&=!{j> zo8NTy=b@F~6b=uY@%b(L-ec($OO=!YJB0o>8)o(whA?^=@%wJ164JU{f@Lmq98C7E z-WO6e0ci7?EVEi2i?Z4Z83dBcBz8Wc2QR8U=am6q?T^Q|^2@R^>#sN7iQVQNEw1pf zP}R$H`tnW+M5n$@#8Z}P-W+1GzYx7D?}8>mnD5VGoJe{d-xh`y>Iq@7;I)8RzE= zoU`}ZYklim-&)&-C(xh%AqG}{;*{StW~Pa;5c+h5mjP!B_9n7`Y+;i2)o%1D&UlH+`XMX7vFidRDX6(`yY6Rzt53|W(<5&l?V%62D?9u(kH&H6S@E2HmusoF<1vxo6 z)!pEa_0rF$!%ni;8En=HM+(0{+Ev^|?+kr2NZEPPZl<)1XyoVJ<1xKZ9(O8}ac!kr z%|Zun;8UK%$s0d%E1ubCfU>s+NRuXLT?;(Ar42#Lh5POJJ)*07f zrUI)HlEuwTdO4=mrb`7hV*LYm3lr|flEt7=WyN2g)@aQ5k%J^S)|8&9G-Q4akKq7UG%I0XQBc-s5_Opj9p=OF{oaz zr*9Wdw>rqR?d+~YU>6o2Vg|S2@Dyva$&zS&3a`zg;fVdP;R)V7${KwS=dTD1xWB-c za(Vky16slznLQKLS=?Py-d8*ub!ZEg@&TBc<4xPaAKlMV3%jY-|5+89W zM!CkWta$PBaWo-02ZA7n$5`BxL#ok#@8LDwMA?_c>e+YDN~;V3G08LI&0-vC`*`H| zyW!FCH+%rBMPHhxTw3AZGV%OAzV#C5<;0l9m=*_O0l~_IG`VN81QksL~>nvMT_wDYZ3^spUOf(X?M|G{PC1_obe=Ql(Mp*soAD2Do& zfAr#FJ^E}dCm1T<8Lt^@>bJ0~dW@8t{@CYeBe=Ht`PX>zT%m`>0>5kt?Z9Rw4JNL9y82cA<`I$a9 zB*z0f*<|PVdLyc5{fmup3rsha5e-Vfyo=N&vE^yt7dha3Q-UGZ2S8@hFqf<}XYW z(7EIbM+MGQgZY6=?P15aCHO5PMtg^bX!yr-Rfm@}BMc8JQ}KyW5O%F6Jk%;RMBh89 zT3i4f$h&nxzq*6Mq7SPsP@D)T8?jID0xGUXx3kgnJI}0Tz4ZJ@O z4qto-wF5!VoYY|j(6^>F3?vN~ezOwA`i?4iwdm#TuPn2 zN==P}MzO(a@xPL*gfDCO$P>o~*|HsvsBX8gipMz!yp#wZxM2$$h}p~c!QHM1j-x4DeA9mlr3hqlnVETG7uoVfe(0@ zLkUn;XBRmIaPYQzDN5+yy9-{J;Q>bw1KM{{_K|KXqYb;Qrc9T|wlR>B0yr%fa zF0|q*k;!>sNTDq?QIA9r9|I@zC9(*+;3wI50^G4Ze3)&%jzNH1Z~$XBy7w{1PVp^J zh7Xwk4KeXD`6C5rLxi^sI>C;IV@{ZjsaVWqbaWgj-prbH`>0#esCff`v$2_hwH9~l z^D|!)(qg5R?CK7pLR7g8GE&m@aYnL`5tEF=Az$(Lt~+ayd8ej50KY(8CZtdTs&q!x zhRyd%RMk+&pN?Q(qNN#wgttKC^}BOP~aFQ-1de{9etci3%HBSCy1Pie@;+cE4W zZ@~kg&5-1qj-H!S#A_BsV)G=3_p)D?KL>?kMjBk#(y{awI(o=jc18y6d)CA!i{y+a zrgyu6vB)q1DU|s5uwHU5P+$o!6vW!O5+J7fXx=>!f~RU12^>}Ik~)XK1}rp`ffWL?zTM6SbS<~v+wrV)&oaPztNYe40ujDqOV z;%91&5F>;#-Ha4C*2MR#g9;?^k=Z^}4VY=lRkws6 zPYDCzPm#Fd`GH^{$Bg~@Xz)mcz_A~~uF4_1t6G^ri6Wle{a@IUewiz1ksEmpv=8XN z4z&;P*`X|lslsZr^81H{%;8f+joe7Kq?H}+^NszL+RWUit)Kh{MFB@sbE1cDuKJGU zc4ZH$_zpyGFga2SG=`;Q`2#5?fS43EhUK6GTY69X$d8!BlGAqEsH{)dfm5}4bR~rJ z&ZuXRlRtO;niu*yfR+3}>aFDrt)n(V0hb?=LgQcz_I~7bSsvwAOIyP_CcyP9uU!>+ z>IS*KSGa)>>8Up@H~o`5=<6DOLeoV7kH7RRfhU;)@neP%ggZXyu^yaMzUn$|Hx-tUQ z3HNk`c(^{NQSY18`+%s8+=Bfel({>4dTsvvH?E?XTc<=#?(XtE!?AIYx~%Fpyr#AF z_dh{u1^E8X5t1WP*2Z{witzjBrL1SAf;}Di*BdwP-ZxiQG5#bGJ^O|n9&K(V(yngT zGO^XVsXMv20FFwAaxF(Zqoq{P5+q%a3<$BX7H@n+bGDu*NA>{C%gYQPI!e99h;b@F z<*lk)W=&9JcjUKKLjCEBoNcq@ZJ9FNe;CSO-n@*m9=*)IrL-AD?F(;SRM8$A8Y-)l zGgq8q(<;%u!Tf14E!d2TX#(v#qSh@v$$SSG#T+Mtl9Wn zs`2)yJm4wFo= z!iNgkCw{Yvl--$g8Xtm6wlcf#RW&M%&lNz4#Atdtau9 zl#hLTndFGceLP?gpQ|00BD}G3s$r%5ESCZ`)YJ!_r$OWy$!}!t8t5zy%;E+swySQo zDmn71>Y5wdFyI>8EN}o#!Pb0&k?xvbb%$a|KPilw5^oIo=l@t~*;IqcCh?&ZT+cY< zI{TfBKlp!slp>L49`T%uI-2QNy+;81Vb@ z3XcJUT}3oId_^eDWZ<|wrkyw^cIz)ZHmBN!i1lt44Ag~B7fk}HWAKrHc>h-2O*R!I z6NoA0H*&O)m!;iu1t6xifAl?K-5=?7#}N)zi1g?NlRXC4wMQ;S!L%Z*9@MLE(+0?S zM_a)%V~2K4eA+1(<99(s^0kh5aJvq_p-5Ht^y_VyoAedCxL?)(_m^kEjQ@re&-Cl0 zs505oXF$}A7M9TtF7i)?(r?TJ17%le2#}q~@4=ToIqfj74@TT0@=5^Z3C;A(&Nh21 z;nL|OyXY$9o9xk&@cP*!bUMgK=7de|8eD3$?UN3Ei66TR3@uVX7myvdH>*D;xZjUp zfZ3dyL?9)I@UEjH=qn=+9l)s9VUpw7AxMOg<17xtkpR!Z2B1(IfC&3%tb|wIe4-#M zsS44TMWnQK!E{+5Eb+DmgJQqzweK@`7`JpTpX<>QVIR-06gXU9d!X7Yb#vEO0ko~1 zS1DRJ6kTD3K010*heuEMvBF*CRZtNe%v#84i%&Rnr6r+Onm$Z<*S?qyylqI%K;t=H zjDna);=FERC2sVyq0*H<-?iwL15KF5Hc(kN)`_PifC|2chnzFY;F*uX&jHm1gaJgx z)N7d$OLZ=-3H&%97~whc6Ys;CC(ltdkGiXw16Xu^XH<~4Sv;W~@Rk*N0$VdwFBK&? z$fc)ue&hmp;fcN&x~uZ%5*a{~#sgBoTbP~P6{ZY?G{wLabcda>%0Z@`(L`ym6|bb* ztN}AXa&whX;mH-ie#@=AFg6HaxOrHTM4D2rvYk!DaHkvTjX#*C23j~*_%omB1G4E_ za3<11O8qu|o^Ft)&^gWLSsTru`b}yBBlgBt@n2l9NB7#Sy+4Hef8T%P#dCg@U=elY zEIH8qq-<$$3=5r^Ij0a0d&8ZAbT@_k1E@KU0R`Oynm^yo4v*FqVmkZTQxu1mMjtVF zE;*P$R9C02b?SSL`IqcQ4^(=7T-?qZCeEaOmw@3GhZ9o$YVJTv>lQgk21G1`x>-Tx zy#=7=2JzY9+eUQGq|Uh%Uca>ju=T^bC^>7cu9`TYd2~zE50979JNhuNhReDsc${0F>p|n*!;2@ zDR}JqtCVp*)_ypT3V`*ypXv<9?H^cb0{A1@E6$Bb>O~c8gaDPKD_;*1{SD%rqjb)s z=J9tPPdw-duimT(`-;MZZRL(d;u z&bD|N=zXdj_X@=$4zp}GG}(`N!6;StO}q#*1b?)!$$58LtynxCpCi z*cv)xypXUTAw*GB)nme>w6hD`R&8jsX2CxS>W~RTLW+HbgxRpH zT_+T9@-lyz%Hc7RHc$8WiTcThpr$1(E8nNF?l4lc{{75=DOglOCWMB0Gc}utmJ11@ zb{be4d}0ovd_DfK9N|4!TFK($yh=HlpbtF>X~AH@HpiT*#c}r z4y%Upb_J`9=!5-p>&pA3-jKJ=f!R^xpcV{fHJwF zpTxy59x0Y9b=yYJD%W{q#$)1YOIdXah;kzy1`q2a*svOKSRb4S&|z?t6#nf&YnHc1eu0pZ$!r8k;d~*?m{AT$h-?K9o004 zm55gZl}Ab9M)zLsR^yI6MtSxXS_=~0hM8v-E5y`dn$FT*e{jRK}yGG9X7 z94u(bAhKq7KkO#$ej5;?0i*mjSpzk44~r)VrP-9{4f850g57MpODV-KELOb{AtY@t zv&v6o52exqC+_)$(r+!KHnew(FoO~@B=eTXOu4O(F&p7>t3l-mu*{hiszJ^D1|WXg zB@eFZ65GuVXVKTA$!rj){k>1W<>S;*0Oa;>0chBaX^LMsGqG-oRPO)NH*ajf?kyw4 zbSj(q-~x_GD}c~u{-k_8452)f!%cG$zv4jb0vQsvir6N$LVFn@9f^7gsdrShNW{Uj z;|y>03`CaZ9tgPT6^^OgabIcc`CiHcqS>HP{?6nA*ndHtg6qRShjL~@ zOQ7ILi#GfCHAmX>B(Ts0%D2d8~YB4Kz|xWLkT=516b)Mo6Q z*#Nn*kQ{X2bZ4|eLW5P%Ym)NvKA=*^Q+-U$gBhT9%lL`??hyYZpk)K$toVioL{u5s zH;jU}zHaS`v4(E0Jo0sknFT@#-J;lo#+|D2T)%t%Pd=+rQ;Gg@{s2gjd;cXtE(|LEE{p0})6d$slHG~KsD%6V> z3mu`RmdMyg8LDQ@VT=4ki0}isxX>O{HE-TL07U&Y>-{bY@gRRt=i7S^nsa)JaGY@WUp`TOigd~EQIj)q8B|;2T zyxj;P020bsAqjd%eDC>HdMIo1TN<^N1*w6gVgn9Qna4Riq9HV*O&`rCA6m5-a01dF zmAW6qEvON1FWVDdOvstctT3b(?)PRL77vUN05$(coR48>TQ4#m_{Op6_UeAH{oHLH zyY6=;n!C@|-q9f^4!(rXBpvpf$OUS~tA@y*8ILhtg(UWRSz4NnTjKV(kEdn?$a8{x z#4L@;XuN{|q(L;_|HyQ2-rqbDED@w_338K1(bK8d7b4w@~RG;G*!n8-?Qc`~H zdpG$_9ijc+TZAJ6XZiz4Z%V&y@x6AdheZ-L7^9L>d;5yrM=)82SEGE@9{*@LN#L|h zSn=m@jLHckLL zWnnoK2W3$&8PR;)LM~Bh%4T4;FVgPpqM=^mVH6-=-F@B9$$7ddFU&_OAHP@uuI;<7 zPy&di(-nCA?fcxc9lC=20@dMBPq+E;mSv4H z=<0CE_K0&3Qwp^H)}Wm@14qQ%`EeOLKC|;^}fP*yuBO%Ev(cy!4vZST%5vsx&z~7&+dVifIbS@yLX>K z)aU{GtgN}V0l07iz|e5$+Ni1E-}gQjzL1bM1W=*e$i66Br=;i;U0ot5+Qvu=0rv#C zQ^RD*Ic*}IgpPeB`69hS72P5;{0{CM!hb+(C5FhzBu(=+omnNR|A7HjT6ER0t}oyg z(mHGXVpqIJr8GUkEoR~ISaUrWya7f=4g)=aRG3Rc90(2$nwkx6jK^Z2kF=Yy>3EDsB{nV1aW+lTp*Iz? zTB^ra<#fM&#@_Rh*OWG8!LB2?)0a_i0qc;Iv>LOO&mnS$m)9=Ho4P9Pqibizg0%MK zD^c*Q*u6|eW~OVA(=d-3>CTVA)#l!X1Q(1rm_guk-^nRAaL$nsBRPoH_{5V@v)5z+ zhb#0R_hp#EQOvmb*b=C^ot;4)M8X+4p6N|k=^J1@gW^7z^oxFVVz;(@uq*}pp(c0J zSguK~0W6PgzSna?2X%Jcc6#%HWuyd3`WMx-{aHjq>3ty z+f<{Yqvhdk1GzWhT{gLUW6+{zzk6zoVvteO*3{`K+Dq!(tXTzn;fC0#0uTNy`19Uz z?E?#$jTu3-C%^l}Vq&viNN$bI-?A*a-j?(ZrV@9S;~$9*eyH>6`fR`5W!GfKz;La@ z5Gf>99T-{G@mlg3%T?Hg>dp3jBfmh5LP9Jd%RXgx#?Fny@)Fa;8R)`y2XH zytIokI^v#mWN~Hb(p(&NVH1-1S@R5YzmBqdFuXUBa!pOA+^pAIA$9A4F3$VHH-2~k zax(FDuBi`84ch=XA!>pv@wb5FK;@v{R$b>CuI?ZqzcnZz(luH$eLP3bf$2p`IMc@I zT2=qbGs((t|J?buQt4HlR;#iMq*)sk9VqnmCZW9IskNVem=p=o3kE5VQ?Sn^Dwe)K z0y4dSvGi#udh|=&kgFEE-5)R+wTFWwEkbLtiJ{)V$-KNXb-3NfwV>Xv>V&ic)x#(g z+c3Y3PtPvH9#+o;!~lU36(rH<-#cjAM|y1SottGj15T)bfWCB*UE6y<*)QFWxXa1( zU~Yd~ezoC(e+Oj%G_J>~r$%I^)UeLSu*Vs-*xZG3H+?(M=2UU!VNVK0W zcKb-k5HtvJwMNqLXG%t~{SQp?@mMd${$Q?l(zv>m-FhXGgLYHKySH_A*6wi>7zl5o ziCT=M>f|tDgKVR1JfHI|m9a2qt+@0kOQBb$x3K4YGL{VWdoB!-(Xwg;kfpm0*A? zi+LS_L>?(O^((~1K^`wu`JNAIqTq`S&7n_$T-lbJ+E+1-y7g*w%R<>b5}b)wGADGx2_?T16mjiefHAaS+{)M@+%3M5;P6Gnn2 zE3n?eKAr?uBgYTj!O-{tZy<|61$RVjfzHdVm(s{9q~$u8E@0fAL+QWPaPS)OXWDqtXkJAf>Kp1N9p>}NXz>xY?{K`QQspH{X(T_0@ zT%<0aC^KhxC@BP??>T#|T7H2#`v#Tu#w7uSFvQWR0KJ?2XO8vJpb8etKkCaD@+t<`!; zJwks}*s|c$?Sh>Ib}T`exPiFx7HYVKVd+gECBogk<2Bd?`8&}~+7DT^ES8R2{>44j zcG@x9oeaS2`xckJhK(>J{3TtzKU-8(#-~sM_?FY<)f{Y{Qo;~~Yg^v5f_jTgYC-?- zw6wJOn)VS@IA>2bFP&bnm!>0~bKOb_rmD0^>c72cWapakrV zWVs&nK@`BqKyni3{qTJHOov3nv(ahdccI+v>0-H$u?mrRL`r!26q|uobf`k-<~6L@ z1`-pc{91Dln}u6IIpSq&L#FPbrP|^mmGymdEr@y`#)=ZOhhtPllYZuKb#`PJVf;6f>kf9<<_q zQfckwJdp=*{yym-rfv+m{Y+wp>O&B|&&S>KHvMWa9FeR2=#BPH&gMx3|4|;o(4_wa zdc*oFQ2A>49syFlK7&@uEi51504JF|=zhs#XNIl0a--c^=#Nm60zgSBhWY>{X(bwp z9SqiG5^JboUIpWu zOiqpp<;s9o&DonB(rOYdtA>()!7#*CC>HbqLTwzYRMW=+IWu=B#wO0q8|>f^*Aq|0 zb~@38{8?I3iox%bNTC8qU7qUso}Tptd>u9L5s}0c*m_X#j%70|D2djimA#6Xh%^Wg zqtLD|N8%9dzZR*1lmZnt*>ve%>rm|S*KuT6Spfxd#`?|@MWPQ?nDm70>HprlnD_tR zyXc}yM3dL-YMs@KwX8pnLS5I%K0m8WRA4{sY!N$6gM;BS$0!KXqc1&E0NwvE{t!Uc zYmxJ@Lb+0EUVl+|OS5&5xhqy3jDwgfr!bc_p90;sqE%R^+ZMP1A-!Kh{9{cdIwR>K zshI{$I17W;2By;s&ON=RT4R)^JP@)PEUiq!WV+%-Qn`LD$$liB0GM9LSfDC9d5hNG zmx7pQ-jwTRHvJw_xUEQ?hppX^EGxD{8Q4EFSpP3Vlv#H>qW1mDOR#VK&EvCD-qh%(!ySKRyVe)^$L^ zqM`GsU~y-Hm^@8(c(5-|&&nNORcW6q0G|a0+gQ(A_=mpNZknRbpMy4>FuxtkX}pbc zqP)=xYNXm>tJvrxx~$xTe9S4+K)%_2@@s(KEZqo*YOwNm?gcy{eR*Co@*0 zPQ%vFdj|*9A8K(Aky3o|Fo5gn9nD-?Z7@QQRdyT|= zN(q}^q=9sFgsM@aWi9yebNr<0?8XgPkM#L>k3{9V*dnv&j2*~nm93jdm6$`G- z*|=w{&@f8eX2hr2J}@lj!@o6O7(vxy2g-_xPx%w_LSWOOg(&wFVTfPPg5LZME5v7Q z%vjKLE|BIck}G1Q#Rn0|P-vhgXl(cK37y1%;-2DS>Ug2(IA~VPaH9P7b(s zLed^kD2S!g@w7aOO}b<$X}xDZ@N04-W1yS8Ea*6Fq>9GcDssC$a8rpm@dUiGN3iP% zgS)daK7y4aAz_^U!aa&GXwFfmhr7Lv4VZ5%;byXXSDcbFk92BJ0rRA4IACV$yo!eQ z_5c$8#nt56q0CGzeVV9&aNh+o9^#|RO3t4>QQ$ow=DbYNIJH4gn$bqQlUXFAU zgeU-8f)SP__buJ|!gKu8DDoW_iQl~#y5Oh-ec-pvvgVw1m(Fxhi$cyrR=L_Ei0ur6 zBu;Gn+H@nc8<5!$pK?|5P9UEYTps%?;dGg`BUjz!`+H2jXt*2c99h zQsMoDy3qXo{-{osobxJgndQeecM|SV`6VZDRkb^0b1N|lLDYdFkc@#5w0EPUxC&k zzJZi4ZL%9Dh>^S&Y(6_9AxDIiBg}HaMDq`5-q1PVsS$*ZX%nVg1d>P(XI;xkR$N5O` zEmuQ({PfHxXRT*Y?B{!1x%6?kJM(bRVxcp+QoYB!{3^&;{UEF8dCynkt8}g)%3K#r zW+EvtQsT~+e3OlV0`iwp7ETchPqmI4WTxroN0KJ5zTZyc=cvU^5$24}suE~rZEj$t z#5jkmPe%x;jTJ0>Pdl>8qlI{1YjO80eAhyN%R8O;znoa{@BkC7hGI(H`(N~#vz-H( zU#@K(=B-MS^*}l(B@J=k;>>|uRhUW=HGP1*yi~dCv;qirK+*wCSr*Gq4m8(dxKhBI zfQGEHypSUHJKHiC{xywQj5F@7mg=@61gs-d^!(h7aky2=Aj3zh}Rfek?pinobE+%$O zOuI}uIqLuHb(-=0z1OKw(*i`!{<~-()!i?IzK7*G{!AV;Zv_DF62AerY;wqwIZw{J z0QqvSLn}AXIYB8>h(eqC{5Y9u^@w7HZr?c+a4c+-24Z#E1RN$aWkg|`@5(?7L6M7h z-$XgV*&M>K52he7VMacfFI6Oty(a$2t_c5_m=nWb4#8)dpgjO~BduBSiO-qO5qF@O znF+0Qu616*z~}+47`VX2*Uj%EzcSOB#oCtq4`60_vANpl;ClOvo3eYM4tv&($ z!f(suGzj39@779MjTz9SEvo%M`K8;R(wHDrW~$TM=j!TG23G_l{ub6qf{4zLD%?3B zh@jJhchUmZ^BK7a6DNSrCAx?ZEulIZPTgCPLVo?1&Pf_o1SUZai1^HDkt_;WH+E`$ zS`c{luw{K`BgnIN{GY8E1CQ8Af=H44FsuPUT_Fo}+d**>`#EFYXJJn{pUZpukbKzg z*Jpy%#1R_A&#OK9yw$ceoHG`={UvTsS05@*z1Cc&%q zNh{Jc6icoSBp0}3_4SI>Nmya@Cw#b04-IJ5W?$8Hc7XIC#Al2=I0sB@O@@e_jTvZ! zbrb|)P&M}j=b{n+QS8INi}xUZIHVK2JO&YbDLL;nb&f2O}+NK8Z;&ZdfttY zD;uDuThd~vcY)|g7^*#|i=d?BL4jQjrauZARaMljItvt=smTWFNu@y6s=b2=!%9m- zqzMf6z_vZRPQlaNor)SXcTXMptg2TerwPiMlDhjdBSl3(XkB6_cNeYi7uyH?`?pCh z%PP=L`uL4N)yz(ss6%f`iWPYX%WUXJQk5M1{MBR{Yk=irK+%GoGW)>f2tAIG6F#un zbrKcDV!$^ntz2%&0KTE*|0S;P{w1!r82kr_>!J40mTl05P5uZgaGOZaxaONu_aFXz zDdLB96&Sfp4Vtw!b~sf?wp&!K>BR!suI29`SH0JrI0Ruu2Y!^dZKFsK?|Ln}c0Ze) z0W`BS0)SEC^Wc}Q)=5a2+HTCe7ms0#fNZs-9P>i7bGbtsQf1IH9H%&|2B5A=!oF3h z(KH5ixdEA;ODW?$CWT|dIxs3R9&W9K--tuQ_cf6$iSmI|z1 zNk}>IX#DTcYkuNXM^$feGNug8sTF|K8^A6XfuNVoj<^?7hbdJA8Lz=$Ue}?9pm7P? z6fm($9ykOc+jv}ab;8V71t4lGVsjbvDS*P&m!^)%ZXxxO(+kKGK4LFJSrg{`E0}+H6Fc;LzGzz|5`JXfSywt*1gNMnK-SYH`Sv zv@k%RLS!7kkMJ!`)-ebddn@Wu5tyoRcvM@Zj!cq5$lKHsV1~7%c1jTI-WZaksJ#Zw@ z?*p;%aDplfCKY9=G#nu;A9hpvI%JT`Au-4ULDPbqlH1#0{w6r9|5)qles!;Avn+Ad zx!ad{zCe^%Hvp~x+(2eZL?fvuV}ccrto`>z`MPTd^fsXHhI0J<(i`AIJ!)8gp9WdC z{uSENq~38dUj7eUy#gfN&|9M3RtqiP>jyW-ij|t#{MuD=vJ8&vKQTOZVACIJ2#7%M z4sXaXkIh3%*cpJ1i*w#a_+=N!QFa=Za`oHZQu%eQ5Sg%KxwDU{0n7Rn)E|nn;wBBnxR;xxv zF%gdoEp#?!KE7a0J&LQX*M9ra#yz;H&X+DX#cxCFVyCm2au8Rn4Q9V?qnAg)o_;T} z`_8fqWXzWl>;L(f1GW$PbOo;QZ{qHo|9R(Zs~m+T&fk_JxKat?lhZo)D|knw0TzIN zi6Dg4;?EZp*Ab)-xD;`gRD(owZbY8ERGN5T<#A7*^a6K5x@KJl>j%vO2~J$FD? z8Zu&EQU*Q!W%mlfFXAMcizdPg6)^xcNNlRxv? z)m7l66z)@j^UBpcGm)pU_NlY&`L&FetWnTq1Ou7Cpfv)tJ7|4a+Vc!Su|tyq(kW<+CZO7iwEq>x(zbw8$$7qO*hpHWsE% zX1S?VVLB9YPjFD3IpQy>gvob}4=Wy6|8Nw2T&s|6-Hse1zyQ0-Yo)?;(K+G7JsXW= zylnr1)-jl*exzOB6+~KjzZt_jJ~u9=3l`UI=;$0z%gWN?3=r8`pY=4Iw;7{~Fm6t# z{K@0^@x>?dN8V;qxq1iHJn zUEz&0sVwXp7u#rV8g+~_OO4PLmuzWTTI8+-U-IQCH8xCN%3t8!txN)w2MU!LA|!OU zPr~Lj+ehpWM#{Ld0XBb~JevF@UU2_&!(-ljj_`}}Td{JH5BuV&zqajA9lBSU)#A!g z-iK);iOI1N_hgfM^L{&}Vzh_<84Pyw`T4H!4+<|$%#w9ZMf!h2?ggiH zeXaaE{IQ$HTf5%j3#$~1+wKE-Bhy1zXTlra(#j&P(%qusZC%ETR5XLL5yli4QOx(c z{tryye}=1GlfJSWdu%F$P9esf@5cN!g=>9WMRiTZ$Qd~fPQr(hhpg9`PJR^9 zfM-N~9#T;7TX=aF@=)3zSKRi?^zd!FPih~3XVPF#WJy7+XKP)s|JX1ao772D{D8@- z^Q+WMa7hr~tmLMB$F-v^z6T%CX4ci`c=$tE%ew2TZA$(XvdKeReD(EV+6z3@?a{ZK zau*#g z{aE4%J6l>IsNYQ3TueGWJ9VQilCqCN*z*1{Sna*H=1uM3gV}?Qt=bc4{mLGU(mOMO zp-{mXlsTMloGKD*a9KoG`X*h+5fJqVyQk^Q^uZ-WT~_v_+2fPh|I2ZaXCi`+_Emio z9?o{gEI48}m7A~3uq2L!ZMTx%&_|%C#F2+8JW2B)X?10*2HSsLZN0@)B0Y(ISNrk` zIzRh4!6jPI-e|ZmDrL{)c?v&J*QTZUt53EZ(B07vjkKRhX^lE%ii+QQW3#ij+ogK! zc6}F4R@6Ch;YX1&ja9-1ZidLipyR~X-gnU7;!sebOC|a$2W;&7dmGbFn{4w~CcaU# z@>nJaKPeOKdn;l3&|t%NdAjb&QOs$G^6X8M`8T_BG9yjJ-C7BMrSCUC^-kj`tAo{7 z2&6tOrQ@$Gpu6)?pH9K2ts8^b4QF9?$nOt*u(&Wb-eW;I+Jx~Ht1MG3zK0eW5vt^2a`Cis}2cqCu>=BxA%3fUCRk+ zJvR5}h@Jt)?DMy&KQK38?*?ve?qPl^yv2e$7{+@K*ue(o(#*Dh4x|-u@HZ}4DN^(> zO5lo*%8qv8Ns29-ityvK>p2|zc)LF)o<-CYS~N!wgN^^~lgxkfNew1tY;EiEs&6J+ zbWM!RO8jM6r7M;h83mc<#Re~ByO}EC(FQ}PgZAcHgIKC?yPV;YiDj$qzzTkwmgz86 z{Llv1;?j`O)SA7r?0J3eixFKHJb$urSXL=1c9heGA77)lL2I*C=kT#g54;i3-rDFto10W1Z=D`)-0kzZ-B8FKumys9{z2z!4jp!9BdvC3kk-fc)@>#;3>ZH| zwjak)ZVL{cs4c@VCFJt9PdRhgUoZW_(naNQ_nX`8FDj*vA|j)fMob=^uNVGja+P`a zf)>21Q;i1GW7{nSjsmbgN9moX2JLdxfiG4K36Yh%c#`j!VDIB&Z($?ho>+$I$K)|{ zfYuf-EvsaWzb#Yt)`~y6H}h!3tYb>KBw;iY-mNM4r*rJxbKj{(9}#pKiel4rX3x>a+K(*1RnW-v z?`de^7UjFWk$5(xSl>l({Ca+%H{hpv=3v4eg3m89%vWczwOI1taK z;dfFXvg_aXL?0`Pxkmmw@DGoh1y&#i`U=3JjHPcCb>L zBSuXsre;0r_WbRcTPPM@ns)mPZ!dvQm2!P2_G1@^NSn2y%;gyQr(!121}`c%$-h$5 zYqpZYeUg%~<(h-ZW0Q!fZa1~@{XM=@e)qt4dcBeqRL9ITel8DS+6eTxY9CBKUjBOGgpk_mkt7o)Zq+ z0ztuw)*$As#v-jpTZ={*F*Su*%eyU7w(d5Lmh$Q9?^m+xCg;NjoFu%bTDPis=##5# z-g4ZquL+k-5S35E`8ho5QoqnvYbZ6i!_MpoI|xdm(3N9RFMBKfO-L0&YtGlacx_J0 zu2`4GhhorJFrxui!3uOyZA^L5HnPa=I<_}BQ{=M+wg?FTKU&!74$iqy-DO=x9 z>^p$Gk!QXiQefaad{vDXe&tBMuh&yIrv_rb#&p{^0Bhs>hi`O zriOyEyThQ$^NVSi<``9&aSOo;F@oV7FW}~~Ih~7;l~oL0VQu?M;p3+#q4c$P?}sIV zi8J-cL0tpp>YP8aJNI7nd-YuhpyU=-YNPOGjrKkT*qmnZ?!NXLp|u*x*~3Z?{+dmf z7w6F=rKi4jETWZa+Q>g)l8w~qWyO8d8gNwxqlDZ;<^kF*r&~(eNazp5CpZGt!ZXVo z&ypEzuXO*R%!cEL97|hkT2Ahb$J=XFF@6ZVSp)z5*B;sbxD^n3al6zr8C?1TJd@=k z+^4*knE0AMCW9;r70z54PHj4vt38!>PMbFRk2T&Wx+8LFNGtw6GevbEaPdelE;p1C z0^W0g1%i=zx;L4S+KV@&YWJRH(Md}vT~R^NN*%0^em#R&H(ECQ{x9+U8ehl;$)S2t zto*eFA}ELSFlT=jwzJd$847>1s2GJm3OLcra_vEQA@AfO;T2(8=Qn zVG&aNKFadU@{;R24^)c~j)Q&mjWygC^^+-O-L&US{0%JLP<{teD5FSZG z8ZGT%GZ}4Bxn^zM&WPP=tyG8n2Le~TopbQf(bfst`2dibKl&&PVpRI4_RZJ{%l+{k z$8va`|BKWXCIq9@Hlu{jl~57I>a2c&fH5SlfgqY@{-6p=e#GxB8x9W zE^v=$JC`|M;?rAy76>znmoly#2p$haPor)B7%|ARx%H+zqA^3vFuDtZC4%ae!~O zW6P^uuU-jcj!woKTK|vNCl`(^sqa$f$4gI_*?>r&#%ZS&UbhO~+hx^iPx2=Sz1!wt%e*}*XB_el89 zI{_J`0`qB}B_LfrAMl`4cAh=jBm#TU*s8V;SaVn1t9DLjO$UNuSh z2psFy6VsJwPIj|#@xRad7~&|;TZccUpKX7iZD;{#0RwabS5}OcjsS-y=e(X6y2xps zS+l~DG!R3{5C0tb_@o;|L}Yk=|7rit1H4Lyqk8>afvGl7`g`f0P!4~L^Z3Twk*c)4kQChV-|~ZPsN#~4_&mUeRj*9w9F-@saxHF$rNbK@AlG8 z^4Zq*B|g=*K51)yu1Komu3@B$JdBHiJoq@@J}RFDpV zL$^VQfOI#~-HnKV#GwyJ9U2bZUEkUVF6eK3@4jO&?!AAUz4uyc&iOpgjBUGN#mPLJ z+RtNQx2tkuxOM?mDq&2H`?tcvbwg+mDm#Z~@8bBK*KG)i@w-pn7!_n89G{EY6g)I0 z5_cr(39-r;20U8JQfrx8Q^;VgTE272Ia%AfxznD>$ZIvqv6Y{{p-NBo{fkF$es1S_ zJR7<)b0_+N=;YvoB3Gisym7|9(&>a&$#YMBMR#87n{5g>ubb@XxTl(M`Q6c(Sc+kH zQV#_!;Sh4W!!~a{^pJ_7Tnq%$$)%9u829#%}G0~rXfmRE+5ce~gv)!14+uHw8 zlwt5O02cabpxt`cr~XHqWB=wLZ=LtnV)oeU)U1i?#wPo*c0c!L`qIf34WlUHpV&Pz z=447=vP*5Le6~41q^FJTL1gJvJ|Q7g$f;}82~H7Odv z#XSv1b#%ZVA59_3d6qKiSF#RDyp}A8&5uTd1Q+=${DEoeXwL>I>kRntiDQ+C=oC+Q zeiTl$doP)H@Z3ng=$Xo%>08a2dlY~!CO8`F%h5Q&6PcZ3S)Db%#gL61FA((Ch4hRN z2^3pw#{XOTE=`8Xp9|p4haxvg>@Rfqxbqp=qIRbZoJ_T^3=bylE~#_Wte`SK>_zTe zki`#|_<|MU8m&v2z8tc;qAP9(qw`I*D4VJCPzte& z=_{F_!;mbq(jK$f{|XPlT70)Ytqj13m4JBWD)Y68?TX8cV&fr#4LTG7Sr;~H@`fvh zwj)G)*_b{01Op3)cSG4 z>nGabVze6~ta-}$zS_zpAi9+^3H0zOX7sW34Na8{$qzI7O4OX>I3x>g_b0l?A#MpB zYk?4zC%W$+5u1k0^wGZ&^LXaEMz+Q1@BOQEcA$16+eqJe15UCCCd5r4UkeGzbC}=X z7hdx<>FYfl7@p7_G?xH6xA2>hr?0IfqCNO!|rx;Tcd+C#Rs0GU2hPXlXY7x z)i-66-G?E_UGt%9Kmihv5-o}USLoro9j38Ty0OXq5t(*_^I+~aHDd?4mv89(248jw zCp#|>*fUpVs>{d-D-xq?iW$2V2b0x~$ipVxy-I^6UzSThGz(0Pd5m|Ei3D5HO%+SX zmPGxopQuqSnP}}#WM4ns*%T8S*f7s|;|pv|^R;H*KR5(g{lrKH{f`E>c%%8{lm~FK zY?Si}?ySLZ8rzLPH1T`ZvebKMF-&*&Kqyfl|0=YjKz#dyK`CsswffIVlhKP}>46os z!pS9!f-R(C2M%tk9%N=484T#bu<8v~s&g$IYiWmL5L=({=##qjMYfElh*uDwABAsc z;VyC1qlnw*=IOX8%hTN?oU*`I)Q|M_l;Y(+TCRi9rY=Z*V>s%Q`T^lB&7>{+Il=O`D4cNkke^m!Rh1m` zRgCR>on7*i+nfoL+qpOd{mJUrBLBg;>iH~BR;)KG?fYW2vHsD(FrTSrVfl|{7tabG!S#xor3Fo@`wt4%u z(5gEn_t?xFT~$Ov)(fY6t2Lm)7*eljN-k~fK9zrO?4e_!b#NX|j4{FwyU32Pa6Yeo zJRBb^uKP*7G5A-P&rdJxHM0(rQ3+olM7a4BD{dDLt=JtznK~h>`cU}mB^M0U$$A+y zc&PUZmG4LqFdv(+DK4kUp!;f17KL}~xk_;s!l0BfjzkX+kc%_N&gp+yc&^$2AEP}T zvHjT#q>zZ%dRAlNM=8U27CHKg=IDWB{#-3WZL@H)k=!$lb?=+%ZZsEj0&3DblPq2M z9Kdwi#aL?t^l576$#I6jODu2XQa3k>dItnFe4=FUqW}?Mko<|sLd7Jx61nJot+O_39IUP3}|*M9>x zDw89QW}_N|^FgvRum2+gZMpwBL0t}8C)Y@>M#@@wRYegWL)F?s28W)_{d^*|m;sH& zbk>L6@(U&^cD~Jf+jqM1NS!$9m>fd!ZRo+W-0}1jN;eJubf+~Ku81clZxIE|_b5I? z<;btw?;t?L^GYx7nXVd(d4{!Kc^vksn6D8~yj8La0Nheo3uPl?89Pz0Xvtnx_|4I) zgArEw$|iX_U^hVKVUyDuTu8njcDxP)LO#t$&yfARy}&XJ1B+e=!!Ui{Y9A%yEO{8o z11ZX`u;_dFUd3o$9$)ZlP|!h6UQ_gvfaTps1*H%Jkm)a)=eduh5KUv#_04G`W&Ry3 z3zYV>V@|n#?fR7DSNWvh+HxSxP$1#TtO6*T$(HbdX8+*kDl^eQ^p3W#`*l{$1d46_ zg|hG!uLkY?MKGF(p;8EoPXKVAJNobd&&KozOb5PsCS8E_Vt72$cYI#SN!7rm%KL|0 zu`PYZcVKB>zOagpf{$5e`}m7YvDNW_q-LUC-w@GO z>A)B~TkW(is!P)2Za(VXHHDB}rXT!>vh`Y`ul|}lzLdnf{Im}fL4l`WU9lVP5r{vO zueSQLyW)k8PG-oDMrwkn3u8T1c@O($S5w(UZ#+90dvyG!cKCltp8{<{$obug}Dk<>_S#IQv>_GCCQR7c)VayYgDBH?>@ z6^~6#cx!+SB$OJc3Q-CchV?QurUFUer+1SNo+fesbVZ{>DU9ZA)UKYeSD{AJ=wmIfor0Lxq9T%&SEXK;MZz_Iym^?_WP;jD>Ha zd_&0oc=Wq7ZGFBQzwRV2 z^z${n|IeN!!^v9>(MO3&pNq>`16m)f5ua2exh&GrvkGVNXt`B@ue+75;m1U>_fcPx zt`+eS7JB(@qXy9&ldc}U5}=;IV3)EgQt#t!`D?AAw+BIz-%ggQLU*mVcRrZsszT)b z>kZY98yg+Jw4O6dejIyrl+LLoFOu?Kl_vD&!{OilIPcS(_Ofx0B1Ul{Qe{^$3He}; z;+|!|>M-Fq_xHoXhY3jqeU;`M9TrU1z7MQ*Ih*Bsd|@mD=iMWF^$MrSrsHbQZVWhS zc8SkvGLQwKw@Yqb!+7$Mq2OETgOaxrI-R(+!-j`~ze64;h~hROJKGBUJp?E3vdT@9 zrGu{@f9Fcm1Dw=%3vkj}=;2&Uv_xw3N?%EbOPYh7@1k>dZfVSs*gqAUF?(3}zi%b% zR@B@;7^bT`>uZ4MJF24O!Fdg+t7nZUriZ^201BN4SKi;1!Y-nCs8HU9~r+G8i4*ATiM_uBGzLH=4>` zTpY6(UfM1j#F@lnzv;lRL7Q?l=9!ml!?}{oXuTa}M-?FE52DZoAt|z`dv%G3#6Ud(w77wxcYDh=lr}pVXfsNi)Om z!q^X2k%Os}b70QOaW)G5YA&YDIa+Q1#lFgh3A5VCsXI(R`;rfu{j|p2eR}6tvPw5U z^&47~u3Oe<$)RSfieK7U8;qekRC>b5$+f>f&V{ z``DOD{rQ(-8k(62gy8!Dr;~SI`SWEKASh6iQ{gaLp=<>88|sHE2iD7b*^7+yE%VHszXNCh7^eB>19J#Yj2r)5b)qyy41o}I?^+>88oErX+ z@^FTv?RGNr#3-{=o}R);bFP+Pskp&;Q-;H#nz~~LtL1mOo zRP!MK#mCh|n)3AN&DVcjtabO1nEQ|(!Y5m4G%{&_&1pw&=o*FA6F2H@v&pjEOV`hL z)cdm9fw#OE?$*qxrR)XQK{>|=WZ%7V5fR}zb3&$`1hlA~OlBc=w z>wHO4qYiv-tI8t8LBk4rkWcw&X*fS2iQs=#2<0Bo%*AfA1wBo z9Yb0Ii?dpS)uwE8oO;y9*Rf<~q9>+}eve>jH!7#$h`%8_DYrD_pO+#OXW`a|10p`l`cH#WpUwP*L&q$x;G!k#8xT1 zY9U4bX1{#}FX%9e-!W;b395)p&~owkl{MwH^h+|FiNY~Hl588HI1Iw-S zDP2u6ld@!mm=q)W^n;DS*}1=1uiAm2v%QF% zDosLkV>%d7*F>>D@~3g@j1C?yRRtK4a>yivp(3c5cPlAk!h8aXigdgw0V^m3IUskP zPRL-2kzk%dlFH1g5DBjkn=dwCinrWdNC z%=TOfPJkwIjx3>}>e&WirjDFmJg!dVgP9rZOv-jTVk3kzi=~ZK=M&&9POlNQGg}>N zPi>G4x>4*CG#+(>P_W^)m*-sEO*K+No1N(Q?!7G4uWfE^GrS)iA}Ln|(1HfL^HT-3 z3X9e^@J>Cm`@0FYg2bMJ1>mK&`aAhA^r8=#|aE3%P})xk!tBMBL1ACn9H2EG0_MiIdA-1 zh~fvv09^={0=qR0z05y;un=;&F8HC+22KVS>FJCPl7~yQe?qnf1A#JI{kMWZ}9(oYh8n zPvf>v8Lui-dXhJ|WiaVtl3uSRYl^J{1oPO~mVEP1G$bkipcUc50|m5;AtL-{Q$DNb z302K79mkB3^aBgjHjQr!8SSiKL(q+y9PkQ;aqm2j0(S4nToE2%*Jr)s*fo(dY6@;a zy6{Rd!N_t)A)+=vK;*B=@Zr-&28{ORDCaS(o%JF{CWhjtTBsM~9WVOGkcPXp?J>bE zHk$##tZtaDrmsck+Ol!#WXs-tf9!QVrl;xLklfq+L#morqGPw9sJ94dO~sdsm)eco zxS8Jm%sCGS#gT`r;`+-2iV<3vstql~Lk+3W+#As7?HuUtqYfeF$^NN10p%+tOy*sVz#YB!Y6TFuUN*#WN*+0eswneXsLIvR!>1mj9_h|pbyaVx@|Hl|`* ze!hfW<8hEJsf_^c&F*&qeSSUQL8H&|7GN=;#OrZHOyLRo+~#ircIjE)bXb-(Ia=Ul z?Y%#92Vu<&`*KuI@?x&PzXIk-qwWkGJ7qhExKGq>4q&()Adh8d(eg^o?XURdeHOne z+p`}>)62w|23?}~_n}}zCW)VM2%kpf1d6-4wO?(YZ7x=v^C`0TS!aW2oF}yI^AGacOVjb}f=w zR6-OC8!m2c@RxBApBhKIS0sn&X9x4S7b+Zy(8&_|xzX*`lWhKYKz@1K9d2rP(Y5t9 z*3!)H>B9w6p_#ZBIDXGX-H5p(+~45DJe&*HwpJ7<1RtTn5a@ck6d+@;N!&wDi+>;p zUZvYTh#-yEi?+smNURSp1(YF!t|IBX(u5BfG?-OPj-qAmefg4#MN(Z@TluDmK_Xcr zXRN&ts?kpPfZ}Z$SaO(+-AYXsHe2U-vEs=2X15NC{b}aZsqF5XlcfLEae-f5zj#`Z zBEZnjPA4B-ne^O*v!7o6as+F=kNN{v*W&3RdA_4D_lKrzT$k~`Wh{jF+SWb}Q39&I zU+ml?g3y5Epo?YRJv~+%Nr1IOo^nhn%zpBkERUq1kPxAdJRB4;<+MJi8yE@~o0jo` zy^Ke}mK&t)k0yE$^Rs0z!S*}&mgFs*71_1|hsj>%CI1*Ug59d@g2KGs zvU7qyioi)NQR*K3eDmzSw*g((7&)j!WEiDqO*=0OANea^S0PZEmj~vh>Ey;LJ%GLEq zSMo{<7Kv&4a&;cc8WWGq!g|LxLW29DH+KBiUdHHe39cXR-G^#<03UU15;dBy_llqA zt&dBJwX@J0PK^62NyUDaq*{OeDL|yrzB-gf*H`~J0oOg8-f&)|DAizr^AA&`o{c!g z6+OMx%>GW?-zBp7GwBgD0rhQNlIMs1EzI_{>g1%PGxM;*#kf`7Gq`?vJ zs?oV~fOc^gTvKa9s;K5EUHUHcJQV>`9Z=lN%O6JDrWs0(C%FPno-)g)o`dDMrZwFI zPy<1BLLc60jT7h!Y1NQ`Q1Hb+^+2P&=^S_;J6}5sj}Lz_lRr19-BCiP`E%DBxrr|Z zUqH;S@H6IjDw+LJw-v1UqVEtH50$CdEGL*}r(XNo~JyIcczY31_3USsYj=T7iC|5`ex zqr;Bi9u=432e9WSmy79X<30xJsZSKQ7+!I77ivoX83y~&#PyZNgZuY#7aUCqpWGj+3^LgyAp5>1Ys6MO4w%e z@B_z!0MKoa7kuoQVv9KzLTU3hrx?xaQ6gcp1q8_JqFUda?W$+m4nh{9*Z0QUrm=34 zFDlxS(qyevsyq_!9Rsq^igIfJ!KGyV2{2bDElH!Yk00)z`Crc-^hyp|XRhJqE19Ck zT4nfGZr_=&v>)JvKmiei$N9?a*VY8IYMP-y>QBHrCwZf2KhxhT9si1{ikb+;(ij+wpIKOL;q&&o6(#dH??+!V1SDGo(u zPYzrxH*GcfBy?40=?G0j?y;PKii7G(WHfjc7x~!kUl*xYaP#4}-ccekQ{M5@JxCo( z`&{O7D1{*)RK%ufR_YO`w_(I2;zN9p1L64D^HvLq79JF6tA!Q_eJ#V!9NmzD^pVr* zkHW5rG=fYfr&sYJorT40%O)M!O;az|U~osmr?KUI16Er@jGps7vp}NsSE!bx!-SQl ziTK*(JC{9B1Ng(k{%v#+ov@j99S|n9+Xx_vfXBvi+$LEHi~e954&8agaDO&FY<1pu z@0b4g1zrh0*1?ESC7yi%^O?*zf4^SfJ zyITR(>ioiwqX!e2AUvY3=sFfw90D(y{MKI$T*9J>=APr0=TGqhI}nU05e!{T=hV~k z$~3H$FDd-TVKFoxTJV?133Vftxd4^pm^{`H%OA;AsBhfAKHX`HU8N7jA{S>y&~j5@ zb#PII>6`GiHGdWm&_R<;cIZ3#nU4_~DF*=^j3Way`sH(vWh+SWZuC$7CaCTO*jLF| zO`($Wx8JXG`lmYtc+?q?8~T~orQ1jp^7dCQ#fOJl4SsqV^U9_ygRBcv2VOuhWF;iM zXy*YcqN{thHV4AtIsC#pQoMq|emwOQj$SLvpWhNXhoPQOzt@Y1)3Yzv>C#lb&laH$ zHb-Hm9%e|bf->uMA^OsD# zQvYrWyR}{PaIo68@ebefB=p8;ntj0{Wsw6YSV9qAhKc;_fz|S?MfNW$heNvfpXBhE zO}ib#cEOEyb==b%9BcBiew9gQt*M2#%qE(OTd^XyQ2LwY&PUu3i-t^Su^cj?)K}dZ z$QCmHc}UB+Pkt9k9n(Dzk?glEec_?R$vf;~`mn%jJqtg{TzG`}otQnxLTJsU-R z98N)j(h$FM+-AQR`@Ck!)b%ZsgbxC`+wqgTbHXcp*+A;s2}AR$)TBO8QWC09kn)$S zrZ{uecx7WPDyzj3a&K!qVw--OaS+l~ZXkBmuA4sQeLekDGhy^;th+g8k7B{)Vv{bT z%W4*H9S&c@Dcc_y8~`^1e8F2601hy4{FvGVo$uDU-o?Su=XuKNzP&ysdiR(qXqXrL zC-lMaMB9j|mj*)_l6~~Po==vdn6cBh*pqM!nJ2YA8t`TS$GWw1%-K;?{#C6ATqo8n zP?C^c2Al-C!W+i3@TXy(A3$U{y4E0FWRj3o2+h_rs?Ph(>ouD`_%=oebSGJ>BBV_M4RX3rZ8gz(n+ll!LU%W7lTwIGVIRNu1=BM=9b10Z zB^HQwY?fl-kMMC6K)$d(aXxyi-X7YSxQVaTh~@k365ZB3`Fyy>#t5Tb18Ol5yI`H$ z&y}Yc)7kfu*S^zX#Lf{f^DMj2U}pf#Hs%qP8U%`C^d+7j=Z@Zj9z+&2BxzR+j^YzU zR^(NKoKZ4xWUlXwh8Z+dt1b5}_olLkW@O8K&f(V(4L(<&b~Y{4VgAi0pd-mC1@?sq zR3ui0eT|Ji8FvJ2jf3Fn0dw&Od0^Yoetq+m396ttEgZ9;9!zC2Gvz+N;tGX5Jn#GM z1H|im8wENLL73T*U_mFVMY?C$NG=QgFr(SnvGdS@$o^3c#>M)Bai;^-11-X* z0=3aa+$MN+g1-Q&5wp-t1$2?blv1pc(>63p@XxIvI@=1|Nc(-5t?3R16l09%w_R_B zlZCz;s=5>tVx?ek(G~d%q*8EX9d0QJQ7Y|SfD^}N715_4f&4p@4J>a&vxMg+|D(@K zbfA}=fE(owh00>=L_KP#hy5`EJvqRoF+J@;!C?Wv za->t!(#^-I23Op?vCoHdy^olk+h58AxQItZj$?-s7^HFc?tH)4bgX3a{e?fJwB<8D zd^t}wV4@>EsacU(RolVDU!+rUh)~0M-t=XI`hoTaF9`eW*WI>YESGw+dyPcS)5<*= z#fMYIro|z$p_d_uMZZj7@zHEp=to8O5C0a58bG;d2WMYE1JcY-)rM0_gAiEPJU7*2+t>#!8b&Tl$wWOEBeZa=WNQ%FPlFR0}dOF9yV0%Nz$qgi<5 zm!D{R{Lj$8zdqXxEc3AnfMDHTn@@ejZfq+wpj2-&GIG?}Mm(_K8=RE2*Sm>Ycv#WK zL-+aSkNy@;rgp1nCG6+DgFSJ``3QqW2#SsHD_DYrw+_R-!e8B2hkGT-v3D+<>+1-N z>z9;aOOCP@qDuY=-5j-Yd3}jah9QPLM8?qX2TxS3g|#x~XD=s3Hr*Y0;%F~q+nxQA zJkIT~*%a#>V;9L^)AyNv#?<><+|ZG}?2bIm7hwqeQ8$P`!VuCHsODqUJW+GcJ2JhF zsBiN_H8I!t4@^4K?kne466^PtXVJiSHyxz=F%%2EGxN$H#`e!gyn%3O`y|w5_Id0n zA;=j0u1toK!W#YE506Q6-j2$DhTWINW090mMky#wfERdPH*d63fTL&$&pEyN?X1)u zo+)R$tTEUKs?Fk~L+f}Osa8-N^s+e!&6xBR5B#p-;514XYN!7xYq)!#p%fwJYa-2M znmz#peNsSdMm#I)0hvGoNSlRnZk^y=Qd*A|%fl;QNNV?VGXwJuM~hfWpZns_8)5UF zOtHY-Y6&{a2b88L4oIBIa>V@hKo7KA5gJ8sye)BzJ+^PInxFfxSNkpROni~OAvdD1 zqtR4olD*|A#vUSFwzaWK4Sc+H=Y(2e9a(BB@QFnA@1LK$sAN*%y>N}Q1)}Lb2 zyWeNRnY4Mc@ANNCX;1OduNQ-I$6tYE(rxS2$lpe;Uccdc&TR4P*3PtWq7Yg!qp%BB z!Uo4f{CFGo#6c&STVhNC1@a|7zYV1<7lXjUv-8 zjjMk7c#&n6*^Fj4xADKgTL#3nEZw}V_NLbuD<>$}rJ6SDJHPTR>ziO@9|OEo`A^A@ z!|2q*ez#@;xewd%`bP6N8kJ4$xgI4}ikCho4_m#ej~Ui?5Tm&Avs`4@D}tP{diKLe zRhj3TTuK9~bF8vr&rN;s^&}vKvrLv&d9#Yh$Cf7?E?^u-Nkyekh2yTFx%Wv(t88gS znn99Z>bSFOxD%&qZL*T6p-J`v5sMpCTaayH>}>o!k2fHCH|1?1z&)*yru2|%G)IS7 zq3{_q;0^UUh-Ty&(EiV?G5*|vr4dnT_*W=#u|N8{Fn654suy-t5V6I81X3U3%K7bb zyQ4ir7N~X%SDH(h`D%(jb{ZDfKAo;rIHwvn2o=uqqmH}!@MthfqN_eCJxnNaH-$^S zFhpDIS($-sb^fsyzI2%p@3#x?4R%8yA%s`@(NFWeutkP#DZkW*VWGs*xHKH4 z^6|VVn%Jc&vPyU@)71BwJF`Lh|h3+849mXbL<4;)qwkC5(!(xm%h zLC2>kgmj@q=s3&oZg`lnvU(_`rEPU|*&75?oZhsy0p&@JD&5&;A~pV=E9ZH|fR-jM zTS27@JSy3iFobX}oqxKa6VF)_5A5yqB0im~h%rJG&Ts!dqg+2Rk}pdTgf~RyLiUaF zGVLDsa-Ot=7Z`^!P!%CLBO)o=uFT+Od*?`(^Jal*T4^@0CYK{}eB@9E{`NCV8ye!A z=8_Hz2s0_NZkVS~2p2-~(J#gTdFnK@E(zG+X6KCg-uajoQXNQ~X0;=aa9$1()Qw!5 z{yYh?AJI*B_EUb`c}$Nmf^?MSimTybu@b@$o>p=~n#`YY9Q*ny4P3slKRecE-e%?$ z#`8O)^ZG}vyC(YLuX4|7(fX` zBvj!P7LG^+NR@mH5_;%9WdD}m-t5^l1{kK;L#Qc1%GH~QHKHR&k;*$FIqYJYWToPM_Yz}*v z)Flfhr^MsFVVu%wYGzRAu+L;4Dy%jC8?orMSTd3w#LqP+b61&wWl{3T2HZG; z(i^*HD4EhFN|vxAj+}l z?rjX*5zGn^VU8^Xy70!xWb_u?Do&Cnrd=B3kOsvzKn?TqDB=4(u0G)0wiPGHVZ(3{aeGYT;Ivq0utGMmx2ic+BpV`O>y zcAkSUAdg$aw8Y{tyQ!6t=kf@5`j+#us}(byewEejCklpmSft#$%Q=AN?9r}eyr3n2 zpvnv4@I1*e9NNv0`j6+3oWP;6F8Fj?;GT?66He_Ng?gWZxEGBwF{z~n9hH;(Ogxu= zdfFY$BG6c+KCp`=Kp;dg}KMgDNX@lF;91j2$q;$KBY_H#E#| z-jb`K|8|K^nY}U|=i-=f;Zk9*@QM?p1%#Qu2eKd&y~)sCH97f#9DU#adJ!S*&FP&{?8rc#QS7I$-7x^>2>;HWX*GZued=xAMj!}wLv1nyj zq;{wJ;0274Cm>^J_Y4;klAz6WA~XLF9(qgPfzA-gU8H;O^;b#dL)8DbY(8rM_=)FolRIlfqoKuu z`2-me|LEik14(Ip7E|*XOK@yIkCw=8*s-QmscL7J##3G)(29?UMT>E(ZX^8^iw|S$ zx6(I!^)I^GAaH-@$O6pZ38hj2I7v4&kT=!&_Ja6-thT_QxMabvHGYP`E>Sixc1)3C zCQbi_Y2?=2>dsbW$8w;^Ef>b{3o%Y z*aTI83-f1vlr``A-Ohx{!}^Nq09ue>DK2P4D--N>gUWw)^Z$W4JtRQkN024Eci^3d zZScdx1CuJe^RxacF^g+uz}tN3BK}<Ol3|0!wQH63NXQ7DG&yDXoqZY?|5)Ds$9cT$#e*x~-(|*;a0}Ufecb*;i5U|=i#3tY=1~~rmdaAWTp{~oC5rMZ z`A))=9zey|iU=`9(a#3V*_!?qhd;Yl($F=Cl|LYE(&{~~tz!i#K_GzpZdp6pEvCDq%=yb!Xx?8 zo~~LbiriCIq>tMWMJifNIGVEXe8agIOM&}%MO4cbI9ft6+;Vkm8muRBhTr3nE%REf zki_^d6i^h>TXll0z$6=s&?c!?$a}&RJ8gX)grl=4yu+*cx=o+EZcliOUOmxhr$F}t zLrMBPPpuZlVY=!t_mbWwP)!KtIh4QwH^lA(sii8~;Hv&V+v9pqnYzHsP}wJ{$m+*3 z()bI?MBGl!#kz2hN&9J|#|tTd<+dY8`}5TxgM5bkDh8tIb9$$IJLYuXFn9HH7(+@Q zmOe?jJ`+sP=^Ew`XJXnO$EjB>*Z2JxU*@h(%>Iw1tn@IY6B|UszW0jD$OP$vLZnm* zLXa#G{;Ak=>m~DaYaS1o=** zmSV_DsG#8CQw;ZS9n~gLI&DBiSV^b`uuGxv(mI(kydVNJjGaERi;2f6>Z3MGUFW)fU*)&Vq4qNs>^eZuoiT z68sHZgXN7M?YK-kkZ=midF498v-(>Aq-hO}G7CIj=;Dxw0D9+gtM|lyUH31wYI`Rd zT3g22^k;tiB$H)ms|>K+GGec{B6|o%+1e$2-ayrHS4x!Z)C|Fc$8w)`J_ux69C~(5 z&a7oJY3aQOk9>iQh5y~p1x)E)k8>zep3zP@p!fr&9Mf6EO*2RbXo)re-%6&@ySfaa zXujtp%X$~jIWSuuvKk8QM4P5K`RHIjNA%z*n(AyaqPOvMjWxZ_mbfYAam)i{+#bGyF=JjNGgnJlOlo9drkEsjWwpM?7l5lWGR^Jh-_W!uPOu&*8?`oE z?`Po!+R*F|kgje46{}E+6v~SCY`uhvnC9#Qj>ApGyuHr}HY^LlvHg&^?PkWrTrLJA z8bYz&;15-bmx=@LRpg}_CjbIw-33_ghAtoE1NpXTfHIl{Pv^IZ>}!aG4FB}{!-cQg zc=<$9W~&F&ir(~1@g}LRD0Nh<@!s?0KHg23O!Ts=+=5PZi(kLk_gf~}GL>P$Mo=YO zJB5PX;kwAN{TJr{)E*P{e3cQRY#O5X=xL$t)cSh9!UyPINi;Qi59? z%^W20x0P;uPgMj(anNJ;qK+o+Ea;@Q^hlq7sLGobQYb7$*=1t&S4)ScS90LV8?5UU z@7wqc9#&!##6%=^dV$PC8QxqL{}#jDW<{{ztTHx7P769^KnGmMHeSTu&~Y0IM7usU zt_jCOTeyafoFA?x>x_@WX#q8*K!YAt{Z8H!R6ZV60Z`)F0* z9>1^<4u97EI4tY{D4n0D*ox7`A7PHCJ{l~s%i@{;<81~0?=9s2j6~9bGtmh#U5lmL zlswS(O;!MqTX*>r9UUUUDcSD!lYj5uQZS{WOrZwux@SLbArtN@l_n_mS~Kkn0jD68 z3`Nfq;7fy#_KDT{5Qi{{pr;854AEXs`jwBD)U@vx&t|p1O`R!&i+pMK1GL9$Qe63t z53d1S*&dM1FZf()Ajs$$%JZTmg@ojclW_m4i7-6PCB%wyu9fJouJ4GQc)th8$P0cKR~dKxInm`aYm%!oEuC4l}hu#VHrh;iolLJAJTX?mGRX1Ny+C zDo1)5 ztTrmPYCLSCMo&Iphq?WUNM{!@q@1u4Sxe9uC>fLTb8grm?n5`a>zL0pIcZ4Uh{Nd( zYD{{bm5GDGecd6mS3O;1g&9D7d!nKB>cCEx55?942K2S7xUCmcS#B7jpYr(6KKJP< zhS_gwM^rcrDTIX##Ijn=r|w zt#CwqoZFgarwY0CCbJJ93(zP$mR)UV~nkY!tK{BoO7D-0fMXauS3eLY3 zJB@UpSLYSiACPjs>zT@yV0m59-b04L;l&9U{UoZbk%F%EdlgCK#364IHT=&fTdv-) z1V-Auo$H0Y(U3$4V8(3!`*JHoG!$ih6Apq%2dNzYx>9EVoZv6ArF<5&i#HMibbbl) z--6`9AQ)(ST)S}HS>35h39NH34yQugP>UoO-(UHGTU!lir5d8~_;lHOvK&h-tDZej;K< z|3|E*3BZ`C3JbxiFXG0EMBK>vRbx_zy67KJn}qj$m#nVagJn|XVZ>2sfV}mxx+Bg1 z68wnH9+eJ~ym!h{p(bA_G#jhgjQd%KknMDf(x-#aY=@^=k|tgrrahYterojU%y3pq zP6QJgSBM%PT8meVnumaFaxmS8%RUf-Gw!n$s2HV0OwHqL_Gw)nU^>pUSLHMNL{a%h z83s{^ghH5TCuOpuw3viLo#JxrT;b(nBb++H1|gvzQUNR$F4s(-ACbPZW7=~0GqHZE z*9a8*@i);f0Zwtx`x>wc(}!!uP339YJv|pl5FlPu%G_7g%pNKbBH$5O8o5E4!rtW% zhe|s!xSobh*966Llz?F+jmu8D=&akYZpbl&>)X#bff7{_5KLBbo*NA2y?#icU^B&^gXGuKr*RnDmIe42F#vQmO~h$N5epL0N61 zCH)da92ksi)XR@U1R*0x`{TD}+TGn-f-G)V@yxw_S3X{@%LQn8LiaO*S&Orfg)A? zpvKp0ve_02Ts_w0<{X(_gbDk%zgibGJx?LB`s_{&Uek|%Zm5DvMJgHX=Jx9EK>ggX4m&1nKVQai_*MFmNHhCh+%cnsYK!xZ^7YR`3L9$>7rUX8dT1dK-pUqWmWsMH+>Dg8cW1$&9X1Vd{6-*gcvNHhKlvU)CJMI-ckf{Xo+{Z zaB-&*t5i=85;7F+YCtsz)VaRBrfcAoe*0p3W}&;)!oA5_lUn#4RtuNWejbovQq80N zyDdTdRN8%RJ&zMGQ5Tcg^d$~LApJ^PhM(9&qGNF`+;Wc3jorOtPfN>_?H=7m)=kDE zEzQ&ixd>Q1=zRv}RtA~d_lY&gpJh9|_CGNdHq%L@L`I!%;vrGPA}TEo<~7(t+yD zFDuE_e&bQGl0Rzx7%evR z&V1ANI9qxMhv+C6Cg2}GYJeGA61|2)sQ^*He4seDHjqAKi#|u03`S($4)>3aflw;neE4@IkCt? zg}|4jqne9=)~9}81YeaP&8iT7a3xmM+bgyw2^?8h$7n$2t$}pYr*UCU`1u4)|p4^BPgO=`{@@0-w zDA2fiG(s2PA!@JA#vOhlE%L3%0Bj-D@r;MGid_!ijg|xGAv%-3#3GqS!}<=+)xs}` zmUC{`KK)QXxPA7l7(=I@d&9sotKG?;oT3x1@U}H02 zhcmic-A2JQAZ8q?od>z_Cj#l!HrArsuRa09&h^avG6$4#hPpA?BNO{0xzl7iJY0)# z5l|V_E%(n!-a&XyV_%Qiadm#znh8X}(+#fVRb3g$+5R^seR$7%yY$f+S^&eP@lFpd ztjyhsOJ16!BbLo-{8g8MN9x`%f5iSS2lgG662x!WA4b%6?U_e$A%F?VsZKF&ytM> zorK(0hypkE*2;7Tla=62dJq}5P5&QdZypHc`u+jWsc+knblSAoPAV1Bk$oGjPS%ip znTl)^%D#_|$|*&%g^+|0BMeyv<&-V^7Gg-2!5Hfd#>~9;Gh>+Pd%o}cd!Ikfk(%eZ zpZmV<&vjj&>vP@nSIe=54_4b2^mR5Qh_CYHFV(Vc(??S6#P+v?lSRUsp%CHyG8aQ* zpQxx9B<&1FSSeIdVwbk!b%W^+K)<W;YNwzfQ8cX9G%eS9bws zxWHOJ4w8nluIY;P>{0(QpNw&Txd%9q|F^3k1T`GQ$w2jk(jChOLEJc9@t;>u#u34< z%FBB$gU`F2kK&iWzCHLj_Vw-71DTiqNwSkVnIvnSDWm^3Eiz=}CO?|tx4u_e!4nRv zao@UfNYQELQlWTR6K47yrolPuKflbYC*H>YvdUTr^#5Jg6iST;wav9406b^x(pn}t zodBJls5F;i4Q->^mWA<7QkMR!I>PB|MeeIpI{||~)~A##NgbRI4IjT;dA$EA%_@s@WPNyG z$jwjIBn|^+l)hFI7utJp9uOvT9()}M{u4;=pCS$b)xh4Q;`0h+bS=g+SGYw6qX^dRaCw?w8=@?mj$K~sZ{dbE+RqQOiSNwCh zFd+SaJHIcux(8kK5Nh1E2XySx;pHuI>8sQxYeoa<>yaR?4yworyUc$MH3OYR)!#-< zr=es9&|cHrpN{Z>v(5=8Am0S;)LWGy!$`bNLG6?eUO5utv{2Ol^oM=C?TjkZe^m$n z?lBwL9$^5{bgB|SU}jVI?1VVG_Oj+cU)f4_9PEM53m%Nv_B`!4T^ zc&J8gR`d#5ri-WdXmW&tPWO`jS{?ZGlX-9=9N8&RNLbGd1JwEyhmFL>vXon&p|6d& zv=dg&O}Hx$x@`6I&qzlE{=Pvs->2=?ca;;cmt^@d|Jln7-@hrPsYCOycD6FmKIT8) zCDxS?>Cdbmj%|WE)AsFf0=tQ{DdlK7E#rGTyrOOK85CH|+~+ZHVC3LRb_HP5KURGH z5*Vv=cL!KJ)&-_^i}xx(@fCi&obm%xzkFHOQqytLtIv{H0twiSb$Pdf9AlvO*Gpz` znD`8TK4^a3?=5TzYkQ`}NW8Wij#w6-yP$qGg*(K+6>tV`U72krOA*5SOwS*f_yvjr z(XnC?d=0E9u-G%I$=?@AkpYfr@y9m7;~h?z$P!m-mf?XM*zQsyLh~(GpDbhSCZlPJwFV*JMsHn%4-1kB77&f zyOxa5owqLiB@-*>0TuDzB)_{@r(7~>@Wa}8Gap>qF^=K($L>DZQ5W779rkpn`T-Ej zcp7Z-7_~5vM0NquJ;*v%W*^koW8zPACPS>{-77#5?Ii0uCeE5!sKTjKv+4>4kQU^s zZWjyPQlK2dJj>}tWK~dKfgVf<2R!#aE|fybI(BLjjx^&}27xlwC-2005c3575^j#|HC?729Atnlw!y1ZFKmBbwE3x+T$y}VxJbKw3|xXocb$_ zMYjr-yWbN%SrC7DTM!1=*f-i6pEI@3p1x-1!&h|HGJ!>PREb~V3zfXHj+1hL+eoB$ z)y<(6)TzRN*BLvKY-d*L(H8d{ERjNj#9LIo$P#rI2PVMiFCQ@2cW_-^w&M)lv;(yz5?z{-K)BPbh7tAmG zd}deog$tS=81tI^cR*XB^>_+`jlExySRZXtBHcUrOI;^$CxpLmnJpgb`pDZ^l%v0G zgR01{7tPEH;tgG+q3|U64Q=uEDhsZ9xtN0H0U0A>TEpcTJVC$0(^m5nm zJY^B5HKMhU;K1cP!`6j4UI#RG_Te}J9A>S0;kB^2?(dJFfqtAi8z*0Rx<8Qi{m!F~ z*8#t$unR##%W9BV}=OMOn&NgdWmE zgBXbCle#wD^%I_4(YN@Q`c4?_zR2R`RF5;0?skBHSPWVYs{XHIN#HX=tA`{7qRs@k zC6+C<-31+-AcIAjj`T{AMk%4E(A(TVwpO`y@J(+@pVTKkXnS$t;S(qE9ydZ+mayH24={3-zy4TAJHdbfaBAV)fcmQEdNw&|=DVMG zpId9SZ5|w-!E{_D@$>Uny@!@(Bnxy(K`c<;vEN(~Dp^B4zl)(n94sgOpP;f;RJd^A$3NbiX6wBLAQvl*z>Ne9eXF=CX2i82@b1SJ zlE;GGk&DXP+zPK;06DOD_lq>JO;y8X-o-!-s`kZ)IA6BMonIf7l4LHm9!~@9fMJ)G`1uYQv#sK_!`^ zx0ApDc$BDOL35VEYjgSwNNH_`X*;}1w50Ge3ka&7xBr><^ZsF;1<6a*OZsUa=SVNi zcwS`g1!EiH63lFON&{aJ@Hnxl_qQv~X~tSF_H(a8YTs6#*)?^q+h4cahgzIIpRyOAAXd(t_NP0>qis(uNG%dh?cAOr+eS#+&Qb6|t)-QqhO_&gl|UFH=%wvx z;JfxWgI@aMA%jfdg}yfn{c1(P;GoVGsDpoz{8J_u~LmMkv5Y}07{p!Ua){#yB1#n>aRgy=sGoO3a;-nzMM z<9`%oWUd7f-ro%B{p?gb`^qA^B(tk$O0c$AME0|nF5aw}qt7U-Z&3uB7)T=?`m!U@)nwB){*o^Nkov)#p%A%(9hW=?or08A1~&Nxz>BjIk>$ z@zn8hbJFtKbuiob#SZ6@9y7%%Rw$z+!BQG?pGJ7g(H<%f+{EJ@F#C3>9*Yzm%BR>8 z7cH&xWpD|NCY~3qpKb3cC0_G!DUmJkZdI+m>|E^i=~J>U47PQ?8|8Z0hj8bPRdw4O zCdqOxUB`UxJ`wI~_UF!lo6oaV<}}^%^(4K%d^gH4Y=uw0*yiZrUf_10L2iI$U%bEO zoV4_FI^+ER12b+Fkg)KyP`6jgjA`Odjk3488oHe_>py4j_I7`)*e#PJ93P031CRFx zjD9R|`ZSpPZfIlbIM#?d6Po3Odb5W_Gzg5b0`HIbb>)_LYUIf?)NpyZV|Byo`C+Sj zLp6dW;4uEDr&kd?R_>(!nc-<0TQdz?uRXB1AI)DHc)nas@;(NR-nVl!#mwHTIdWh= zh$5)viusD-!Ol!3$|ky)H)4VDYFt7foJ)pr3Gv$IhK~;__AmYOVU}!3R@;s4Ew{2k zT-Z5acQs3~ta$h8;|FfCvWRA(D4&cy-4hOqDhpzW-(v3_O;+sc>6<(Q#8nBYO|+Y= zX~@@Jz5>kyB8+@Ngv+dRwCDn04hD?9K3zt(8li^%DHwdb2T+j%`uRNBlmxY$uNY4! zmBU+`w+{D&*N%-;R%VVt`wY5N&$Hg%?x};LjZ8`GL|$**cNwD`8Ol~z?hnHAm6VE{ zboHZoCjG7#twSI8cuZ75v){8)bA_&U9>o8*x0}1r4&dhmEy68J3zbh6&o!#0PnAr< zRXnt=?tH0hljTdgKq~3g(aPGa6RODqA*mOu2oShAqtiAmCBD9tk`mE;rD4C))VLkt z*RTz$5z5N`b6vu|3#Ps$Kgy885!TI<-^_i+uAuDlolSZl@swX57;gqth*Yx#mbNlK zN_?BHp+k7AKDE+IIacAZfa;$4@J2{gxWUj9zPoP{uX0LZo5sg&qKe8AtKns?>f#3G z7c{&)Telz_(b8aEoi}zw%*TQs606m`c=)~MPu9dwWq7I$*W^mzT;-mG?iG%>FFvtF zRt?ziOI?*&Qhh6`%;BWP)vc7j-9|fmdHQl^P?O8q;Q1*Hog_kt)2XKHhuRwYnxXEk@IgtNX%zF7#f{Oy)oezrJo!o3G^u~|}J37&3CT~hSaibgHB)z}mloJ?4L zX7 zk6QRb|84Jo)d(ydt7!PLV#^Kv6lg?>};vMzXf-xFFj*kp- zEXE7NU?wAGR*WAZYaF#niQgP%GO6A+NO#@{i!DTsJJXKkK@g?KrUk|YZtPS(tx%bDbX$=S;4>X>$A+iCtb$4a^fy_NSB zyQJ>wpCmXCwuNn|-0+9)w-V`8DS_@=%8Q{jd zK5L3cP${Qj$0e|Wb(lppqh3=prGK?(3}n%T(NmB`J7#BKyKP~CHnHdxx8=%j37!{a zL|yyvFO14nBrk7P#`+?BTog#yedzs@a>L_XzD+!gmWt#Nhb=s>2YCMmhkgp=FKR^% z30e@QZY^wFU9Z4RtZ(d74Z1p!pWo8Z8Jz!ImU@ zpO+O23-WdP_eTj=m1BiTsi(!oGjhHC12mX+AdT=P-L^)TQrp{$4hup!UX+DN2UE|y z1_ZsIvLMG{!R4ruY14g?>+dFNy_@&KJTz&8hz@<}`G$>A%Fd6zgzF+o76zph47WQ5 zxY-S)B%cL05o-4%4BQ>FLE*;NfxL2Fu?3n*@ivgmp*SyW>6ohQ9iWIb#_hQik3VZq{Eu+J<&z;{p3f9?irc8`E>dLGv`?1`Z}Z#BJLGqv_t6A|-s96%M;3 zQ~znG^@IpIMDy8Mo=~Eu+K6j%gT}A*r^*M~Zz9h@fsN|lE{>9Z)9>^9oJ3dep6j)~ z|J1<*DVaKR>1=@Ix@kr_z5g9-x{i8arWqUKU%6O+Z5S#BbN*O!pA1^?+p3vHB7>8j zIC&I!&xnWg4&qJMBZ%GWclJ5iq$Z1W#kK%$H~MM127M@6-T&nLC;mBKL_$wb59Grd zQ1ok=9cJg^iN5YQ$~oXd8RK=4Ea~oV6->By5e?w5g3VsmZ|{ zZgbN7jHT1!X>VotqOX1i0j}1N-d?T{?CEJwWTs9OlF)u0I$p}8^$Ge#e-QD1yg&mF`o;CkHwLl?n+mqQEeOJ81)R_I4 zw2r08<>JPkIoeW=UQ=q85vd|AyrFohyE;s>aSHiE`WMSb;M3OXCng16oBI}~WFfon z=jWdh*VVEs=oL7mS)|olJ1Po3|(kI2uc(N|}gJ-BtH8QrU%D-!(uZ`Po=t@ zwcdRY|4>;UPcOl|tLhW^k!8O$hdLG$K)OXnZrV=`4u8!E&JJcq+Z+5p!wr4JC3EdEdY-7xXq_lKt zwrV8rA3KT*EKhz44{B z;dPQw>Rog2V%P0rl&|O0FOl|Tp{QH>H8xh8=ELE4QTSE^L~l!HUfIqLq+`}=!N~xP ztD%p_P5LcL2Zcp>%I2Q!<@VjVa-UDkfG1%dEm(dea|>TW48>WH?9!|hlf8`abStX( z&K=&6WQf+Lkd*hv-g~gLOiaX#YEAUm2*>mKFTV@0D6-c|CHiD>K)v>Y3ZT4zu+_;->P^REcbbVEQPUmR&F?o zE6-UtRtL+RPug*B^F$qnoEo_t=f5NHlaonrZPb{JuP^w1lYJOcVf5~x2*n^@Sgu{< z#GGvQxX&D2phHp0)2L+e8?u$k<1c*j^5&?tG&7O3&4%e$xsf|a1*zonLVBG9bzqus zT^CmKbc%$@?;|9eZ3r*g)qJ}+v{Sl4Wn<-yqB822<`_?HBaaIsF9%(ULx)c^NH~+^ z11F8U7d|)tf;sQ%c@g}LLa*5?BZ9|fGA#4}nSZ+VJrTTx7v419pYb*@*uF#;M+n<{ z#Y`>Ue+c|0;1~BY{hSk5H9oy^on_1eE|-pg>OY9w}tfQHAYV{ zHVicC0Xvop8<5Y$;PGQNwosM@(&exEsTJ>2O~bJ01l(L)d(XIt37;8aY08-CAhBk&cu(MrF5(S6NvpTwxn?T47Ra<NKKI3i6rL5p8p8DOKewR!S8( z`lc%jSS~q_2F2ncZztyyBw#BW@`vA51&;*Gr_|WoER@Yw9O{7l&BJuk>%KGf=i}3} zr_6nai>hEUSYmdnQN3caQZjCF$EATVWk(1`gei7APh7%=xiWQ6ChfN4$UrnO zrKKRxD0LO`9DTQ(5&J-B%Dm#fti~cRu5)U>o={X(xohD9-Ze>sHQfFlEohf?TKFep zJEPl|@t*wTS}5;_HJ@Ja!S3t3g`D|rwtByswKH#()KXH{zVL9&o#>pFI$go*>)ney|ZU8$iYu&H>|t#kY_B)5=?L% zSWDaLN02QZ$n&*vlgcy7a!ccC^40*a9w(-qsunhXU&d&m5WUh-PYGr&Ur;-;`1+9wlaV*=6x$$X4~bMKQ`&+=sd`|nHs5w)bMrN z1q<9RFG)^NOFy}LcX-2+ut-{jwwyA^2K(sEL-v`i2YSj@3a0A2625f^GNQ?Ssf7h^ zyVaOCgTek{?dxl2?VJhrAQ6BWe?O)!`|ar}!r2ot8F}Bx%uRbYv3acY{Xy=aq(_Wa zSv9n|qKjNf_p=*_c9u0rC9O}gVN$FUWA$1R#c230D3GcdSxM}=I8yTl{jEefwS8C5 zH!p7-ChB5rTu#bVa%)>20$HH?a^ATT>dMkExJ7}sAYE@kYjg)Sf1n0z@8 zpNORzFN`U4bIpp`T=6cA4ga zX}-?tjbLK_>v!_Onm%+YY>&Ap@(Zjc_hD;i_KA*a;rIpr3cgt3lyX1H5R-E7TX}Rh zj0xE>>E?=(-Tyjs4@`5qML>>yKC^=#gFS;=(zebw#A}WwQPUvWcXF_H{_BrN%_HM` z30Y|1pD;|~1yC`UiH{M3GkD+rX*Eg5{kGG|*p@?FSFJW&IF z4N#qPX0KAfi&TafY0M4cHg<^)CP6_3zAZ}AXhJ#LJ)6wv zaKM*SsmTq)z$t|}@Ava%yc^@G;6KJ!Sf2*(bT!c#0uG_N3-&+Owr6pz=S67F;Yv?` zN@!X4sQk#P2?2NAnU=rtT_w(O1=#AT0y}((jR^Y+iiwQK<0QG;BGRv+lP!V^Xsme z?S|Vip#XMZuvWl5a-T?@d1I*}8@buxPzqpm3Mn?LGSKZY0+X*NvQ?r6=oay+=+h9IZH|#7&xM!}zVS{$iaW#xfNv+sW zjKMK9iz#Zz_CH^Bhxji;@SPBC2&ADcwI8Dwf|#3%^=Q>KdSgI-JOjX5XI=fP2q1@W zC5X{xc##V(W6F2Do1((yB^`RRc~Sv**v$o@3G{1>1!vu6eIR06J6v)ge;r6~YHLGK z9jwuoNG-Gi(E_~C8@-IQEjvce$73zBl?Abq^iD=l#kxzg6boa)Z)o=)wysw~Zl;nU z{F0zgtFj!)W~S}3KFt0m4lLY?vv;5cH}S>d%9Zm>5)b~Fp5Sv9;Fiyi8IiUR#W#~1 zT(!R>P{+^2@G=6XwR`Eaa>MGn1=RbJ^mHmXOxZWVuPcOJTEAt7MQ4YFH=#v_UVL|$ zC&>&EU?D8A^cP9+02kri?RoO>A-_-Rb;AmYWF2IOX=*A4(_izweSWgaQ%Q0`RT#Z= zPM}wjZfwnCyf|yo^+K?ZPw5V>!v4oXPj9q)*A^?{S(g*3^O|2lIqug<@yKFceU#q{IHs$a` z8c}l-8Drtml%lUF91jz-@Gq84?C;EbtC&}OW1(LQoR2vKo@+{fVr!(Z<&bwRuiK&^ zDVSuu-*BFk8r|9XzyfWVm70@Nh*h$#$1MUj7OmxFqqGc!Z|H?79CG_*3@f0IE^tHV~ZYbN| z@SeEeypL8M9X%g{+E3Z_o+zZ3LR1_XwbgH$9YwWxLc=L2keZ*nTi!oahgGzha>IeR zdb+hhYWmD|U`nBPag?eDDxzCrXS3-f#UuqRSsx|P{X%($-0J9At+I2&li6NDFRh;U zQ>qG-e@5x=>{F=Z3dKb;I*F^4E+w{g=Z|cWCZ!j8ro0{T*;Cp@%C7B1@4&QTB2Uv+ z?3T+XQbSazUn>_Q@`KN(NHtW@f;s@SiFu<)_Btuk=0-{HiPeN`Ec(%{{zBC0hDL2Q z0C0{K-VQ#!o49)=yv`0gP~Ytpq}Lv}e)d|6PcfZzN22r+ST0#~Fd#iqdtfOSyZ%SER0{C%L)noG$F3(<`^CP7s6G z%~wh%%jenmCX_Py+{MMc8wJA{nF9+L%FNdhD)51*(Pvw7Q~wOM#>TN+F(H5I5pZV( zp12S5|6Fypn|pmXG@{>S=26IbD2!RVB!XBj4Mf4uy~^DB+*xkJFm1JFRnH6{x1(26 z{dFg#U`tid_iV(N48d$Vd72@y$9T;3)|;({?_yDwnx+Q$2fB% z4yQ42lvV!)cjY^ysJ`wk?E5Y=C~dk=nTUc3#Aj=`v8m2s1F0UQagRHS!iw8V6Yl2W&-?DE-f*!d})GJBfU77rcyfa$qKBNw zIe{T;6S(!=zf_2AgbKP^I$LRG&K8(II4AEg+vJ_o+*9PF1yM|9Jmta=#Z)?1%cPi8 zybWl(8R;48EdzP0)?az&jq=$x{6<&LzP;UVzqqHnS}rX^7Vk^EJO9H?$8Ik2L#Teg z-{2#zpDey|^&XYGn!976>K$z0V(jtI$E>oxX?MvVAWiIZLmg!$vUAMR4{IDSiGNu4 zINa6Y;pgBC&d&jBF>q1-v}+qSzXMA-9PheCM<*zVQS7lGD?b}?AS5?rH4%!JUmGO6 z(_On2h)ocz5rJRsbWp>8J_N!^M#h@pKl>Rf{KlmWt!tu$`wIg{z0Ul#D z%R|ouB8|Gb;=55hV_%nONjmq8kTi~z$7+1Y?dlbE1$k! z)2}*urDXow696CM!M>Z%`4*F+8*zU1CsS6VV#cRc_1Th{IGa}m?nqEm&+Dd5Vi-{^ zIq7nW)u$Tk!3ZO6Kc?b=_0(wzj*sS)`Ogk~;~|DZ#mm-`GnNo&B>MR{`}mZI6qp!y zn|!?;KrH55Hx%pJV^o7W^f8?f1yFfIQup8i7CBmwX2qC1{9OmuG?2eSEP*Zr2@@5;!y`NNnQf)!eD(T*cS7+6=Tf(pewz6+?aAH^_ zD^mwA!u3yhF;T@ZQ%U8w?iWc)DhYnyVoxFrLho*!ce?C%`XP=1to7(=sM@MAlcNV-ne(Fvbf+ySfDJ37LxAoA z<=acTnpJd921g#Jk?%oFKkEwoa>k2UKFUj?E z5OQUI@6Msr_2QU+6d95RI+C^5tPal9jj*1bSIxHK*Z58Qq9P>|3#^@KB=0<<|_AwcX_XdVlz9sjV~0 z4qcj$p+q3?^L-nCvKBTD)_BjcM_pm8C`aLX z_ZA4MjEag@N!Xh|$A~qXSwIhl|0>sWc@8JaB;E*$A`Fr4k)U!)RZ^M*R=mKw;Xc-x zhtts6A1>t)twJuYf%vFXa<2N;&mNb!8zJn_*_hM?GFo{Gai3$Yk2bN{i=Ad zquU$6rZohoiI#c*x#o_f$WVm--;k|4p~SQd6wb$^;jT-~u_Er-kbZUj(qIRumTnGa z`mHw#5ih*P)a6v*4T_F?tXCUXxi>!XE6S*8>&+A5uj8lNlCvp=(x! zu&gJGtsg523%r=EN9|rI@9uR9xn($7+Uh-#^9Wem79M`>-JkX*Hw;mFyUgb@%j-E9 z#>!`G!L;!_J4_sWP^LKF#{T}^FO&`vGo&7<{hn>< zt_Py|<(98at(q9&0`E_vF%^RayIqtyT+6k~>{z#rodv*0i7+5p{K}nAp z-Sw>Z4_Pbw0g1=uukuTXa^tKRQ2>*PS&SseOi&#Ry?G?qvg;=rAomE{ibX%RwJ9fI zKnT+rXX)Nw3gGohs-6}P-ju}XzQtOV21{~!C z3kNo^I6C?;qY0(LP>F|hIX>2Wrt7KHA=oovhqR~n6`^TYI6R|q0UK0kG+w|z$OgW= z#-{!QlCfrrtKsYPgwgh&(jYNQ_Q$51A4uwh`&N?=$9EJ@xiyxELT<6&e@okLeQa{W z?kx)1UK5{0Pwn79*L5)iWHWKcpR6bUv5eAW{FKE13O~iP*`JRe_=4+)oAqHuer}Js z?1~9(9(j=O+sWJcql9z6y<*3yJda4HvOidcV8u?{a4b<*qnXhIzwyW%M(7C zSAo$e8!?puq*c;OQfiu$^vWG$xAp?tvZ_f;0Q2KLfXREFURi8+` zdMaBTEjK&~0sOR8X>0zRMREg|_LKtsSzD>jubd0FeqIvLbHyKbijf=B{OV$W=kV&Mcx^my3EK-R=BI~$Cr>H&OjO3g?~IRnM*v)C>A+5NkE{K%>P z#BChmObFYvg?4*rQQ?TcCxMI&-|8v@Vv0A4Ne8wv*2`h#K9d~7zO`TV$3 zUmPfj-6|CDQv=aVkH=^PbIdEtdzY9sde(;nKYdsagr07ji%N>z@ukn*$U0xLE1^+g z&K*h@$^9GgwfO$#krP4u>19hF_wqjA2&Oi%1yfHCu&dg#dS#%ha6B#f1uNTG;>=gC z4YI+M_2>W5a6k^1GD7k=TKYRRb%>y+COM-}F1Bb&NFM}(zW>!opxkmO0d%y%-yc<2 zZLDC-fEYW)tr`1#r3q!A(_w0zpEs(-;7c4C>V}?`>4{}HAMv;J85ku3ba1jB1k0UfLnuk)zcXC@Sh%us-|il#PW@Cm>HwOxWNdj}#4b~eE&+!~qf}7d8rVbD$F!8#)C>wkF25wA5H; z_avTDAjbeQ|BAhX!V^I}kK;&8(J+o&a#!@HX=BUPgi@t+zxkYJ_4@R8GppTwXJXed zg4xZ&dePj|Z0q*t3I140shUPqwaDT4xrplY2pt6oS{+edY9|d{K(C691u4@N@$S}5 zj*!4kVST^C=+C0WyEC%``EA6KcYF-|IrmJ?R-4O-+3DW2x&?PkhOz0Bo)%~ zT|@{6gWtfGu?%=m#x8Xh9rnej+m;MW%0h8#?f0ub^M4}jTn(HlbqH+PYW0=%=zDBV zZCXh{Vm$yH&nkmMaRk0PmHF@ovOhSnRaJ>?(wc^9CX1@mPbzv|k{RVmdaf-O;0Oio z10uWE1*A<1siI5)DeL*?*sy(ZlSgD>KT9%-f84R!gH_LrrS@9_r^rEo{=-(fo93E4 zNh?Bk0^Kr@A2YdIM6tWCddAU$C0aeDUy#EovOm}B7aeWq-hGhBto~FkSN%KBrhZzp zrKc^DEP|6-Y~--?ovgwEc!Nr==b-b*pM?*N!bB)y{TJaU>upu}*k(-PTACm3Zq*zR z&j35`i)oZ2JOg%KVAVBM;900x;QjedLV5*lGVu%tLaDBQGc*h)@p0(W1bR&&{V|W3 z+dDZkiznCrD@px_4OpiSPbSc^h*8L39yQQGn-Jp@jfN;09Cc7fAJf0Dr)=co-k&(z z-`O@<*`JCUNfdKys4IZ?MezxU>n_QXDCp{WW{RTs4ABfYa7}K6d;Rzrpk95ANKMfMYE`^B;}+06=_g~f2xmW z%%E)%o|nkTrZwFqYxU)9*eBouNbcA4(fG&G#4tuzMS&tH@#m>jaE5<;>qip9V3w~$ z9-&JJtOtN`en!x|k*YSXrW)lZ0fEkHeuM77Iq(PgC128i z>Ase`L(^Mn5P4fNi{t5`A9w2~(ft@EAM;}2|5GT*&2Bcw z*Gl{o6dc3ky(pnfYz?5+tyBvKvF057U)72Y8RdSB8gCjQH}rd$F^}Ld^E3e9s^B$t zJMMT6NL2Aiglj|A@+r;$l$+fv9oO1}UTgi3x`Km5r-gm8@yt+Wt$lzs1Uq)9Qp2yZ zSpneii~l>D^^zSeq$)#OZJqvH-E#AFyO}W{P0Y{tJ=E_MJqC4hu&&$lYE%PNbo(CLdxd&_**DTcZ#gBkwXj-u2Wu6e{t)3buAorZd zk@Vx=$gF`kY!h$ylwHztGnIMp!~d2$RpZkstYE|=Y-7@qkTh=_1p6{x! zK5-a2eW7k4KuGH~>QFe)lae9|rJjqX6GsMW8kE7mdxsPq^)s+|U%WGMYs2PLs zLaSWSW-`qBhc=^xIl!!pO)UX*gh6LezVut}YD$e zyc~;YP@Dbvc)?l(GS!KjxurC5jF@0 zok(m>z*L1g1(j;s*f_7BoIn}7f;cq!`!}+OR~kkC@TC!dJWuXoARwL*GAHO zM>8oTsDhW6xOqz#q|Gm#@;}nh(Q`iDD5=+Vp*BlVkt1HMlwf0EgqlNJpUAFN`6-c% z)Tnni_TNuQM`^tPoR9xZcg|-Rd5Ff2~hELopuVm zR+?S`8uHMFjyk+azR)I(ON`ax;U5Psz_VxpHL$SJnRCjTSO+73bx;MZLI!DY4t%4G)@8{J-i+uKt%w%3B! z@_nJN7KaO1EN0uTQXfLu&)RXn29;geMO{BrUQKKRc)2a{B=wVc$MU=zsCyETddRG# zCwFf3t&n?}^e*w{&-5-lMr5^v6uf<$byquY`OfY`V|?l{2^CO`?~fv@+M%ICZ)9){^o!jq_D+SN9$Bae6wl(kPM2N3&B=MuC45l= zg0}uRUpgXN82RpXxa{LQo6rCK$NqeUBge kOqoJo>v+XW=zPERixlh3{+2FGyF$ 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 Yz0UoWxe2YD`QI4opV2Ek;c)Xm0hI4(-~a#s literal 0 HcmV?d00001 diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/main.tex b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/main.tex new file mode 100644 index 00000000..74274df8 --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/main.tex @@ -0,0 +1,14 @@ +\input{header} + +\begin{document} + \input{title_page} + + \newpage + \hypertarget{intro}{} + \tableofcontents + \linespread{1} + \selectfont + + \newpage + \input{diffeqs.tex} +\end{document} diff --git a/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/title_page.tex b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/title_page.tex new file mode 100644 index 00000000..164d8d84 --- /dev/null +++ b/Lectures/3_Semester/Differential_Equations/2023_Zhukovskiy/title_page.tex @@ -0,0 +1,27 @@ +\begin{titlepage} + \clearpage\thispagestyle{empty} + \centering + + \textbf{Московский физико-технический институт \\ Физтех-школа прикладной математики и информатики} + \vspace{33ex} + + {\textbf{\FullCourseNameFirstPart}} + + \SemesterNumber\ СЕМЕСТР + \vspace{1ex} + + Лектор: \textit{\LecturerInitials} + + \includegraphics[width=0.4\textwidth]{logo_ltc.png} + + \begin{flushright} + \noindent + Автор: \href{\TGLink}{\textit{\AuthorInitials}} + \\ + \href{\GithubLink}{\textit{Проект на Github}} + \end{flushright} + + \vfill + \CourseDate + \pagebreak +\end{titlepage} diff --git a/Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/figures/001.pdf_tex b/Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/figures/001.pdf_tex new file mode 100644 index 00000000..d67d802f --- /dev/null +++ b/Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/figures/001.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file '001.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{188.61345426bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.71747798)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{001.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/figures/001.svg b/Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/figures/001.svg new file mode 100644 index 00000000..a08c4a6e --- /dev/null +++ b/Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/figures/001.svg @@ -0,0 +1,376 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/figures/001.svg.pdf_tex b/Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/figures/001.svg.pdf_tex new file mode 100644 index 00000000..3ae12021 --- /dev/null +++ b/Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/figures/001.svg.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3 (0e150ed6c4, 2023-07-21), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file '001.svg.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{160.29248455bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.8442442)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{001.svg.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/formal-languages.tex b/Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/formal-languages.tex new file mode 100644 index 00000000..f7f7e30c --- /dev/null +++ b/Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/formal-languages.tex @@ -0,0 +1,1423 @@ +\subsection{Предисловие} +К сожалению, данный конспект не закончен: его перечитывал только автор, а ещё здесь нет одной лекции (про доказательство времени работы LR--алгоритма). +В любом случае, надеюсь, что это всё же лучше, чем ничего. + +\section{Свойства конечных автоматов. Регулярные языки} +\subsection{Введение} +\textbf{Определение.} Алфавит --- непустое конечное множество $\Sigma$. + +\textbf{Определение.} Символ --- элемент алфавита. + +\textbf{Определение.} $\Sigma^*$ --- множество слов, состоящих из символов алфавита $\Sigma$. + +\textbf{Определение.} Язык $L$ над алфавитом $\Sigma$ --- подмножество $\Sigma^*$. + +\textbf{Определение.} $\varepsilon \in \Sigma^*$ --- пустое слово. + +\textbf{Определение.} Недетерминированный конечный автомат (НКА) --- кортеж $M = \left$, где: +\begin{itemize} + \item $Q$ --- конечное множество состояний. + \item $\Sigma$ --- алфавит. + \item $\Delta \subset Q \times \Sigma^* \times Q$ --- множество переходов. Неформально: переход $\left \to q_2$ означает, что мы перешли из состояния $q_1$ в состояние $q_2$ прочитав слово $w$. + \item $q_0 \in Q$ --- стартовое состояние. + \item $F \subset Q$ --- терминальные состояния. +\end{itemize} + +\textbf{Определение.} Конфигурация в автомате $M$ --- пара $\left \in Q \times \Sigma^*$. Мнемоника: сейчас находимся в состоянии $q$, осталось прочитать слово $w$. + +\textbf{Определение.} Достижимость $\vdash$ в автомате $M$ --- наименьшее транзитивное отношение над $Q \times \Sigma^*$, такое что +\[ + \forall w \in \Sigma^*, (\left \to q_2) \in \Delta, u \in \Sigma^*~(\left \vdash \left). +\] +В чём смысл: хотелось бы формализовать понятие ``из состояния $q_1$ можно прийти в состояние $q_2$, считав слово $w$``. +Вот оно и есть: $\left \vdash \left$. +Если сейчас не понятно, то это нормально. Для борьбы с этим предлагается посмотреть доказательства тривиальных фактов. + +P.S. Факт того, что это отношение вообще существует, считается очевидным. + +\textbf{Определение.} Язык $L(M)$, задаваемый автоматом $M$ --- это +\[ + \{w \in \Sigma^*~|~ \exists q_f \in F: \left \vdash \left\}. +\] +Иначе говоря, слова, которые можно прочитать, пройдя из стартового состояния в одно из конечных. + +\textbf{Определение.} Язык $L$ называется \textit{автоматным}, если существует НКА $M$, такой что $L = L(M)$. + +\textbf{Определение.} $\Delta(q_0, w_1, \dots, w_k)$ --- множество таких состояний, в которые можно прийти со словом $w_1 \dots w_k$. + +\subsection{Проверка принаждежности слова автоматному языку} +Пусть $Q_k = \Delta(q_0, w_1, \dots, w_k)$. + +\textbf{Утверждение.} +\[ + Q_{k+1} = \{q'~|~\left \to q' \in \Delta, q \in Q_k\} +\] +\textbf{Доказательство.} Докажем индукцией по $k$. +\[ + Q_{k+1} = \{q'~|~\exists q \in Q_k: \left \to q'\} = +\] +\[ + = \{q'~|~\exists q \left \vdash \left< q, \varepsilon \right>, \left< q, w_{k+1} \right> \vdash \left< q', \varepsilon \right> \} = \Delta(q_0, w_1, \dots, w_{k+1}) +\] +Таким образом, получаем алгоритм с $O(|Q|)$ дополнительной памяти и $O(|w| (|Q| + |\Delta|))$ временем работы. + +\QED + +Остаётся одна проблема: в данном алгоритме мы пользуемся тем, что все переходы однобуквенные. +Рассмотрим алгоритм преобразования автомата с не более, чем однобуквенными переходами, в автомат с однобуквенными переходами. +На самом деле, всё, что нам нужно, --- это для каждой пары состояний $(q_1, q_2)$ знать, можно ли из $q_1$ попасть в $q_2$ с пустым словом, а это легко посчитать любым обходом графа. + +Асимптотика построения автомата нас не сильно волнует, так как это нужно сделать только один раз. +Поэтому будем пытаться оптимизировать алгоритм проверки принадлежности слова автомату. + +\textbf{Определение.} Детерминированный конечный автомат $M = \left< Q, \Sigma, \Delta, q_0, F \right>$ удовлетворяет двум свойствам: +\begin{itemize} + \item $(\left< q_1, w \right> \to q_2) \in \Delta$ $\Rightarrow$ $|w| = 1$. + \item $\forall a \in \Sigma, q \in Q~|\Delta(q, a)| \le 1$. +\end{itemize} +Иными словами, все переходы однобуквенные и из каждого состояния по данной букве можно перейти не более, чем одним способом. + +В таком автомате можно проверить на принадлежность на $O(|w|)$, дополнительная память --- $O(|Q|)$, а время построения --- $O(2^{|Q|})$. + +\subsection{Приведение НКА к ДКА} +\textbf{Теорема.} Для любого НКА $M$ с однобуквенными переходами существует ДКА $M'$, такой что $L(M) = L(M')$. + +Более того, мы научимся строить автомат $M'$ конструктивно. +Идея построения: рассмотрим все подмножества $Q$ и построим на них новый автомат (да, $2^{|Q|}$ вершин). +Переходы делаются максимально простым способом: из вершины $S \subset Q$ мы проходим по букве $a$ в вершину $\Delta(S, a)$, где +\[ + \Delta(S, w) = \bigcup_{q \in S} \Delta(q, w) = \{q'~|~\exists q'' \in S: \left< q'', w \right> \vdash \left< q', \varepsilon \right> \}, +\] +то есть множество всех вершин, в которые можно попасть из какой-то вершины множества $S$ по данному слову. + +\textbf{Лемма 1.} $\Delta(q_0, wa) = \Delta(\Delta(q_0, w), a)$. Прямо из определения. + +Теперь формально: пусть $M' = \left$, где $Q' = 2^Q$, $\Delta' = \{\left< S, a \right> \to \Delta(S, a): S \subset Q\}$ и $F' = \{S \subset Q: S \cap F \ne \varnothing\}$. + +Докажем, что $M'$ детерминированный. Для этого докажем лемму: + +\textbf{Лемма 2.} $\Delta'(\{q_0\}, w) = \{\Delta(\{q_0\}, w)\}$. +Иными словами, множество вершин, в которые мы можем попасть по данному слову в новом автомате --- это в точности множество из одной вершины, отвечающей данному переходу. + +\textbf{Доказательство.} Индукцией по длине слова $|w|$. База: $w = \varepsilon$. +Тогда +\[ + \Delta'(\{q_0\}, \varepsilon) = \{S \subset Q: \left<\{q_0\}, \varepsilon \right> \vdash \left< S, \varepsilon \right>\} = \{\{q_0\}\}. +\] +Последнее равенство следует из того, что все переходы однобуквенные, никуда иначе попасть. +$\Delta(\{q_0\}, \varepsilon) = \Delta(q_0, \varepsilon) = \{q_0\}$, аналогично. +Переход: +\[ + \Delta'(\{q_0\}, wa) = \Delta'(\Delta'(\{q_0\}, w), a) = +\] +(по предположению индукции) +\[ + = \Delta'(\{\Delta(\{q_0\}, w)\}, a) = \bigcup_{T \in \{\Delta(\{q_0\}, w)\}} \Delta'(T, a) = +\] +(так как берём объединение по всем элементам одноэлементного множества) +\[ + = \Delta'(\Delta(\{q_0\}, w), a). +\] +По определению $\Delta'$ мы знаем, что для $S \subset Q$ верно $\Delta'(S, a) = \{\Delta(S, a)\}$. +Применяя это к $S = \Delta(\{q_0\}, w)$, получаем +\[ + \Delta'(\Delta(\{q_0\}, w), a) = \{\Delta(\Delta(\{q_0\}, w), a)\} = \{\Delta(\{q_0\}, wa)\}. +\] + +\textbf{Следствие 1.} Автомат $M'$ детерминированный. + +\textbf{Следствие 2.} Автоматы $M$ и $M'$ эквивалентны. + +\textbf{Доказательство.} +\[ + w \in L(M) \iff \Delta(q_0, w) \cap F \ne \varnothing \iff \Delta(\{q_0\}, w) \cap F \ne \varnothing \iff +\] +\[ + \iff \Delta(\{q_0\}, w) \in F' \iff \{\Delta(\{q_0\}, w)\} \cap F' \ne \varnothing \iff +\] +(по лемме) +\[ + \iff \Delta'(\{q_0\}, w) \cap F' \ne \varnothing \iff w \in L(M'). +\] + +\QED + +\textbf{Теорема.} Для любого ДКА можно построить эквивалентный ПДКА. +Просто добавим стоковую вершину, из которой все рёбра ведут в неё саму и не являющуюся терминальной (то есть, если прийти в эту вершину, то попадём в бесконечную петлю). + +\textbf{Теорема.} ПДКА замкнуты относительно конкатенации, объединения, итерации Клини, пересечения (строим декартово произведение), дополнения (меняем терминальные и нетерминальные состояния), разность (пересечение с дополнением), дополнения (меняем завершающие и незавершающие состояния). + +Для доказательства пересечения нужно доказать, что $\left< (q_0, p_0), w \right> \vdash_{M \times M'} \left< (q, p), \varepsilon \right>$ тогда и только тогда, когда состояния по каждой из координат достижимы в автоматах по отдельности. + +\subsection{Теорема Клини} +\textit{Множество регулярных языков совпадает со множеством автоматных языков}. + +Регулярные $\subset$ Автоматные --- очевидно, нужно только доказать базу (научиться строить автомат для одного символа и $\varepsilon$), а переход --- по свойствам автоматных языков. +В обратную сторону интереснее. + +\textbf{Определение.} Регулярный автомат --- автомат $M = \left< Q, \Sigma, \Delta, q_0, F \right>$, всё то же самое, но $\Delta \subset Q \times R(\Sigma) \times Q$, где $R(\Sigma)$ --- множество регулярных выражений над $\Sigma$. +В таком автомате $\vdash_M$ определяется, как наименьшее рефлексивное транзитивное соотношение, такое что $\forall \left< q_1, r \right> \to q_2, \forall u \in \Sigma^*, w \in L(r)$ выполнено $\left< q_1, wu \right> \vdash \left< q_2, u \right>$, то есть на рёбрах написаны регулярные выражения, и мы уже подставляем слова из порождённого им языка. + +\textbf{Утверждение 1.} Множество НКА является подмножеством множеством регулярных автоматов. Очевидно, так как слово --- это регулярное выражение. + +\textbf{Утверждение 2.} Всякий НКА задаётся регулярным автоматом с одним завершающим состоянием. Аналогично утверждению 1. + +\textbf{Утверждение 3.} Всякий регулярный автомат можно задать регулярным выражением. + +\textbf{Доказательство.} Возьмём регулярный автомат с одним завершающим состоянием. +Удалим кратные рёбра, это делается заменой двух рёбер на ребро с регулярным выражением --- суммой слов на этих рёбрах. +Если $|Q| \ge 3$, то существует вершина $q$, не являющаяся ни стартовой, ни терминальной (случай $|Q| \le 2$ рассмотрим позже). +Ещё, чтобы не разбирать случаи, добавим в каждой вершине петлю с единицей в неё саму, если петли не было. + +Рассмотрим произвольные $q_1, q_2$, такие что есть переходы $\left< q_1, \alpha \right> \to q$, $\left< q, \gamma \right> \to q_2$, $\left< q, \beta \right> \to q$. +Тогда любое слово $w$, такое что $\left \vdash \left$, можно представить в виде $w = xyz$, таком что $\left< q_1, xyz \right> \vdash \left< q, yz \right> \vdash \left< q, z \right> \vdash \left< q_2, \varepsilon \right>$. +Следовательно, $x \in L(\alpha)$, $y \in L(\beta^*)$, $z \in L(\gamma)$, и $w = xyz \in L(\alpha \beta^* \gamma)$, поэтому можно сделать переход из $q_1$ в $q_2$ напрямую: $\left \to q_2$. +Проведём такие рёбра для всех пар вершин, удалим вершину $q$ и продолжим удалять, пока не останется не более двух вершин. + +База индукции доказывается разбором случаев: одна терминальная вершина, две вершины с первой терминальной, две вершины со второй терминальной, рёбра между могут быть, могут не быть (петли есть у всех вершин, кратных рёбер нет по первому шагу доказательства). + +\QED + +\subsection{Доказательство неавтоматности языков} +Глобально есть 3 способа, рассмотрим первые два: + +\textbf{Лемма.} (О разрастании, о накачке) Пусть $L$ --- автоматный язык. Тогда +\[ + \exists P: \forall w \in L (|w| \ge P) \Rightarrow (\exists x, y, z: w = xyz, |xy| \le P, |y| \ne 0, +\] +\[ + \forall k \in \mathbb N~(xy^kz \in L)). +\] + +\textbf{Доказательство.} Пусть $M$ --- НКА с однобуквенными переходами, задающий $L$. +Положим $P = |Q|$, рассмотрим произвольное слово $w \in L$, такое что $|w| \ge P$. +Рассмотрим состояния, по которым мы прошли, чтобы вывести $w$, --- $q_0, q_1, \dots, q_P$ --- их хотя бы $|Q| + 1$, поэтому какое-то точно встречается хотя бы 2 раза. +Пусть $q_j$ --- первое состояние, которое встретилось во второй раз, $q_i$ --- его первое вхождение. +Тогда в качестве $x$ можно взять слово, полученное из $q_0 \dots q_i$, в качестве $y$ --- слово из $q_i \dots q_j$. +Их длина не превосходит $P$, так как по построению все состояния $q_0 q_1 \dots q_{j-1}$ различны. + +\QED + +\textbf{Замечание.} $k$ может быть равно нулю! В подавляющем большинстве случаев хватает $k > 0$, но есть задачи, в которых это принципиально. + +Отрицание леммы позволяет доказывать неавтоматность языков. Рассмотрим, как именно, на классическом примере: + +\textbf{Пример.} $L = \{a^nb^n~|~n \ge 0 \}$. Зафиксируем $P$ и рассмотрим слово $w = a^Pb^P \in L$. +Теперь заметим, что, какое бы подходящее разбиение $w = xyz$ мы ни взяли, $xy$ будет состоять только из букв $a$, так как $|xy| \le P$. +Следовательно, при $k \ne 1$ количество букв не сойдётся, и язык не автоматен. + +\QED + +Теперь второй способ: + +\textbf{Утверждение.} Если $L$ --- язык, $R$ --- регулярное выражение и $L(R) \cap L$ --- неавтоматный язык, то $L$ неавтоматный. +Действительно, по контрапозиции, ибо автоматные языки замкнуты относительно пересечения. + +\textbf{Пример.} $L = \{w: |w|_a = |w|_b\}$. +Рассмотрим язык $L \cap L(a^*b^*)$ --- это в точности язык из примера выше. +Следовательно, $L$ не автоматен. + +\QED + +\subsection{Проверка автоматов на эквивалентность} +Пусть есть два ПДКА $M_1$ и $M_2$, хотим проверить, правда ли, что $L(M_1) = L(M_2)$. +Можно воспользоваться следующим свойством: +\[ + L(M_1) \subset L(M_2) \iff L(M_1) \cap \overline{L(M_2)} = \varnothing. +\] +Доказывается кругами Эйлера. +Такой вариант можно использовать на практике, но он долгий и не имеет теоретической пользы. Поэтому будем далее рассматривать только ПДКА и вводить на них новые понятия. + +\textbf{Определение.} Пусть $L \subset \Sigma^*$, $M$ --- ПДКА для $L$. Тогда $u \sim_L v \iff \forall w \in \Sigma^* (uw \in L \iff vw \in L)$ --- отношение эквивалентности на словах (корректность очевидна). + +\textbf{Определение.} Классы эквивалентности на словах --- $\Sigma^* / \sim_L := \{\{u~|~u \sim_L v \}~|~v \in \Sigma^* \}$. + +\textbf{Определение.} Эквивалентность состояний: $q_1 \sim_M q_2 \iff \forall w \in \Sigma^* (\Delta(q_1, w) \in F \iff \Delta(q_2, w) \in F)$. + +\textbf{Лемма 1.} Пусть $L_q = \{w~|~ \Delta(q_0, w) = q\}$ --- слова, по которым можно прийти в состояние $q$. +Тогда каждый класс эквивалентности в $\Sigma^* / \sim_L$ --- объединение классов в $L_q$. + +\textbf{Доказательство.} Докажем, что если $u \in L_q$ и $v \in L_q$, то $u \sim_L v$. +По условию $\Delta(q_0, u) = \Delta(q_0, v) = q$. +Рассмотрим произвольное слово $w \in \Sigma^*$. +\[ + uw \in L \iff \Delta(q_0, uw) \in F \iff \Delta(\Delta(q_0, u), w) \in F \iff \Delta(q, w) \in F \iff +\] +\[ + \iff \Delta(\Delta(q_0, v), w) \in F \iff \Delta(q_0, vw) \in F \iff vw \in L. +\] + +\QED + + +\subsection{Существование МПДКА} +\textbf{Лемма 2.} Если $u \sim_L v$, то $u \in L \iff v \in L$. Следует из определения эквивалентности, если взять $w = \varepsilon$. + +\textbf{Лемма 3.} Для любого неавтоматного языка $L$ существует ПДКА $M'$, у которого все состояния попарно неэквивалентны. + +\textbf{Доказательство.} Возьмём произвольный ПДКА $M$, задающий данный язык, и построим $M' = \left$ --- автомат на классах эквивалентности состояний автомата $M$. +Положим $\Delta' = \{\left<[q], a \right> \to [\Delta(q, a)]\}$ и $F' = \{[q]~|~q \in F\}$. +Далее будем доказывать, что автомат $M'$ корректен (состояния и переходы не зависят от выбора представителя) и что он является искомым. +\begin{itemize} + \item Переходы согласованы: если $q_1 \in [q]$, то $\Delta(q_1, a) \in [\Delta(q, a)]$. + Действительно, рассмотрим слово $aw$. + \[ + \Delta(\Delta(q_1, a), w) \in F \iff \Delta(q_1, aw) \in F \iff + \] + (так как $q_1 \sim_M q$) + \[ + \iff \Delta(q, aw) \in F \iff \Delta(\Delta(q, a), w) \in F. + \] + Следовательно, $\Delta(q, a) \sim_M \Delta(q_1, a)$. + + \item Завершающие состояния согласованы: если $q_1 \in [q]$ и $q \in F$, то $q_1 \in F$. + Так как $q_1 \sim_M q$, $\Delta(q_1, \varepsilon) \in F \iff \Delta(q, \varepsilon) \in F$, остаётся вспомнить, что переходы однобуквенные. + + \item Совпадение языков: сначала покажем, что $\Delta'([q_0], w) = [\Delta(q_0, w)]$. + Докажем индукцией по $|w|$. При $w = \varepsilon$ очевидно. + Переход: пусть $w = ua$, тогда + \[ + \Delta'([q_0], ua) = \Delta'(\Delta'([q_0], u), a) = + \] + (по предположению индукции) + \[ + = \Delta'([\Delta(q_0, u)], a) = + \] + (по построению $\Delta'$) + \[ + = [\Delta(\Delta(q_0, u), a)] = [\Delta(q_0, ua)]. + \] + Теперь + \[ + w \in L(M) \iff \Delta(q_0, w) \in F \iff [\Delta(q_0, w)] \in F' \iff + \] + \[ + \iff \Delta'([q_0], w) \in F' \iff w \in L(M'). + \] + + \item Все состояния попарно неэквивалентны: пусть $[q_1] \sim_{M'} [q_2]$. + Рассмотрим произвольное слово $w$, тогда $\Delta'([q_1], w) \in F' \iff \Delta'([q_2], w) \in F'$. + Или же $[\Delta(q_1, w)] \in F' \iff [\Delta(q_2, w)] \in F'$. + Или $\Delta(q_1, w) \in F \iff \Delta(q_2, w) \in F$. + Тогда уж и $q_1 \sim_M q_2$, или же $[q_1] = [q_2]$. +\end{itemize} + +\QED + +\textbf{Теорема.} МПДКА $M$ для языка $L$ минимален тогда и только тогда, когда любые его два состояния попарно неэквивалентны и все состояния достижимы из стартового. + +\textbf{Доказательство.} Детали доказательства аналогичны лемме 3. +$\Rightarrow$. Если какие-то два состояния эквивалентны, то можно их сжать в одно. Если что-то недостижимо, то просто удалим. + +$\Leftarrow$. Пусть $M$ подходит. Тогда если $\Delta(q_0, w_1) \ne \Delta(q_0, w_2)$, то $w_1 \not\sim_L w_2$, то есть $|Q| \le |\Sigma^*/\sim_L|$. +Но аналогично можно доказать, что у любого ПДКА $M'$ выполнено $|Q'| \ge |\Sigma^*/\sim_L|$, поэтому $M$ минимален. + +\QED + +\textbf{Следствие.} Если $M$ --- МПДКА, то $|Q| = |\Sigma^*/\sim_{L(M)}|$. + +Итак, мы пришли к первому алгоритму построения МПДКА: взять произвольный ПДКА и построить ПДКА из леммы 3. + +\subsection{``Единственность`` МПДКА} +\textbf{Определение.} Автоматы $M_1$ и $M_2$ изоморфны, если существует биекция $\psi: Q_1 \to Q_2$, такая что +\begin{enumerate} + \item $\psi(q_0^1) = \psi(q_0^2)$. + \item $\psi(F_1) = F_2$. + \item Если $\Delta(q_1, a) = q_2$, то $\Delta(\psi(q_1), a) = \psi(q_2)$. +\end{enumerate} +Далее мы будем доказывать, что для любого автоматного языка существует единственный с точностью до изоморфизма МПДКА. + +\textbf{Определение.} Канонический МПДКА для автоматного языка $L$ --- это $M_0 = \left< \Sigma^*/\sim_L, \Sigma, \Delta, [\varepsilon], \{[w]: w \in L \}\right>$, где $\Delta([w], a) = [wa]$. + +Необходимо начать с корректности: +\begin{itemize} + \item Переходы не зависят от выбора представителя: если $u \sim_L v$, то $va \in [ua]$. + Из эквивалентности слов для любого $w = ax$ имеем $uax \in L \iff vax \in L$, то есть $ua \sim_L va$. + + \item Конечные состояния не зависят от выбора представителя: если $u \sim_L v$, то $u \in L \iff v \in L$. + Напрямую следует из эквивалентности слов, если взять $w = \varepsilon$. +\end{itemize} + +\QED + +\textbf{Теорема.} Любой МПДКА $M$ изоморфен каноническому МПДКА $M_0$. + +\textbf{Доказательство.} Пусть $M$ --- МПДКА. Напишем изоморфизм $\psi: Q \to \Sigma^*/\sim_L$: $\psi(q) = \{w: \Delta(q_0, w) = q\}$. +Нетрудно заметить, что $\psi$ является отображением (переводит ровно в один класс эквивалентности слов), так что теперь остаётся доказать четыре вещи: +\begin{enumerate} + \item $\psi$ --- биекция. + \item $\psi(q_0) = [\varepsilon]$. + \item $\psi(F) = F'$. + \item Согласование переходов. +\end{enumerate} +Докажем по очереди: +\begin{enumerate} + \item Так как размеры множеств совпадают, достаточно доказать инъективность. + Пусть $\psi(q_1) = \psi(q_2)$. Тогда $\exists w: \Delta(q_0, w) = q_1$ и $\Delta(q_0, w) = q_2$, то есть они равны, так как автомат детерминирован. + + \item $\psi(q_0) = \{w: \Delta(q_0, w) = q_0\}$, очевидно, что это равно $\{\varepsilon\} = [\varepsilon]$. + + \item Если $w \in \psi(q)$ и $q \in F$, то $w \in L$, а значит, $[w] \in F'$. + Если $[w] \in F'$, то $w \in L$, значит, $\exists q: \Delta(q_0, w) = q$ и $q \in F$. + Все такие $q \in F$ различные в силу детерминированности автомата. + + \item Пусть $\Delta(q_1, a) = q_2$. Так как $q_1$ достижимо (иначе не минимально), существует слово $w$, такое что $\Delta(q_0, w) = q_1$, поэтому $\psi(q_1) = [w]$. + Более того, $\Delta(q_0, wa) = \Delta(\Delta(q_0, w), a) = \Delta(q, a) = q_2$, значит, $\psi(q_2) = [wa]$. + Следовательно, $\Delta(\psi(q_1), a) = \psi(q_2)$. +\end{enumerate} + +\QED + +\textbf{Следствие.} Любые два МПДКА над одним языком изоморфны. Достаточно взять композицию их изоморфизмов с $M_0$. + +\subsection{Алгоритм минимизации ПДКА} +\textbf{Определение.} Состояния эквивалентны по словам длины не более $n$: +\[ + q_1 \sim_n q_2 \iff \forall w(|w| \le n \Rightarrow (\Delta(q_1, w) \in F \iff \Delta(q_2, w) \in F)). +\] + +\textbf{Определение.} Классы эквивалентности по словам длины не более $n$ --- аналогично. + +\textbf{Лемма.} Если $Q/\sim_i = Q/\sim_{i+1}$, то $Q/\sim_{i+1} = Q/\sim_{i+2}$. +Иными словами, если количество классов эквивалентности перестало уменьшаться, то оно стабилизировалось. + +\textbf{Доказательство.} Пусть $q_1 \sim_{i+1} q_2$, $w = aub$ --- слово длины $i + 2$, где $a, b \in \Sigma$ и $u \in \Sigma^*$. +Тогда $\Delta(\Delta(q_1, a), u) \in F \iff \Delta(\Delta(q_2, a), u) \in F$, так как $|au| = i + 1$. +Следовательно, $\Delta(q_1, a) \sim_i \Delta(q_2, a)$, и по условию из этого следует, что $\Delta(q_1, a) \sim_{i+1} \Delta(q_2, a)$, то есть $\Delta(\Delta(q_1, a), ub) \in F \iff \Delta(\Delta(q_2, a), ub) \in F$. +А это эквивалентно тому, что $\Delta(q_1, w) \in F \iff \Delta(q_2, w) \in F$, или же $q_1 \sim_{i+2} q_2$. + +\QED + +\textbf{Теорема.} $q_1 \sim q_2 \Leftarrow q_1 \sim_{|Q| - 2} q_2$. + +\textbf{Доказательство.} Изначально (по словам длины 0) имеется всего два класса эквивалентности: $F$ и $Q \setminus F$. +При увеличении длины слов количество классов либо увеличивается, либо полностью перестаёт увеличиваться. +Следовательно, так как классов эквивалентности не может быть больше $|Q|$, такие увеличения произойдут не более $|Q| - 2$ раз. + +\QED + +\sloppy Таким образом, мы получили алгоритм минимизации ПДКА за $O(|Q| (|Q| + |\Delta|))$. +Для проверки состояний $q_1$ и $q_2$ на эквивалентность по словам длины не более $i + 1$ достаточно проверить, что для всех $a \in \Sigma$ состояния $\Delta(q_1, a)$ и $\Delta(q_2, a)$ эквивалентны по словам длины не более $i$, что делается простой динамикой. + +\textbf{Теорема.} (Майхилла-Нероуда) $L$ автоматный тогда и только тогда, когда он содержит конечное количество классов эквивалентности $\Sigma/\sim_L$. + +\textbf{Доказательство.} $\Rightarrow$. Если $L$ автоматный, то существует МДПКА с конечным числом состояний, являющихся классами эквивалентности. + +$\Leftarrow$. Канонический МПДКА в этом случае существует, его и берём. + +\QED + +Данная теорема и является ранее обещанным третьим способом доказательства неавтоматности языка. + +\textbf{Пример.} $L = \{a^{2^k}~|~k \ge 0\}$ неавтоматный. Найдём бесконечное число классов эквивалентности. +Возьмём $u_k = a^{2^k} \in L$, тогда при $n \ne m$ $u_n \not\sim u_m$, поэтому классов эквивалентности хотя бы счётное число. + +\section{Грамматики} +\textbf{Пример.} Предложения в русском языке: Sent $\to$ NounGroup VerbGroup. +NounGroup $\to$ Subj, Subj Adj, Adj, Subj, и так далее. + +\textbf{Определение.} Порождающая грамматика --- $G = \left$, где $|N| < \infty$, $\Sigma \cap N = \varnothing$, $|\Sigma| < \infty$, $|P| < \infty$. +Здесь $N$ --- нетерминалы, $\Sigma$ --- алфавит, $P \subset ((N \cap \Sigma)^+ \setminus \Sigma^*) \times (N \cup \Sigma)^*$ --- правила, $S \in N$ --- стартовый нетерминал. + +\textbf{Пример.} Обратно к предложениям в русском языке. $S = $ Sent, $P = \{\text{Sent} \to \text{NG $\cup$ VG $\dots$} \}$, $N = \{\text{Sent, NG, VG, Subj, Adj}\}$, $\Sigma = \{\text{Noun}, \text{Verb},\\ \text{Preposition}, \dots \}$. + +\textbf{Пример.} $G = \left< N, \Sigma, P, S \right>$, где $N = \{S, A, B\}$, $\Sigma = \{a, b\}$, $P$ состоит из правил: $S \to AB$, $A \to aBB$, $BB \to Bb$, $Bb \to a$. +Тогда $S \vdash AB \vdash aBBB \vdash aBBb \vdash aBbb \vdash aab$. +Но мы забыли определить $\vdash$. + +\textbf{Определение.} $\vdash_G$ --- наименьшее рефлексивное транзитивное отношение, такое что +\[ + \forall \phi, \psi \in (N \cup \Sigma)^*, \forall \alpha \to \beta \in P ~(\phi\alpha\psi \vdash_G \phi\beta\psi). +\] + +\textbf{Определение.} Язык, задаваемый грамматикой --- $L(G) = \{w: S \vdash_G w\}$. + +\textbf{Соглашение.} Заглавные буквы --- нетерминалы, строчные --- терминалы, греческие --- произвольные последовательности. + +\textbf{Определение.} Иерархия Хомского --- разграничение классов грамматик по виду правил: +\begin{itemize} + \item Порождающие грамматики --- любые правила. + \item Контекстно-зависимые грамматики --- грамматики, все правила которых имеют вид $\phi A\psi \to \phi\alpha\psi$, $\alpha \ne \varepsilon$. + \item Контекстно-свободные --- грамматики, все правила которых имеют вид $A \to \alpha$. + \item Праволинейные грамматики --- правила имеют вид $A \to wB$, $A \to w$, где $w \in \Sigma^*$. +\end{itemize} + +\textbf{Пример.} $\{a^nb^n\}$. Этот язык можно задать грамматикой $S \to aSb$ и $S \to \varepsilon$. + +\textbf{Утверждение.} Праволинейные эквивалентны НКА, КС эквивалентны МП-автоматам, КЗ эквивалентны ограниченным недетриминированным машинам Тьюринга, порождающие --- машинам Тьюринга. +Доказывать будем только про праволинейные и КС. + +\textbf{Теорема.} Множество автоматных языков эквивалентно множеству языков, задаваемых праволинейными грамматиками. +Идея доказательства: нетерминалы праволинейной грамматики и состояния НКА очень похожи друг на друга. + +\textbf{Доказательство.} $\Leftarrow$. Положим $M = (N \cup \{q_f\}, \Sigma, \Delta, S, \{q_f\})$. +Здесь +\[ + \Delta = + \left\{ + \begin{array}{l} + \left< A, w \right> \to B: (A \to wB) \in P \\ + \left \to q_f: (A \to w) \in P + \end{array} + \right\} +\] +Теперь докажем эквивалентность индукцией по длине вывода в грамматике, то есть $\left \vdash_M \left \iff A \vdash_G wB$ и $\left \vdash_M \left \iff A \vdash_M w$. +Здесь нужно тоже доказывать в обе стороны, но далее будет только доказательство $\Leftarrow$ (обратно аналогично) + +База: $A \vdash_0 wB$, тогда $w = \varepsilon$ и $B = A$, а $\left \vdash_M \left< A, \varepsilon \right>$ верно по рефлексивности. + +Переход: рассмотрим последний шаг. 1) $A \vdash uC \vdash_1 uvB$, тогда $\left< A, u \right> \vdash \left$ по предположению индукции и $\left \vdash \left$, так как существует правило $C \to vB$. +Дальше по транзитивности. + +2) $A \vdash uV \vdash_1 uv$, тогда $\left \vdash \left$ по предположению индукции и $\left \vdash \left< q_f, \varepsilon \right>$, так как существует правило $V \to v$. + +$\Rightarrow$. Построим грамматику $G$, такую что для всех $(\left \to B) \in \Delta$ мы добавляем правило $A \to wB$, а для завершающего состояния $q$ --- правило $q \to \varepsilon$. +Формальное доказательство --- индукция по длине вывода с рассуждениями, аналогичными выше. + +\QED + +\textbf{Определение.} Дерево вывода КС-грамматики --- это не дерево, но последовательность слов из $(N \cup \Sigma)^*$, каждый из элементов последовательности получается заменой одного символа из $N$ на соответствующую правую часть правила грамматики. + +\textbf{Определение.} Правостороннее (левостороннее) дерево вывода --- дерево вывода, где на каждом шаге заменяется самый правый (левый) нетерминал. + +\textbf{Пример.} $S \to aSb$, $S \to \varepsilon$. +Напишем дерево вывода для $aabb$: $S \vdash aSb \vdash aaSbb \vdash aabb$. +В виде картинки, + +\begin{tikzpicture} + \node (0){$S$}; + \node (2)[below of = 0]{$S$}; + \node (7)[below of = 2]{$S$}; + \node (5)[below of = 7]{$\varepsilon$}; + \node (1)[left of = 2]{$a$}; + \node (3)[right of = 2]{$b$}; + \node (4)[left of = 7]{$a$}; + \node (6)[right of = 7]{$b$}; + \draw[->] + (0) edge (1) + (0) edge (2) + (0) edge (3) + (2) edge (4) + (2) edge (6) + (2) edge (7) + (7) edge (5) + ; +\end{tikzpicture} + +\textbf{Определение.} КС-грамматика называется \textit{однозначной}, если для каждого слова $w$ существует ровно одно правостороннее дерево вывода для слова $w$. + +\textbf{Определение.} Существенно неоднозначный КС-язык --- язык, для которого не существует однозначной КС-грамматики. + +\textbf{Утверждение.} КС-языки замкнуты относительно: +\begin{itemize} + \item Объединения: $S \to S_1$, $S \to S_2$. + \item Конкатенации: $S \to S_1S_2$. + \item Итерации Клини: $S \to S_1S$, $S \to \varepsilon$. +\end{itemize} +Про остальные операции позже. + +\section{Нормальная форма Хомского} +\textbf{Определение.} КС-грамматика $G$ \textit{находится в нормальной форме Хомского}, если её правила имеют один из следующих видов: +\begin{itemize} + \item $A \to a$, где $A \in N, a \in \Sigma$. + \item $A \to BC$, где $A \in N$; $B, C \in N \setminus \{S\}$. + \item $S \to \varepsilon$. +\end{itemize} + +\textbf{Теорема.} Для любой КС-грамматики $G$ существует КС-грамматика $G_7$ в нормальной форме Хомского, такая что $L(G) = L(G_7)$. +Откуда 7? В алгоритме будет 7 шагов. + +\subsection{Шаг 1: удаление непорождающих символов} +\textbf{Определение.} Символ $y \in N$ называется \textit{порождающим}, если существует слово $w \in \Sigma^*$, которое выводится из $y$. + +Пусть $G_1$ --- грамматика $G$ без непорождающих символов. +Докажем, что $L(G) = L(G_1)$. +$L(G_1) \subset L(G)$ --- очевидно. В обратную сторону: пусть $w \in L(G) \setminus L(G_1)$. +Как это могло произойти? В случае, если $S \vdash \phi A \psi \vdash w$, где $A$ --- непорождающий. +Тогда $w = w_1 u w_2$, где $\phi \vdash w_1$, $\psi \vdash w_2$ и $A \vdash u$, то есть из $A$ всё-таки что-то вывели. +Можно сделать поиском в ширину по обратным рёбрам: запускаемся из всех терминалов и добавляем в очередь те нетерминалы, из которых можно вывести строку $\alpha \in (N \cup \Sigma)^*$, состоящую из терминалов и порождающих символов. + +Время работы: $O(|P|)$. + +\subsection{Шаг 2: удаление недостижимых символов} +\textbf{Определение.} Символ $D \in N$ называется \textit{достижимым}, если существует $\phi, \psi \in (N \cup \Sigma)^*$, такие что $S \vdash \phi D \psi$. + +Удаляем недостижимые символы, получаем грамматику $G_2$. +Нужно доказать две вещи: грамматики совпадают и не появились непорождающие символы. + +Первое. $L(G_2) \subset L(G_1)$ очевидно. Обратно, пусть $w \in L(G_1) \setminus L(G_2)$. +Тогда существует недостижимый $B$, такой что $S \vdash \phi B \psi \vdash w$, то есть $B$ достижим. + +Второе. Пусть $B$ стал непорождающим, но он достижим. +Тогда существует недостижимый $C$, такой что $B \vdash \phi C \psi \vdash w$, то есть $C$ достижим. + +Тоже делается поиском в ширину за $O(|P|)$. + +\subsection{Шаг 3: удаление смешанных правил} +\textbf{Определение.} Правило \textit{смешанное}, если в правой части есть и терминал, и нетерминал. + +Будем для каждого смешанного правила $A \to BcDe$ ставить правила $A \to BCDE$, $C \to c$ и $E \to e$. +Доказательство корректности --- в качестве упражнения. + +Время работы --- $O(|P|)$. + +\subsection{Шаг 4: длинные правила} +Вместо правила $A \to A_1A_2A_3A_4$ сделаем правила $A \to A_1C_1$, $C_1 \to A_2C_2$, $C_2 \to A_3C_3$, $C_3 \to A_3A_4$. +Корректность очевидна. + +Время работы --- $O(|P|)$. + +\subsection{Шаг 5: удаление $\varepsilon$-порождающих} +\textbf{Определение.} $A \in N$ называется $\varepsilon$-\textit{порождающим}, если $A \vdash \varepsilon$. +Их можно найти аналогично порождающим символам. + +\textbf{Алгоритм.} Если $(A \to BC) \in P$ и $C \vdash \varepsilon$, то добавим правило $A \to B$. Аналогично добавим $A \to C$ при необходимости. +После этого удалим все правила вида $E \to \varepsilon$. +Полученную грамматику обзовём $G_5$. + +\textbf{Утверждение.} $L(G_5) = L(G_4) \setminus \{\varepsilon\}$. + +\textbf{Доказательство.} Будем доказывать вложение в обе стороны. + +$(L(G_4) \setminus \{\varepsilon\}) \subset L(G_5)$: индукцией по длине вывода. +Пусть $A \vdash_{G_4} w \ne \varepsilon$. +База: если $w$ --- буква, то такие правила мы не трогали, так что $A \vdash_{G_5} w$. + +Переход: пусть $A \vdash_{G_4, 1} BC \vdash_{G_4} w_1 w_2 = w$ (случай $A \vdash_{G_4, 1} B \vdash_{G_4} w$ аналогичен). +Рассмотрим случаи: +\begin{enumerate} + \item $w_1 \ne \varepsilon$, $w_2 \ne \varepsilon$, тогда по предположению индукции $B \vdash_{G_5} w_1$ и $B \vdash_{G_5} w_2$, поэтому $A \vdash_{G_5} BC \vdash_{G_5} w_1w_2 = w$. + \item $w_1 = \varepsilon$. Тогда $B$ --- $\varepsilon$-порождающий и $(A \to C) \in P(G_5)$ (правила $G_5$). + По предположению индукции имеем $C \vdash_{G_5} w_2$, поэтому $A \vdash_{G_5} C \vdash_{G_5} w_2 = w$. + \item $w_2 = \varepsilon$ --- аналогично. +\end{enumerate} + +$(L(G_4) \setminus \{\varepsilon\}) \supset L(G_5)$: вновь индукцией по длине вывода. Пусть $A \vdash_{G_5} w$. +База аналогична, переход: +\begin{enumerate} + \item $A \vdash_{G_5, 1} BC \vdash_{G_5} w_1w_2 = w$, где $B \vdash_{G_5} w_1$ и $C \vdash_{G_5} w_2$. + Тогда по предположению индукции $B \vdash_{G_4} w_1$ и $C \vdash_{G_4} w_2$ и $BC \vdash_{G_4} w$. + \item $A \vdash_{G_5, 1} B \vdash_{G_5} w$. + По предположению индукции $B \vdash_{G_4} w$. + Как могло появиться правило $(A \to B) \in P(G_5)$? + Либо оно было в $G_4$, либо $A \vdash_{G_4} BD$, где $D \vdash_{G_4} \varepsilon$, либо то же самое для $A \vdash_{G_4} DB$. + В первом случае всё очевидно, второй: $A \vdash_{G_4} BD \vdash_{G_4} B \vdash_{G_4} w$. +\end{enumerate} + +\QED + +Время работы: $O(|P|)$. + +\subsection{Шаг 6: добавление $S \to \varepsilon$} +Заводим новый нетерминал $S'$ и делаем его стартовым. +Добавляем правило $S' \to S$ и, если $S \vdash \varepsilon$, добавим $S' \to \varepsilon$. + +\subsection{Шаг 7: удаление унарных правил} +\textbf{Определение.} Унарное правило --- правило вида $A \to B$. + +Если у нас есть цепочка $A_1 \to A_2 \to \dots \to A_k$, то просто сожмём промежуточные состояния аналогично удалению $\varepsilon$-переходов в автомате. + +Время работы: $O(|P| \cdot |N|)$. + +\subsection{Применение} +\textbf{Замечание.} Первые два шага нужны были просто для того, чтобы ``убрать мусор``. + +Важное практическое применение --- Алгоритм Кока-Янгера-Касами проверки принадлежности слова грамматике. +Заведём динамику $dp[A][i][j]$ --- правда ли, что можно вывести подотрезок $[i, j]$ слова $w$ из символа $A$. +Засчёт НФ Хомского нам достаточно пытаться разбить отрезок только на два подотрезка, так что получается обычная динамика по подотрезкам. +Это самый простой алгоритм, работающий за $O(|N|^3 |P|)$. + +\textbf{Лемма.} (О разрастании) Пусть $L$ --- КС-язык. Тогда +\[ + \exists p: \forall w \in L: |w| \ge p~ \exists x, u, y, v, z \in \Sigma^*: w = xuyvz, |uv| > 0, |uyv| \le p, +\] +\[ + \forall k \in \mathbb N~xu^kyv^kz \in L. +\] + +\textbf{Доказательство.} Пусть $G$ --- грамматика, задающая $L$, в нормальной форме Хомского, $p = 2^{|N|}$ (множество нетерминалов). +Положим $h(w)$ --- высота дерева вывода слова $w$. +Тогда если $|w| = 1$, то $h(w) = 1$, если $|w| = 2$, то $h(w) \ge 2$, и в общем случае $h(w) \ge \log_2(|w|) + 1$. +Возьмём слово $w$, такое что $|w| \ge p$. +Так как $|w| \ge 2^{|N|}$, $h(w) \ge |N| + 1$, то есть существует нетерминал $A$, который встречается дважды при выводе одного символа. +Возьмём самый глубокий такой нетерминал. +Пусть мы прошли по цепи $S \vdash xAz \vdash xuAvz \vdash xuyvz$, то есть $A \vdash uAv \vdash uyv$. +Так как этот нетерминал самый глубокий из повторяющихся, в выводе $A \vdash uyv$ все нетерминалы на каждом пути от $A$ до терминала различны, иначе мы бы нашли повторяющийся глубже $A$. +Следовательно, аналогично рассуждениям выше $|uyv| \le 2^{|N|} = p$. + +\QED + +\textbf{Пример.} $\{a^nb^nc^n: n \in \mathbb Z^+\}$ не является контекстно-свободным. +Возьмём $p$ из леммы и слово $w = a^pb^pc^p$, тогда $w = xuyvz$, и $|uyv| \le p$, поэтому в $uyv$ не могут быть три различные буквы. +Из этого тривиально строится противоречие. + +\textbf{Следствие 1.} КС-языки не замкнуты относительно пересечения, так как $\{a^nb^nc^n\} = \{a^nb^nc^k\} \cap \{a^kb^nc^n\}$. + +\textbf{Следствие 2.} КС-языки не замкнуты относительно дополнения. Пример: $\Sigma^* \setminus \{a^nb^nc^n\}$. + +\section{Алгоритм Эрли} +Ещё один алгоритм проверки принадлежности слова КС-грамматике. + +\textbf{Определение.} Ситуация --- $(A \to \alpha \cdot \beta, i, j)$, где $i, j \in [0, |w|]$, $i$ --- позиция родителя, $j$ --- текущая позиция в дереве обхода, $A \to \alpha \beta$ --- правило грамматики, $\cdot$ --- текущая позиция в разборе правила. + +\textbf{Определение.} Ситуация $(A \to \alpha \cdot \beta, i, j)$ \textit{достижима}, если она выводится алгоритмом Эрли. $D_j$ --- множество всех достижимых ситуаций с фиксированным $j$. + +Соответственно смысл алгоритма заключается в том, чтобы постепенно найти все достижимые ситуации. Для этого используются следующие операции: +\begin{itemize} + \item Scan: мы находимся в ситуации $(A \to \alpha \cdot a \beta, i, j)$ и $w_j = a$. + Тогда можно подвинуть текущую позицию и перейти в $(A \to \alpha a \cdot \beta, i, j + 1)$. + Название следует из того, что мы считываем один символ. + \item Predict: войти в поддерево. Пусть ситуация $(A \to \alpha \cdot B \beta, i, j)$ достижима. + Тогда для всех правил $B \to \gamma$ мы объявляем достижимыми ситуации $(B \to \cdot \gamma, j, j)$. + \item Complete: выйти из поддерева. Если $(B \to \gamma \cdot, k, j) \in D_j$ и $(A \to \alpha \cdot B \beta, i, k) \in D_k$, то объявляем $(A \to \alpha B \cdot \beta, i, j) \in D_j$. +\end{itemize} + +Как можно заметить из переходов, чтобы найти все достижимые ситуации, достаточно перебирать все $D_j$ в порядке возрастания $j$: если мы найдём новую достижимую ситуацию, то она точно не будет в предыдущих множествах. +Соответственно так и будем перебирать все множества $D_j$, а в них --- ситуации, пытаясь из каждой сделать Scan, Predict и Complete. +(Изначально достижима ровно одна ситуация --- $(S' \to \cdot S, 0, 0)$) + +\subsection{Корректность} +Пока что непонятно, какую связь ситуации имеют с выводимостью слова в грамматике. Её устанавливает следующая + +\textbf{Лемма.} Cитуация $(A \to \alpha \cdot \beta, i, j)$ достижима тогда и только тогда, когда $\exists \psi \in (N \cup \Sigma)^*, \alpha \vdash w[i,j)$, такие что $S' \vdash w[0,i) A \psi \vdash_1 w[0,i) \alpha \beta \psi$. +Иными словами, существует вывод, при котором мы выводим $w[0,i)A$, как подстроку, и после можем раскрыть до $w[0,i) \alpha \beta \vdash w[0,j) \beta$. + +Мотивация леммы --- достижимость ситуации $(S' \to S \cdot, 0, |w|)$ (подробнее после доказательства). + +\textbf{Доказательство.} $\Rightarrow$. Индукцией по количеству шагов в алгоритме. База: $(S' \to \cdot S, 0, 0)$ --- стартовая ситуация. +Тогда, подставляя $i = 0$, $\alpha = \psi = \varepsilon$, получаем $S' \vdash w[0,0) S' \varepsilon \vdash_1 \cdot S$. +Переходы. +\begin{itemize} + \item Scan. После него будет $(A \to \alpha \cdot \beta, i, j + 1)$. + Тогда была ситуация $(A \to \alpha \cdot a\beta, i, j)$ и $w_j = a$. + По предположению индукции $S' \vdash w[0,i) A \psi \vdash_1 w[0,i) \alpha \beta \psi$, так что $\alpha \vdash[i,j)$. + Тогда $\alpha a \vdash w[i,j + 1)$ --- берём в качестве нового $\alpha$. + \item Predict: пусть мы перешли из $(A \to \alpha \cdot B \gamma, i, j)$ с правилом $B \to \beta$ в ситуацию $(B \to \cdot \beta, j, j)$. + По предположению индукции $\exists \psi: \alpha \vdash w[i, j)$, такое что $S' \vdash w[0, i) A \psi \vdash_1 w[0, i) \alpha B \gamma \psi$. + Так как $\alpha \vdash w[i, j)$, $S' \vdash w[0, j) B \gamma \psi \vdash_1 w[0, j) \beta \gamma \psi$. + Теперь берём в утверждении $\alpha = \varepsilon$, $\beta = \beta$, $\psi = \gamma \psi$ и получаем искомое. + \item Scan: пусть у нас есть ситуации $(B \to \gamma \cdot, k, j)$ и $(A \to \alpha \cdot B \beta, i, k)$. + Из предположения индукции $\gamma \vdash w[k, j)$, $\alpha \vdash w[i, k)$, $\exists \psi_1, \psi_2: S' \vdash w[0, k) B \psi_1 \vdash_1 w[0, k) \gamma \psi_1$ и $S' \vdash w[0, i) A \psi_2 \vdash_1 w[0, i) \alpha B \beta \psi_2$. + + Хотим для ситуации $(A \to \alpha B \cdot \beta, i, j)$ найти $\psi_3$ и доказать $\alpha B \vdash w[i, j)$. + Первое очевидно: $\psi_3 = \psi_2$. + Второе тривиально: $\alpha B \vdash \alpha \gamma \vdash w[i, j)$. + +\end{itemize} + +$\Leftarrow$. Будем делать индукцию по тройке $(j, k + e, e)$ в лексикографическом порядке, где $j$ --- позиция, $k + e$ --- длина полного вывода до $j$, $e$ --- длина вывода от $i$ до $j$. +База: $S' \vdash_0 w[0,i) A \psi$, тогда $i = 0$, $A = S'$ и $\psi = \varepsilon$. +Дальше: $w[0,i) A \psi \vdash_1 w[0,i) \alpha \beta \psi \vdash_0 w[0,i) w[i,0) \beta \psi$. +То есть $\alpha \vdash_0 w[i,0)$, поэтому $\alpha = \varepsilon$ и $\beta = S$. +Берём ситуацию $(S' \to \alpha \cdot \beta, 0, 0) = (S' \to \cdot S, 0, 0)$, которая у нас уже есть. + +Переход. Пусть $S' \vdash w[0,i) A \psi \vdash_1 w[0,i) \alpha \beta \psi$ и $\alpha \vdash_l w[i,j)$. +Рассмотрим последний символ $\alpha$. Возможны три случая: +\begin{itemize} + \item $\alpha = \alpha' b$. Тогда $\alpha' \vdash w[i,j-1)$ и $w_{j-1} = b$. + Применим предположение индукции к переходу $A \to \alpha' (b\beta)$ с тройкой $(j - 1, k + l, l)$, получаем ситуацию $(A \to \alpha' \cdot b \beta, i, j - 1)$. + Тогда ситуацию $(A \to \alpha' b \cdot \beta, i, j)$ можно получить через Scan. + \item $\alpha = \alpha' B$. Рассмотрим дерево разбора: можно увидеть, что $\alpha' \vdash_t w[i,p)$, и, так как $w[i,j)$ выводится на $l$ шагов, $B \vdash_1 \gamma \vdash_{l-t-1} w[p,j)$. + Тогда, применяя предположение индукции для перехода $B \to \gamma \varepsilon$ и тройки $(j, k + l, l - t - 1)$, получаем ситуацию $(B \to \gamma \cdot, p, j)$. + Применяя предположение к правилу $A \to \alpha' (B \beta)$ с тройкой $(p, k + t, t)$, получаем ситуацию $(A \to \alpha' \cdot B \beta, i, p)$, поэтому по операции Complete получаем ситуацию $(A \to \alpha'B \cdot \beta, i, j)$. + \item $\alpha = \varepsilon$. Имеем $S' \vdash w[0, i)A \psi$. Посмотрим на нетерминал, который вывел $A$: $S' \vdash w[0, p) B \psi'$ и существует правило $B \to \gamma A \phi$. + Тогда $\gamma \vdash_t w[p, i)$. + Применяем предположение индукции к $B \to \gamma (A\phi)$ с тройкой $(i, k - 1, t)$ (второй элемент --- $k - 1$, так как это момент до раскрытия $A$). + Получаем ситуацию $(B \to \gamma \cdot A \phi, p, i)$ и, делая Predict с переходом $A \to \varepsilon \beta$, приходим в $(A \to \cdot \beta, i, i)$. +\end{itemize} + +\QED + +\textbf{Корректность алгоритма.} $w \in L(G) \iff S' \vdash_1 S \vdash w[0,0)S \vdash w[0,|w|)$. +Применяя лемму, получаем, что это происходит тогда и только тогда, когда ситуация $(S' \to S, 0, |w|)$ достижима, то есть когда алгоритм возвращает \verb+true+. + +\subsection{Асимптотика в общем случае} +Рассмотрим количество ситуаций для конкретного $j$. +Количество правил --- $O(|G|)$, кандидатов в $i$ --- $O(|w|)$, поэтому $|D_j| = O(|w| \cdot |G|)$, где $|G|$ --- суммарное число символов во всех левых частях правил. + +\textbf{Определение.} $D_j[\gamma]$ --- правила вида $(A \to \alpha \cdot \gamma, i, j)$. + +Асимптотика Scan-а: просто перебираем все $D_j[\gamma]$ для фиксированного $j$, получается $O(|w| \cdot |G|)$. + +Predict-а: перебираем все правила $B \to \gamma$ и для каждого рассмотрим $D_j[B]$. Получается суммарно $O(|w| \cdot |G|^2)$. + +Complete-а: перебираем все ситуации с фиксированной позицией $i$, то есть $O(|w|^2 \cdot |G|^2)$. + +Следовательно, суммарно по всем позициям получается $O(|w|^3 \cdot |G|^2)$. + +\subsection{Асимптотика для однозначных грамматик} +Утверждается, что если грамматика однозначна, то алгоритм Эрли работает за $O(|w|^2 \cdot |G|^2)$. Понятно, что достаточно улучшить оценку для Complete-ов, чем мы сейчас и займёмся. +Дополнительно удалим непорождающие нетерминалы, всё равно это предподсчёт. + +\textbf{Лемма.} Пусть $\alpha \ne \varepsilon$. Тогда алгоритм Эрли будет пытаться добавить ситуацию $(A \to \alpha \cdot \beta, i, j)$ в $D_j$ не более одного раза. + +\textbf{Доказательство.} Рассмотрим все моменты времени, когда была попытка добавить эту ситуацию. +Если $\alpha = \alpha' a$, то она могла быть добавлена только Scan-ом, причём только из ситуации $(A \to \alpha' \cdot a \beta, i, j - 1)$. + +Теперь пусть $\alpha = \alpha' B$, ситуация могла быть добавлена только Complete-ом. +Допустим, что было хотя бы две попытки из различных пар ситуаций: +\[ + \begin{cases} + (A \to \alpha' \cdot B \beta, i, k_1) \in D_{k_1} \\ + (B \to \gamma_1 \cdot, k_1, j) \in D_j + \end{cases} + \begin{cases} + (A \to \alpha' \cdot B \beta, i, k_2) \in D_{k_2} \\ + (B \to \gamma_2 \cdot, k_2, j) \in D_j + \end{cases} +\] +Заметим, что $\alpha' \gamma_1 \vdash w[i, j)$ и $\alpha' \gamma_2 \vdash w[i, j)$. +Так как мы удалили непорождающие символы, существуют $\psi$ и $\phi$, такие что $S' \vdash \phi \alpha' \gamma_1 \psi \vdash w[0, j) \psi \vdash w[0, j')$ и $S' \vdash \phi \alpha' \gamma_2 \psi \vdash w[0, j) \psi \vdash w[0, j')$. +Получаем, что если $k_1 \ne k_2$ или $\gamma_1 \ne \gamma_2$, то у строки $w[0, j')$ будет два различных дерева вывода --- противоречие с однозначностью. + +\QED + +Ещё раз вспомним, как мы оценивали Complete. +Мы перебираем все ситуации $(A \to \alpha \cdot \beta, i, j)$ в $D_j$ и для каждой из них перебираем все ситуации $(B \to \gamma \cdot, j, k)$, где $\beta = B \beta'$ (список таких ситуаций можно поддерживать, чтобы не тратить время на поиск). +Каждая пара ситуаций будет инициировать попытку добавления ситуации в $D_k$, поэтому по лемме мы суммарно переберём не более $\sum_{k=1}^{|w|} D_k$ пар, что является $O(|w|^2 |G|)$. + +\section{МП-автоматы} +\textbf{Определение.} Автомат с магазинной памятью (МП-автомат) --- это $M = \left< Q, \Sigma, \Gamma, \Delta, q_0, F \right>$, где: +\begin{itemize} + \item $Q$ --- конечное множество состояний. + \item $\Sigma$ --- конечный алфавит. + \item $\Gamma$ --- стековый (внутренний) алфавит, тоже конечен и не пересекается с $\Sigma$. + \item $\Delta \subset (Q, \Sigma^*, \Gamma^*) \times (Q, \Gamma^*)$ --- конечное множество переходов (пишем строку из $\Sigma$, снимаем со стека строку из $\Gamma$, кладём на стек строку из $\Gamma$). + \item $q_0 \in Q$ --- стартовое состояние. + \item $F \subset Q$ --- завершающие состояния. +\end{itemize} +Изначально стек пустой, для завершения чтения слова он тоже должен быть пуст. + +\textbf{Определение.} Конфигурция МП-автомата --- тройка $\left$: находимся в состоянии $q$, осталось прочитать слово $u$, на стеке лежит $\gamma$. + +\textbf{Определение.} Выводимость --- наименьшее рефлексивное транзитивное отношение, такое что для любого перехода $\left \to \left$ и для любых $v \in \Sigma^*, \eta \in \Gamma^*$ выполнено $\left< q_1, uv, \eta \alpha \right> \vdash \left< q_2, v, \eta \beta \right>$ (то есть читаем префикс слова и меняем суффикс стека). + +\textbf{Определение.} Язык, распознаваемый МП-автоматом --- это $L(M) = \{v~|~ \exists q \in F: \left< q_0, v, \varepsilon \right> \vdash \left< q, \varepsilon, \varepsilon \right>\}$. + +\textbf{Пример.} Следующие языки можно задать МП-автоматами: +\begin{itemize} + \item $\{a^n b^n~|~n \in \mathbb N\}$. + \item $\{w~|~|w|_a = |w|_b\}$ --- здесь нужно поддерживать баланс, его можно эмулировать стеком: если на стеке $n$ букв $A$, то баланс --- $+n$, если $n$ букв $B$, то --- $-n$. +\end{itemize} + +\textbf{Теорема.} Для любого МП-автомата $M$ существует эквивалентный автомат $M'$, такой что для любого перехода $\left \to \left< q_2, \beta \right>$ верно $|u| \le 1$ и $|\alpha| + |\beta| \le 1$ --- не более, чем однобуквенные переходы. + +\textbf{Доказательство.} Возьмём такой переход и надобавляем промежуточных вершин так, чтобы сначала считать слово по одному символу, потом по одной снять буквы со стека и, наконец, по одной положить буквы на стек. + +\QED + +Как может показаться из примеров, МП-автоматы могут быть эквивалентны КС грамматикам. +И это правда, дальше будем это доказывать. +\subsection{Автомат ``перенос-свёртка``} +Возьмём КС грамматику $G = \left$ и построим МП-автомат по следующему принципу (неформально): внутренний алфавит --- $N \cup \Sigma$, внешний --- $\Sigma$. +На стеке у него будут лежать правые части правил, и при переходах они будут заменяться на соответствующие левые части. +Также добавим переход считывания символа, не трогая стек. +Соответственно, если на стеке остался только $S$, то мы успешно прочитали слово. + +Теперь формально: построим автомат $M = \{\{q_0, q_1\}, \Sigma, N \cup \Sigma, \Delta, q_0, \{q_1\}\}$, где $\Delta$ состоит из правил вида: +\begin{itemize} + \item $\left \to \left< q_1, \varepsilon \right>$ --- завершающее условие, когда всё считали. + \item $\left \to \left< q_0, A \right>$ для всех правил $(A \to \alpha) \in P$ --- сворачивание правила, Reduce. + \item $\left \to \left$ для всех $a \in \Sigma$ --- считывание символа, Shift. +\end{itemize} + +Остаётся доказать, что такой автомат эквивалентен грамматике $G$. А именно, необходимо доказать следующие два факта: + +\textbf{Теорема.} +\begin{itemize} + \item $A \vdash_G w \iff \left \vdash_M \left< q_0, \varepsilon, A \right>$ --- из нетерминала выводимость эквивалентна. + \item $a \vdash_G w \iff \left \vdash_M \left< q_0, \varepsilon, a \right>$ --- из терминала выводимость эквивалентна. +\end{itemize} + +\textbf{Доказательство.} +$\Rightarrow$. Пусть $\alpha$ --- однобуквенный терминал/нетерминал. Докажем индукцией по длине вывода. +База: $\alpha \vdash_0 w$ --- верно только при $\alpha = w \in \Sigma$, переход $\left \to \left$ мы добавляли. + +Переход: теперь уже $\alpha = A$ --- нетерминал. Пусть $A \vdash_1 \alpha_1 \dots \alpha_k \vdash w_1 \dots w_k = w$. +Применяя предположение индукции ко всем $\alpha_i$, получаем $\left \vdash \left$. +Теперь у нас есть переход для правила $A \to \alpha_1 \dots \alpha_k$, поэтому $\left \vdash \left$. +Собирая вместе, получаем $\left< q_0, w, \varepsilon \right> \vdash \left \vdash \left$. + +$\Leftarrow$. Опять же индукцией по длине вывода. +База. Ноль шагов быть не может, поэтому начинаем с одного шага: +$\left \vdash_1 \left$. +Если $\alpha = a$, то по рефлексивности верно. Иначе $\alpha = A$, тогда $w = \varepsilon$ (в противном случае такого перехода нет) и этот переход соответствует правилу $A \to \varepsilon$. + +Переход: $\left \vdash \left \vdash_1 \left$ --- вновь должен быть нетерминал $\alpha = A$. +Последний переход есть в грамматике по построению, а всё остальное выводится по предположению индукции (только нужно аккуратно выделить моменты времени, когда символы $\alpha_i$ появляются на стеке). + +\QED + +Теперь остаётся доказать эквивалентность построенного автомата и грамматики. Рассмотрим слово $w$, тогда имеет место следующая цепочка эквивалентных утверждений: +\begin{itemize} + \item $w \in L(M)$. + \item $\left \vdash \left$ (определение штопора). + \item $\left \vdash \left$ (так как есть соответствующий переход из $\left$. + \item $S \vdash w$ (по теореме). + \item $w \in L(G)$ (по определению штопора у грамматик). +\end{itemize} + +\subsection{Грамматика по автомату} +Рассмотрим МП-автомат, у которого при каждом переходе либо добавляется на стек, либо снимается со стека \textbf{ровно} один символ. +У него есть переходы двух типов: +\begin{enumerate} + \item $\left \to \left$ для, возможно, пустого слова $u$ и $A \in \Gamma$. + \item $\left \to \left$ аналогично. +\end{enumerate} +Заметим, что при выводе слова мы всегда можем взаимно однозначно каждому переходу первого типа сопоставить переход второго типа. +Из этих соображений построим КС грамматику на множестве пар состояний автомата: $N = \{A_{i,j}~|~q_i,q_j \in Q\} \cup \{S\}$ +Теперь добавим правила вывода на основе выделения пары переходов, которые добавляют и снимают один и тот же символ. +А именно, если в автомате есть переходы $\left \to \left$ и $\left \to \left$, то для всех $j$ мы можем попробовать прийти из $i$ в $j$, используя два перехода выше. +Иными словами, добавляем правило $A_{i,j} \to u A_{s,t} v A_{r,j}$. +Таким образом, мы считали $u$, добавив $A$ на стек, прошли из $s$ в $t$ так, чтобы по итогу стек не изменился, сняли $A$, считав $v$, и дошли до $j$. +Остаётся добавить правила $A_{i,i} \to \varepsilon$, чтобы символы что-нибудь порождали, и $S \to A_{0,j}$ для всех завершающих $q_j$. + +По итогу вывод слова в этой грамматике выглядит примерно так: фиксируем конечное состояние $q_j$, переходим в $A_{0,j}$, выбираем путь из $q_0$ в $q_j$, разбиваем его на отрезки, не изменяющие стек, и соответствующими правилами вывода получаем этот путь. +Остаётся всего лишь показать эквивалентность этой грамматики автомату. + +\textbf{Теорема.} $A_{i,j} \vdash w \iff \left \vdash \left$. + +\textbf{Доказательство.} Индукцией по длине вывода. + +$\Rightarrow$. База: 1 шаг, то есть $A_{i,j} \vdash_1 w$. +Тогда $w = \varepsilon$, такое может быть только при $i = j$, очевидно. + +Переход: $A_{i,j} \vdash_1 uA_{s,t} v A_{r,j} \vdash u w_1 v w_2$. +По предположению $\left \vdash \left$ и $\left \vdash \left$. +Так как первый переход существует, $\left \vdash \left$ и $\left \vdash \left$. +Остаётся собрать всё в один переход. + +$\Leftarrow$. База: 0 шагов, $\left \vdash_0 \left$ --- верно только при $i = j$ и $w = \varepsilon$, такой переход имеется. + +Переход: $\left \vdash_1 \left \vdash \left \vdash_1 \left \vdash \left$ --- после первого перехода $q_i \to q_s$ должно было что-то появиться на стеке, потом это что-то должно было сняться в каком-то переходе $q_t \to q_r$, после чего можно смело идти до конца. +Остаётся применить предположение индукции: $A_{s,t} \vdash w_2$, $A_{r, j} \vdash w_4$, а для оставшихся переходов мы специально строили правило: $A_{i,j} \vdash w_1 A_{s,t} w_3 A_{r,j} \vdash w_1 w_2 w_3 w_4 = w$. + +\QED + +Для доказательства эквивалентности остаётся написать цепочку равносильных утверждений: +\begin{itemize} + \item $w \in L(M)$. + \item $\exists q_f \in F: \left \vdash \left$. + \item $\exists q_f \in F: A_{0,f} \vdash w$. + \item $S \vdash w$. + \item $w \in L(G)$. +\end{itemize} + +\section{Нормальная форма Грейбах} +\textbf{Мотивация.} КС грамматики прекрасны, но есть одна проблема: выводить слова довольно тяжело из-за того, что мы не можем знать наверняка, какой первый символ может получиться из данного нетерминала, и для вывода первого символа приходится раскрывать первые нетерминалы. +Нормальная форма Грейбах решает эту проблему: при раскрытии любого нетерминала мы точно знаем первый символ. +В частности, с помощью такой грамматики можно будет построить МП-автомат без $\varepsilon$-переходов. + +\textbf{Определение.} КС грамматика находится в \textit{нормальной форме Грейбах}, если все её правила имеют один из следующих видов ($a \in \Sigma$, $A \in N$ и $B, C \in N \setminus \{S'\}$). +\begin{itemize} + \item $A \to a$. + \item $A \to aB$. + \item $A \to aBC$. + \item $S' \to \varepsilon$. +\end{itemize} + +\subsection{Построение} +Будем переводить грамматику из НФ Хомского в НФ Грейбах. +Для этого мы будем строить новую грамматику на нетерминалах вида $B \setminus A$ --- аналог левого деления. +Хочется сделать так, чтобы $B \setminus A \vdash w \iff A \vdash Bw$. +То есть из $B \setminus A$ выводятся слова из $A$ с отрезанным префиксом из $B$. +Теперь к построению самих переходов. +Пусть $A \vdash C\alpha \vdash_1 BD\alpha$, то есть $C$ --- нетерминал, из которого выводится $B$. +Теперь найдём первую букву, которая выводится из $D$: пусть $D \vdash E\beta \vdash_1 e\beta$. +Так, мы хотим, чтобы $B \setminus A \vdash e \beta \alpha$. +Тогда и добавим правило $B \setminus A \to e(E \setminus D)(C \setminus A)$ --- если у нетерминалов в правой части переходы корректны, то $E \setminus D \vdash \beta$ и $C \setminus A \vdash \alpha$, как и хотелось. +Теперь ещё для красоты добавим $A \setminus A \to \varepsilon$. + +Однако у нас всё ещё нет правил раскрытия $S'$. +Добавим, при необходимости, правило $S' \to \varepsilon$, теперь научимся выводить непустое слово $w = aw'$, где $a \in \Sigma$, такое что $S \vdash w$. +Так как исходная грамматика была в НФ Хомского, существует нетерминал $A$, такой что $S \vdash Aw' \vdash_1 aw'$. +Соответственно остаётся добавить переход $S \to a(A \setminus S)$, и оно теперь тоже выводится. + +Казалось бы, всё, но у нас же есть запрещённый переход $A \setminus A \to \varepsilon$, да и ещё нигде не используется переход $A \to aB$ (кроме случая $A = S$)... +Обе проблемы решаются удалением $\varepsilon$-порождающих нетерминалов. + +Теперь ещё раз выпишем все построенные переходы и докажем, что мы построили то, что хотели: +\begin{itemize} + \item $S' \to a(A \setminus S')$, если $(A \to a) \in P$. + \item $A \setminus A \to \varepsilon$ для всех $A \in N$. + \item $B \setminus A \to e(E \setminus D)(C \setminus A)$, если $(E \to e), (C \to BD) \in P$. +\end{itemize} + +\textbf{Утверждение.} $B \setminus A \vdash w \iff A \vdash Bw$. + +\textbf{Доказательство.} $\Leftarrow$: индукция по длине вывода + по построению. + +$\Rightarrow$: снова индукция по длине вывода. База: $B \setminus A \vdash_1 w$, тогда $w = \varepsilon$ и $B = A$ --- верно. + +Переход: $B \setminus A \vdash_1 e(E \setminus D)(C \setminus A) \vdash euv$, то есть $w = euv$. +По предположению индукции $D \vdash Eu$ и $A \vdash Cv$. +Так как переход из $B \setminus A$ существует, существуют и переходы $E \to e$ с $C \to BD$. +Получаем $D \vdash eu$ и $A \vdash BDv \vdash Beuv = Bw$. + +\QED + +\textbf{Теорема.} Полученная грамматика эквивалентна исходной. + +\textbf{Доказательство.} Принадлежность $\varepsilon$ эквивалентна по построению. Теперь рассмотрим $w = au$, $a \in \Sigma$. +Цепочка эквивалентных утверждений: +\begin{itemize} + \item $au \in L(G)$. + \item $S \vdash au$. + \item $\exists A \in N: S \vdash Au \vdash_1 au$. + \item $\exists A \in N: S' \vdash a(A \setminus S)$, причём $S \vdash Au$ и $A \vdash a$. + \item $S' \vdash au$ (так как $S \vdash Au \iff A \setminus S \vdash u$). + \item $au \in L(G')$. +\end{itemize} + +\QED + +Остаётся убрать $\varepsilon$-переходы и получится грамматика в исходной форме. + +\textbf{Замечание.} Грамматику можно аналогичным образом привести к \textit{обратной нормальной форме Грейбах}: в ней в правых частях правил терминальный символ стоит не первым, а последним. + +\subsection{Применение} +При помощи НФ формы Грейбах можно по произвольному МП-автомату построить эквивалентный, у которого все переходы однобуквенные. +Для этого построим по нему КС грамматику, приведём её к \textbf{обратной} НФ Грейбах и по ней построим МП-автомат через перенос-свёртку. +Однако у построенного автомата всё ещё будут $\varepsilon$-переходы, ведь все сворачивания правил являются таковыми. +Но теперь вспоминаем, что у всех сворачиваний правил на конце есть терминал, и мы этот терминал должны были когда-то считать, чтобы сейчас снять его со стека. +Поэтому аналогично построению КС грамматики по МП-автомату мы можем выделить пары переходов, которые работают с одним терминалом, и свернуть их в один однобуквенный переход. +Доказательство, как и идея, аналогично. + +Эта конструкция позволяет нам построить пересечение КС языка с автоматным. +Действительно, построим МП-автомат $M$ с однобуквенными переходами, НКА с однобуквенными переходами $P$ и рассмотрим их декартого произведение. +А именно, автомат $T = \left$ с переходами $\left<(q_1, p_1), a, \alpha \right> \to \left<(q_2, p_2), \beta \right>$ для переходов в исходных автоматах $(\left \to q_2) \in \Delta_M$ и $(\left \to \left) \in \Delta_P$. +Иными словами, пересекаем автоматы и добавляем к ним стек. + +Таким образом, мы ``доказали``, что пересечение КС языка и автоматного языка --- КС язык. + +\section{LR алгоритм} +Алгоритм переноса-свёртки имеет недостаток того, что действия неоднозначны и тяжело понимать, что на стеке лежит правая часть правила. +Для этого введём ситуации из алгоритма Эрли. Главная идея алгоритма --- построить ДКА над множеством ситуаций, где переход по символу --- сдвиг точки, а по $\varepsilon$ --- раскрытие нетерминала. +Тогда мы будем пытаться считывать слово, пока есть соответствующие переходы в автомате, а если нет, то будем делать Reduce --- переход по $\varepsilon$ со сворачиванием нетерминала. + +Неформально, $LR(k)$ --- это алгоритм перенос-свёртка, в котором для улучшения асимптотики мы дополнительно смотрим на $k$ букв вперёд. +В частности, $LR(0)$ --- это и есть почти алгоритм переноса-свёртки. + +\textbf{Определение.} Символ конца слова --- \$. + +\textbf{Определение.} +\[ + \First(\alpha) = \{a~|~\alpha \vdash au, u \in \Sigma^*\} \cup \{\text{\$, если $\alpha \vdash \varepsilon$}\}. +\] +Иными словами, множество первых символов, выводимых из $\alpha$. + +\textbf{Определение.} $LR(1)$ ситуация --- ситуация вида $(A \to \alpha \cdot \beta, a)$, где $a \in \Sigma \cup \{\$\}$, остальное, как в ситуациях Эрли. + +\textbf{Соглашение.} До конца этого параграфа $\vdash_r~=~\vdash$ --- правосторонний вывод. + +\textbf{Определение.} $\alpha$ --- активный префикс, если +\[ + \exists \alpha_1\beta_1 = \alpha: S' \vdash_r \alpha_1 Au \vdash_{r,1} \alpha_1 \beta_1 \beta_2 u. +\] +Как понять это определение: здесь именно принципиально, что вывод правосторонний, то есть после того, как строка $\alpha_1 \beta_1 \beta_2$ была получена из нетерминалов, в ней нетерминалы больше не раскрывались. +На самом деле, это в точности те слова, которые могут быть на стеке во время алгоритма переноса-свёртки. +В частности, префикс активного префикс сам является активным префиксом. + +\textbf{Определение.} Ситуация $(A \to \beta_1 \cdot \beta_2, a)$ допустима для активного префикса $\alpha \beta_1$, если +\[ + S' \vdash \alpha Au \vdash_1 \alpha \beta_1 \beta_2 u, a \in \First(u). +\] +То есть это ситуации, которые \textit{допускают} появление данного активного префикса. + +\textbf{Определение.} $\Adm(\alpha)$ --- множество всех допустимых ситуаций для активного префикса $\lambda$. + +\textbf{Определение.} Замыкание множества ситуаций $I$ --- наименьшее множество $J \supset I$, такое что +\[ + \begin{cases} + (B \to \gamma) \in P \\ + (A \to \alpha \cdot B \beta, a) \in J + \end{cases} + \Rightarrow (B \to \cdot \gamma, c) \in J~\forall c \in \First(\beta a). +\] +То есть наименьшее множество, которое замкнуто относительно операции Predict. Обозначение: $J = \CLOSURE(I)$. + +\textbf{Определение.} Для $\lambda \in N \cup \Sigma$ +\[ + \GOTO(I,\lambda) = \CLOSURE(A \to \alpha \lambda \cdot \beta, a~|~(A \to \alpha \cdot \lambda \beta, a) \in I). +\] +То есть ситуации из $I$ после считывания символа $\lambda$. + + +\textbf{Лемма 0.1.} Если $\alpha \vdash \beta$, то $\First(\beta) \vdash \First(\alpha)$. + +\textbf{Лемма 0.2.} Пусть $\alpha \vdash u$. Тогда для любого $a \in \First(u \gamma)$ существует $b \in \First(\gamma)$, такой что $a \in \First(\alpha b)$. + +\textbf{Доказательство.} Пусть $a \in \First(u \gamma)$. +Если $u = ax$, то $\alpha b \vdash ub \vdash axb$. +Иначе $u = \varepsilon$, тогда $a \in \First(\gamma)$. +В обоих случаях можно взять $b = a$. + +\textbf{Лемма 1.} Если $I \subset \Adm(\alpha)$, то $\CLOSURE(I) \subset \Adm(\alpha)$. + +\textbf{Доказательство.} Пусть $(A \to \beta_1 \cdot B \beta_2, a) \in I$ и $(B \to \gamma) \in P$. +Зафиксируем $c \in \First(\beta_2 a)$ и докажем, что ситуация $(B \to \cdot \gamma, c)$ лежит в $\Adm(\alpha)$. +По определению активного префикса +\[ + S' \vdash \alpha' Au \vdash_1 \alpha' \beta_1 B \beta_2 u, +\] +где $\alpha' \beta_1 = \alpha$ и $a \in \First(u)$. +Теперь раскроем $\beta_2$ и после этого $B$ (в таком порядке, ибо вывод правосторонний): +\[ + \alpha B \beta_2 u \vdash \alpha B vu \vdash_1 \alpha \gamma vu. +\] +Итак, мы получили, что +\[ + S' \vdash \alpha~B~vu \vdash_1 \alpha \varepsilon~\gamma~vu, +\] +то есть для доказательства допустимости $(B \to \cdot \gamma, c)$ осталось показать, что $c \in \First(vu)$. +Всё, что мы знаем про $c$, --- это $c \in \First(\beta_2 a)$, где $\beta_2 \vdash v$ и $a \in \First(u)$. +Здесь помогает факт, что $v$ мы выбираем сами. +Если существует $v = cx$, такое что $\beta_2 \vdash v$, то берём его, и тогда $c \in \First(v) = \First(vu)$. +В противном случае $\beta_2 \vdash \varepsilon$, тогда берём $v = \varepsilon$, и в этом случае $c = a \in \First(u) = \First(vu)$. + +\QED + +\textbf{Теорема 1.} Пусть $X_1 \dots X_k$ --- непустой активный префикс. Тогда +\[ + \Adm(X_1 \dots X_k) = \GOTO(\Adm(X_1, \dots, X_{k-1}), X_k). +\] + +\textbf{Доказательство.} $\subset$. Пусть $(A \to \beta_1 \cdot \beta_2, a) \in \Adm(X_1 \dots X_k)$. +По условию существует вывод $S' \vdash X_1 \dots X_i A u \vdash_1 X_1 \dots X_k \beta_2 u$, то есть $\beta_1 = X_{i+1} \dots X_k$ и $a \in \First(u)$. +Пусть $d$ --- длина вывода выше. +Рассмотрим 2 случая. + +При $i < k$: тогда рассматриваемая ситуация имеет вид $(A \to \beta_1' X_k \cdot \beta_2, a)$, что очевидно лежит в правом множестве. + +При $i = k$: тут придётся доказывать индукцией по $d$. База доказана выше, теперь переход. +Рассматриваемая ситуация имеет вид $(A \to \cdot \beta_2, a)$ --- здесь как раз нужно воспользоваться тем, что справа замыкание. +Рассмотрим нетерминал $B$, из которого вывелся $A$, а именно, +\[ + S' \vdash X_1 \dots X_j B u_2 \vdash_1 X_1 \dots X_k A \gamma u_2 \vdash X_1 \dots X_k A u. +\] +Получается, что в грамматике существует правило $B \to X_{j+1} \dots X_k A \gamma$. +Пусть $u = u_1 u_2$, где $\gamma \vdash u_1$. +Разбором случаев $|u_1| = 0$ и $|u_1| > 0$ можно доказать, что найдётся символ $c$, такой что $(B \to X_{j+1} \dots X_k \cdot A \gamma, c) \in \Adm(X_1 \dots X_k)$ и $a \in \First(\gamma c)$. +По предположению индукции $(B \to X_{j+1} \dots X_k \cdot A \gamma, c) \in \GOTO(\Adm(X_1 \dots X_{k-1}), X_k)$. +Таким образом, по определению замыкания ситуация $(A \to \cdot \beta_2, a)$ тоже там лежит. + +$\supset$. Пусть $(A \to \beta_1 \cdot X_k \beta_2, a) \in \Adm(X_1 \dots X_{k-1})$. +Заметим, что +\[ + \GOTO(\{(A \to \beta_1 \cdot X_k \beta_2, a)\}, X_k) = \{(A \to \beta_1 X_k \cdot \beta_2, a)\} \subset \Adm(X_1, \dots, X_k), +\] +просто по определению. +Получается, что $\GOTO(\Adm(X_1 \dots X_{k-1}), X_k)$ --- это замыкание множества, лежащего в $\Adm(X_1 \dots X_k)$, то есть оно и само там лежит. + +\QED + +\textbf{Лемма 2.} $\Adm(\varepsilon) = \CLOSURE(\{(S' \to \cdot S, \$ )\})$. + +\textbf{Доказательство.} $\supset$: заметим, что $(S' \to \cdot S, \$) \in \Adm(\varepsilon)$. +Действительно, $S' \vdash_0 S' \varepsilon \vdash_1 S \varepsilon$. +Дальше по лемме 1. + +$\subset$: пусть $(A \to \cdot \beta, a) \in \Adm(\varepsilon)$ (точка должна быть в начале, напрямую из определения). +Тогда $S' \vdash_d Au \vdash_1 \beta u$, и $a \in \First(u)$. +Докажем индукцией по $d$. При $d = 0$: $S' \vdash_0 Au$, поэтому $A = S'$ и $u = \varepsilon$, так что $\beta = S$. +Получаем $S' \vdash S' \varepsilon \vdash S \varepsilon$ и $a = \$$, так что $(A \to \cdot \beta, a) = (S' \to \cdot S, \$)$. + +Переход. Найдём нетерминал, из которого вывелся $A$: пусть +\[ + S' \vdash Bu_2 \vdash_1 A \gamma u_2 \vdash A u_1 u_2 \vdash_1 \beta u_1 u_2 = \beta u. +\] +То есть $A$ было получено из какого-то правила $B \to A \gamma$. +По предположению индукции мы знаем, что для всех $c \in \First(u_2)$ выполнено $(B \to \cdot A \gamma, c) \in \CLOSURE(\{(S' \to \cdot S, \$)\})$. +Но мы также знаем, что $a \in \First(u) = \First(u_1 u_2)$. +Тут снова надо перебрать случаи $|u_1| = 0$ и $|u_1| > 0$, но по итогу $a \in \First(\gamma c)$. +Следовательно, по определению замыкания $(A \to \cdot \beta, a) \in \CLOSURE(\{(S' \to \cdot S, \$ )\})$. + +\QED + +\subsection{Принцип работы} +Сам алгоритм работает предельно просто. +Будем поддерживать стек: он работает почти так же, как и в алгоритме переноса-свёртки, но теперь ещё мы после добавления символа (терминала при Shift и нетерминала при Reduce) будем класть состояние, в которое мы приходим после перехода. +Как инвариант, в самом низу стека лежит стартовое состояние $q_0$. +Дополнительно будем поддерживать переменную $pos$ --- количество символов, которые мы считали. + +Теперь на каждой итерации алгоритма мы при помощи $pos$ можем получить следующий символ (у нас же $LR(1)$, как ни как), а с вершины стека можно достать текущее состояние. +Как понять, делать в данный момент Shift или Reduce? Очень просто: у нас есть оракул, который по текущему состоянию и следующей букве говорит, что делать. + +Shift: просто увеличиваем $pos$ и кладём на стек считанный символ и новое состояние (которое нам сообщил оракул). + +Reduce: пусть мы сворачиваем правило $A \to \alpha$. Сначала снимаем со стека $2|\alpha|$ символов (правая часть правила и промежуточные состояния). +Теперь с вершины стека берём новое состояние $q_{new}$ и спрашиваем у оракула, что делать: по паре $(q_{new}, A)$ он нам говорит, в какое состояние переходить, или говорит, что слово не лежит в грамматике. + +Осталось только понять, откуда достать этого оракула. +В науке он носит название \textit{LR-таблица}. + +\subsection{Построение LR-таблицы} +Сама LR-таблица представляет из себя ДМП-автомат, состояниями $Q$ которого являются $\CLOSURE(I)$ для всех подмножеств $I$ LR-ситуаций, которые можно получить многокрактным переходом к $\GOTO(q, \lambda)$ для $\lambda \in (\Sigma \cup N)$ из стартового состояния (их много, но конечно много). +Стартовое состояние $q_0 = \CLOSURE(\{(S' \to \cdot S, \$)\})$, или, по лемме 2, $\Adm(\varepsilon)$, но это понадобится позже. +В алгоритме нам нужна была помощь свыше в двух местах. +Пусть $\Action(q, a)$ --- действие, которое нужно совершить в состоянии $q$ со следующим символом $a$, $\Goto(q, A)$ --- состояние, в которое пойти после Reduce-а с левой частью $A$. + +$\Goto(q, A)$ определяется довольно простым образом: если $\GOTO(q, A) \in Q$, то переходим в него, иначе слово не подходит. + +$\Action(q, a)$ определяется чуть-чуть сложнее. Если по какой-то ситуации во множестве $q$ можно сделать Shift (то есть существует ситуация $(A \to \alpha \cdot a \beta, b) \in q$) и $\GOTO(q, a) = q_j \in Q$, то делаем Shift в состояние $q_j$. +Если по какой-то ситуации можно сделать Reduce (существует $(A \to \beta \cdot, a) \in q$), то делаем Reduce по соответствующему правилу грамматики. +Если $(S' \to S \cdot, \$) \in q$, то говорим, что слово лежит в грамматике. +Если ничего из вышеперечисленного не случилось, то говорим, что слово не лежит. +Но! Если подошло хотя бы 2 опции, то сразу говорим, что LR-таблицу невозможно построить. + +Что же делать, если таблица не построилась? Отправить пользователя переделывать грамматику. + +\textbf{Определение.} $LR(1)$ грамматика --- грамматика, для которой успешно удалось построить LR-таблицу. +Так, $LR(1)$ парсер работает только с $LR(1)$ грамматиками. + +\subsection{Доказательство корректности} +\textbf{Лемма 3.} Во время работы LR-алгоритма если на стеке находится $q_0X_0 \dots X_kq_k$, то для всех $j \le k$ верно $q_j = \Adm(X_1 \dots X_j)$. + +\textbf{Доказательство.} По индукции. База --- лемма 2. Переход. +Если последнее действие --- Shift: тогда по предположению $q_{k-1} = \Adm(X_1 \dots X_{k-1})$, после чего мы пошли в $\GOTO(q_{k-1}, X_k)$ (следует из построения таблицы). +По теореме 1 доказали. + +Если последнее действие --- Reduce, то мы сначала удалили несколько символов, но потом опять же пошли в $\GOTO(q_{k-1}, X_k)$, так что аналогично. + +\QED + +\textbf{Лемма 3.2.} Если после прочтения $u$ на стеке есть $q_0X_1 \dots X_k q_k$, то $X_1 \dots X_k \vdash u$. + +\textbf{Доказательство.} Докажем индукцией по числу шагов в алгоритме $d$. +База: $d = 0$. $X_1 \dots X_k = \varepsilon$, $u = \varepsilon$, поэтому утверждение леммы --- $\varepsilon \vdash \varepsilon$. + +Переход: рассмотрим последнюю операцию. Если это Shift $a$, то $X_k = a$. +По предположению индукции $X_1 \dots X_{k-1} \vdash v$, то есть $X_1 \dots X_k \vdash u = va$. +Если же это Reduce по правилу $X_k \to Y_1 \dots Y_r$, то по предположению индукции $X_1 \dots X_{k-1} Y_1 \dots Y_r \vdash u$. +Остаётся собрать воедино: +\[ + X_1 \dots X_{k} \vdash_1 X_1 \dots X_{k-1} Y_1 \dots Y_r \vdash u. +\] + +\QED + +\textbf{Теорема.} Алгоритм корректен, то есть если алгоритм принял $w$, то $w \in L$. + +\textbf{Доказательство.} Действительно, если алгоритм принял, то по итогу стек имеет вид $q_0 S q_1$ (по построению LR-таблицы). +По лемме 3.2 $S \vdash w$. +\QED + +\subsection{Доказательство полноты} + +\textbf{Лемма 4.} Если $S' \vdash X_1 \dots X_kv \vdash uv$, где $X_1 \dots X_k$ --- активный префикс, то после прочтения $u$ на стеке в какой-то момент будет $q_0X_1q_1 \dots X_kq_k$. + +\textbf{Доказательство.} Докажем индукцией длине вывода $X_1 \dots X_k \vdash u$. +База: $u = \varepsilon$, $k = 0$. +Тогда $S' \vdash \varepsilon v$ и подходит начальное состояние стека $q_0$. + +Переход: есть два варианта в зависимости от того, является ли терминалом $X_k$. +При $X_k = a$: $u = u'a$ и $S' \vdash X_1 \dots X_{k-1} av \vdash u'av$. +По предположению индукции после прочтения слова $u'$ на стеке будет $q_0X_1 \dots X_{k-1}q_{k-1}$. +Так как $S' \vdash X_1 \dots X_{k-1} av$, из состояния $q_{k-1}$ можно сделать Shift по букве $a$. +И раз LR таблица построилась, это и есть то, что алгоритм сделает. + +При $X_k = A$: +\[ + X_1 \dots X_{k-1} X_k \vdash_1 X_1 \dots X_{k-1} Y_1 \dots Y_r \vdash u. +\] +Применим предположение индукции к последней части вывода, тогда после прочтения $u$ стек в какой-то момент имел вид $q_0 X_1 \dots X_{k-1} q_{k-1} Y_1 q_1' \dots Y_r q_r'$. +По условию $S' \vdash X_1 \dots X_k v \vdash_1 X_1 \dots X_{k-1} Y_1 \dots Y_r v$. +Значит, для $b \in \First(v)$ ситуация $(X_k \to Y_1 \dots Y_r \cdot, b)$ лежит в $\Adm(X_1 \dots X_{k-1} Y_1 \dots Y_r)$, что по лемме 3 равно $q_r'$. +Следовательно, алгоритм в состоянии $q_r'$ сделает свёртку по правилу $X_k \to Y_1 \dots Y_r$, получая искомый стек. + +\QED + +\textbf{Теорема.} Полнота алгоритма: если $w \in L$, то алгоритм его примет. + +\textbf{Доказательство.} Заметим, что $S$ --- активный префикс и $S' \vdash S \vdash w$. +Поэтому по лемме 4 после прочтения $w$ на стеке будет $q_0 S q_1$, и алгоритм, по построению LR таблицы, его примет. + +\QED + +\textbf{Упражнение.} Если LR(1)-алгоритм работает на грамматике, то она однозначна. +Нетрудно доказать от противного, что возникнет конфликт. + +\section{Конечные преобразователи} +До сих пор все наши структуры брали на вход слово и возвращали Да/Нет. Теперь будем рассматривать структуру, которая принимает слово и возвращает слово. + +\textbf{Определение.} Конечный преобразователь (КПтель) --- это $M = \left< Q, \Sigma, \Gamma, \Delta, q_0, F \right>$, где $Q$ --- состояния, $\Sigma$ --- входной алфавит, $\Gamma$ --- выходной алфавит, $\Sigma \subset (Q \times \Sigma^*) \times (Q \times \Gamma^*)$, $q_0$ --- стартовое состояние, $F$ --- конечные состояния. +Переходы: $\left< q_1, u \right> \to \left< q_2, v \right>$, где $u \in \Sigma^*$ и $v \in \Gamma^*$. + +\textbf{Определение.} Конфигурация КПтеля $M$ --- это тройка $\left< q, u, v \right>$, где $q \in Q$, $u \in \Sigma^*$, $v \in \Gamma^*$. +Здесь $u$ --- это то, что осталось прочесть, а $v$ --- то, что мы уже написали. + +\textbf{Определение.} Выводимость --- наименьшее рефлексивное транзитивное отношение, такое что для любого $\left \to \left< q_2, v \right> \in \Delta$ верно, что для всех $x \in \Sigma^*$, $y \in \Gamma^*$ выполнено $\left \vdash \left< q_2, x, yv \right>$. + +Возникает проблема, что из одного слова может получиться несколько разных слов, поэтому вводится + +\textbf{Определение.} Конечное преобразование (КП) --- это +\[ + \psi = \{(u, v) \in \Sigma^* \times \Gamma^*: \exists q \in F: \left< q_0, u, \varepsilon \right> \vdash \left< q, \varepsilon, v \right>\}. +\] +Это является соответствием, а если $|\psi(u)| = 1$ для всех $u$, то --- отображением. + +\textbf{Утверждение 1.} Для любого КПтеля существует эквивалентный КПтель, для которого у всех переходов сумма длин стираемого и записываемого слова равна единице. +Просто добавим промежуточные вершины. + +\textbf{Теорема.} Пусть $\psi$ --- конечное преобразование. Тогда +\begin{enumerate} + \item Область определения --- регулярный язык. + \item Область значений --- регулярный язык. + \item Если $R$ --- регулярный язык, то $\psi|_R: R \to \Gamma^*$ --- тоже конечное преобразование. +\end{enumerate} + +\textbf{Доказательство.} 1) Посмотрим на автомат, состоящий только из входов. 2) Только из выходов. + +3) Если $R$ --- регулярный язык, то существует ДКА $M$, его задающий. Также по утверждению 1 существует КПтель с однобуквенными переходами $T$. +Построим декартово произведение этих автоматов $T_M$. +Переходы: +\begin{itemize} + \item $\left<(p_1, q_1), a \right> \to \left<(p_2, q_2), \varepsilon \right>$, если есть переходы $\left \to p_2$ и $\left \to \left$. + + \item $\left<(p_1, q_1), \varepsilon \right> \to \left<(p_1, q_2), b \right>$, если есть переход $\left \to \left$. +\end{itemize} +Лемма: +\[ + \left<(q_1, p_1), u, \varepsilon \right> \vdash_{T_M} \left<(q_2, p_2), \varepsilon, v \right> \iff + \begin{cases} + \left< q_1, u, \varepsilon \right> \vdash_T \left< q_2, \varepsilon, v \right> \\ + \left< p_1, u \right> \vdash_M \left< p_2, \varepsilon \right> + \end{cases} +\] + +Слева направо индукцией по длине вывода: очень много букв и очень мало смысла. +Справа налево: индукцией по сумме длин вывода в $T$ и $M$. +База очевидна. Переход: пусть +\[ + \left< q_1, u, \varepsilon \right> \vdash \left< q_3, u_3, v_3 \right> \vdash_1 \left< q_2, \varepsilon, v \right>. +\] +Мы могли либо считать букву $a$, либо написать букву $b$. +Первый случай: последний переход --- $\left< q_3, a \right> \to \left< q_2, \varepsilon \right>$, тогда $u_3 = a$ и $v_3 = v$. +Значит, $u = u'a$. Так как $\left< p_1, u \right> \vdash \left$, существует $p_4$, такой что $\left< p_1, u'a \right> \vdash \left \vdash_1 \left< p_2, \varepsilon \right>$. +Применяем предположение индукции: $\left<(q_1, p_1), u', \varepsilon \right> \vdash \left<(q_3, p_4), \varepsilon, v \right>$. +По итогу +\[ + \left<(q_1, p_1), u'a, \varepsilon \right> \vdash \left<(q_3, p_4), a, v \right> \vdash_1 \left<(q_2, p_2), \varepsilon, v \right>. +\] +Второй случай: последний переход --- $\left \to \left$. +Тогда $u_3 = \varepsilon$ и $v = v_3b$. +Также мы знаем, что $\left \vdash \left$, поэтому по предположению индукции +\[ + \left<(q_1, p_1), u, \varepsilon \right> \vdash \left<(q_3, p_2), \varepsilon, v_3 \right> \vdash_1 \left<(q_2, p_2), \varepsilon, v \right>. +\] + +Теперь с доказанной леммой остаётся написать цепочку эквивалентных утверждений: +\begin{itemize} + \item $(u, v) \in \psi|_R$. + \item Автомат $M$ принимает $u$ и $\psi(u) = v$. + \item Существуют конечные состояния $q_F$ и $p_F$, такие что $\left \vdash \left$ и $\left \vdash \left$. + \item Существует конечное состояние $(q_F, p_F)$, такое что $\left<(q_0, p_0), u, \varepsilon \right> \vdash \left<(q_F, p_F), \varepsilon, v \right>$. + \item $(u, v) \in L(T_M)$. +\end{itemize} + +\QED + +\textbf{Теорема.} (Нивá) (Nivat) Любое конечное преобразование $\psi$ можно представить в виде композиции $\psi = \eta \circ id|_R \circ \psi^{-1}$, где $\phi$ и $\eta$ --- неудлинняющие гомоморфизмы (длина образа не превосходит длину аргумента). + +\textbf{Доказательство.} Запишем КПтель с однобуквенными переходами для $\psi$. +Положим КПтели с алфавитом $\Delta$: +\[ + \phi(\left< q, u \right> \to \left< q', v \right>) = u. +\] +\[ + \eta(\left< q, u \right> \to \left< q', v \right>) = v. +\] +То есть по пути в автомате они возвращают прочитанное и написанное слово соответственно. +Теперь все корректные пути можно задать регулярным выражением, поэтому оно в качестве $id_R$ и будет ``фильтровать`` корректные входы из $\phi^{-1}$. + +\textbf{Теорема.} Пусть $\phi_1: \Sigma^* \to \Gamma^*$ и $\phi_2: \Gamma^* \to \Pi^*$ --- конечные преобразования. +Тогда $\phi_2 \circ \phi_1: \Sigma^* \to \Pi^*$ --- конечное преобразование. + +\textbf{Доказательство.} Положим $M$ --- декартово произведение конечных преобразователей для $\phi_1$ ($M_1$, состояния --- $Q$) и $\phi_2$ ($M_2$, состояния --- $P$). +Переходы: +\[ + \left\{ \left<(q_1, p_1), \varepsilon \right> \to \left<(q_2, p_2), \varepsilon \right>: \substack{\left \to \left< q_2, a \right> \\ \left \to \left< p_2, \varepsilon \right>} \right\} +\] +\[ + \cup \{ \left< (q_1, p), a \right> \to \left<(q_2, p), \varepsilon \right>: \left \to \left\} +\] +\[ + \cup \{\left<(q, p_1), \varepsilon \right> \to \left<(q, p_2), a \right>: \left \to \left< p_2, a \right>\}. +\] +Теперь докажем инвариант: +\[ + \left<(q_1, p_1), u, \varepsilon \right> \vdash_M \left<(q_2, p_2), \varepsilon, v\right> \iff \exists z \in \Gamma^*: + \begin{cases} + \left \vdash_{M_1} \left< q_2, \varepsilon, z \right> \\ + \left \vdash_{M_2} \left< p_2, \varepsilon, v \right> + \end{cases} +\] +То есть для любого преобразования существует промежуточное слово. + +$\Rightarrow$: тривиальная техника, индукция по числу шагов в $\vdash_M$. + +$\Leftarrow$: индукцией по сумме шагов в $M_1$ и $M_2$. +База: 0 шагов, $z = \varepsilon$, получаем $u = v = \varepsilon$, и промежуточное слово --- $\varepsilon$. +Переход: рассмотрим последний шаг, есть три случая. + +1) Читаем букву $a$ из $u$, тогда $u = au'$. +Тогда в первом преобразовании $\left< q_1, au', \varepsilon \right> \vdash_1 \left \vdash \left$, во втором --- $\left< p_1, z, \varepsilon \right> \vdash \left< p_2, \varepsilon, v \right>$. +Применим предположение индукции: $\left<(q_3, p_1), u', \varepsilon \right> \vdash \left<(q_2, p_2), \varepsilon, v \right>$. +Собирая всё вместе, получаем $\left<(q_1, p_1), au', \varepsilon \right> \vdash_1 \left<(q_3, p_1), u', \varepsilon \right> \vdash \left<(q_2, p_2), \varepsilon, v \right>$. + +2) Пишем букву $c$ из $v$, то есть $v = cv'$. +Во втором преобразовании $\left \vdash_1 \left \vdash \left$. +В первом --- $\left< q_1, u, \varepsilon \right> \vdash \left< q_2, \varepsilon, z \right>$. +Как видно, здесь то же самое. + +3) Пишем $b$ в $z$ и читаем из $z$. +В первом преобразовании $\left \vdash_1 \left< q_3, u, b \right>$, во втором --- $\left \vdash_1 \left \vdash \left$. +По предположению индукции $\left<(q_3, p_3), u, \varepsilon \right> \vdash \left<(q_2, p_2), \varepsilon, v \right>$. +По первому переходу имеем $\left<(q_1, p_1), u, \varepsilon \right> \vdash_1 \left<(q_3, p_3), u, \varepsilon \right> \vdash \left<(q_2, p_2), \varepsilon, v \right>$. + +Итак, инвариант доказан, теперь перейдём к доказательству совпадения языков. +По определению $(u, v) \in \psi_2 \circ \psi_1 \iff \exists (q, p) \in F: \left<(q_0, p_0), u, \varepsilon \right> \vdash \left<(q, p), \varepsilon, v \right>$. +По инварианту это эквивалентно тому, что +\[ + \exists z: + \begin{cases} + \left \vdash \left \iff (u, z) \in \psi_1 \\ + \left \vdash \left \iff (z, v) \in \psi_2 + \end{cases} +\] + +\textbf{Утверждение.} Пусть $L$ --- регулярный язык, $\psi$ --- конечное преобразование. +Тогда $\psi(L)$ регулярный. + +\textbf{Доказательство.} Разложим $\psi$ по теореме Нива: $\psi = \eta \circ id|_R \circ \phi^{-1}$. +Так как $\phi$, $\eta$ неудлинняющие, $\phi(\varepsilon) = \varepsilon$ и $\phi(a) = b$, где $b$ --- буква или $\varepsilon$. +Теперь решим уравнение $\phi(x) = \varepsilon$: $\phi(x_1) \dots \phi(x_n) = \varepsilon$, то есть все $\phi(x_i) = \varepsilon$. +Следовательно, $x = (x_1 + \dots + x_n)^* = \Theta^*$ --- все слова, дающие $\varepsilon$. + +Теперь решим уравнение $\phi(y) = b$. Имеем, что ровно одна буква перешла в $b$, а всё остальное --- в $\varepsilon$. +Положим $\Theta_b = \{x: \phi(x) = b\}$. Тогда $\phi^{-1}(b) = \Theta^* \Theta_b \Theta^*$. +Теперь возьмём регулярное выражение, задающее $L$, и заменим все символы $b$ на $\phi^{-1}(b)$. +Получили регулярное выражение, задающее $\phi^{-1}(L)$. + +Вторая часть: $id|_R(L) = L \cap R$ --- регулярно. +Третья часть: заменяем букву $b$ на $\eta(b)$. + +\textbf{Утверждение 2.} Если $L$ --- КС-язык, $\psi$ --- конечное преобразование, то $\psi(L)$ --- КС-язык. + +\textbf{Доказательство.} Пусть $G$ --- грамматика в НФ Хомского, задающая $L$. +Вновь разложим $\psi = \eta id|_R \phi^{-1}$ и имеем $\phi^{-1}(b) = \Theta^* \Theta_b \Theta^*$. +Запишем $\phi^{-1}(b)$ в виде грамматики и заменим правила: вместо $A \to a$ напишем $A \to S_a$, вместо $S \to \varepsilon$ напишем $S \to S_{\varepsilon}$, где $S_a$ --- стартовый символ в грамматике, задающей $\Theta_b$. + +Пересечение с регулярным очевидно, остаётся в конце снова взять грамматику в НФ Хомского и заменить переход $A \to a$ на $A \to \eta(a)$. + +\textbf{Лемма.} (О разрастании для КПтелей) То же самое, что и для конечных автоматов, но тут смотрим на сумму длин входа и выхода. + +\textbf{Теорема.} (Хомского-Щютценберже, слабая форма) Всякий КС язык $L$ можно получить ``рациональным`` (конструктивным) конечным преобразованием из языка $\mathcal B_k$ (язык правильных скобочных последовательностей с $k$ типами скобок) для некоторого $k$. +В частности, существует конечное преобразование $\psi$, такое что $L = \phi(\mathcal B_k)$. + +\textbf{Доказательство.} Существует МП-автомат $M = \left$ с единичными переходами. +У этого автомата переходы вида $\left< q_1, u, \varepsilon \right> \to \left< q_2, A_k \right>$ и $\left< q_1, u, A_k \right> \to \left< q_2, u \right>$ для $A_k \in \Gamma$. +Переходы первого типа представляем в виде $k$-ой открывающейся скобки, второго типа --- в виде $k$-ой закрывающейся скобки. + +\textbf{Теорема.} (Хомского-Шютценберже, сильная форма) Всякий КС язык $L$ представим в виде $L = h(\mathcal B_k \cap R)$, где $\mathcal B_k$ --- язык скобочных последовательностей, $R$ --- регулярный язык, $h$ --- гомоморфизм. +Без доказательства. diff --git a/Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/header.tex b/Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/header.tex new file mode 100644 index 00000000..bc80774c --- /dev/null +++ b/Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/header.tex @@ -0,0 +1,222 @@ +%\documentclass[a4paper,12pt, draft]{article} +\documentclass[12pt,a4paper]{article} + +%%% Работа с русским языком +\usepackage{cmap} % поиск в PDF +\usepackage{mathtext} % русские буквы в формулах +\usepackage[T2A]{fontenc} % кодировка +\usepackage[utf8]{inputenc} % кодировка исходного текста +\usepackage[english,russian]{babel} % локализация и переносы +\usepackage{indentfirst} % красная строка в первом абзаце +\frenchspacing % равные пробелы между словами и предложениями + +%%% Дополнительная работа с математикой +\usepackage{amsmath,amsfonts,amssymb,amsthm,mathtools} % пакеты AMS +\usepackage{icomma} % "Умная" запятая + +%%% Свои символы и команды +\usepackage{centernot} % центрированное зачеркивание символа +\usepackage{stmaryrd} % некоторые спецсимволы +\usepackage{dsfont} +\usepackage{amsthm} + +\renewcommand{\epsilon}{\ensuremath{\varepsilon}} +\renewcommand{\phi}{\ensuremath{\varphi}} +\renewcommand{\kappa}{\ensuremath{\varkappa}} +\renewcommand{\le}{\ensuremath{\leqslant}} +\renewcommand{\leq}{\ensuremath{\leqslant}} +\renewcommand{\ge}{\ensuremath{\geqslant}} +\renewcommand{\geq}{\ensuremath{\geqslant}} +\renewcommand{\emptyset}{\ensuremath{\varnothing}} + +\DeclareMathOperator{\sgn}{sgn} +\DeclareMathOperator{\ke}{Ker} +\DeclareMathOperator{\im}{Im} +\DeclareMathOperator{\re}{Re} + +\newcommand{\N}{\mathbb{N}} +\newcommand{\Z}{\mathbb{Z}} +\newcommand{\Q}{\mathbb{Q}} +\newcommand{\R}{\mathbb{R}} +\newcommand{\Cm}{\mathbb{C}} +\newcommand{\F}{\mathbb{F}} +\newcommand{\I}{\mathbb{I}} +\newcommand{\id}{\mathrm{id}} +\newcommand{\imp}[2]{ + (#1\,\,$\ra$\,\,#2)\,\, +} +\newcommand{\System}[1]{ + \left\{\begin{aligned}#1\end{aligned}\right. +} +\newcommand{\Root}[2]{ + \left\{\!\sqrt[#1]{#2}\right\} +} +\newcommand{\RR}{\R} +\newcommand{\NN}{\N} +\renewcommand{\subseteq}{\subset} +\newcommand{\sub}{\subset} +\newcommand{\sconstr}{\;\vert\;} +\newcommand{\thus}{\implies} + +\newcommand{\defeq}{\vcentcolon= } +\newcommand{\defev}{\stackrel{\Delta}{\Longleftrightarrow}} +\newcommand{\deriv}[3][1]{% + \ifthenelse{#1>1}{% + \frac{\dlta^{#1} {#2}}{\dlta {#3}^{#1}} + }{% + \frac{\dlta {#2}}{\dlta {#3}} + }% +} + +\renewcommand\labelitemi{$\triangleright$} + +\let\bs\backslash +\let\lra\Leftrightarrow +\let\ra\Rightarrow +\let\la\Leftarrow +\let\emb\hookrightarrow + +%%% Перенос знаков в формулах (по Львовскому) +\newcommand{\hm}[1]{#1\nobreak\discretionary{}{\hbox{$\mathsurround=0pt #1$}}{}} + +%%% Работа с картинками +\usepackage{graphicx} % Для вставки рисунков +\setlength\fboxsep{3pt} % Отступ рамки \fbox{} от рисунка +\setlength\fboxrule{1pt} % Толщина линий рамки \fbox{} +\usepackage{wrapfig} % Обтекание рисунков текстом + +%%% Работа с таблицами +\usepackage{array,tabularx,tabulary,booktabs} % Дополнительная работа с таблицами +\usepackage{longtable} % Длинные таблицы +\usepackage{multirow} % Слияние строк в таблице + +%%% Теоремы +\theoremstyle{plain} +\newtheorem{theorem}{Теорема}[section] +\newtheorem{lemma}{Лемма}[section] +\newtheorem{proposition}{Утверждение}[section] +\newtheorem{property}{Свойство}[section] +\newtheorem*{exercise}{Упражнение} +\newtheorem*{problem}{Задача} + +\theoremstyle{definition} +\newtheorem{definition}{Определение}[section] +\newtheorem*{corollary}{Следствие} +\newtheorem*{note}{Замечание} +\newtheorem*{reminder}{Напоминание} +\newtheorem*{agreement}{Соглашение} +\newtheorem*{example}{Пример} +\theoremstyle{remark} +\newtheorem*{solution}{Решение} + +%%% Оформление страницы +\usepackage{extsizes} % Возможность сделать 14-й шрифт +\usepackage{geometry} % Простой способ задавать поля +\usepackage{setspace} % Интерлиньяж +\usepackage{enumitem} % Настройка окружений itemize и enumerate +\setlist{leftmargin=25pt} % Отступы в itemize и enumerate + +\geometry{top=25mm} % Поля сверху страницы +\geometry{bottom=30mm} % Поля снизу страницы +\geometry{left=20mm} % Поля слева страницы +\geometry{right=20mm} % Поля справа страницы + +\setlength\parindent{15pt} % Устанавливает длину красной строки 15pt +\linespread{1.3} % Коэффициент межстрочного интервала +%\setlength{\parskip}{0.5em} % Вертикальный интервал между абзацами +%\setcounter{secnumdepth}{0} % Отключение нумерации разделов +%\setcounter{section}{-1} % Нумерация секций с нуля +\usepackage{multicol} % Для текста в нескольких колонках +\usepackage{soulutf8} % Модификаторы начертания +\mathtoolsset{showonlyrefs=true} % показывать номера формул только у тех, у которых есть ссылки по eqref +%%% Содержаниие +\usepackage{tocloft} +\tocloftpagestyle{main} +%\setlength{\cftsecnumwidth}{2.3em} +%\renewcommand{\cftsecdotsep}{1} +%\renewcommand{\cftsecpresnum}{\hfill} +%\renewcommand{\cftsecaftersnum}{\quad} + +%%% Шаблонная информация для титульного листа +\newcommand{\CourseName}{Формальные языки и трансляции} +\newcommand{\FullCourseNameFirstPart}{\so{ФОРМАЛЬНЫЕ ЯЗЫКИ И ТРАНСЛЯЦИИ}} +\newcommand{\SemesterNumber}{III} +\newcommand{\LecturerInitials}{Ахтямов Павел Ибрагимович} +\newcommand{\CourseDate}{осень 2023} +\newcommand{\AuthorInitials}{Лизюра Дмитрий} +\newcommand{\VKLink}{https://vk.com/id738720460} +\newcommand{\TGLink}{https://t.me/dimaliz} +\newcommand{\GithubLink}{https://github.com/MIPT-Group/Lectures_Tex_Club} + +%%% Колонтитулы +\usepackage{titleps} +\newpagestyle{main}{ + \setheadrule{0.4pt} + \sethead{\CourseName}{}{\hyperlink{intro}{\;Назад к содержанию}} + \setfootrule{0.4pt} + \setfoot{ФПМИ МФТИ, \CourseDate}{}{\thepage} +} +\pagestyle{main} + +%%% Нумерация уравнений +\makeatletter +\def\eqref{\@ifstar\@eqref\@@eqref} +\def\@eqref#1{\textup{\tagform@{\ref*{#1}}}} +\def\@@eqref#1{\textup{\tagform@{\ref{#1}}}} +\makeatother % \eqref* без гиперссылки +\numberwithin{equation}{section} % Нумерация вида (номер_секции).(номер_уравнения) +\mathtoolsset{showonlyrefs= true} % Номера только у формул с \eqref{} в тексте. + +%%% Гиперссылки +\usepackage{hyperref} +\usepackage[usenames,dvipsnames,svgnames,table,rgb]{xcolor} +\hypersetup{ + unicode=true, % русские буквы в раздела PDF + colorlinks=true, % Цветные ссылки вместо ссылок в рамках + linkcolor=black!15!blue, % Внутренние ссылки + citecolor=green, % Ссылки на библиографию + filecolor=magenta, % Ссылки на файлы + urlcolor=NavyBlue, % Ссылки на URL +} + +%%% Графика +\usepackage{tikz} % Графический пакет tikz +\usepackage{tikz-cd} % Коммутативные диаграммы +\usepackage{tkz-euclide} % Геометрия +\usepackage{stackengine} % Многострочные тексты в картинках +\usetikzlibrary{angles, babel, quotes} + +%\usepackage{paratype} +%\usepackage{euler} + +%\usepackage{microtype} + +%\everymath{\displaystyle} + +% https://tex.stackexchange.com/questions/44235/is-there-a-way-to-do-an-upside-down-widehat +\DeclareFontFamily{U}{mathx}{\hyphenchar\font45} +\DeclareFontShape{U}{mathx}{m}{n}{ + <5> <6> <7> <8> <9> <10> + <10.95> <12> <14.4> <17.28> <20.74> <24.88> + mathx10 + }{} +\DeclareSymbolFont{mathx}{U}{mathx}{m}{n} +\DeclareFontSubstitution{U}{mathx}{m}{n} +\DeclareMathAccent{\widecheck}{0}{mathx}{"71} + +% \usepackage{transparent} + +\usepackage{pdfpages} +\usepackage{import} +\newcommand{\QED}{$\hfill\square$} +\newcommand{\incfig}[2]{ + \def\svgwidth{#2} + \import{./figures/}{#1.pdf_tex} +} + +\DeclareMathOperator{\First}{First} +\DeclareMathOperator{\CLOSURE}{CLOSURE} +\DeclareMathOperator{\GOTO}{GOTO} +\DeclareMathOperator{\Adm}{Adm} +\DeclareMathOperator{\Action}{Action} +\DeclareMathOperator{\Goto}{Goto} diff --git a/Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/logo_ltc.png b/Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/logo_ltc.png new file mode 100644 index 0000000000000000000000000000000000000000..3938067a8136770c6ec6fe17260d39d4ab32762c GIT binary patch literal 216873 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 Tsu7 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

C`Z3B?#P9d`uo+9wzUMa~|eQn|@5t8U;V|F1{zy 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 kOqoJo>v+XW=zPERixlh3{+2FGyF$ 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 Yz0UoWxe2YD`QI4opV2Ek;c)Xm0hI4(-~a#s literal 0 HcmV?d00001 diff --git a/Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/main.tex b/Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/main.tex new file mode 100644 index 00000000..14926e0b --- /dev/null +++ b/Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/main.tex @@ -0,0 +1,14 @@ +\input{header} + +\begin{document} + \input{title_page} + + \newpage + \hypertarget{intro}{} + \tableofcontents + \linespread{1} + \selectfont + + \newpage + \input{formal-languages.tex} +\end{document} diff --git a/Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/title_page.tex b/Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/title_page.tex new file mode 100644 index 00000000..164d8d84 --- /dev/null +++ b/Lectures/3_Semester/Formal_Languages/2023_Akhtyamov/title_page.tex @@ -0,0 +1,27 @@ +\begin{titlepage} + \clearpage\thispagestyle{empty} + \centering + + \textbf{Московский физико-технический институт \\ Физтех-школа прикладной математики и информатики} + \vspace{33ex} + + {\textbf{\FullCourseNameFirstPart}} + + \SemesterNumber\ СЕМЕСТР + \vspace{1ex} + + Лектор: \textit{\LecturerInitials} + + \includegraphics[width=0.4\textwidth]{logo_ltc.png} + + \begin{flushright} + \noindent + Автор: \href{\TGLink}{\textit{\AuthorInitials}} + \\ + \href{\GithubLink}{\textit{Проект на Github}} + \end{flushright} + + \vfill + \CourseDate + \pagebreak +\end{titlepage} diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/diffeqs.tex b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/diffeqs.tex new file mode 100644 index 00000000..aa001ad6 --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/diffeqs.tex @@ -0,0 +1,1905 @@ +\section{Автономные системы} +\subsection{Основные понятия} +Пусть $\Sigma \subset \mathbb R^n$ открыто, $f: \Sigma \to \mathbb R^n$ непрерывно дифференцируема. +Рассмотрим систему +\begin{equation} + x' = f(x). +\end{equation} + +\textbf{Определение.} Такая система называется \textit{автономной}, а $\Sigma$ --- её \textit{фазовым пространством}. + +\textbf{Определение.} Пусть $x: I \to \mathbb R^n$ --- непродолжаемое решение системы (1). +Множество $\{x(t): t \in I\} \subset \mathbb R^n$ называется \textit{фазовой траекторией}. +В частности, это является проекцией графика на $\mathbb R^n$. + +\textbf{Определение.} Пусть нашлось $\widehat x \in \Sigma$, такое что $f(\widehat x) = 0$. +Тогда $x(t) \equiv \widehat x$ является решением системы (1), а $\widehat x$ называется \textit{положением равновесия}, или особой точкой, или стационарной точкой. + +\subsection{Свойства автономных систем} +\begin{enumerate} + \item Если $x: (a, b) \to \mathbb R^n$ является решением системы (1), то для любого $c \in \mathbb R$ функция $y: (a - c, b - c) \to \mathbb R^n$, $y(t) = x(t + c)$ тоже является решением. + + \item Любые две траектории либо не пересекаются, либо совпадают. + + Пусть $x(\cdot), y(\cdot)$ --- два непродолжаемых решения (1). + Предположим, что в каких-то двух точках $\tau \le s$ выполнено $x(s) = y(\tau)$. + Положим $z(t) := y(t + \tau - s)$, по первому свойству она является решением. + Более того, $z(s) = y(\tau) = x(s)$. + Так, мы нашли два решения $x$ и $z$, совпадающие в точке $s$. + По теореме о существовании и единственности $z(t) \equiv x(t)$, то есть $y(t + \tau - s) \equiv x(t)$, а значит, множества их значений --- траектории --- совпадают. + + \QED + + \item Пусть $x: \mathbb R \to \mathbb R^n$ --- решение системы (1). + Предположим, что нашлись $t_1 < t_2$, такие что $x(t_1) = x(t_2)$, причём $x$ не является константой. + Тогда $x(\cdot)$ --- периодическая функция с положительным минимальным периодом, а её траектория является замкнутой кривой без самопересечений. + Более строго, это значит, что если $x(0) = x(T)$, то $T$ --- период. + + \textbf{Доказательство.} Положим $y(t) = x(t + t_2 - t_1)$ --- является решением (1). + Более того, $y(t_1) = x(t_2) = x(t_1)$, то есть по теореме о существовании и единственности $y(t) \equiv x(t)$. + Положим $d = t_2 - t_1$, тогда это тождество переписывается в виде $x(t + d) \equiv x(t)$. + Докажем, что самопересечений нет. + Пусть $P := \{p > 0~|~x(t + p) \equiv x(t)\}$ --- это множество по доказанному точно не пусто. + + Пусть $\widehat p = \inf(P)$, докажем, что $\widehat p \in P$. + Рассмотрим последовательность $\{p_j\} \subset P$, такую что $p_j \downarrow \widehat p$ при $j \to \infty$. + Тогда для любых $t$ и $j$ выполняется $x(t + p_j) = x(t)$. + Переходя к пределу, получаем $x(t + \widehat p) = x(t)$, то есть $\widehat p \in P \cup \{0\}$. + + Докажем, что $\widehat p > 0$, от противного. + Тогда найдётся $\{p_j\} \subset P$, стремящаяся к нулю. + Это означает, что для любого $j$ выполнено $x(p_j) = x(0)$. + Записывая покоординатно, получаем, что $x_i(p_j) = x_i(0)$ для всех $i, j$. + По теореме Ролля для любого $i$ существует последовательность $\{\Theta_{i,j}\}$, стремящаяся к нулю, такая что $x_i'(\Theta_{i,j}) = 0$. + Вспомним, что мы решали уравнение $x' = f(x)$, то есть $0 = f_i(x(\Theta_{i,j}))$. + Из соображений непрерывности $f$ получаем, что $f_i(x(0)) = 0$ для всех $i$, то есть $f(x(0)) = 0$. + Следовательно, $z(t) \equiv x(0)$ --- решение системы (1) и по теореме о существовании и единственности $x(t) \equiv z(t)$, то есть $x(t)$ --- это всё-таки константа, противоречие. + + Остаётся вопрос, почему нет самопересечений. + Но это просто: в самом начале мы доказали, что если $x(t_1) = x(t_2)$, то $|t_2 - t_1|$ является периодом, из этого от противного можно доказать отсутствие самопересечений. + + \QED + + \item Траектория --- это либо точка, либо замкнутая кривая без самопересечений, либо незамкнутая кривая без самопересечений. + Последнее означает, что если $t_1 \ne t_2$, то $x(t_1) \ne x(t_2)$. + В качестве упражнения. + + \item Обозначим через $\phi(\cdot, \xi)$ непродолжаемое решение задачи Коши + \begin{equation} + \begin{cases} + x' = f(x) \\ + x(0) = \xi + \end{cases} . + \end{equation} + Пусть $\Theta$ --- область определения функции $\phi$. + Тогда $\Theta$ открыто, а $\phi$ непрерывно дифференцируема. + + Следует из зависимости решения от параметра (последний параграф третьего семестра). + + \item (Групповое свойство автономной системы) Справедливо тождество $\phi(t, \phi(s, \xi)) = \phi(t + s, \xi)$, где $(s, \xi), (t + s, \xi) \in \Theta$. + + \begin{figure}[ht] + \centering + \incfig{4-1}{0.75\linewidth} + \caption{Групповое свойство} + \end{figure} + + Как это представлять: вот у нас есть какая-то траектория, стартующая из точки $\xi$. + В точке $s$ она находится в какой-то точке $\phi(s, \xi)$, и из этой точки, как из стартовой, можно пустить ещё одну траекторию, которая в точке $t$ примет значение $\phi(t, \phi(s, \xi))$. + Но то же самое значение примет и исходная траектория в точке $s + t$. + + И при чём тут группы: рассмотрим отображения $\phi(t, \cdot): \mathbb R^n \to \mathbb R^n$ (здесь $t$ --- параметр). + Зададим операцию $\phi(t, \cdot) \circ \phi(s, \cdot) = \phi(t, \phi(s, \cdot))$. + И вот по групповому свойству множество таких отображений является абелевой группой с единицей $\phi(0, \cdot)$. + + \textbf{Доказательство.} По свойству 1 функция $t \mapsto \phi(t + s, \xi)$ является решением системы (1). + Также по определению $\phi(t, \phi(s, \xi))$ тоже является решением. + При $t = 0$: $\phi(t + s, \xi) = \phi(s, \xi)$ и $\phi(t, \phi(s, \xi)) = \phi(0, \phi(s, \xi)) = \phi(s, \xi)$. + По теореме о существовании и единственности для любого $s$ выполняется $\phi(t + s, \xi) \equiv \phi(t, \phi(s, \xi))$. + + \QED + + \textbf{Замечание.} Могут возникнуть проблемы с областями определения, но будем считать, что решения определены всюду, чтобы не заморачиваться. + +\end{enumerate} + +\subsection{Предельные множества траекторий} +Пусть $x: (t_0, +\infty) \to \mathbb R^n$ --- решение системы (1), $T$ --- его траектория. + +\textbf{Определение.} $a \in \mathbb R^n$ называется \textit{$\omega$-предельной точкой} (траектории $T$), если существует последовательность $\{t_j\} \to +\infty$, такая что $x(t_j) \to a$ при $j \to +\infty$. + +Обозначим через $\Omega(T)$ \textit{$\omega$-предельное множество} --- множество всех $\omega$-предельных точек траектории $T$. + +\textbf{Пример 1.} Пусть $n = 1$, $t_0 = 0$ и $x' = x$. +Рассмотрим решение $x(t) = e^t$, тогда $T = (1, +\infty)$. +Тогда $\Omega(T) = \varnothing$. + +\textbf{Пример 2.} То же самое, но $x' = -x$ и $x = e^{-t}$. +Тогда $T = (0, 1)$ и $\Omega(T) = \{0\}$. + +\textbf{Теорема.} (б/д) Пусть $T$ ограничена и найдётся $\varepsilon > 0$, такое что $\varepsilon$-окрестность траектории $T$ вложена в $\Sigma$ (то есть вложено с запасом). +Тогда $\Omega(T)$ непусто, ограничено, замкнуто, связно и состоит из траекторий, то есть является дизъюнктным объединением каких-то траекторий. + +\textbf{Теорема.} (Бендиксона, б/д) Предположим, что $n = 2$, $\Omega(T)$ ограничено и непусто, и на нём $f(x) \ne 0$, то есть не содержит положения равновесия. +Тогда $\Omega(T)$ --- это замкнутая траектория. + +\setcounter{equation}{0} +\section{Автономные системы на плоскости} +\subsection{Линейные автономные системы} +Рассмотрим автономную систему $x' = Ax$ или же +\[ + \begin{cases} + x_1' = a_{11} x_1 + a_{12} x_2 \\ + x_2' = a_{21} x_1 + a_{22} x_2 + \end{cases} +\] +Как минимум, у неё есть одно положение равновесия --- $x = 0$. +Будем рассматривать случаи: пусть $\lambda_1, \lambda_2$ --- собственные значения матрицы $A$. + +\subsubsection{$\lambda_1, \lambda_2 \in \mathbb R \setminus \{0\}$, $\lambda_1 \ne \lambda_2$} +Пусть $h_1$ и $h_2$ --- два собственных вектора. +Тогда в их базисе система будет иметь вид +\[ + \begin{cases} + y_1' = \lambda_1 y_1 \\ + y_2' = \lambda_2 y_2 + \end{cases} +\] +и её решением будет +\[ + \begin{cases} + y_1 = c_1 e^{\lambda_1 t} \\ + y_2 = c_2 e^{\lambda_2 t} + \end{cases} . +\] +Напишем уравнение её траектории, то есть исключим параметр $t$: +\[ + e^{\lambda_1 t} = \frac{y_1}{c_1} \Rightarrow y_2 = c_2(e^{\lambda_1 t})^{\frac{\lambda_2}{\lambda_1}} = c_2 \left(\frac{y_1}{c_1} \right)^{\frac{\lambda_2}{\lambda_1}}, +\] +при $c_1 \ne 0$, а при $c_1 = 0$ получится уравнение $y_1 = 0$. + +Теперь рассмотрим график, тут тоже есть несколько случаев. + +Первый случай: $\lambda_1 \cdot \lambda_2 > 0$. +Если $\lambda_2 > \lambda_1 > 0$, то получится портет, как на рисунке 2 справа, если $\lambda_1 > \lambda_2 > 0$, то слева. +Направление в обоих случаях от начала координат, так как собственные значения положительные. + +\begin{figure}[ht] + \centering + \incfig{knot-portrait}{0.8\linewidth} + \caption{Портрет узла} +\end{figure} + +\textbf{Определение.} Полученный портрет называется \textit{неустойчивым узлом}. + +Если $\lambda_2 < \lambda_1 < 0$ или $\lambda_1 < \lambda_2 < 0$, то получатся аналогичные портреты, но с направлением к началу координат. + +\textbf{Определение.} Полученный портрет называется \textit{устойчивым узлом}. + +Во всех случаях положением равновесия является начало координат. + +Второй случай: $\lambda_1 \cdot \lambda_2 < 0$, портрет приведён на рисунке 3. +Ориентация зависит от знаков, здесь проще подставить $t \to +\infty$, чтобы восстановить. + +\begin{figure}[ht] + \centering + \incfig{seat-portrait}{0.8\linewidth} + \caption{Портрет седла} +\end{figure} + +\textbf{Определение.} Полученный портрет называется \textit{седлом}. + +\subsubsection{$\lambda_1 = \lambda_2 = \lambda \in \mathbb R$} +Первый случай: $A$ имеет два линейно независимых собственных вектора $h_1$ и $h_2$. +Тогда аналогично первому случаю получаем, что кривая имеет вид +\[ + \begin{cases} + y_2 = \frac{c_2}{c_1} y_1, & c_1 \ne 0 \\ + y_1 = 0, & c_1 = 0. + \end{cases} +\] +График приведён на рисунке 4, направление, как обычно, к центру при $\lambda > 0$ и от центра при $\lambda < 0$. + +\begin{figure}[ht] + \centering + \incfig{dicritical-knot}{0.5\linewidth} + \caption{Дикритический узел} +\end{figure} + +\textbf{Определение.} Полученный портрет называется \textit{дикритическим узлом}. +При $\lambda > 0$ называется \textit{неустойчивым}, при $\lambda < 0$ --- \textit{устойчивым}. + +Второй случай: $h_1$ --- собственный вектор, $h_2$ --- присоединённый к нему. +Тогда в их базисе система будет иметь вид +\[ + \begin{cases} + y_1' = \lambda y_1 + y_2 \\ + y_2' = \lambda y_2. + \end{cases} +\] +Найдём решение: +\[ + \begin{cases} + y_1 = c_1 e^{\lambda t} + c_2 t e^{\lambda t} \\ + y_2 = c_1 e^{\lambda t}. + \end{cases} +\] +Выразим $t$: +\[ + e^{\lambda t} = \frac{y_2}{c_2} \Rightarrow t = \frac{1}{\lambda} \ln \left( \frac{y_2}{c_2} \right). +\] +Подставим в первое уравнение: +\[ + y_1 = c_1 \frac{y_2}{c_2} + \frac{c_2}{\lambda} \ln \left( \frac{y_2}{c_2} \right) \frac{y_2}{c_2}. +\] +График приведён на рисунке 5. При $\lambda > 0$ фазовые трактории направлены от центра и вдоль оси $Oy_1$, при $\lambda < 0$ --- к центру. + +\begin{figure}[ht] + \centering + \incfig{degenerate-knot}{0.5\linewidth} + \caption{Вырожденный узел} +\end{figure} + +\textbf{Определение.} Сей портрет называется \textit{вырожденным узлом}. Неустойчивый при $\lambda > 0$, устойчивый при $\lambda < 0$. + +\subsubsection{$\lambda_{1, 2} = \alpha \pm i \beta \in \mathbb C$} +Тогда собственные векторы имеют вид $h_{1,2} = a \pm i b$, где $a$ и $b$ --- линейно независимые векторы. +Как известно, фундаментальной системой решений здесь будет +\[ + \begin{cases} + x_1 = e^{\alpha t}(a \cos(\beta t) - b \sin(\beta t)) \\ + x_2 = e^{\alpha t}(a \sin(\beta t) + b \cos(\beta t)) + \end{cases} +\] +В базисе $a$, $b$ она имеет вид +\[ + \begin{cases} + y_1 = e^{\alpha t} + \begin{pmatrix} + \cos(\beta t) \\ + -\sin(\beta t) + \end{pmatrix} \\ + + y_2 = e^{\alpha t} + \begin{pmatrix} + \sin(\beta t) \\ + \cos(\beta t) + \end{pmatrix} + \end{cases} +\] +Собирая вместе и опуская вычисления, получаем, что решение имеет вид +\[ + y(t) = r e^{\alpha t} + \begin{pmatrix} + \cos(\beta (t - \Theta)) \\ + \sin(\beta (t - \Theta)) + \end{pmatrix} +\] +для всех $r$ и $\Theta$. +Берётся из $c_1 y_1 + c_2 y_2$, формул косинуса суммы, синуса суммы и безыдейной арифметики. +Теперь смотрим на это уравнение и разбираем случаи. + +При $\alpha = 0$ получается уравнение окружности, портрет приведён на рисунке 6. +Для определения направления лучше снова просто посмотреть на сдвиг при увеличении $t$. + +\begin{figure}[ht] + \centering + \incfig{circle-portrait}{0.5\linewidth} + \caption{Портрет центра} +\end{figure} + +\textbf{Определение.} Данный портрет называется \textit{центром}. + +При $\alpha > 0$: теперь расстояния до начала координат увеличивается с увеличением $t$, поэтому получается спираль, вращающаяся против часовой стрелки при $\beta > 0$, и по часовой --- при $\beta < 0$. +В окрестности нуля происходит бесконечное число витков (при $t \to -\infty$), поэтому там обычно график не рисуют. +Направление в обоих случаях --- от начала координат. + +\begin{figure}[ht] + \centering + \incfig{focus-portrait}{0.5\linewidth} + \caption{Портрет фокуса} +\end{figure} + +\textbf{Определение.} Полученный портрет называется \textit{неустойчивым фокусом}. + +При $\alpha < 0$ --- всё то же самое, но теперь к центру координат: при $\beta < 0$ спираль идёт против часовой стрелки, если смотреть в направлении движения к центру координат, то есть зеркально тому, что было при $\alpha > 0$ и $\beta < 0$. + +\subsection{Нелинейные автономные системы} +Пусть нам даны открытые множества $\Omega$ и $\Theta$ в $\mathbb R^2$ и отображения $f \in C^2(\Omega, \mathbb R^2)$ и $g \in C^2(\Theta, \mathbb R^2)$. +Рассмотрим системы +\begin{equation} + x' = f(x) +\end{equation} +и +\begin{equation} + y' = g(y). +\end{equation} + +\textbf{Определение.} Автономные системы (1) и (2) \textit{качественно эквивалентны}, если существует гомеоморфизм $\pi: \Omega \to \Theta$, такой что для любой траектории $X$ системы системы (1) $\pi(X)$ --- траектория системы (2). +И наоборот: для любой траектории $Y$ системы (2) $\pi^{-1}(Y)$ --- траектория системы (1). +Более того, $\pi$ и $\pi^{-1}$ сохраняют ориентацию траекторий, или же, более строго, если $X$ --- траектория (1), $x(\cdot)$ --- соответствующее решение (1), $y(\cdot)$ --- решение (2), траектория которого совпадает с $\pi(X)$, и $t_1 < t_2$, то существуют $\tau_1 < \tau_2$, такие что $\pi(x(t_1)) = y(\tau_1)$ и $\pi(x(t_2)) = y(\tau_2)$. + +Пусть $x_*$ --- положение равновесия системы (1) (то есть $f(x_*) = 0$). +Тогда, раскладывая по Тейлору, получаем +\[ + f(x) \equiv f(x_*) + \frac{\partial f}{\partial x}(x_*)(x - x_*) + R(x - x_*), +\] +где $R \in C^2$ и $R = o(x - x_*)$. Более того, $f(x_*) = 0$, так что про этот член можно забыть. +($\frac{\partial f}{\partial x}$ --- это матрица Якоби) + +Рассмотрим систему +\begin{equation} + y' = \frac{\partial f}{\partial x}(x_*) y. +\end{equation} +Утверждается, что при некоторых условиях она ведёт себя так же, как и система (1). + +\textbf{Теорема.} Пусть $Re(\lambda) \ne 0$ для любого элемента $\lambda$ матрицы $\frac{\partial f}{\partial x}(x_*)$ системы (1). +Тогда в некоторой окрестности точки $x_*$ система (1) качественно эквивалентна (3). + +\textbf{Замечание.} У теоремы такие странные условия, потому что иначе она не работает. + +\textbf{Примеры.} +\begin{itemize} + \item $x' = -x^3$ и $x' = x^3$. Матрица Якоби нулевая, и направления движений противоположные. + \item + \[ + \begin{cases} + x_1' = -x_2 - x_1|x|^2 \\ + (x_2')^2 = x_1 - x_2|x|^2 + \end{cases} + \] + и $x_* = (0, 0)$. + Здесь + \[ + \frac{\partial f}{\partial x}(x_*) = + \begin{pmatrix} + 0 & -1 \\ + 1 & 0 + \end{pmatrix} + \] + Собственные значения --- $\lambda = \pm i$, получаем концентрические окружности, то есть решение вида + \[ + \begin{cases} + x_1(t) = r(t) \cos(\phi(t)) \\ + x_2(t) = r(t) \sin(\phi(t)). + \end{cases} + \] + Подставляя его в исходное уравнение, получаем + \[ + \begin{cases} + r' \cos(\phi) - r \sin(\phi) \phi' = -r \sin(\phi) - r^3 \cos(\phi) \\ + r' \sin(\phi) + r \cos(\phi) \phi' = r \cos(\phi) - r^3 \sin(\phi) + \end{cases} + \] + Умножая первое уравнение на $\cos(\phi)$, второе --- на $\sin(\phi)$ и складывая, получаем $r' = -r^3$. + Умножая второе на $-\sin(\phi)$, второе --- на $\cos(\phi)$ и складывая, получаем $\phi' = 1$. + У этого уравнения решением будет спираль, а у линеаризованной системы --- концентрические окружности, ибо собственными числами будут $\pm i$. +\end{itemize} + +\setcounter{equation}{0} +\section{Устойчивость по Ляпунову и асимптотическая устойчивость} +\subsection{Определение и примеры} +\textbf{Определение.} Пусть задано открытое $\Omega \subset \mathbb R^n$, отображение $f: \Omega \to \mathbb R^n$, $f \in C^1$, и точка $x^* \in \Omega$ --- положение равновесия, то есть $f(x^*) = 0$. +Рассмотрим систему +\begin{equation} + x' = f(x). +\end{equation} +Пусть $\phi(\cdot, \xi)$ --- непродолжаемое решение задачи Коши $x' = f(x)$, $x(0) = \xi$. +Положение равновесия $x^*$ называется \textit{устойчивым по Ляпунову}, если: +\begin{enumerate} + \item Существует $r > 0$, такое что для любого $\xi \in \Omega \cap B_r(\xi)$ отображение $\phi(\cdot, \xi)$ определено на $[0, +\infty)$. + \item Для любого $\varepsilon > 0$ существует $\delta > 0$, такое что для всех $\xi \in \Omega \cap B_\delta(x^*)$ верно $|\phi(t, \xi) - x^*| < \varepsilon$ для всех $t \ge 0$. + (Чем-то напоминает непрерывность) +\end{enumerate} + +Положение равновесия $x^*$ называется \textit{асимптотически устойчивым}, если: +\begin{enumerate} + \item $x^*$ устойчиво по Ляпунову. + \item Существует $d > 0$, такое что для всех $\xi \in \Omega \cap B_d(x^*)$ функция $\phi(t, \xi) \to x^*$ при $t \to +\infty$. +\end{enumerate} + +\textbf{Примеры.} +\begin{enumerate} + \item Пусть $n = 2$, $f(x) = Ax$ и $x^* = 0$. + Возвращаясь к случаям из предыдущего параграфа, по Ляпунову устойчивы все устойчивые портреты \textit{и центр}. + Асимптотически устойчивы из них все, кроме центра. + + \item $n = 1$, $\Omega = \mathbb R$. Функция $f(x) > 0$ при $x \in (x^* - \varepsilon, x^*)$, $f(x^*) = 0$ и $f(x) < 0$ при $x \in (x^*, x^* + \varepsilon)$. + Тогда можно проверить, что решение асимптотически устойчиво. + Более того, если одно из строгих неравенств становится нестрогим, то теряется асимптотическая устойчивость, а если даже нет нестрогого, то и по Ляпунову. +\end{enumerate} + +\subsection{Устойчивость линейных систем} +Пусть дана матрица $A \in \mathbb R^{n \times n}$ и система +\begin{equation} + x' = Ax. +\end{equation} +Пусть $X(t)$ --- фундаментальная система решений системы (2), такая что $X(0) = I$ (единичная). +Она существует, так как можно рассмотреть $n$ задач Коши $x' = Ax$ и $x(0) = e_i$, где $e_i$ --- $i$-ый базисный вектор $\mathbb R^n$. +Обозначим через $\lambda_1, \dots, \lambda_s$ собственные значения матрицы $A$, а через $k_1, \dots, k_s$ --- размеры соответствующих жордановых клеток. + +\textbf{Теорема.} +\begin{itemize} + \item Если все $Re(\lambda_j) < 0$, то $x^* = 0$ --- асимптотически устойчивое положение равновесия. + \item Если все $Re(\lambda_j) \le 0$, а для тех $j$, что $Re(\lambda_j) = 0$, выполнено $k_j = 1$, то $x^* = 0$ устойчиво по Липунову. + \item В остальных случаях не устойчиво. +\end{itemize} + +\textbf{Доказательство.} Любое решение $x(t)$ системы (2) представимо в виде +\[ + x(t) = \sum_{j=1}^{s} P_j(t) e^{\lambda_j t}, t \ge 0. +\] +Здесь $P_j$ --- многочлен (с векторными значениями), такой что $\deg(P_j) \le k_j - 1$. + +Первая часть: +\[ + e^{\lambda_j t} = e^{(Re(\lambda_j)) t} (\cos(Im(\lambda_j) t) + i \sin(Im(\lambda_j) t)). +\] +Это стремится к нулю быстрее любого многочлена, поэтому для любого решения $x(\cdot)$ выполнено $x(t) \to 0$ при $t \to +\infty$. +Докажем устойчивость по Ляпунову. +Так как столбцы $X(t)$ являются решениями, $\|X(t)\| \to 0$ при $t \to +\infty$. +В частности, $\|X(t)\|$ равномерно ограничена каким-то числом $c$. +Заметим, что $\phi(\cdot, \xi)$ при любом $\xi$ определено на $[0, +\infty)$, ибо (2) является линейной системой с постоянными коэффициентами. +Зафиксируем $\varepsilon > 0$, положим $\delta = \frac{\varepsilon}{c}$. +Имеем при $|\xi| < \delta$ +\[ + |\phi(t, \xi)| = |X(t) \xi| \le \| X(t) \| \cdot |\xi| < c \cdot \frac{\varepsilon}{c} = \varepsilon. +\] +Следовательно, $|\phi(t, \xi)| \to 0$ --- асимптотическая устойчивость. + +Вторая часть. Если $Re(\lambda_j) < 0$, то по первой части $P_j(t) e^{\lambda_j t}$ ограничено на $[0, +\infty)$. +Остаётся случай $Re(\lambda_j) = 0$ и $k_j = 1$. +В этом случае $P_j(t)$ имеет степень 0, то есть константа. +Таким образом, +\[ + P_j(t) e^{\lambda_j t} \equiv C \cdot (\cos(Im(\lambda_j) t) + i \sin(Im(\lambda_j) t)), +\] +где $C$ --- константа. +В этом случае решение вновь ограничено, поэтому существует $c$, такое что $\|X(t)\| \le c$ для всех $t \in [0, +\infty)$. +Аналогично первой части устойчиво по Ляпунову. + +Третья часть. Пусть существует $j$, такой что $Re(\lambda_j) > 0$. +Обозначим $\lambda_j = \alpha + i \beta$. +Пусть $v = a + ib$ --- соответствующий собственный вектор. +Тогда +\[ + x(t) = e^{\alpha t} (\cos(\beta t) a - \sin(\beta t) b) +\] +является вещественным решением системы (2). +Домножим на $\gamma > 0$: +\[ + x_\gamma(t) = \gamma \cdot e^{\alpha t} (\cos(\beta t) a - \sin(\beta t) b). +\] +Система линейна, поэтому это всё ещё решение, причём $x_\gamma(\cdot)$ не ограничено на $[0, +\infty)$. +Более того, мы можем брать сколь угодно малое число $\gamma$, чтобы получать $|x_\gamma(0)| < \delta$, дальше легко доказывается отсутствие устойчивости по Ляпунову. + +\QED + +\setcounter{equation}{0} +\section{Условия устойчивости} +Пусть $f: \mathbb R^n \to \mathbb R^n$, $x^* \in \mathbb R^n$ --- положение равновесия, то есть $f(x^*) = 0$. +Рассмотрим систему +\begin{equation} + x' = f(x), +\end{equation} +для которой $\phi(\cdot, \xi)$ является непродолжаемым решением задачи Коши +\[ + \begin{cases} + x' = f(x) \\ + x(0) = \xi. + \end{cases} +\] +Пусть $\Omega \subset \mathbb R^n$ открыто, $v: \Omega \to \mathbb R \in C^1$. + +\textbf{Определение.} \textit{Производной в силу системы (1)} называется +\[ + \frac{dv}{dt} \bigg|_{(1)}(x) := \left< v'(x), f(x) \right>, +\] +где $x \in \Omega$. +Пусть $x(\cdot)$ --- решение системы (1). Тогда +\[ + \frac{d}{dt} v(x(t)) \equiv \left< v'(x(t)), x'(t) \right> \equiv \left< v'(x(t)), f(x(t)) \right> \equiv \frac{dv}{dt} \bigg|_{(1)}(x(t)). +\] + +\textbf{Теорема.} (Ляпунова об устойчивости) Пусть существует $\rho > 0$, и $v \in C^1(B_{\rho}(x^*), \mathbb R)$, такие что $v(x^*) = 0$, $v(x) > 0$ при $x \ne x^*$ и для всех $x$ выполнено $\frac{dv}{dt} \big|_{(1)} (x) \le 0$. +Тогда $x^*$ устойчиво по Ляпунову. + +Геометрическая интуиция: если взять достаточно маленький $\varepsilon$, то множество $\{x: v(x) = \varepsilon \}$ (линия уровня) образует замкнутую кривую вокруг $x^*$. +А условие на производную говорит, что при попадании на границу решение будет двигаться внутрь, то есть не выйдет за кривую. + +\textbf{Доказательство.} Зафиксируем $\varepsilon > 0$, будем считать, что $\varepsilon < \rho$. +Положим $m := \min_{|x - x^*| = \varepsilon} (v(x))$. +По условию $m > 0$. +В частности, найдётся $\delta > 0$, такое что для всех $x \in B_{\delta}(x^*)$ верно $v(x) < m$. + +Зафиксируем $\xi \in B_\delta(x^*)$. Допустим, что $\phi(\cdot, \xi)$ не определено на $[0, +\infty)$ или $\phi(\cdot, \xi)$ не содержится в шаре $B_\varepsilon(x^*)$ --- отрицание устойчивости по Ляпунову. +Вспомним теорему о продолжении решения до границы компакта: если рассмотреть цилиндр $\{(t, x): |x - x^*| \le \varepsilon\}$, то в первом случае решение должно выйти из него в какой-то точке $t_1$, то есть $|\phi(t_1, \xi) - x^*| = \varepsilon$. +Во втором случае допускается то же самое, поэтому существование такой точки мы и хотим опровергнуть. + +По выбору $m$ мы знаем, что $v(x(t_1)) \ge m$ и $v(x(0)) = v(\xi) < m$. +Теперь вспомним, что у нас было условие на производную: +\[ + \frac{d}{dt} v(x(t)) \equiv \frac{dv}{dt} \bigg|_{(1)} (x(t)) \le 0. +\] +То есть $v$ не возрастает, но при этом в $\xi$ она меньше $m$, а в $t_1 > \xi$ --- больше, противоречие. + +\QED + +\textbf{Пример.} +\[ + \begin{cases} + x_1' = -x_2 \\ + x_2' = x_1 + \end{cases} + , + x^* = (0, 0)^T. +\] +Положим $v(x) = x_1^2 + x_2^2$. Тогда $v(0) = 0$ и $v(x) > 0$ при $x \ne 0$. +Найдём производную: +\[ + \frac{dv}{dt} \bigg|_{(1)} (x) = \left< (2x_1, 2x_2)^T, (-x_2, x_1)^T \right> \equiv 0. +\] +Следовательно, по теореме Ляпунова ноль устойчив. +Но асимптотической устойчивости нет: портретом является центр. + +\textbf{Теорема.} (Ляпунова об асимптотической устойчивости) Пусть существует $\rho > 0$, и $v \in C^1(B_{\rho}(x^*), \mathbb R)$, такие что $v(x^*) = 0$, $v(x) > 0$ при $x \ne x^*$ и для всех $x \ne x^*$ выполнено $\frac{dv}{dt} \big|_{(1)} (x) < 0$. +Тогда $x^*$ асимптотически устойчиво. +От предыдущей теоремы отличается только последним условием. + +\textbf{Доказательство.} По предыдущей теореме $x^*$ устойчиво по Ляпунову. +Положим $\varepsilon = \frac{\rho}{2}$, $\delta$ возьмём из определения устойчивости. +Вновь будем доказывать от противного: допустим, что существует $\xi \in B_\delta(x^*)$, $r > 0$ и возрастающая $t_j \to +\infty$, такая что $|\phi(t_j, \xi) - x^*| \ge r$. +Будем считать, что $r < \varepsilon$, также будем обозначать $x(t) = \phi(t, \xi)$. +По условию существует $\mu > 0$, такое что для всех $x$, таких что $r \le |x - x^*| \le \varepsilon$, выполнено $v(x) \ge \mu$. +Из условия на производную мы знаем, что $v(x(t))$ строго убывает на $[0, +\infty)$. + +Отсюда следует, что $v(x(t)) \ge \mu$ для всех $t \in [0, +\infty)$. +Обосновывается это тем, что для любого $t$ найдётся $t_j > t$ из допущения, такая что $|\phi(t_j, \xi) - x^*| \ge r$, а это значит, что $v(x(t_j)) \ge \mu$. +В силу убывания и $v(x(t)) \ge v(x(t_j)) \ge \mu$. +По непрерывности $v$ существует $\delta_1 > 0$, такое что $v(x) < \mu$ при $|x - x^*| < \delta_1$. +Из доказанного $|x(t) - x^*| \ge \delta_1$. +Ещё существует $\beta > 0$, такое что $\frac{dv}{dt} \big|_{(1)}(x) \le -\beta$ для всех $x$, таких что $\delta_1 \le |x - x^*| \le \varepsilon$. +Это следует из определения производной в силу системы: функция непрерывна. +Теперь по формуле Ньютона-Лейбница +\[ + v(x(t)) - v(x(0)) \equiv \int_0^t \frac{d}{ds} v(x(s)) dx \equiv \int_0^t \frac{dv}{dt} \bigg|_{(1)}(x(s)) ds \le -\beta t +\] +в силу неравенства выше. + +Следовательно, перенося $v(x(0))$ в правую часть, при $t \to +\infty$ получаем $v(x(t)) \le v(x(0)) - \beta t$. +Выражение справа стремится к $-\infty$, что противоречит тому, что $v(x) \ge 0$. + +\QED + +\textbf{Пример.} Пусть $n = 1$, $f: \mathbb R \to \mathbb R$, $f(x^*) = 0$, $f(x) > 0$ при $x < x^*$, $f(x) < 0$ при $x > x^*$. +Положим $v(x) := (x - x^*)^2$. +Найдём производную: +\[ + \frac{dv}{dx} \bigg|_{(1)} (x) = 2(x - x^*) f(x). +\] +После разбора случаев можно заметить, что это меньше нуля при $x \ne x^*$. + +\textbf{Определение.} Функция $v$ в обеих теоремах называется \textit{функцией Ляпунова}. + +\textbf{Теорема.} (Хассело-..., б/д) Теоремы Ляпунова --- это не только достаточное условие, но и необходимое. + +Теперь остаётся важный вопрос: как найти функцию $v$? +Обычно это сложная задача, но в одном частном случае это можно сделать: + +\textbf{Теорема.} (Об устойчивости по первому приближению) Пусть $f(x) = A(x - x^*) + o(x - x^*)$. +Пусть все $Re(\lambda) < 0$ для собственных значений $\lambda$ матрицы $A$. +Тогда $x^*$ асимптотически устойчиво. + +\textbf{Доказательство.} Положим $\psi(t, \xi) = e^{tA} \xi$ для $t \ge 0$, $\xi \in \mathbb R^n$. +Заметим, что это является решением задачи Коши +\[ + \begin{cases} + y' = Ay \\ + y(0) = \xi + \end{cases}, +\] +то есть линеаризованной версии исходной системы. +Тогда существуют $c, \alpha > 0$, такие что $|\phi(t, \xi)| \le c \cdot e^{-\alpha t} |\xi|$ --- следует из $Re(\lambda) < 0$. +Положим +\[ + v(x) = \int_0^{+\infty} |\psi(\tau, x)|^2 d\tau = \int_0^{+\infty} |e^{\tau A} \cdot x|^2 d\tau = +\] +В силу неравенства выше эта функция определена для всех $x$. +Заметим, что это является квадратичной формой, в которую подставлен $x$: +\[ + = \int_0^{+\infty} \left< e^{\tau A} x, e^{\tau A} x \right> d\tau = \int_0^{+\infty} \left<(e^{\tau A})^T e^{\tau A} \cdot x, x \right> d\tau = +\] +Тепеь можно два раза вынести $x$ из интеграла: +\[ + = \left< \int_0^{+\infty} (e^{\tau A})^T e^{\tau A} x \cdot d\tau, x \right> + = \left< \int_0^{+\infty} (e^{\tau A})^T e^{\tau A} d\tau \cdot x, x \right>. +\] +Положим $Q = \int_0^{+\infty} (e^{\tau A})^T e^{\tau A} d\tau$, тогда это всё равно $\left$. +Более того, $Q$ положительно определена, так как это интеграл квадрата. + +Подставим $\psi$ в функцию $v$: +\[ + v(\psi(t, \xi)) = \int_0^{+\infty} |e^{\tau A} e^{tA} \xi|^2 d\tau = \int_t^{+\infty} |e^{sA} \xi|^2 ds +\] +--- в конце сделали замену $s = t + \tau$. + +Теперь найдём производную от этого: +\[ + \frac{d}{dt} v(\psi(t, \xi))|_{t = 0} = -|e^{tA} \xi|^2 |_{t = 0} = -|\xi|^2. +\] +И производную в силу системы (2) (линеаризованной): +\[ + \frac{dv}{dt} \bigg|_{(2)} = \frac{d}{dt} v(\psi(t, \xi))|_{t = 0} = -|\xi|^2. +\] +Тогда +\[ + \frac{dv}{dt} \bigg|_{(1)} = \left< v'(\xi), f(\xi) \right> = \left = +\] +\[ + = \left + \left = \frac{dv}{dt} \bigg|_{(2)}(\xi) + \left<2Q\xi, o(\xi) \right> = +\] +\[ + = -|\xi|^2 + \left<2Q\xi, o(\xi) \right>. +\] +Так как второе слагаемое --- о-малое, в некоторой окрестности это всё не превосходит $-\frac{1}{2} |\xi|^2$. +Следовательно, $x^*$ асимптотически устойчиво. + +\QED + +\textbf{Замечание.} (б/д) Если существует собственное число $\lambda$ матрицы $A$, такое что $Re(\lambda) > 0$, то $x^*$ не устойчиво по Ляпунову. + +\textbf{Замечание 2.} Таким образом, мы охарактеризовали все системы, кроме тех, у которых все собственные значения мнимые, но они встечаются редко. + +\setcounter{equation}{0} +\section{Первые интегралы} +\subsection{Первые интегралы нормальных ОДУ} +Пусть нам даны $n \in \mathbb N$, открытое $\Omega \subset \mathbb R^{n+1}$ и отображение $f: \Omega \to \mathbb R^n$, $f \in C^1$. +Рассмотрим систему +\begin{equation} + x' = f(t, x). +\end{equation} + +\textbf{Определение.} \textit{Первым интегралом в области} $D \subset \Omega$ уравнения (1) называется функция $v: D \to \mathbb R$, такая что $v \in C^1$ и для любого решения $\phi(\cdot)$ системы (1), для которого $\forall t~(t, \phi(t)) \in D$, $v(t, \phi(t))$ является константой. + +\textbf{Замечание.} Первый интеграл всегда существует, например, $v = C$. + +\textbf{Определение.} Производная в силу системы для функции $v$ в этом случае определяется, как +\[ + \frac{dv}{dt} \bigg|_{(1)}(t, x) := \frac{\partial v}{\partial t}(t, x) + \left< \frac{\partial v}{\partial x} (t, x), f(t, x) \right>. +\] + +\textbf{Утверждение.} Функция $v: D \to \mathbb R$, $v \in C^1$ является первым интегралом системы (1) тогда и только тогда $\frac{dv}{dt} \big|_{(1)}(t, x) = 0$ для всех $(t, x) \in D$. + +\textbf{Доказательство.} $\Rightarrow$. Зафиксируем $(\tau, \xi) \in D$. +Как известно, существует решение $\phi(\cdot)$ задачи Коши +\[ + \begin{cases} + x' = f(t, x) \\ + x(\tau) = \xi + \end{cases} . +\] +Сужая при необходимости область определения $\phi(\cdot)$, будем считать, что все $(t, \phi(t)) \in D$. +Так как функция $t \mapsto v(t, \phi(t))$ --- константа, $\frac{d}{dt}(v(t, \phi(t))) \equiv 0$. +Тогда +\[ + \frac{\partial v}{\partial t}(t, \phi(t)) + \left< \frac{\partial v}{\partial x}(t, \phi(t)), f(t, \phi(t)) \right> \equiv 0 +\] +по производной композиции, также воспользовались тем, что $\frac{\partial \phi}{\partial t}(t) = f(t, \phi(t))$. +Подставляя $t = \tau$ и $\xi = \phi(t)$, получаем требуемое. + +$\Leftarrow$. Аналогично, но в обратную сторону. + +\QED + +\textbf{Определение.} Пусть $v_1, \dots, v_k$ --- первые интегралы системы (1). +Они называются \textit{независимыми} в области $D$, если $\rank \left( \frac{\partial v_i}{\partial x_j}(t, x) \right) = k$. + +\textbf{Замечание.} Зачем это всё нужно? Пусть $n = 2$, и $(t_0, x_0)$ --- какая-то точка в $\mathbb R^3$. +Возьмём два первых интеграла, проходящих через неё, $v_1, v_2$. +Тогда $A = \{(t, x): v_1(t, x) = v_1(t_0, x_0)\}$ и $B = \{(t, x): v_2(t, x) = v_2(t_0, x_0)\}$ --- это какие-то поверхности, и \textit{их пересечение является решением системы}. +Это утверждение является теоремой, которая не будет доказываться. + +\textbf{Теорема.} Для любой точки $(t_0, x_0) \in \Omega$ существует окрестность $D \subset \Omega$, а в ней --- независимые в $D$ первые интегралы $v_1, \dots, v_n$. + +\textbf{Доказательство.} Для любого $(t_0, \xi) \in D$ существует единственное непродолжаемое решение $\phi(\cdot, \xi)$ задачи Коши, ещё и непрерывно дифференцируемое: +\[ + \begin{cases} + x' = f(t, x) \\ + x(t_0) = \xi + \end{cases} . +\] +Решим уравнение $x - \phi(t, \xi) = 0$ относительно $\xi$ с параметрами $(t, x)$ в окрестности $(t_0, x_0)$, соответствующей решению $x = x_0$, $t = t_0$, $\xi = x_0$. +Тогда $\phi(t_0, \xi) \equiv \xi$ по определению $\phi$. +Теперь +\[ + \frac{\partial}{\partial \xi} (x - \phi(t, \xi)) \bigg|_{\substack{t = t_0 \\ x = x_0}}(x_0) = -E. +\] +($x_0$ встречается дважды, так как сначала мы подставили параметр $x = x_0$, а потом неизвестную $\xi = x_0$) + +Следовательно, применима теорема о неявной функции: существует окрестность $D_1 \subset \Omega$ точки $(t_0, x_0)$ и отображение $V = (v_1, \dots, v_n): D_1 \to \mathbb R^n$, такое что: +\begin{itemize} + \item $V \in C^1$. + \item Для всех $(t, x) \in D_1$ выполнено $x - \phi(t, V(t, x)) \equiv 0$. + \item $V(t_0, x_0) = x_0$. + \item Так как количество уравнений совпадает с количеством неизвестных, существует окрестность $\Delta$ точки $x_0$, такая что если $u \in \Delta$ и $x - \phi(t, u) = 0$, то $u = V(t, x)$. +\end{itemize} +Продифференцируем по $x$ второе свойство: +\[ + E \equiv \frac{\partial \phi}{\partial \xi}(t, V(t, x)) \cdot \frac{\partial V}{\partial x}(t, x). +\] +Подставим $(t_0, x_0)$: заметим, что $V(t_0, x_0) = x_0$, откуда это будет равно +\[ + E = \frac{\partial \phi}{\partial \xi}(t_0, x_0) \cdot \frac{\partial V}{\partial x}(t_0, x_0). +\] +Первый множитель равен $E$, поэтому +\[ + E = \frac{\partial V}{\partial x}(t_0, x_0). +\] +Отсюда ранг этой матрицы равен $n$, а значит, существует окрестность $D \subset D_1$, такая что в ней $\rank \left( \frac{\partial V}{\partial x} (t, x) \right) = n$. + +Пусть $x(\cdot)$ --- решение задачи Коши $x' = f(t, x)$, $x(t_0) = \xi$. +По второму свойству $x(t) - \phi(t, V(t, x(t))) \equiv 0$. +Более того, из обозначений $x(t) - \phi(t, \xi) \equiv 0$. +Уменьшая область определения $x(\cdot)$, можно добиться того, чтобы $x(t)$ всегда попадал в $\Delta$, откуда по четвёртому свойству решение единственно и должно совпадать, поэтому $V(t, x(t)) \equiv \xi$, то есть $v_i(t, x(t)) \equiv \xi_i$ --- константы. + +\QED + +\subsection{Первые интегралы автономных систем} +Пусть нам даны $n \in \mathbb N$, открытое $\Omega \subset \mathbb R^n$ и отображение $f: \Omega \to \mathbb R^n$, $f \in C^1$. +Рассмотрим систему +\begin{equation} + x' = f(x). +\end{equation} + +\textbf{Теорема.} Для любого $x_0 \in \Omega$, такого что $f(x_0) \ne 0$ существует окрестность $D \subset \Omega$ точки $x_0$ и $n - 1$ независимых первых интегралов $v_i: D \to \mathbb R$. +От предыдущего случая отличается тем, что $v_i$ не зависит от $t$. + +\textbf{Доказательство.} +Так как $f(x_0) \ne 0$, у него существует ненулевая координата. +Без ограничения общности это $n$-ая: $f_n(x_0) \ne 0$. +Из непрерывности $f_n$ получаем, что $f_n(x) \ne 0$ в некоторой окрестности $x_0$. +Рассмотрим неавтономную систему +\begin{equation} + \frac{dx_i}{dx_n} = \frac{f_i(x)}{f_n(x)}. +\end{equation} +Здесь $(n - 1)$ уравнение, откуда по теореме из предыдущего пункта существует окрестность $D$ точки $x_0$ и независимые первые интегралы системы (3) $v_1, \dots, v_{n-1}: D \to \mathbb R$. + +Пусть $\phi(\cdot) = (\phi_1(\cdot), \dots, \phi_n(\cdot))$ --- какое-то решение системы (2), такое что для всех $t$ $\phi(t) \in D$, то есть $\phi_n'(t) = f_n(\phi(t)) \ne 0$ +Итак, мы получили строго монотонную функцию $\phi_n(t)$ на интервале --- по первому семестру матанализа существует обратная к ней функция $t(\phi_n)$. +Обозначим $x_i(x_n) = \phi_i(t(x_n))$. +Тогда +\[ + \frac{dx_i}{dx_n}(x_n) \equiv \frac{d \phi_i}{dt}(t(x_n)) \cdot \frac{dt}{dx_n}(x_n) \equiv f_i(\phi(t(x_n))) \cdot \frac{1}{\phi_n'(t(x_n))} \equiv +\] +\[ + \equiv \frac{f_i(\phi(t(x_n)))}{f_n(\phi(t(x_n)))} \equiv \frac{f_i(x)}{f_n(x)}. +\] +Вернёмся к первым интегралам: по определению для всех $i$ +\[ + v_i(\phi_1(t(x_n)), \dots, \phi_{n-1}(t(x_n)), x_n) \equiv const. +\] +Обозначая $\tau = t(x_n)$, получаем +\[ + v_i(\phi_1(\tau), \dots, \phi_n(\tau)) \equiv const. +\] +Значит, $v_i$ являются первыми интегралами системы (2). +Проверим их независимость. +Мы знаем, что они независимы в системе (3), тогда векторы +\[ + \left(\frac{\partial v_i}{\partial x_1}(x), \dots, \frac{\partial v_i}{\partial x_{n-1}}(x) \right) +\] +линейно независимы. +Нам нужны $n$-мерные векторы, поэтому добавим к ним ещё одну координату: +\[ + \left(\frac{\partial v_i}{\partial x_1}(x), \dots, \frac{\partial v_i}{\partial x_{n-1}}(x), \frac{\partial v_i}{\partial x_n}(x) \right). +\] +При добавлении новой координаты линейная независимость не ломается, поэтому они подходят в систему (2). +Таким образом, ранг матрицы +\[ + \left( \frac{\partial v_i}{\partial x_j} \right)_{\substack{i = \overline {1, n - 1} \\ j = 1, n}} +\] +равен $n - 1$, то есть $v_1, \dots, v_{n-1}$ --- искомые первые интегралы. + +\QED + +\textbf{Замечание.} Зачем: возьмём $n = 2$ и первый интеграл $v_1$. +Тогда кривая $v_1(x) = v_1(x_0)$ является фазовой траекторией. +Аналогично в трёхмерном случае, но тогда будет пересечение поверхностей. + +\textbf{Пример.} Рассмотрим систему +\[ + \begin{cases} + x_1' = -x_2 \\ + x_2' = x_1 + \end{cases} +\] +и её положение равновесия $x_0 = (0, 0)$. +Так как $f(x_0) = (0, 0)$, предположение теоремы нарушается. +Проверим, что следствие теоремы тоже нарушится: от противного, пусть существует первый интеграл $v(x_1, x_2)$ в окрестности $x_0$. +Мы ещё требуем невырожденность, поэтому +\[ + \left( \frac{\partial v}{\partial x_1}(0, 0), \frac{\partial v}{\partial x_2}(0, 0) \right) \ne (0, 0). +\] +Без ограничения общности $\frac{\partial v}{\partial x_1}(0, 0) > 0$, тогда это верно и в некоторой окрестности нуля. +По определению первого интеграла производная в силу системы должна быть тождественным нулём: +\[ + -x_2 \frac{\partial v}{\partial x_1}(x_1, x_2) + x_1 \frac{\partial v}{\partial x_2}(x_1, x_2) \equiv 0. +\] +Возьмём $x_1 = 0$ и $x_2 = \frac{1}{N}$, где $N$ --- какое-то достаточно большое число. +Тогда из доказанного выше $\frac{\partial v}{\partial x_1}(x_1, x_2) > 0$. +Вернёмся к тождеству выше: +\[ + -x_2 \frac{\partial v}{\partial x_1}(x_1, x_2) \equiv 0. +\] +Но мы взяли $x_1$, $x_2$ так, что оба множителя не равны нулю --- противоречие. + +\QED + +\subsection{Множество всех первых интегралов} +\textbf{Утверждение.} Если у нас есть $n$ первых интегралов $v_1(t, x), \dots, v_n(t, x)$, то любая функция вида $F(v_1(t, x), \dots, v_n(t, x))$ является первым интегралом для $F \in C^1$. + +\textbf{Доказательство.} Действительно, пусть $x(\cdot)$ --- это решение системы (1), тогда +\[ + F(v_1(x_1(t)), \dots, v_k(x_n(t))) \equiv F(const_1, \dots, const_n) \equiv const. +\] + +\QED + +Возникает логичный вопрос: все ли первые интегралы представимы в таком виде, если $v_1, \dots, v_n$ независимы? Ответ положительный. + +\textbf{Теорема.} Пусть $D$ --- окрестность точки $(t_0, x_0)$, $v_1, \dots, v_n: D \to \mathbb R$ --- независимые первые интегралы системы (1). +Обозначим $v := (v_1, \dots, v_n): D \to \mathbb R^n$ и $c_0 = v(t_0, x_0)$. +Тогда +\begin{itemize} + \item Если $x(\cdot)$ --- решение задачи Коши $x' = f(t, x)$, $x(t_0) = x_0$, то $x(\cdot)$ является решением алгебраической системы $v(t_0, x) = c_0$. + \item Если $\phi(\cdot, c)$ --- это решение алгебраической системы $v(t, x) = c$ и $c$ достаточно близко к $c_0$, то $\phi(\cdot, c)$ --- это решение системы (1). +\end{itemize} +В каком-то смысле дифференциальная система и алгебраическая система на первых интегралах эквивалентны. + +\textbf{Доказательство.} Первая часть: для любого $t$ +\[ + v(t, x(t)) \equiv (v_i(t, x(t)))_{i=\overline{1, n}} \equiv const = v(t_0, x(t_0)) = c_0, +\] +что и требовалось. + +Вторая часть: пусть $v_1, \dots, v_n$ --- независимые первые интегралы, тогда ранг матрицы +\[ + \left( \frac{\partial v_i}{\partial x_j}(t_0, x_0) \right)_{i,j = \overline{1, n}} +\] +равен $n$. +Пусть $x(\cdot)$ --- решение системы (1). +По первому пункту $x$ является решением системы $v(t, x) = v(t_0, x_0)$. +Тогда по теореме о неявной функции $\phi(\cdot, c)$, как второе решение этой системы, совпадает с $x(t)$. +Следовательно, $\phi(t, v(t_0, x(t_0)))$ --- решение системы (1). + +(Что здесь происходит...) + +\QED + + +\textbf{Утверждение.} Пусть $D$ --- окрестность $(t_0, x_0)$, $v_1, \dots, v_n: D \to \mathbb R$ --- независимые первые интегралы системы (1), $v$ и $c_0$ из теоремы. +Тогда существует окрестность $D' \subset D$ точки $(t_0, x_0)$, такая что любой первый интеграл $\omega: D' \to \mathbb R$ системы (1) представим в виде $\omega(t, x) = F(v(t, x))$. + +\textbf{Доказательство.} Пусть $\phi(t, c)$ --- решение системы $v(t, x) = c$, тогда $\phi(\cdot, c)$ по теореме является решением системы (1). +Пусть $\phi(t, v(t, \xi))$ --- решение системы $v(t, x) = v(t, \xi)$. +Тогда по теореме о неявной функции существует окрестность $D' \subset D$, такая что $x = \xi$ --- единственное решение для всех $x$, достаточно близких к $x_0$, такое что для всех $(t, \xi) \in D'$ выполняется $\phi(t, v(t, \xi)) \equiv \xi$. + +Положим $F(c) := \omega(t_0, \phi(t_0, c))$. +По определению первого интеграла $\omega(t, \phi(t, c))$ --- константа по $t$. +Подставим $t_0$: $\omega(t_0, \phi(t_0, c)) = F(c)$. +Теперь подставим $c = v(t, \xi)$: $\omega(t, \xi) \equiv F(v(t, \xi))$ --- ровно искомое тождество. + +\QED + +Смысл доказательств --- переход от дифференциальных уравнений к алгебраическим и последующее применение теоремы о неявной функции. + +\subsection{Множество первых интегралов автономных систем} +Будем доказывать те же теоремы для автономных систем. +Преамбула такая же, как и в пункте 2. + +\textbf{Лемма.} Пусть $f_n(x_0) \ne 0$, где $x_0 \in \Omega$, функции $v_1, \dots, v_{n-1}: \Omega \to \mathbb R$ --- независимые первые интегралы системы (2). +Тогда $v_1, \dots, v_{n-1}$ --- независимые первые интегралы системы $\frac{d x_i}{d x_n} = \frac{f_i(x)}{f_n(x)}$. +Это аналог теоремы из пункта 2, но теперь в роли времени выступает $x_n$. + +\textbf{Доказательство.} Из определения первого интеграла для любого $j$ выполняется +\[ + \sum_{i=1}^{n} \frac{\partial v_j}{\partial x_i}(x) f_i(x) \equiv 0. +\] +Тогда можно разделить на $f_n(x)$: +\[ + \sum_{i=1}^{n-1} \frac{\partial v_j}{\partial x_i}(x) \frac{f_i(x)}{f_n(x)} + \frac{\partial v_j}{\partial x_n}(x) \equiv 0. +\] +По признаку для неавтономных систем получаем, что $v_j$ являются первыми интегралами системы $\frac{dx_i}{dx_n}$. Докажем их независимость. +Рассмотрим матрицу +\[ + \left( \frac{\partial v_j}{\partial x_i}(x) \right)_{\substack{i = \overline{1, n} \\ j = \overline{1, n - 1}}}. +\] +Её ранг равен $n - 1$ для всех $x$, причём её последняя строка, из доказанного, выражается через первые $n - 1$. +Следовательно, ранг матрицы +\[ + \left( \frac{\partial v_j}{\partial x_i}(x) \right)_{\substack{i = \overline{1, n - 1} \\ j = \overline{1, n - 1}}} +\] +равен $n - 1$, что доказывает независимость первых интегралов. + +\QED + +\textbf{Теорема.} (О множестве первых интегралов) Пусть $v_1, \dots, v_{n-1}: D \to \mathbb R$ --- независимые первые интегралы автономной системы (2), $x_0 \in D$, $f(x_0) \ne 0$. +Тогда существует окрестность $D' \subset D$ точки $x_0$, такая что для любого первого интеграла системы (2) $\omega: D' \to \mathbb R$ существует функция $F \in C^1$, такая что $\omega(x) \equiv F(v_1(x), \dots, v_{n-1}(x))$. + +\textbf{Доказательство.} Без ограничения общности $f_n(x_0) \ne 0$, причём, уменьшая, при необходимости, $D$, это верно на всём $D$. +По лемме $v_1, \dots, v_{n-1}$ является первыми интегралами системы $\frac{dx_i}{dx_n}$, откуда из утверждения для неавтономных систем существует окрестность $D'$ точки $x_0$, такая что выполняется всё, что нужно. + +\QED + +\section{Оффтоп: ОДУ и случайные графы} +Ответ на вопрос, зачем нам дифференциальные уравнения, если у нас нет физики. +На экзамене не будет. + +Везде неявно фиксируется индекс $n$. +Пусть $(\Omega, \mathcal F, P)$ --- вероятностное пространство, $\mathcal F_0 \subset \mathcal F_1 \subset \dots \subset \mathcal F$, где $\mathcal F_0 = \{\varnothing, \Omega\}$, а $\mathcal F_t = \sigma(A_1^t, \dots, A_{m(t)}^t)$, и $\Omega = \bigsqcup_{l=1}^{m(t)} A_l^t$ для всех $t$. +Неформально мы берём множество $\Omega$ и постепенно разбиваем его на более мелкие куски. +Пусть $a = a(n) \in \mathbb N$, $(Y_1(t), \dots, Y_a(t))$ --- случайные $\mathcal F_t$-измеримые величины. +Предположим, что существует $c_0$, такое что для всех $i$ $|Y_i(t)| \le c_0 n$. + +\textbf{Теорема 1.} Пусть $D \subset \mathbb R^{a+1}$ --- открытое, связное и ограниченное множество, такое что $(0, Y_1(0)/n, \dots, Y_a(0)/n) \in D$. +Положим +\[ + T_D = \min \left\{ t \in \mathbb N \cup \{+\infty\}: \left( \frac{t}{n}, \frac{Y_1(t)}{n}, \dots, \frac{Y_a(t)}{n} \right) \not\in D \right\} +\] +--- случайная величина. +Пусть даны функции $f_i: \mathbb R^{a+1} \to \mathbb R$, $f_i \in C^1$, $1 \le i \le a$. +Зафиксируем $\beta > 0$ (не зависит от $n$), $\lambda = \lambda(n) = \mathcal O(1)$. +Предположим, что для любого $t$ и $\omega \in \{t < T_D\}$ величина $\max |Y_i(t+1) - Y_i(t)| \le \beta$, а также для любого $t$, $i = \overline {1, a}$ и $A_l^t \subset \{t < T_D\}$ верно +\[ + \left| E(Y_i(t + 1) - Y_i(t)~|~A_l^t) - f_i \left(\frac{t}{n}, \frac{Y_1(t)}{n}, \dots, \frac{Y_a(t)}{n} \right) \right| \le \lambda. +\] +Тогда: +\begin{itemize} + \item Задача Коши + \[ + \begin{cases} + z_i' = f_i(x, z_1, \dots, z_a) \\ + z_i(0) = \frac{1}{n} Y_i(0) + \end{cases} + \] + имеет единственное решение, продолжаемое до $\partial D$. + Далее зафиксируем это решение $z_i$. + + \item Существует число $C > 0$, такое что для любых $i$ и $t \le \sigma \cdot n$ + \[ + Y_i(t) = n \cdot z_i \left( \frac{t}{n} \right) + \mathcal O(\lambda n) + \] + с вероятностью $1 - \mathcal O \left(\frac{e^{-\frac{n \lambda^3}{\beta^3}}}{\lambda} \right)$, где $\sigma$ --- такое число, что $\rho_{\infty}((x, z(z)), \partial D) \ge C\lambda$ для любого $x \in [0, \sigma]$. +\end{itemize} + +\subsection{Процесс минимальных степеней} +Рассмотрим последовательность графов $G_0, G_1, \dots, G_{C_n^2}$, где каждый следующий граф получен следующим образом: берём равновероятно вершину наименьшей степени, равновероятно выбираем другую вершину, в которую нет ребра, и проводим ребро ($G_0$ --- пустой граф). +Обозначим $\Delta(G)$ --- наименьшая степень вершины в $G$ и $Y_i(t)$ --- количество вершин степени $i$ в графе $G_t$. +Положим $f_i(x, z_0, z_1, \dots, z_{n-1}) = -I\{i = 0\} + I\{I = 1\} + z_{i-1} - z_i$. +Рассмотрим задачу Коши +\[ + \begin{cases} + z_i = -I\{i = 0\} + I\{i = 1\} + z_{i-1} - z_i \\ + z_0(0) = \frac{1}{n} Y_0(0) = 1 \\ + z_i(0) = \frac{1}{n} Y_i(0) = 0 + \end{cases} +\] +(здесь $z_{-1} \equiv 0$) +Решая это уравнение по индукции, получаем решение +\[ + \begin{cases} + z_0(x) = 2e^{-x} - 1 \\ + z_i(x) = 2 \frac{x^i}{i! e^x} + \end{cases}. +\] + +\textbf{Теорема 2.} +\[ + Y_i(t) = nz_i \left( \frac{t}{n} \right) + \mathcal O(n^{3/4}) +\] +с вероятностью $1 - n^{3/4} \cdot e^{-\frac{n^{1/4}}{8}}$ для любого $n$ достаточно большого, $i < n$ и $t \le n \ln(2) - n^{4/5}$. + +\textbf{Доказательство.} Будем подгонять под теорему 1. +Пусть $\Omega$ --- последовательности таких графов, которые мы строим. +Положим +\[ + \mathcal F_1 = \sigma \{\{\omega: G_0 = \widehat G_0\}~|~\widehat G_0\}. +\] +Теперь +\[ + \mathcal F_2 = \sigma \{\{\omega: G_0 = \widehat G_0, G_1 = \widehat G_1 \}~|~\widehat G_0, \widehat G_1\}. +\] +И так далее. +Положим для всех $t$ множество $S_t = \{\Delta(G_t) = 0\} \subset \Omega$ и случайную величину $X_i(t)$ --- индикатор того, что степень вершины, в которую проведено новое ребро, равно $i$. +Тогда для $\omega S_t$ верно, что $X_0(t) \omega = 1$ тогда и только тогда, когда новое ребро проведено между вершинами степени 0, а $X_i(t) \omega = 1$ тогда и только тогда, когда мы провели ребро в вершину степени $i$. +Заметим, что для $\omega \in S_t$ +\[ + Y_0(t + 1) = Y_0(t) - 1 - X_0(t). +\] +Аналогично можно написать для всех: +\[ + Y_1(t + 1) = Y_1(t) + 1 + X_0(t) - X_1(t), +\] +\[ + Y_{i+1}(t) = Y_i(t) + X_{i-1}(t) - X_i(t). +\] +Найдём математическое ожидание: +\[ + E(Y_0(t + 1) - Y_0(t)~|~\{G_t = \widehat G_t\}) = -1 - \frac{Y_0(t) - 1}{n - 1}. +\] +Справа случайная величина, потому что слева --- тоже, математическое ожидание зависит от $\omega = (\dots, \widehat G_t, \dots)$. +Аналогично +\[ + E(Y_1(t + 1) - Y_1(t)~|~\{G_t = \widehat G_t\}) = 1 + \frac{Y_0(t) - 1}{n - 1} - \frac{Y_1(t)}{n - 1} +\] +и +\[ + E(Y_i(t + 1) - Y_i(t)~|~\{G_t = \widehat G_t\}) = \frac{Y_{i-1}(t) - 1}{n - 1} - \frac{Y_i(t)}{n - 1}. +\] +Положим +\[ + D - \left\{(x, z) \in \mathbb R^{n+1}: -1 < x < \frac{n}{2}, z_0 > 0, -1 < z_i < 2\right\}. +\] +Здесь важно, что все $z_i \in (-1, 2)$, но $z_0 \in (0, 2)$. +Теперь возьмём $a = n$, $c_0 = 1$ и проверим, что предположение теоремы выполняется. +Для вектора $\left( \frac{t}{n}, \frac{Y_0(t)}{n}, \dots, \frac{Y_{n-1}(t)}{n} \right)$ выполняется, что $0 \le \frac{Y_i(t)}{n} \le 1$ и $\frac{t}{n} \ge 0$. +Тогда событие $t < T_D$ --- это ``существует вершина степени ноль в графах $G_0, \dots, G_t$``, то есть $S_t$. +Нужно ограничение на разность $|Y_i(t + 1) - Y_i(t)|$. +Его получить нетрудно, ибо при проведении ребра количество вершин степени $i$ изменилось не более, чем на 2 --- положим $\beta := 2$. +Оценим разность +\[ + \left| E(Y_i(t + 1) - Y_i(t)~|~\{G_t = \widehat G_t\}) - f_i \left( \frac{t}{n}, \frac{Y_0(t)}{n}, \dots, \frac{Y_{n-1}(t)}{n} \right) \right| = +\] +\[ + = \left| \frac{Y_{i-1}(t) - Y_i(t)}{n - 1} - \frac{Y_{i-1}(t) - Y_i(t)}{n} \right| = \frac{|Y_{i-1}(t) - Y_i(t)|}{n(n-1)} \le +\] +\[ + \le \frac{|Y_{i-1}(t)| + |Y_i(t)|}{n(n - 1)} \le \frac{1}{n-1} \le n^{-1/4} =: \lambda. +\] +Все условия выполнены, поэтому по второму следствию теоремы получаем, что найдётся $c > 0$, такое что и так далее. +Заметим, что $z_i(x) \in [0, 1]$ при $x \ge 0$, а $z_0(x) \in (0, 1]$ при $x \in [0, \ln(2))$ и $z_0(\ln(2)) = 0$. +Засчёт гениального подгона условий во множестве $D$, мы получаем, что $\dist_\infty((x, z(x)), \partial F) = z_0(x)$, так как по остальным координатам есть большой запас. +В то же время $z_0(\ln(2) - n^{-1/5}) \approx n^{-1/5} >> cn^{-1/4} = c\lambda$. +Теперь берём $\sigma = \ln(2) - n^{-1/5}$ и получаем что-то интересное. + +\QED + +\setcounter{equation}{0} +\section{Оффтоп: производящие функции} +\subsection{Линейные рекуррентные соотношения} +Рассмотрим рекуррентное соотношение +\begin{equation} + a_0 u_{n+k} + a_1 u_{n+k-1} + \dots + a_n u_k = 0. +\end{equation} +Её решением является какая-то последовательность $\{u_k\}_{k=0}^\infty$. +Также будем считать, что нам известны первые $n - 1$ членов $\widehat u_0, \dots, \widehat u_{n-1}$ --- очень похоже на задачу Коши. +Рассмотрим экспоненциальную производящую функцию +\[ + x(t) = \sum_{j=0}^{\infty} \frac{u_j t^j}{j!}. +\] +Её производная --- +\[ + x'(t) = \sum_{j=0}^{\infty} \frac{u_{j+1} t^j}{j!}. +\] +В общем случае +\[ + x^{(n)}(t) = \sum_{j=0}^{\infty} \frac{u_{j+n} t^j}{j!}. +\] +Рассмотрим линейную комбинацию $a_0 x^{(n)} + \dots + a_{n-1} x' + a_n x$. +Она равна +\[ + \sum_{j=0}^{\infty} \frac{t^j}{j!} (a_0 u_{j+n} + \dots + a_{n-1} u_{j+1} + a_n u_j). +\] + +\textbf{Теорема.} Пусть $x(\cdot)$ --- это решение задачи Коши +\[ + \begin{cases} + a_0 x^{(n)} + \dots + a_{n-1} x' + a_n x = 0 \\ + x(0) = \widehat u_0, \dots, x^{(n-1)}(0) = \widehat u_{n-1} + \end{cases}. +\] +Тогда $\{u_k\}$ является решением (1), они берутся из разложения $x(t)$ в ряд. + +\subsection{Числа Стирлинга второго рода} +\textbf{Определение.} Пусть $n \ge k$. \textit{Числом Стирлинга второго рода} $S(n, k)$ называется количество неупорядоченных разбиений $n$-элементного множества на $k$ неупорядоченных подмножеств. + +В частности, $S(n, 0) = 0$ при $n > 0$, $S(0, 0) = 1$ и $S(n, k) = S(n - 1, k - 1) + k \cdot S(n - 1, k)$. +Более того, +\[ + S(n, k) = \frac{1}{k!} \sum_{j=0}^{k} (-1)^{k+1} C_k^j \cdot j^n. +\] +Рассмотрим экспоненциальный степенной ряд +\[ + x_k(t) = \sum_{n=k}^{\infty} S(n, k) \frac{t^n}{n!}. +\] +Используя рекурренту, получаем +\[ + x_k(t) = \sum_{n=k}^{\infty} (S(n - 1, k - 1) + k \cdot S(n - 1, k)) \cdot \frac{t^n}{n!}. +\] +Формально продифференцируем: +\[ + x'_k(t) = \sum_{n=k}^{\infty} S(n - 1, k - 1) \cdot \frac{t^{n-1}}{(n-1)!} + k \cdot \sum_{n=k}^{\infty} S(n - 1, k) \cdot \frac{t^{n-1}}{(n-1)!}. +\] +Во второй сумме получилась неприятность в виде того, что нам нужно $S(n - 1, n)$, а мы такое не определяли, поэтому доопределим нулём. +Методом пристального взгляда заключаем, что $x'_k(t) = x_{k-1}(t) + k \cdot x_k(t)$. +Остаётся найти $x_0(t) = \sum_{n = 0}^{\infty} S(n, 0) \cdot \frac{t^n}{n!} = 1$, и мы научились находить $x_k$ решением задачи Коши с добавлением условия $x_k(0) = 0$. +Можно проверить, что $x_k(t) = \frac{1}{k!} (e^t - 1)^k$. + +\setcounter{equation}{0} +\section{Линейные однородные уравнения в частных производных} +Пусть $\Omega \subset \mathbb R^n$ --- область, $a: \Omega \to \mathbb R^n$ --- вектор-функция, $a \in C^1$. +Рассмотрим уравнение +\begin{equation} + a_1(x) \cdot \frac{\partial u}{\partial x_1}(x) + \dots + a_n(x) \cdot \frac{\partial u}{\partial x_n}(x) = 0. +\end{equation} +Его решением является функция $u: D \to \mathbb R$, где $D \subset \Omega$ --- область и $u \in C^1$, при подстановке которой получается тождественный ноль. +В сокращённой записи +\[ + \left< a(x), \frac{\partial u}{\partial x}(x) \right> = 0. +\] + +\textbf{Определение.} Такое уравнение называется \textit{линейным однородным уравнением в частных производных первого порядка}. + +\textbf{Определение.} Система +\begin{equation} + x' = a(x) +\end{equation} +называется \textit{характеристической системой} уравнения. + +Найдём связь между решениями уравнения (1) и его характеристической системы (2). +Пусть $\overline x \in \Omega$ --- какая-то точка, причём $a(\overline x) \ne 0$. + +\textbf{Теорема.} 1) Любой первый интеграл системы (2) является решением системы (1). + +2) Пусть $v_1, \dots, v_{n-1}: \Omega \to \mathbb R$ --- независимые первые интегралы системы (2). +Тогда существует окрестность $D$ точки $\overline x$, такая что для любого решения $u: D \to \mathbb R$ уравнения (1) существует гладкая функция $F$, такая что $u(x) \equiv F(v_1(x), \dots, v_{n-1}(x))$. + +\textbf{Доказательство.} 1) Пусть $u(\cdot)$ --- первый интеграл (2). +По критерию первого интеграла $\left \equiv 0$, что мы и хотели. + +2) По теореме о первом интеграле существует окрестность $D$, такая что любой первый интеграл в ней представим в виде $F(v_1(x), \dots, v_{n-1}(x))$. +Рассмотрим произвольное решение $u: D \to \mathbb R$ уравнения (1). +Раз решение, то $\left \equiv 0$, а значит, $u(\cdot)$ --- первый интеграл системы (2), то есть имеет искомое представление в окрестности $D$. + +\QED + +Пусть заданы гладкие функции $g, \phi: \Omega \to \mathbb R$, причём $\frac{\partial g}{\partial x}(x) \ne 0$ на $\Omega$, и $g(\overline x) = 0$. +Тогда существует непустое множество $\gamma := \{x: g(x) = 0\}$, более того, это $(n-1)$--мерная поверхность. +Рассмотрим задачу Коши +\begin{equation} + \begin{cases} + \left \equiv 0 \\ + u(x) = \phi(x) \text{ при $x \in \gamma$} + \end{cases}. +\end{equation} +Как и у любой уважающей себя задачи Коши, для неё есть теорема о существовании и единственности решения, но это чуть позже. + +\textbf{Определение.} $\overline x$ называется \textit{характеристической точкой} задачи (3), если $\left = 0$. + +\textbf{Теорема.} Пусть точка $\overline x$ не является характеристической. +Тогда существует окрестность $D$ точки $\overline x$ и функция $u: D \to \mathbb R$, такая что $u$ является единственным решением (3) в этой окрестности. + +\textbf{Доказательство.} Мы знаем, что $a(\overline x) \ne 0$. +Поэтому можно применить теорему о первых интегралах: существует область $\widetilde D$ точки $\overline x$, в которой есть независимые первые интегралы $v_1, \dots, v_{n-1}: \widetilde D \to \mathbb R$ системы (2). +Рассмотрим систему +\[ + \begin{cases} + v_1(x) = u_1 \\ + \vdots \\ + v_{n-1}(x) = u_{n-1} \\ + g(x) = \Theta + \end{cases}. +\] +(здесь все значения в правых частях --- это параметры) +Хотим применить теорему об обратной функции, проверим, что условия выполнены. +Для этого рассмотрим матрицу Якоби: +\[ + A = + \begin{pmatrix} + \frac{\partial v_1}{\partial x}(\overline x) \\ + \vdots \\ + \frac{\partial v_{n-1}}{\partial x}(\overline x) \\ + \frac{\partial g}{\partial x}(\overline x) \\ + \end{pmatrix} +\] +Докажем от противного, что она невырождена: пусть +\[ + \frac{\partial g}{\partial x}(\overline x) = \sum_{j=1}^{n-1} \lambda_j \frac{\partial v_j}{\partial x}(\overline x). +\] +Это рассматривать достаточно, так как первые $n - 1$ строк точно линейно независимы. +Тогда +\[ + \left< a(\overline x), \frac{\partial g}{\partial x}(\overline x) \right> = \sum_{j=1}^{n-1} \lambda_j \left< a(\overline x), \frac{\partial v_j}{\partial x}(\overline x) \right> = 0, +\] +так как это первые интегралы. +Противоречие с тем, что $\overline x$ не является характеристической точкой. + +Теперь по теореме об обратной функции найдётся окрестность $\Gamma$ точки $(v_1(\overline x), \dots, v_{n-1}(\overline x), 0)$ (в конце ноль, так как $g(\overline x) = 0$) и $\chi: \Gamma \to \mathbb R^n$, $\chi \in C^1$, такие что +\[ + \begin{cases} + v_1(\chi(u_1, \dots, u_{n-1}, \Theta)) = u_1 \\ + \vdots \\ + v_{n-1}(\chi(u_1, \dots, u_{n-1}, \Theta)) = u_{n-1} \\ + g(\chi(u_1, \dots, u_{n-1}, \Theta)) = \Theta \\ + \end{cases} +\] +и +\[ + \chi(v_1(x), \dots, v_{n-1}(x), g(x)) \equiv x. +\] +Тогда $\chi(u_1, \dots, u_{n-1}, \Theta)$ является единственным решением построенной системы, причём $\chi(v_1(\overline x), \dots, v_{n-1}(\overline x), 0) = \overline x$. + +Теперь восстановим единственное решение задачи Коши. +Положим $u(x) := \phi(\chi(v_1(x), \dots, v_{n-1}(x), 0))$. +Возьмём достаточно малую окрестность $D$ точки $\overline x$, такую что для всех $x \in D$ выполнено $(v_1(x), \dots, v_{n-1}(x), 0) \in \Gamma$. + +Почему это решение уравнения в частных производных? Потому что взяли гладкую функцию от первых интегралов. +\sloppy Почему это решение задачи Коши? При $x \in \gamma$ выполнено $g(x) = 0$, то есть $u(x) = \phi(\chi(v_1(x), \dots, v_{n-1}(x), g(x))) = \phi(x)$, так как обратная функция. + +Единственность остаётся в качестве упражнения. +Доказательство от автора конспекта: рассмотрим произвольное решение $F(v_1, \dots, v_{n-1})$ и точку $x_1 \in D$. +Положим $x_2 = \chi(v_1(x_1), \dots, v_{n-1}(x_1), 0) \in \gamma$. +Заметим, что $v_i(x_2) = v_i(x_1)$ для всех $i$, так как $\chi$ --- обратная к отображению $x \mapsto (v_1(x), \dots, v_{n-1}(x), g(x))$. +Следовательно, $F(v_1(x_1), \dots, v_{n-1}(x_1)) = F(v_2(x_2), \dots, v_{n-1}(x_2)) = \phi(x_2)$, то есть $F(v_1, \dots, v_{n-1})$ однозначно определено в $x_1$. + +\QED + +\section{Вариационное исчисление} +\subsection{Простейшая задача вариационного исчисления} +Рассмотрим пространство функций $C^1[a, b]$, как нормированное пространство, и его подмножество $M$. +Зададим на нём метрику $\rho(x_1, x_2) = \max_{t \in [a, b]} |x_1(t) - x_2(t)|$ и $\rho_1(x_1, x_2) = \rho(x_1, x_2) + \rho(x_1', x_2')$. +Пусть у нас есть функционал $I: M \to\ \mathbb R$. + +\textbf{Определение.} Точка $\widehat x \in M$ называется \textit{слабым локальным минимумом} функционала $I$, если $\exists \varepsilon > 0: \forall x \in M~(\rho_1(x, \widehat x) < \varepsilon \Rightarrow I(\widehat x) \le I(x))$ +Аналогично для максимума. + +\textbf{Определение.} Точка $\widehat x \in M$ называется \textit{сильным локальным минимумом}, если вместо $\rho_1$ используется $\rho$. + +\textbf{Утверждение.} Если $\widehat x$ --- сильный локальный минимум, то он также является слабым. Очевидно. + +Рассмотрим дважды гладко дифференцируемую (в $C^2$) функцию $F: \mathbb R^3 \to \mathbb R$ и числа $A, B \in \mathbb R$. +Положим +\[ + M = \{x \in C^1[a, b]: x(a) = A, x(b) = B\} +\] +и +\[ + I(x) := \int_a^b F(t, x(t), x'(t)) dt, x \in M. +\] + +\textbf{Определение.} \textit{Простейшей задачей вариационного исчисления} называется задача нахождения слабых локальных экстремумов функционала $I$. + +Положим +\[ + \mathring C^1[a, b] := \{x \in C^1[a, b]: x(a) = x(b) = 0\}. +\] +Тогда множество $M$ замкнуто относительно прибавления функций из $\mathring C^1[a, b]$. + +Положим для $\widehat x \in M$, $\widehat x \in C^2$, $\eta \in \mathring C^1[a, b]$ функцию +\[ + \phi(\mu) := I(\widehat x + \mu \eta) = \int_a^b F(t, \widehat x(t) + \mu \eta(t), \widehat x'(t) + \mu \eta'(t)) dt. +\] +Продифференцируем её: +\[ + \phi'(\mu)|_{\mu = 0} = \int_a^b \left( \frac{\partial F}{\partial x}(t, \widehat x(t), \widehat x'(t)) \eta(t) + \frac{\partial F}{\partial x'}(t, \widehat x(t), \widehat x'(t)) \eta'(t) \right) dt = +\] +Проинтегрируем по частям: +\[ + = \int_a^b \frac{\partial F}{\partial x}(t, \widehat x(t), \widehat x'(t)) \eta(t) dt + \frac{\partial F}{\partial x'}(\dots) \eta(t) \big|_a^b - \int_a^b \frac{d}{dt} \frac{\partial F}{\partial x'}(\dots) \eta(t) dt = +\] +Второе слагаемое рано нулю, так как $\eta(a) = \eta(b) = 0$ +\[ + = \int_a^b \left(\frac{\partial F}{\partial x}(\dots) - \frac{d}{dt} \frac{\partial F}{\partial x'}(\dots) \right) \eta(t) dt. +\] +Таким образом, если $\widehat x$ является слабым локальным минимумом, то 0 --- стационарная точка функции $\phi$. + +\textbf{Определение.} $\delta I[\widehat x, \eta] := \phi'(0)$ --- первая вариация функционала $I$ на $\widehat x$. + +\textbf{Утверждение.} Если $\widehat x \in M$ --- слабый локальный экстремум, то для любого $\eta \in \mathring C^1[a, b]$ точка $0$ является локальным экстремумом функции $\phi$. + +\textbf{Доказательство.} Будем считать, что мы работаем с точкой минимума. +По определению существует $\varepsilon > 0$, такое что для любого $x \in M$, удовлетворяющему $\rho_1(x, \widehat x) < \varepsilon$ верно $I(x) \ge I(\widehat x)$. + +Тогда для любого $\eta \in \mathring C^1[a, b]$, не равного тождественному нулю, положим $\delta = \frac{\varepsilon}{\rho_1(\eta, 0)}$. +Возьмём произвольный $\mu \in (-\delta, \delta)$. +Имеем +\[ + \rho_1(\widehat x + \mu \eta, \widehat x) = \max_{t \in [a, b]} |\mu \eta(t)| + \max_{t \in [a, b]} |\mu \eta'(t)| = +\] +\[ + = |\mu| \left( \max_{t \in [a, b]} |\eta(t)| + \max_{t \in [a, b]} |\eta'(t)| \right) = |\mu| \cdot \rho_1(\eta, 0) < \varepsilon. +\] +Таким образом, мы попали в $\varepsilon$-окрестность функции $\widehat x$, то есть $\phi(\mu) = I(\widehat x + \mu \eta) \ge I(\widehat x) = \phi(0)$. + +\QED + +\textbf{Утверждение.} (Лемма Лагранжа) Пусть $v \in C[a, b]$, такая что $\forall \eta \in \mathring C^1[a, b]$ выполнено +\[ + \int_a^b v(t) \eta(t) dt = 0. +\] +Тогда $v(t) \equiv 0$. + +\textbf{Доказательство.} От противного: допустим, что существует $\tilde \tau \in [a, b]$, такое что $v(\tilde \tau) > 0$. +Тогда существует $\tau \in (a, b)$, такое что $v(\tau) > 0$ из непрерывности. +Отсюда существует $\varepsilon > 0$, такой что $(\tau - \varepsilon, \tau + \varepsilon) \subset [a, b]$ и $v(t) > \frac{v(\tau)}{2}$ для $t \in (\tau - \varepsilon, \tau + \varepsilon)$. + +Теперь построим гладкую функцию, принимающую положительные значения на $T := (\tau - \varepsilon, \tau + \varepsilon)$ и ноль вне этого интервала. +В частности, +\[ + \eta(t) := + \begin{cases} + (t - (\tau - \varepsilon))^2 (t - (\tau + \varepsilon))^2, & t \in T \\ + 0, & \text{иначе} + \end{cases}. +\] +Отсюда по условию +\[ + 0 = \int_a^b v(t) \eta(t) dt = \int_T v(t) \eta(t) dt. +\] +Противоречие, так как мы взяли интеграл по непустому интервалу произведения двух положительных функций. + +\QED + +\textbf{Теорема.} Пусть $F \in C^2$, $\widehat x \in M$, $\widehat x \in C^2$ --- слабый локальный экстремум. +Тогда $\widehat x$ является решением уравнения Эйлера +\[ + \frac{\partial F}{\partial x} (t, x, x') - \frac{d}{dt} \frac{\partial F}{\partial x'} (t, x, x') = 0. +\] + +\textbf{Доказательство.} Поскольку $\widehat x$ является слабым локальным экстремумом, по утверждению для любой $\eta \in \mathring C^1[a, b]$ точка $0$ является локальным экстремумом функции $\phi$, то есть $\phi'(0) = 0$. +Выражение для $\phi'(0)$ мы уже писали выше --- теперь заметим, что по утверждению про локальный экстремум $\phi$ получаем $\phi'(0) = 0$, а по лемме Лагранжа --- +\[ + \frac{\partial F}{\partial x} (t, \widehat x, \widehat x'(t)) - \frac{d}{dt} \frac{\partial F}{\partial x'} (t, \widehat x, \widehat x'(t)) \equiv 0. +\] +Следовательно, $\widehat x$ является решением уравнения Эйлера. + +\QED + +\textbf{Замечание.} Повсюду мы говорили, что $\widehat x \in C^2$. +Но теоретически экстремумом может являться и функция из $C^1$. +Пусть $F, \widehat x \in C^1$. +Если $\widehat x$ --- слабый локальный экстремум, то функция +\[ + t \mapsto \frac{\partial F}{\partial x'} (t, \widehat x(t), \widehat x'(t)) +\] +непрерывно дифференцируема, и $\widehat x$ является решением уравнения Эйлера. +Иными словами, прошлая теорема верна и в этом случае, но доказывать мы это не будем. + +\textbf{Определение.} Решение уравнения Эйлера называется \textit{экстремальным}. +Тогда прошлую теорему можно переформулировать, как ``слабый локальный экстремум является экстремальным``. + +\subsection{Задача о брахистохроне} +Людям с острой непереносимостью физики рекомендуется пропустить. +Остальным: для понимания достаточно школьных знаний. + +Пусть у нас есть две материальные точки $A$ и $B$, причём $A$ выше $B$. +Мы хотим провести между ними кривую, такую что материальная точка, двигаясь по ней исключительно под силой тяжести, достигнет точку $B$ за минимальное время. +Эта кривая называется \textit{брахистрохоной}. + +\begin{figure}[ht] + \centering + \incfig{811}{0.5\linewidth} +\end{figure} + +Запишем закон сохранения энергии: +\[ + mg \cdot y(x) = \frac{m v^2(x)}{2}. +\] +Тогда +\[ + v(x) = \sqrt {2g \cdot y(x)}. +\] +Запишем скорость, как производную от пройденного пути $s$: +\[ + v(x) = \frac{ds}{dt} = \frac{ds}{dx} \cdot \frac{dx}{dt} = \frac{d}{dx} \int_0^x \sqrt{ 1 + (y'(\xi))^2 } d\xi \cdot \frac{dx}{dt} = \sqrt{1 + (y'(x))^2} \cdot \frac{dx}{dt}. +\] +Выразим $dt$: +\[ + dt = \frac{\sqrt{1 + (y'(x))^2}}{\sqrt{2g \cdot y(x)}} dx, +\] +то есть +\[ + t = \int_0^b \sqrt{ \frac{1 + (y'(x))^2}{2g \cdot y(x)}} \cdot dx. +\] +Итак, итак, простейшая вариационная задача. +Выкинем лишние константы: +\[ + t(y) = \int_0^b \sqrt{ \frac{1 + (y')^2}{y}} dx \to \min. +\] +Здесь $y(0) = 0$, $y(b) = B$. +Уравнением Эйлера будем +\[ + \sqrt{1 + (y')^2} \left( -\frac{1}{2} \cdot \frac{1}{(\sqrt y)^3} \right) - \frac{d}{dx} \cdot \frac{2y'}{\sqrt y \cdot 2 \cdot \sqrt{1 + (y')^2}} = 0. +\] +Заметим, что это то же самое, что +\[ + \frac{d}{dx} \left( \sqrt{\frac{1 + (y')^2}{y}} - \frac{(y')^2}{\sqrt{y (1 + (y')^2)}} \right) = 0. +\] +То есть $y(y + (y')^2) = c_1$ --- константа. +Сделаем замену: $y'(x(\tau)) = \ctg(\tau)$. +Тогда +\[ + y(x(\tau)) = c_1 \sin^2(\tau) = \frac{1}{2} c_1 (1 - \cos(2\tau)). +\] +Теперь +\[ + dx = \frac{dy}{y'} = \frac{2c_1 \sin(\tau) \cos(\tau)}{\ctg(\tau)} d\tau = c_1(1 - \cos(2\tau)) d\tau. +\] +Значит, +\[ + x(\tau) = c_2 + \frac{c_1}{2} (2\tau - \sin(2\tau)). +\] +Теперь остаётся проверить, какие из них являются экстремумами, делается напрямую. + +\setcounter{equation}{0} +\subsection{Задача со свободным концом} +Пусть $F: \mathbb R^3 \to \mathbb R \in C^2$, числа $a, b, A \in \mathbb R$ фиксированы. +Рассмотрим функционал +\begin{equation} + I(x) = \int_a^b F(t, x(t), x'(t)) dt +\end{equation} +при условии $x(a) = A$. + +Мы хотим найти экстремумы $I: M \to \mathbb R$, где $M = \{x \in C^1[a, b]: x(a) = A\}$. + +\textbf{Теорема.} Пусть $\widehat x \in M$, $\widehat x \in C^2$ --- решение (1), то есть слабый локальный экстремум $I$. +Тогда $\widehat x$ является решением уравнения Эйлера +\[ + \frac{\partial F}{\partial x}(t, x, x') - \frac{d}{dt} \frac{\partial F}{\partial x'}(t, x, x') = 0, +\] +а также +\begin{equation} + \frac{\partial F}{\partial x'}(b, \widehat x(b), \widehat x'(b)) = 0. +\end{equation} + +\textbf{Доказательство.} Зафиксируем допустимое приращение $\eta \in C^1[a, b]$, $\eta(a) = 0$. +Положим +\[ + \Phi(\alpha) := I(\widehat x + \alpha \eta) = \int_a^b F(t, \widehat x(t) + \alpha \eta(t), \widehat x'(t) + \alpha \eta'(t)) dt. +\] +Найдём производную в нуле: +\[ + \Phi'(0) = \int_a^b \left( \frac{\partial F}{\partial x}(t, \widehat x(t), \widehat x'(t)) \eta(t) + \frac{\partial F}{\partial x'} (t, \widehat x(t), \widehat x'(t)) \eta'(t) \right) dt = +\] +Проинтегрируем по частям +\[ + = \int_a^b \frac{\partial F}{\partial x}(\dots)\eta(t) dt + \frac{\partial F}{\partial x'} (t, \widehat x(t), \widehat x'(t)) \eta(t) \bigg|_{t=a}^{t=b} - \int_a^b \frac{d}{dt} \frac{\partial F}{\partial x'}(\dots) \eta(t) dt = +\] +\[ + = \int_a^b \left( \frac{\partial F}{\partial x}(\dots) - \frac{d}{dt} \frac{\partial F}{\partial x'}(\dots) \right) \eta(t) dt + \frac{\partial F}{\partial x'}(b, \widehat x(b), \widehat x'(b)) \eta(b), +\] +так как $\eta(a) = 0$. + +Как доказывалось в простейшей задаче вариационного исчисления, $0$ является локальным экстремумом функции $\Phi$, то есть $\Phi'(0) = 0$. +Таким образом, выражение выше равно нулю. + +Подставим в выражение выше функцию $\eta$ с $\eta(b) = 0$, тогда останется только +\[ + \int_a^b \left( \frac{\partial F}{\partial x}(t, \widehat x(t), \widehat x'(t)) - \frac{d}{dt} \frac{\partial F}{\partial x'}(t, \widehat x(t), \widehat x'(t)) \right) \eta(t) dt = 0. +\] +По лемме Лагранжа получаем уравнение Эйлера. +Теперь остаётся только +\[ + \frac{\partial F}{\partial x'} (b, \widehat x(b), \widehat x'(b)) \eta(b) = 0 +\] +для всех функций $\eta$, то есть +\[ + \frac{\partial F}{\partial x'} (b, \widehat x(b), \widehat x'(b)) \equiv 0. +\] + +\QED + +\textbf{Замечание.} Опять же если $F, \widehat x \in C^1$, то функция +\[ + \frac{\partial F}{\partial x'}(t, \widehat x(t), \widehat x'(t)) +\] +непрерывно дифференцируема по $t$, $\widehat x$ является решением уравнения Эйлера и выполняется (2). + +\textbf{Замечание 2.} Можно рассматривать и задачу с другим свободным концом, тогда (2) будет иметь вид +\[ + \frac{\partial F}{\partial x'}(a, \widehat x(a), \widehat x'(a)) = 0. +\] +А если оба конца свободны, то условие выше и условие (2) выполняются одновременно. + +\subsection{Задача для функционалов, зависящих от нескольких функций} +Пусть у нас есть функция $F: \mathbb R \times \mathbb R^n \times \mathbb R^n \to \mathbb R \in C^2$, заданы числа $a, b \in \mathbb R$ и $A, B \in \mathbb R^n$, где $A = (A_i)_{i = \overline{1, n}}$ и $B = (B_i)_{i = \overline{1, n}}$. + +Рассмотрим задачу нахождения экстремумов функционала +\begin{equation} + I(x) = \int_a^b F(t, x(t), x'(t)) dt, +\end{equation} +где $I: M \to \mathbb R$ для $M = \{x \in C^1([a, b], \mathbb R^n)~|~x(a) = A, x(b) = B\}$. +Мы будем искать слабый локальный минимум/максимум по метрике +\[ + \rho_1(x, u) = \max_{a \le t \le b} |x(t) - u(t)| + \max_{a \le t \le b}|x'(t) - u'(t)|. +\] + +\textbf{Теорема.} Пусть $\widehat x \in M$, $\widehat x \in C^2$ --- решение (3), то есть слабый локальный экстремум $I$. +Тогда $\widehat x$ является решением уравнения Эйлера +\[ + \frac{\partial F}{\partial x_i}(t, x, x') - \frac{d}{dt} \frac{\partial F}{\partial x_i'}(t, x, x') = 0 +\] +для всех $i = \overline{1, n}$. + +\textbf{Доказательство.} Можно сделать те же самые рассуждения с леммой Лагранжа, как и в двух предыдущих случаях, но можно доказать проще с использованием уже полученных результатов. + +Положим +\[ + M_1 := \{x_1 \in C^1[a, b]: x_a(a) = A_1, x_1(b) = B_1\}. +\] +и +\[ + I_1(x_1) = \int_a^b F(t, x_1(t), \widehat x_2(t), \dots, \widehat x_n(t), x_1'(t), \widehat x_2'(t), \dots, \widehat x_n'(t)) dt. +\] +Так как $\widehat x$ является решением (3), $\widehat x_1$ является решением задачи нахождения экстремума $I_1(x_1)$, так как нужно внимательно посмотреть на то, что получается при подстановке. + +Следовательно, по теореме для простейшей задачи вариационного исчисления +\[ + \frac{\partial F}{\partial x_1}(t, \widehat x_1(t), \dots, \widehat x_n(t), \widehat x_1'(t), \dots, \widehat x_n'(t)) - +\] +\[ + - \frac{d}{dt} \frac{\partial F}{\partial x_1'}(t, \widehat x_1(t), \dots, \widehat x_n(t), \widehat x_1'(t), \dots, \widehat x_n'(t)) \equiv 0. +\] +Теперь аналогично доказываем для $x_2, \dots, x_n$. + +\QED + +\subsection{Функционалы, содержащие производные высших порядков} +Пусть у нас есть $F: \mathbb R^{n + 2} \to \mathbb R$, $F \in C^{n+1}$, а также числа $a, b, A_i, B_i \in \mathbb R$ для $i = \overline{0, n - 1}$. +Рассмотрим функционал +\begin{equation} + I(x) = \int_a^b F(t, x(t), x'(t), \dots, x^{(n)}(t)) dt. +\end{equation} +при условиях $x^{(i)}(a) = A_i$ и $x^{(i)}(b) = B_i$ для всех $i$. +Как обычно, положим +\[ + M = \{x \in C^n[a, b]: x^{(i)}(a) = A_i, x^{(i)}(b) = B_i \text{ для всех $i$}\}. +\] +Положим метрику +\[ + \rho_n(x, u) = \sum_{i=0}^{n} \rho(x^{(i)}, u^{(i)}). +\] +Опять же хотим найти слабый локальный минимум. + +Введём множество допустимых вариаций: +\[ + \mathring C^n[a, b] = \{\eta \in C^n[a, b]: \eta^{(i)}(a) = \eta^{(i)}(b) = 0 \text{ для всех $i$}\}. +\] +Возьмём произвольную допустимую вариацию $\eta \in \mathring C^n[a, b]$, $\widehat x \in C^{2n}$ и положим +\[ + \Phi(\alpha) = I(\widehat x + \alpha \eta) = \int_a^b F(t, \widehat x(t) + \alpha \eta(t), \dots, \widehat x^{(n)}(t) + \alpha \eta^{(n)}(t)) dt. +\] +Дифференцируем по параметру в нуле: +\[ + \Phi'(0) = \int_a^b \sum_{i=0}^{n} \frac{\partial F}{\partial x^{(i)}} (t, \widehat x(t), \dots, \widehat x^{(n)}(t)) \eta^{(i)}(t) dt = +\] +Интегрируем, как обычно, по частям всё, кроме первого слагаемого, и сразу, как и раньше, сокращаем нули +\[ + = \int_a^b \frac{\partial F}{\partial x}(\dots) \eta(t) dt - \int_a^b \sum_{i=1}^{n} \frac{d}{dt} \frac{\partial F}{\partial x^{(i)}}(\dots) \eta^{(i-1)}(t) dt = +\] +Отправим первое слагаемое суммы в первое слагаемое всего выражения, а остаток проинтегрируем по частям +\[ + = \int_a^b \left(\frac{\partial F}{\partial x}(\dots) - \frac{d}{dt} \frac{\partial F}{\partial x^{(1)}}(\dots) \right) \eta(t) dt + \sum_{i=2}^{n} \frac{d^2}{dt^2} \frac{\partial F}{\partial x^{(i)}}(\dots) \eta^{i-2}(t) dt = +\] +Делаем то же самое: +\[ + = \int_a^b \left( \frac{\partial F}{\partial x} (\dots) - \frac{d}{dt} \frac{\partial F}{\partial x^{(1)}} (\dots) + \frac{d^2}{dt^2} \frac{\partial F}{\partial x^{(2)}}(\dots) \right) \eta(t) dt + \dots = +\] +По методу неполной индукции получаем, что это всё равняется +\[ + \int_a^b \left( \sum_{i=0}^{n} (-1)^i \frac{d^i}{dt^i} \frac{\partial F}{\partial x^{(i)}} (\dots) \right) \eta(t) dt. +\] + +\textbf{Замечание.} Если посмотреть на $n$-ое слагаемое полученной суммы, то можно увидеть, почему условия на непрерывную дифференцируемость функций именно такие. + +\textbf{Лемма.} (Лагранжа) Пусть $f \in C[a, b]$ и $\int_a^b f(t) \eta(t) dt = 0$ для всех $\eta \in \mathring C^n[a, b]$. +Тогда $f(t) \equiv 0$. + +\textbf{Доказательство.} Всё так же, как и в одномерном случае. +Точная формула для функции: +\[ + \eta(t) = + \begin{cases} + (t - (\tau + \varepsilon))^{2n} (t - (\tau - (\tau - \varepsilon))^{2n}, & t \in (\tau - \varepsilon, \tau + \varepsilon) \\ + 0, & \text{иначе} + \end{cases} . +\] +Как альтернатива, можно использовать функцию пенёк из 3 семестра. + +\QED + +\textbf{Теорема.} Пусть $F \in C^{n+1}$, $\widehat x \in M$ --- слабый локальный экстремум, причём $\widehat x \in C^{2n}$. +Тогда $\widehat x$ является решением уравнения Эйлера, которое в этом случае имеет вид +\[ + \frac{\partial F}{\partial x}(t, x, x', \dots, x^{(n)}) - \frac{d}{dt} \frac{\partial F}{\partial x'} (t, x, x', \dots, x^{(n)}) + \frac{d^2}{dt^2} \frac{\partial F}{\partial x''}(\dots) + \dots + +\] +\[ + + (-1)^n \frac{d^n}{dt^n} \frac{\partial F}{\partial x^{(n)}}(\dots) \equiv 0. +\] + +\textbf{Доказательство.} Ничего не меняется. Если $\widehat x$ --- слабый локальный экстремум, то $0$ --- локальный экстремум функции $\Phi$, то есть $\Phi'(0)$, откуда по равенству, полученному выше, и лемме Лагранжа получаем искомое. + +\QED + +\textbf{Замечание.} И то же самое замечание: достаточно $C^n$ для всех функций. + +\section{Пропущенная лекция} +Если я не ошибаюсь, в экзамене её не будет. + +\section{Приложения в социологии} +\subsection{Предсказание популяции в вакууме} +Пусть $x(t)$ --- численность популяции в момент времени $t$, $k$ --- некоторое постоянное число, \textit{поддерживающая ёмкость среды}, то есть максимальное число людей, существование которых может поддержать среда, $r$ --- скорость размножения. + +Уравнение Ферхюльста или логистическое уравнение --- это +\[ + x' = rx \left(1 - \frac{x}{k} \right), +\] +и оно позволяет довольно точно описывать динамику численности населения. +Его решением является +\[ + x(t) = \frac{k \cdot x_0 \cdot e^{rt}}{k + x_0(e^{rt} - 1)}, +\] +где $x_0 = x(0)$ --- начальная численность популяции. +У него есть два положения равновесия --- $0$ и $k$. + +\subsection{Предсказание популяции хищников и жертв} +Пусть $x(t)$ --- популяция жертв, $y(t)$ --- популяция хищников, $\alpha$ --- коэффициент размножения, $\beta$ --- количество жертв, которое съедает хищник. +Тогда их можно описать системой +\[ + \begin{cases} + x' = (\alpha - \beta y) x \\ + y' = (-a + bx) y + \end{cases}, +\] +где $a$ и $b$ --- константы. + +\section{Приложения в математическом анализе} +\subsection{Теоремы о среднем для функций многих переменных} +Пусть $x_0 \in \mathbb R^n$, $R > 0$, $f: \mathbb R^n \to \mathbb R$ --- дифференцируемая функция, $B = B(x_0, R)$ --- шар, $S$ --- его граница. +Тогда если $f|_S = const$, то найдётся $\xi \in \Int(B)$, такая что $f'(\xi) = 0$ --- аналог теоремы Ролля. + +\textbf{Теорема.} (Аналог теоремы Лагранжа) Найдётся $\xi \in B$, такая что +\[ + |f'(\xi)| \le \frac{\sup_S(f) - \inf_S(f)}{2R}. +\] +В частности, отсюда следует аналог теоремы Ролля выше. + +\textbf{Доказательство.} Умаляя общность, будем считать, что $f \in C^2$. +Предположим противное, пусть $\gamma = \frac{\sup_S(f) - \inf_S(f)}{2R}$, тогда для всех $\gamma \in B$ выполнено $|f'(\xi)| > \gamma$. +Тогда, в силу компактности шара, производную можно отделить от $\gamma$: найдётся $\varepsilon > 0$, такое что для всех $\gamma \in B$ верно $|f'(\xi)| \ge \gamma + \varepsilon$. + +Рассмотрим задачу Коши +\[ + \begin{cases} + x' = \frac{f'(x)}{|f'(x)|^2} \\ + x(0) = x_0 + \end{cases} + . +\] +Так как $f \in C^2$, $\frac{f'(x)}{|f'(x)|^2} \in C^1$, так что можно применить теорему о существовании и единственности решения задачи Коши: существует интервал $I$, числа $a < 0$ и $b > 0$ и решение $x: I \to \mathbb R^n$, такие что: +\begin{itemize} + \item $x$ является решением задачи Коши. + \item $(a, b) \subset I$. + \item $x(a), x(b) \in S$ и $x(t) \in \Int(B)$ для всех $t \in (a, b)$. +\end{itemize} + +Посчитаем производную от $f(x(t))$: +\[ + \frac{d}{dt} f(x(t)) \equiv \left \equiv \left \equiv 1. +\] +Отсюда мы знаем, что $f(x(t))$ имеет вид $t + const$, откуда $f(x(b)) - f(x(0)) = b$ и $f(x(0)) - f(x(a)) = -a$. +Также мы знаем, что +\[ + R = |x(b) - x(0)| = \left| \int_0^b x'(t) dt \right| \le \int_0^b \left| \frac{f'(x(t))}{|f'(x(t))|^2} \right| dt = \int_0^b \frac{dt}{|f'(x(t))|} \le +\] +Теперь по предположению, сделанному в начале, мы знаем, что $|f'(x(t))| \ge \gamma + \varepsilon$, то есть +\[ + \le \int_0^b \frac{1}{\gamma + \varepsilon} dt = \frac{b}{\gamma + \varepsilon}. +\] +Следовательно, $b \ge R(\gamma + \varepsilon)$ и аналогично $-a \ge R(\gamma + \varepsilon)$. +Тогда и $f(x(b)) - f(x(0)), f(x(0)) - f(x(a)) \ge R(\gamma + \varepsilon)$. +Сложим сии два неравенства: $f(x(b)) - f(x(a)) \ge 2R(\gamma + \varepsilon)$. +Теперь поймём, почему это противоречие, раскрыв $\gamma$: +\[ + f(x(b)) - f(x(a)) \ge 2R \varepsilon + \sup_S(f) - \inf_S(f). +\] +Но разность слева не превосходит $\sup_S(f) - \inf_S(f)$, просто из определения супремума и инфимума, --- противоречие. + +\QED + +\textbf{Теорема.} Пусть $x_0 = 0$, $f \in C^1$. Тогда существует $\xi \in B$, такая что +\[ + |f'(\xi)| \le \frac{\sup_B |f(x) - f(-x)|}{2R}. +\] +Её интерес заключается в том, что если функция $f$ чётная или близка к чётной, то оценка получается очень сильная. + +\section{Приложения вариационного исчисления} +Пусть у нас на прямой стоит тележка. Изначально она стоит в $x(0) = 0$, и её скорость --- $x'(0) = 0$. +Мы хотим подвинуть её в точку $a > 0$ за минимальное время $T$ так, чтобы она не пролетела её, то есть $x'(T) = 0$ и $x(T) = a$. +Всё, что мы можем, --- это применять к ней силу $u(t)$, причём она ограничена: $|u(t)| \le \gamma$, то есть $x'' = u(t)$. +Интуитивно понятно, что надо до середины толкать изо всех сил вперёд, а потом --- назад. + +Формализуем задачу: у нас есть множество функций +\[ + \{u(\cdot)~|~u:[0, T] \to \mathbb R, |u(t)| \le U, T > 0\}, +\] +уравнение $x'' = u$, а также начальные условия $x(T) = a$, $x(0) = x'(T) = x'(0) = 0$. +Решать задачу не стали :(. + +\setcounter{equation}{0} +\section{Лемма о выпрямлении траекторий} +Описание данной темы будет похоже на описание в учебнике Романко, но здесь будет более формально. + +\textbf{Определение.} Пусть $\mathcal F, \mathcal G \subset \mathbb R^n$, отображение $f: \mathcal F \to \mathbb R^n$, $f \in C^1$. +Рассмотрим уравнение +\begin{equation} + x' = f(x). +\end{equation} + +\textit{Гладкая замена переменных} --- это отображение $\gamma: \mathcal G \to \mathcal F$, такое что оно взаимно однозначно, $\gamma, \gamma^{-1} \in C^1$ и для всех $y \in \mathcal G$ выполнено $\det(\gamma'(y)) \ne 0$. +(Условие на определитель можно убрать, ибо оно следует из остальных, но для наглядности оставим) + +Зафиксируем гладкую замену переменных $\gamma$. + +\textbf{Определение.} Система (1) на $\mathcal F$ \textit{принимает вид} +\begin{equation} + y' = g(y) +\end{equation} +на $\mathcal G$, если для любого решения $y(\cdot)$ автономной системы (2) функция $x(\cdot) = \gamma(y(\cdot))$ является решением автономной системы (1). + +\textbf{Утверждение.} Если система (1) на $\mathcal F$ принимает вид (2) на $\mathcal G$, то: +\begin{enumerate} + \item Для любого решения $x(\cdot)$ автономной системы (1) функция $y(\cdot) = \gamma^{-1}(x(\cdot))$ является решением автономной системы (2). + \item Отображение $g$ из системы (2) определяется однозначно. + \item $g(y) \equiv (\gamma'(y))^{-1} f(\gamma(y))$ для $y \in \mathcal G$. +\end{enumerate} + +\textbf{Доказательство.} 1) Пусть $x: I \to \mathbb R^n$ --- решение системы (1), $\tau \in I$ --- какое-то число. +Обозначим $\widehat x := x(\tau)$, $y(t) := \gamma^{-1}(x(t))$. +Будем доказывать, что это и есть решение, для этого рассмотрим задачу Коши +\[ + \begin{cases} + y' = g(y) \\ + y(\tau) = \gamma^{-1}(\widehat x) + \end{cases}. +\] +У неё есть единственное решение $y_g(\cdot)$, тогда по определению $\gamma(y_g(\cdot))$ является решением системы (1). +В частности, это решение задачи Коши +\[ + \begin{cases} + x' = g(x) \\ + x(\tau) = \widehat x + \end{cases}. +\] +Более того, ещё одним решением этой задачи является зафиксированный в самом начале $x: I \to \mathbb R^n$. +По теореме о единственности $x(t) \equiv \gamma(y_g(t))$. +Также мы взяли $y(\cdot)$ так, что $x(t) \equiv \gamma(y(t))$, откуда $y_g(t) \equiv y(t)$. + +2) Пусть система (1) на $\mathcal F$ принимает вид +\begin{equation} + y' = h(y) +\end{equation} +на $\mathcal G$. Докажем, что $h \equiv g$. +Для любого $\widehat y \in \mathcal G$ верно, что $y_g$ --- решение задачи Коши +\[ + \begin{cases} + y' = g(t) \\ + y(0) = \widehat y + \end{cases} +\] +и $y_h$ --- решение задачи Коши +\[ + \begin{cases} + y' = h(t) \\ + y(0) = \widehat y + \end{cases}. +\] +Тогда $\gamma(y_g(\cdot))$ и $\gamma(y_h(\cdot))$ --- два решения системы (1). +Кроме того, $\gamma(y_g(0)) = \gamma(\widehat y) = \gamma(y_h(0))$, откуда получается, что оба этих решения являются решениями задачи Коши +\[ + \begin{cases} + x' = f(x) \\ + x(0) = \gamma(\widehat y) + \end{cases}. +\] +Следовательно, они совпадают в окрестности нуля, а значит, $y_g \equiv y_h$ в окрестности нуля, $y_g'(0) = y_h'(0)$, и $g(y_g(0)) = h(y_h(0))$ из условий задач Коши, то есть $g(\widehat y) = h(\widehat y)$. +Это выполнено для любого $\widehat y \in \mathcal G$, откуда $g = h$. + +3) Пусть $y(\cdot)$ --- решение системы (2), $\gamma(y(\cdot))$ --- решение (1). +Заметим, что +\[ + \frac{d}{dt} \gamma(y(t)) \equiv f(\gamma(y(t))). +\] +Тогда +\[ + \gamma'(y(t)) y'(t) \equiv f(\gamma(y(t))), +\] +то есть +\[ + y'(t) \equiv (\gamma'(y(t)))^{-1} f(\gamma(y(t))). +\] +Следовательно, $y(\cdot)$ является решением системы +\[ + y' = (\gamma'(y))^{-1} f(\gamma(y)), +\] +откуда по пункту 2 $g(y)$ может быть равно только правой части. + +\QED + +Пусть $\Omega \subset \mathbb R^n$ --- открытое множество, $f: \Gamma \to \mathbb R^n$, $f \in C^1$, а также $x^* = (x_1^*, \dots, x_n^*) \in \Omega$. + +\textbf{Лемма.} Если $f(x^*) \ne 0$ (то есть не является положением равновесия), то найдётся окрестность $\mathcal F$ точки $x^*$, окрестность $\mathcal G$ точки $(x_1^*, \dots, x_{n-1}^*, 0) =: y^*$ и гладкая замена переменных $\gamma: \mathcal G \to \mathcal F$, такая что (1) на $\mathcal F$ принимает вид +\begin{equation} + \begin{cases} + y_1' = 0 \\ + \vdots \\ + y_{n-1}' = 0 \\ + y_n' = 1 + \end{cases} +\end{equation} +на $\mathcal G$. + +Смысл утверждения: любой траектории $x(t)$ мы можем сопоставить ``прямую`` траекторию, у которой меняется только последняя координата. + +\textbf{Доказательство.} Так как $f(x^*) \ne 0$, будем считать без ограничения общности, что $f_n(x^*) \ne 0$. +Пусть $\phi(t, \xi)$ --- решение задачи Коши +\[ + \begin{cases} + x' = f(x) \\ + x(0) = \xi + \end{cases}, +\] +которое определено в какой-то окрестности точки $(0, x^*)$. +Положим +\[ + \gamma(y) := \phi(y_n, y_1, \dots, y_{n-1}, x_n^*), +\] +где $y$ берётся из окрестности точки $y^*$. +Найдём матрицу Якоби $\gamma'(y^*)$ по столбцам: +\[ + \gamma_{y_1}'(y^*) = \frac{\partial}{\partial y_1} \phi(0, y_1, x_2^*, \dots, x_{n-1}^*, x_n^*)|_{y_1 = x_1^*} = + \begin{pmatrix} + 1 \\ + 0 \\ + \vdots \\ + 0 + \end{pmatrix}. +\] +Аналогично в столбцах $2, \dots, n - 1$ будет единица в соответствующей строке. +А для $y_n$ немного по-другому: +\[ + \gamma_{y_n}'(y^*) = \frac{\partial}{\partial y_n} \phi(y_n, x^*)|_{y_n = 0} = \frac{d}{dt} \phi(t, x^*)|_{t = 0} = f(\phi(0, x^*)) = f(x^*). +\] +Таким образом, +\[ + \gamma'(y^*) = + \begin{pmatrix} + 1 & 0 & \dots & 0 & f_1(x^*) \\ + 0 & 1 & \dots & 0 & f_2(x^*) \\ + \vdots & \vdots & \ddots & \vdots & \vdots \\ + 0 & 0 & \dots & 1 & f_{n-1}(x^*) \\ + 0 & 0 & \dots & 0 & f_n(x^*) + \end{pmatrix}. +\] +Определитель равен $f_n(x^*) \ne 0$, то есть применима теорема об обратной функции: найдётся $\mathcal F$ --- окрестность $x^*$, $\mathcal G$ --- окрестность $y^*$ и гладкая замена переменных $\gamma: \mathcal G \to \mathcal F$. +Проверим, что на $\mathcal G$ система будет иметь искомый вид. +Возьмём решение системы (4): +\[ + y(t) \equiv + \begin{pmatrix} + c_1 \\ + \vdots \\ + c_{n-1} \\ + t + c_n + \end{pmatrix}. +\] +Подставим в $\gamma$: +\[ + \gamma(y(t)) \equiv \phi(t + c_n, c_1, \dots, c_{n-1}, x_n^*) +\] +--- действительно решение системы (1). + +\QED + +\textbf{Замечание.} Эту лемму можно использовать для доказательства фактов про первые интегралы, ибо у системы (4) есть $n - 1$ независимый первый интеграл --- проекции на $y_1, \dots, y_{n-1}$. + diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/001.pdf_tex b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/001.pdf_tex new file mode 100644 index 00000000..d67d802f --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/001.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file '001.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{188.61345426bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.71747798)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{001.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/001.svg b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/001.svg new file mode 100644 index 00000000..a08c4a6e --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/001.svg @@ -0,0 +1,376 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/001.svg.pdf_tex b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/001.svg.pdf_tex new file mode 100644 index 00000000..3ae12021 --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/001.svg.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3 (0e150ed6c4, 2023-07-21), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file '001.svg.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{160.29248455bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.8442442)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{001.svg.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/4-1.pdf_tex b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/4-1.pdf_tex new file mode 100644 index 00000000..ad26271c --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/4-1.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file '4-1.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{194.81296569bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.52888589)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{4-1.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/4-1.svg b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/4-1.svg new file mode 100644 index 00000000..3ca5ef62 --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/4-1.svg @@ -0,0 +1,296 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/811.pdf_tex b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/811.pdf_tex new file mode 100644 index 00000000..3ed31269 --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/811.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file '811.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{192.01028418bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.69589513)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{811.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/811.svg b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/811.svg new file mode 100644 index 00000000..5b0c2737 --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/811.svg @@ -0,0 +1,217 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/circle-portrait.pdf_tex b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/circle-portrait.pdf_tex new file mode 100644 index 00000000..394216bf --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/circle-portrait.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file 'circle-portrait.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{172.12633869bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.8468283)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{circle-portrait.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/circle-portrait.svg b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/circle-portrait.svg new file mode 100644 index 00000000..86077e53 --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/circle-portrait.svg @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/continuation-theorem.pdf_tex b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/continuation-theorem.pdf_tex new file mode 100644 index 00000000..dc654919 --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/continuation-theorem.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file 'continuation-theorem.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{176.93016473bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.85935547)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{continuation-theorem.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/continuation-theorem.svg b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/continuation-theorem.svg new file mode 100644 index 00000000..9b4e7d99 --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/continuation-theorem.svg @@ -0,0 +1,497 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/degenerate-knot.pdf_tex b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/degenerate-knot.pdf_tex new file mode 100644 index 00000000..6f1fbd2b --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/degenerate-knot.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file 'degenerate-knot.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{172.12636032bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.89456616)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{degenerate-knot.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/degenerate-knot.svg b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/degenerate-knot.svg new file mode 100644 index 00000000..704afc11 --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/degenerate-knot.svg @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/dicritical-knot.pdf_tex b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/dicritical-knot.pdf_tex new file mode 100644 index 00000000..80f2e4c2 --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/dicritical-knot.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file 'dicritical-knot.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{172.12633869bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.84682824)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{dicritical-knot.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/dicritical-knot.svg b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/dicritical-knot.svg new file mode 100644 index 00000000..298c3d5a --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/dicritical-knot.svg @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/focus-portrait.pdf_tex b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/focus-portrait.pdf_tex new file mode 100644 index 00000000..817d2ba7 --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/focus-portrait.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file 'focus-portrait.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{172.12633869bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.8468283)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{focus-portrait.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/focus-portrait.svg b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/focus-portrait.svg new file mode 100644 index 00000000..ebd22797 --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/focus-portrait.svg @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/implicit-equation-t.pdf_tex b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/implicit-equation-t.pdf_tex new file mode 100644 index 00000000..a45bf69a --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/implicit-equation-t.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file 'implicit-equation-t.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{247.13009812bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.58539794)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{implicit-equation-t.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/implicit-equation-t.svg b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/implicit-equation-t.svg new file mode 100644 index 00000000..761d11dc --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/implicit-equation-t.svg @@ -0,0 +1,495 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/knot-portrait.pdf_tex b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/knot-portrait.pdf_tex new file mode 100644 index 00000000..16267e85 --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/knot-portrait.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file 'knot-portrait.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{360.73664628bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.40475921)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{knot-portrait.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/knot-portrait.svg b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/knot-portrait.svg new file mode 100644 index 00000000..eeaac70d --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/knot-portrait.svg @@ -0,0 +1,291 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/seat-portrait.pdf_tex b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/seat-portrait.pdf_tex new file mode 100644 index 00000000..71d41d38 --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/seat-portrait.pdf_tex @@ -0,0 +1,58 @@ +%% Creator: Inkscape 1.3.2 (091e20ef0f, 2023-11-25, custom), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file 'seat-portrait.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{385.16872616bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.41540755)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{seat-portrait.pdf}}% + \end{picture}% +\endgroup% diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/seat-portrait.svg b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/seat-portrait.svg new file mode 100644 index 00000000..b4e49861 --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/figures/seat-portrait.svg @@ -0,0 +1,355 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/header.tex b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/header.tex new file mode 100644 index 00000000..010c8158 --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/header.tex @@ -0,0 +1,222 @@ +%\documentclass[a4paper,12pt, draft]{article} +\documentclass[12pt,a4paper]{article} + +%%% Работа с русским языком +\usepackage{cmap} % поиск в PDF +\usepackage{mathtext} % русские буквы в формулах +\usepackage[T2A]{fontenc} % кодировка +\usepackage[utf8]{inputenc} % кодировка исходного текста +\usepackage[english,russian]{babel} % локализация и переносы +\usepackage{indentfirst} % красная строка в первом абзаце +\frenchspacing % равные пробелы между словами и предложениями + +%%% Дополнительная работа с математикой +\usepackage{amsmath,amsfonts,amssymb,amsthm,mathtools} % пакеты AMS +\usepackage{icomma} % "Умная" запятая + +%%% Свои символы и команды +\usepackage{centernot} % центрированное зачеркивание символа +\usepackage{stmaryrd} % некоторые спецсимволы +\usepackage{dsfont} +\usepackage{amsthm} + +\renewcommand{\epsilon}{\ensuremath{\varepsilon}} +\renewcommand{\phi}{\ensuremath{\varphi}} +\renewcommand{\kappa}{\ensuremath{\varkappa}} +\renewcommand{\le}{\ensuremath{\leqslant}} +\renewcommand{\leq}{\ensuremath{\leqslant}} +\renewcommand{\ge}{\ensuremath{\geqslant}} +\renewcommand{\geq}{\ensuremath{\geqslant}} +\renewcommand{\emptyset}{\ensuremath{\varnothing}} + +\DeclareMathOperator{\sgn}{sgn} +\DeclareMathOperator{\ke}{Ker} +\DeclareMathOperator{\im}{Im} +\DeclareMathOperator{\re}{Re} + +\newcommand{\N}{\mathbb{N}} +\newcommand{\Z}{\mathbb{Z}} +\newcommand{\Q}{\mathbb{Q}} +\newcommand{\R}{\mathbb{R}} +\newcommand{\Cm}{\mathbb{C}} +\newcommand{\F}{\mathbb{F}} +\newcommand{\I}{\mathbb{I}} +\newcommand{\id}{\mathrm{id}} +\newcommand{\imp}[2]{ + (#1\,\,$\ra$\,\,#2)\,\, +} +\newcommand{\System}[1]{ + \left\{\begin{aligned}#1\end{aligned}\right. +} +\newcommand{\Root}[2]{ + \left\{\!\sqrt[#1]{#2}\right\} +} +\newcommand{\RR}{\R} +\newcommand{\NN}{\N} +\renewcommand{\subseteq}{\subset} +\newcommand{\sub}{\subset} +\newcommand{\sconstr}{\;\vert\;} +\newcommand{\thus}{\implies} + +\newcommand{\defeq}{\vcentcolon= } +\newcommand{\defev}{\stackrel{\Delta}{\Longleftrightarrow}} +\newcommand{\deriv}[3][1]{% + \ifthenelse{#1>1}{% + \frac{\dlta^{#1} {#2}}{\dlta {#3}^{#1}} + }{% + \frac{\dlta {#2}}{\dlta {#3}} + }% +} + +\renewcommand\labelitemi{$\triangleright$} + +\let\bs\backslash +\let\lra\Leftrightarrow +\let\ra\Rightarrow +\let\la\Leftarrow +\let\emb\hookrightarrow + +%%% Перенос знаков в формулах (по Львовскому) +\newcommand{\hm}[1]{#1\nobreak\discretionary{}{\hbox{$\mathsurround=0pt #1$}}{}} + +%%% Работа с картинками +\usepackage{graphicx} % Для вставки рисунков +\setlength\fboxsep{3pt} % Отступ рамки \fbox{} от рисунка +\setlength\fboxrule{1pt} % Толщина линий рамки \fbox{} +\usepackage{wrapfig} % Обтекание рисунков текстом + +%%% Работа с таблицами +\usepackage{array,tabularx,tabulary,booktabs} % Дополнительная работа с таблицами +\usepackage{longtable} % Длинные таблицы +\usepackage{multirow} % Слияние строк в таблице + +%%% Теоремы +\theoremstyle{plain} +\newtheorem{theorem}{Теорема}[section] +\newtheorem{lemma}{Лемма}[section] +\newtheorem{proposition}{Утверждение}[section] +\newtheorem{property}{Свойство}[section] +\newtheorem*{exercise}{Упражнение} +\newtheorem*{problem}{Задача} + +\theoremstyle{definition} +\newtheorem{definition}{Определение}[section] +\newtheorem*{corollary}{Следствие} +\newtheorem*{note}{Замечание} +\newtheorem*{reminder}{Напоминание} +\newtheorem*{agreement}{Соглашение} +\newtheorem*{example}{Пример} +\theoremstyle{remark} +\newtheorem*{solution}{Решение} + +%%% Оформление страницы +\usepackage{extsizes} % Возможность сделать 14-й шрифт +\usepackage{geometry} % Простой способ задавать поля +\usepackage{setspace} % Интерлиньяж +\usepackage{enumitem} % Настройка окружений itemize и enumerate +\setlist{leftmargin=25pt} % Отступы в itemize и enumerate + +\geometry{top=25mm} % Поля сверху страницы +\geometry{bottom=30mm} % Поля снизу страницы +\geometry{left=20mm} % Поля слева страницы +\geometry{right=20mm} % Поля справа страницы + +\setlength\parindent{15pt} % Устанавливает длину красной строки 15pt +\linespread{1.3} % Коэффициент межстрочного интервала +%\setlength{\parskip}{0.5em} % Вертикальный интервал между абзацами +%\setcounter{secnumdepth}{0} % Отключение нумерации разделов +%\setcounter{section}{-1} % Нумерация секций с нуля +\usepackage{multicol} % Для текста в нескольких колонках +\usepackage{soulutf8} % Модификаторы начертания +\mathtoolsset{showonlyrefs=true} % показывать номера формул только у тех, у которых есть ссылки по eqref +%%% Содержаниие +\usepackage{tocloft} +\tocloftpagestyle{main} +%\setlength{\cftsecnumwidth}{2.3em} +%\renewcommand{\cftsecdotsep}{1} +%\renewcommand{\cftsecpresnum}{\hfill} +%\renewcommand{\cftsecaftersnum}{\quad} + +%%% Шаблонная информация для титульного листа +\newcommand{\CourseName}{Дифференциальные уравнения} +\newcommand{\FullCourseNameFirstPart}{\so{ДИФФЕРЕНЦИАЛЬНЫЕ УРАВНЕНИЯ}} +\newcommand{\SemesterNumber}{IV} +\newcommand{\LecturerInitials}{Жуковский Сергей Евгеньевич} +\newcommand{\CourseDate}{весна 2024} +\newcommand{\AuthorInitials}{Лизюра Дмитрий} +\newcommand{\VKLink}{https://vk.com/id738720460} +\newcommand{\TGLink}{https://t.me/dimaliz} +\newcommand{\GithubLink}{https://github.com/MIPT-Group/Lectures_Tex_Club} + +%%% Колонтитулы +\usepackage{titleps} +\newpagestyle{main}{ + \setheadrule{0.4pt} + \sethead{\CourseName}{}{\hyperlink{intro}{\;Назад к содержанию}} + \setfootrule{0.4pt} + \setfoot{ФПМИ МФТИ, \CourseDate}{}{\thepage} +} +\pagestyle{main} + +%%% Нумерация уравнений +\makeatletter +\def\eqref{\@ifstar\@eqref\@@eqref} +\def\@eqref#1{\textup{\tagform@{\ref*{#1}}}} +\def\@@eqref#1{\textup{\tagform@{\ref{#1}}}} +\makeatother % \eqref* без гиперссылки +\numberwithin{equation}{section} % Нумерация вида (номер_секции).(номер_уравнения) +\mathtoolsset{showonlyrefs= true} % Номера только у формул с \eqref{} в тексте. + +%%% Гиперссылки +\usepackage{hyperref} +\usepackage[usenames,dvipsnames,svgnames,table,rgb]{xcolor} +\hypersetup{ + unicode=true, % русские буквы в раздела PDF + colorlinks=true, % Цветные ссылки вместо ссылок в рамках + linkcolor=black!15!blue, % Внутренние ссылки + citecolor=green, % Ссылки на библиографию + filecolor=magenta, % Ссылки на файлы + urlcolor=NavyBlue, % Ссылки на URL +} + +%%% Графика +\usepackage{tikz} % Графический пакет tikz +\usepackage{tikz-cd} % Коммутативные диаграммы +\usepackage{tkz-euclide} % Геометрия +\usepackage{stackengine} % Многострочные тексты в картинках +\usetikzlibrary{angles, babel, quotes} + +%\usepackage{paratype} +%\usepackage{euler} + +%\usepackage{microtype} + +%\everymath{\displaystyle} + +% https://tex.stackexchange.com/questions/44235/is-there-a-way-to-do-an-upside-down-widehat +\DeclareFontFamily{U}{mathx}{\hyphenchar\font45} +\DeclareFontShape{U}{mathx}{m}{n}{ + <5> <6> <7> <8> <9> <10> + <10.95> <12> <14.4> <17.28> <20.74> <24.88> + mathx10 + }{} +\DeclareSymbolFont{mathx}{U}{mathx}{m}{n} +\DeclareFontSubstitution{U}{mathx}{m}{n} +\DeclareMathAccent{\widecheck}{0}{mathx}{"71} + +% \usepackage{transparent} + +\usepackage{pdfpages} +\usepackage{import} +\newcommand{\QED}{$\hfill\square$} +\newcommand{\incfig}[2]{ + \def\svgwidth{#2} + \import{./figures/}{#1.pdf_tex} +} + +\DeclareMathOperator{\cl}{cl} +\DeclareMathOperator{\tr}{tr} +\DeclareMathOperator{\rank}{rank} +\DeclareMathOperator{\dist}{dist} +\DeclareMathOperator{\Int}{int} + diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/logo_ltc.png b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/logo_ltc.png new file mode 100644 index 0000000000000000000000000000000000000000..3938067a8136770c6ec6fe17260d39d4ab32762c GIT binary patch literal 216873 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 Tsu7 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

C`Z3B?#P9d`uo+9wzUMa~|eQn|@5t8U;V|F1{zy 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 kOqoJo>v+XW=zPERixlh3{+2FGyF$ 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 Yz0UoWxe2YD`QI4opV2Ek;c)Xm0hI4(-~a#s literal 0 HcmV?d00001 diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/main.tex b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/main.tex new file mode 100644 index 00000000..74274df8 --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/main.tex @@ -0,0 +1,14 @@ +\input{header} + +\begin{document} + \input{title_page} + + \newpage + \hypertarget{intro}{} + \tableofcontents + \linespread{1} + \selectfont + + \newpage + \input{diffeqs.tex} +\end{document} diff --git a/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/title_page.tex b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/title_page.tex new file mode 100644 index 00000000..164d8d84 --- /dev/null +++ b/Lectures/4_Semester/Differential_Equations/2024_Zhukovskiy/title_page.tex @@ -0,0 +1,27 @@ +\begin{titlepage} + \clearpage\thispagestyle{empty} + \centering + + \textbf{Московский физико-технический институт \\ Физтех-школа прикладной математики и информатики} + \vspace{33ex} + + {\textbf{\FullCourseNameFirstPart}} + + \SemesterNumber\ СЕМЕСТР + \vspace{1ex} + + Лектор: \textit{\LecturerInitials} + + \includegraphics[width=0.4\textwidth]{logo_ltc.png} + + \begin{flushright} + \noindent + Автор: \href{\TGLink}{\textit{\AuthorInitials}} + \\ + \href{\GithubLink}{\textit{Проект на Github}} + \end{flushright} + + \vfill + \CourseDate + \pagebreak +\end{titlepage} diff --git a/config.json b/config.json index 293c2730..0462e81f 100644 --- a/config.json +++ b/config.json @@ -36,5 +36,12 @@ ], "ovatik": [ "l/2/Algebra_and_Coding_Theory/2023_Vyalyj" + ], + "DLizr": [ + "l/3/Algorithms_and_Data_Structures/2023_Rukhovich", + "l/3/Formal_Languages/2023_Akhtyamov", + "l/4/Ring_and_Field_Theory/2024_Ilyinskiy", + "l/3/Differential_Equations/2023_Zhukovskiy", + "l/4/Differential_Equations/2024_Zhukovskiy", ] }