import sys, io sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8") tex = r"""\documentclass[12pt,a4paper]{ctexbook} \usepackage[paperwidth=185mm,paperheight=260mm,top=25mm,bottom=25mm,left=28mm,right=28mm]{geometry} \usepackage{amsmath,amssymb,amsthm} \usepackage{newtxtext,newtxmath} \usepackage{xcolor} \usepackage{tcolorbox} \usepackage{hyperref} \usepackage{titlesec} \usepackage{fancyhdr} \usepackage{enumitem} \usepackage{mathrsfs} \usepackage{graphicx} \usepackage{tikz} \usetikzlibrary{shapes,arrows,positioning,calc} % 颜色定义 \definecolor{hatcherblue}{RGB}{31,78,121} \definecolor{hatcherlightblue}{RGB}{214,228,240} \definecolor{hatcherdark}{RGB}{26,26,46} \definecolor{hatchergold}{RGB}{201,168,76} \definecolor{hatcherlight}{RGB}{240,244,248} % 章节标题格式 \titleformat{\section}[hang]{\LARGE\bfseries\color{hatcherblue}} {\thesection}{1em}{}[{\color{hatcherblue!60}\rule{\textwidth}{1.2pt}}] \titleformat{\subsection}[hang]{\Large\bfseries\color{hatcherblue!80}} {\thesubsection}{1em}{} % 定理环境 \newtcolorbox[auto counter,number within=section]{theorem}[1][]{ colback=hatcherblue!5, colframe=hatcherblue!60, boxrule=1pt, title=\textbf{定理~\thetcbcounter}, fonttitle=\bfseries\color{hatcherblue}, before upper={\setlength{\parskip}{4pt}}, #1 } \newtcolorbox[auto counter,number within=section]{definition}[1][]{ colback=hatcherlightblue!30, colframe=hatcherblue!50, boxrule=0.5pt, title=\textbf{定义~\thetcbcounter}, fonttitle=\bfseries\color{hatcherblue}, before upper={\setlength{\parskip}{4pt}}, #1 } \newtcolorbox[auto counter,number within=section]{remark}[1][]{ colback=hatcherlightblue!20, colframe=hatcherblue!30, boxrule=0.5pt, title=\textbf{注记~\thetcbcounter}, fonttitle=\bfseries\color{hatcherblue!70}, before upper={\setlength{\parskip}{4pt}}, #1 } \newtcolorbox[auto counter,number within=section]{proposition}[1][]{ colback=hatcherlight, colframe=hatchergold!60, boxrule=1pt, title=\textbf{命题~\thetcbcounter}, fonttitle=\bfseries\color{hatcherdark}, before upper={\setlength{\parskip}{4pt}}, #1 } \newenvironment{proof}{\par\noindent\textbf{证明.}\ }{\ \square\par} % 页眉页脚 \pagestyle{fancy} \fancyhf{} \fancyhead[LE,RO]{\color{hatcherblue!60}\small Hatcher《代数拓扑》译文} \fancyhead[RE,LO]{\color{hatcherblue!60}\small\S 2.1\quad 单纯同调与奇异同调} \fancyfoot[C]{\color{hatcherblue!60}\thepage} \renewcommand{\headrulewidth}{0.4pt} \renewcommand{\headrule}{\color{hatcherblue!40}\hrule} \fancypagestyle{plain}{% \fancyhf{} \fancyfoot[C]{\color{hatcherblue!60}\thepage} \renewcommand{\headrulewidth}{0pt} } % 自定义命令 \newcommand{\N}{\mathbb{N}} \newcommand{\Z}{\mathbb{Z}} \newcommand{\R}{\mathbb{R}} \newcommand{\C}{\mathbb{C}} \newcommand{\cA}{\mathcal{A}} \newcommand{\cC}{\mathcal{C}} \newcommand{\cF}{\mathcal{F}} \newcommand{\cO}{\mathcal{O}} \newcommand{\Deltacomplex}{\(\Delta\)-复形\xspace} \newcommand{\nsimplex}{\(n\)-单形\xspace} \newcommand{\ntuple}[1]{\(#1\)-元组\xspace} \usepackage{xspace} \begin{document} \chapter{同调论} \section{2.1\quad 单纯同调与奇异同调} \subsection{\texorpdfstring{\(\Delta\)}{Delta}-复形} 第一章中用到的环面、射影平面和 Klein 瓶有共同的结构:它们由有限多个三角形通过成对粘合边得到。我们将这种结构推广为所谓的 \textbf{\(\Delta\)-复形},它在组合上比单纯复形更灵活,但代数上足以进行同调计算。 \(\Delta\)-复形的思想是将上述构造推广到任意维数。三角形在 \(n\) 维的类似物是 \textbf{\(n\)-单形}(\(n\)-simplex)。它是在 Euclid 空间 \(\R^m\) 中包含 \(n+1\) 个不落在低于 \(n\) 维的超平面内的点 \(v_0,\ldots,v_n\) 的最小凸集,其中超平面是指线性方程组的解集。一个等价条件是差向量 \(v_1-v_0,\ldots,v_n-v_0\) 线性无关。 点 \(v_i\) 称为单形的\textbf{顶点},单形本身记为 \([v_0,\ldots,v_n]\)。 例如,\textbf{标准 \(n\)-单形}为 \[ \Delta^n = \left\{ (t_0,\ldots,t_n)\in\R^{n+1} \;\middle|\; \sum_i t_i = 1 \text{ 且 } t_i \geq 0,\ \forall i \right\}, \] 其顶点是沿坐标轴的单位向量。 % 插入标准单形的示意图 \begin{center} \begin{tikzpicture}[scale=1.5] % 0-simplex \filldraw[hatcherblue] (0,0) circle (1.5pt) node[below] {\(v_0\)}; \node at (0,-0.5) {\(\Delta^0\)}; % 1-simplex \filldraw[hatcherblue] (2,0) circle (1.5pt) node[below] {\(v_0\)}; \filldraw[hatcherblue] (3.2,0) circle (1.5pt) node[below] {\(v_1\)}; \draw[thick,hatcherblue] (2,0) -- (3.2,0); \node at (2.6,-0.5) {\(\Delta^1\)}; % 2-simplex \filldraw[hatcherblue] (4.4,0) circle (1.5pt) node[below] {\(v_0\)}; \filldraw[hatcherblue] (6.2,0) circle (1.5pt) node[below] {\(v_1\)}; \filldraw[hatcherblue] (5.3,1.0) circle (1.5pt) node[above] {\(v_2\)}; \draw[thick,hatcherblue] (4.4,0) -- (6.2,0) -- (5.3,1.0) -- cycle; \node at (5.3,-0.5) {\(\Delta^2\)}; % 3-simplex \filldraw[hatcherblue] (7.6,0.1) circle (1.5pt) node[below] {\(v_0\)}; \filldraw[hatcherblue] (9.2,0.1) circle (1.5pt) node[below] {\(v_1\)}; \filldraw[hatcherblue] (8.0,0.9) circle (1.5pt) node[left] {\(v_2\)}; \filldraw[hatcherblue] (8.8,1.1) circle (1.5pt) node[above] {\(v_3\)}; \draw[thick,hatcherblue] (7.6,0.1) -- (9.2,0.1) -- (8.0,0.9) -- cycle; \draw[thick,hatcherblue] (7.6,0.1) -- (8.8,1.1); \draw[thick,hatcherblue] (9.2,0.1) -- (8.8,1.1); \draw[thick,hatcherblue] (8.0,0.9) -- (8.8,1.1); \node at (8.4,-0.5) {\(\Delta^3\)}; \end{tikzpicture} \end{center} \begin{figure}[htbp] \centering \begin{tikzpicture}[scale=1.3] % First row: edge orientations \filldraw[hatcherblue] (0,0) circle (1.5pt) node[below] {\(v_0\)}; \filldraw[hatcherblue] (1.5,0) circle (1.5pt) node[below] {\(v_1\)}; \draw[->,thick,hatcherblue] (0.2,0) -- (1.3,0); \node at (0.75,-0.6) {\([v_0,v_1]\)}; % Second row: triangle with vertices \filldraw[hatcherblue] (4,0) circle (1.5pt) node[below] {\(v_0\)}; \filldraw[hatcherblue] (6,0) circle (1.5pt) node[below] {\(v_1\)}; \filldraw[hatcherblue] (5,1.3) circle (1.5pt) node[above] {\(v_2\)}; \draw[->,thick,hatcherblue] (4.15,0.1) -- (5.85,0.1); \draw[->,thick,hatcherblue] (6.05,0.2) -- (5.1,1.2); \draw[->,thick,hatcherblue] (4.9,1.2) -- (3.95,0.2); \node at (5,-0.6) {\([v_0,v_1,v_2]\)}; % Third row: tetrahedron \filldraw[hatcherblue] (8.5,0.1) circle (1.5pt) node[below] {\(v_0\)}; \filldraw[hatcherblue] (10.5,0.1) circle (1.5pt) node[below] {\(v_1\)}; \filldraw[hatcherblue] (9.1,1.2) circle (1.5pt) node[left] {\(v_2\)}; \filldraw[hatcherblue] (10,1.7) circle (1.5pt) node[above] {\(v_3\)}; \draw[->,thick,hatcherblue] (8.65,0.2) -- (10.35,0.2); \draw[->,thick,hatcherblue] (10.55,0.25) -- (9.25,1.1); \draw[->,thick,hatcherblue] (9.0,1.1) -- (8.4,0.25); \draw[->,thick,hatcherblue] (8.6,0.3) -- (9.9,1.55); \draw[->,thick,hatcherblue] (10.4,0.3) -- (10.05,1.55); \draw[->,thick,hatcherblue] (9.2,1.3) -- (10.05,1.6); \node at (9.5,-0.6) {\([v_0,v_1,v_2,v_3]\)}; \end{tikzpicture} \caption{按顶点下标递增确定各边的定向} \end{figure} 为同调论的目的,记录单形顶点的\textbf{顺序}至关重要,因此``\(n\)-单形''总是指带有顶点排序的 \(n\)-单形。给单形 \([v_0,\ldots,v_n]\) 的顶点排序的一个附带结果是:它按递增下标确定了边 \([v_i,v_j]\) 的定向,如上图所示。指定顶点顺序也唯一确定了一个从标准 \(n\)-单形 \(\Delta^n\) 到任一具有有序顶点的单形 \([v_0,\ldots,v_n]\) 的规范线性同胚,它保持重心坐标: \[ (t_0,\ldots,t_n) \mapsto \sum_i t_i v_i. \] 此映射在顶点 \(v_i\) 处取值 \(1\),在对面取值 \(0\),且对任何不保持顶点顺序的辫换均不合法。因此,如果我们指定单形的一个顶点排序,那么从 \(\Delta^n\) 出发的线性同胚就自然诱导出单形面的排序和平行于边的定向。 受环面、射影平面和 Klein 瓶构造的启发,我们现在定义一类空间,它们由若干单形通过``粘合映射''贴在一起构成,这些粘合映射将单形的面与较低维的单形等同起来。 \begin{definition}[\(\Delta\)-复形结构] 空间 \(X\) 上的一个 \textbf{\(\Delta\)-复形结构} 是指一族映射 \(\sigma_\alpha:\Delta^n\to X\),其中 \(n\) 依赖于指标 \(\alpha\),满足以下条件: \begin{enumerate}[label=(\roman*),leftmargin=*] \item 限制映射 \(\sigma_\alpha\big|_{\mathring{\Delta}^n}\) 是单射,且 \(X\) 的每个点恰好落在唯一一个限制映射 \(\sigma_\alpha\big|_{\mathring{\Delta}^n}\) 的像中。这里 \(\mathring{\Delta}^n = \Delta^n\setminus\partial\Delta^n\) 是 \(\Delta^n\) 的内部。 \item 每个限制映射 \(\sigma_\alpha\) 在 \(\Delta^n\) 的一个面上的限制,是某个映射 \(\sigma_\beta:\Delta^{n-1}\to X\) 与将这个面等同为标准 \((n-1)\)-单形的典范线性同胚的复合。这里我们以 \(\Delta^{n-1}\) 的顶点排序对应 \(\sigma_\alpha\) 所给顶点排序的保序限制为准。 \item 集合 \(A\subset X\) 是开的,当且仅当每个 \(\sigma_\alpha^{-1}(A)\) 在 \(\Delta^n\) 中是开的。 \end{enumerate} \end{definition} 除其他作用外,最后一个条件排除了诸如将 \(X\) 中所有的点视为单独顶点之类的平凡情形。环面、射影平面和 Klein 瓶的分解——各用两个三角形、三条边和一个或两个顶点——定义了 \(\Delta\)-复形结构:环面和 Klein 瓶共有六个 \(\sigma_\alpha\),射影平面则有七个。 \begin{figure}[htbp] \centering \begin{tikzpicture}[scale=1.5] % Torus diagram with labeled edges \def\a{2.0} \def\b{1.5} % Square \draw[thick] (0,0) rectangle (\a,\b); % Vertices \filldraw (0,0) circle (1.5pt) node[below left] {\(v\)}; \filldraw (\a,0) circle (1.5pt) node[below right] {\(v\)}; \filldraw (0,\b) circle (1.5pt) node[above left] {\(v\)}; \filldraw (\a,\b) circle (1.5pt) node[above right] {\(v\)}; % Edge labels with arrows \draw[->,thick,hatcherblue] (0.1,\b/2) -- node[left] {\(a\)} (0.1,\b-0.1); \draw[->,thick,hatcherblue] (\a-0.1,\b/2+0.1) -- node[right] {\(a\)} (\a-0.1,\b-0.1); \draw[->,thick,hatcherblue] (\a/2-0.1,\b-0.08) -- node[above] {\(b\)} (\a-0.1,\b-0.08); \draw[->,thick,hatcherblue] (\a/2+0.1,0.08) -- node[below] {\(b\)} (0.1,0.08); % Diagonal \draw[dashed,hatcherblue] (0,0) -- (\a,\b); \node at (\a/2,\b/2) {\small \(\sigma_1\)}; \node at (\a*0.7,\b*0.75) {\small \(\sigma_2\)}; \node at (\a*0.3,\b*0.25) {\small \(\sigma_2\)}; % Arrow indicator \draw[->,hatcherblue] (\a/2,\b/2+0.4) arc (90:450:0.3); \node at (\a/2+0.6,\b/2+0.5) {\small \(a\)}; \draw[->,hatcherblue] (\a/2+0.4,\b/2) arc (0:360:0.4); \node at (\a/2+0.8,\b/2) {\small \(b\)}; \end{tikzpicture} \caption{环面的 \(\Delta\)-复形结构:两个 \(2\)-单形,三条 \(1\)-单形 \(a,b,c\),及一个顶点 \(v\)} \end{figure} 图中边的定向与每个单形顶点的唯一排序相容,这些排序决定了映射 \(\sigma_\alpha\)。 条件 (\romannumeral 3) 的一个推论是:\(X\) 可以由一簇互不相交的单形 \(\Delta_\alpha^n\)(每个 \(\sigma_\alpha:\Delta^n\to X\) 对应一个)通过商映射构造得到。商映射将每个 \(\Delta_\alpha^n\) 的面与对应于 \(\sigma_\alpha\) 在该面上的限制的那个 \(\Delta_\beta^{n-1}\) 等同起来,如同条件 (\romannumeral 2) 所述。可以将其想象为逐步构造:从一组离散的顶点开始,然后贴上边得到一个图,再贴上 \(2\)-单形,如此递推。从这个观点看,指定一个 \(\Delta\)-复形可以纯粹用组合数据描述:对每个 \(n\) 指定一族 \(n\)-单形 \(\Delta_\alpha^n\),再附上函数,将每个 \(n\)-单形 \(\Delta_\alpha^n\) 的每个面对应到一个 \((n-1)\)-单形 \(\Delta_\beta^{n-1}\)。 更一般地,\(\Delta\)-复形可以由互不相交的单形通过等同某些由顶点子集张成的子单形而构造出来,这些等同利用保持顶点顺序的典范线性同胚来实现。前面环面、射影平面和 Klein 瓶上的 \(\Delta\)-复形结构就可以这样实现:等同两个 \(2\)-单形的各对边。如果从一个单独的 \(2\)-单形出发,将它的三条边按顶点排序给定的定向等同为一条边,就得到一个称为``笨蛋帽''(dunce cap)的 \(\Delta\)-复形。相比之下,如果将三条边等同为一条边,但\textbf{不}保持定向,则得不到 \(\Delta\)-复形结构,不过这会得到一个单纯复形结构:只需在 \(2\)-单形中添入第二条 \(1\)-单形即可。 % 笨蛋帽示意 \begin{center} \begin{tikzpicture}[scale=1.8] \filldraw[hatcherblue] (0,0) circle (1.5pt) node[below] {\(v\)}; \filldraw[hatcherblue] (1.5,0) circle (1.5pt) node[below] {\(v\)}; \filldraw[hatcherblue] (0.75,1.2) circle (1.5pt) node[above] {\(v\)}; \draw[thick] (0,0) -- (1.5,0); \draw[thick] (1.5,0) -- (0.75,1.2); \draw[thick] (0.75,1.2) -- (0,0); \draw[->,hatcherblue] (0.3,0.05) -- (1.2,0.05) node[midway,below] {\(a\)}; \draw[->,hatcherblue] (1.45,0.1) -- (0.85,1.1) node[midway,right] {\(a\)}; \draw[->,hatcherblue] (0.65,1.1) -- (0.1,0.1) node[midway,left] {\(a\)}; \node at (0.75,-0.6) {笨蛋帽}; \end{tikzpicture} \end{center} \begin{remark} 历史上,\(\Delta\)-复形最初并不称为``\(\Delta\)-复形'': 在 Eilenberg 和 Zilber 1950 年引入时,它们被称为\textbf{半单纯复形}(semi-simplicial complexes)。后来才出现了``\(\Delta\)-复形''这个名称,部分是因为``单纯复形''与``半单纯复形''在英语中听起来过于相似。在本章后面的部分我们将离开 \(\Delta\)-复形,代之以更灵活的奇异同调概念。 \end{remark} \end{document} """ out_path = r"D:\[0A]课程资料\大2下学期\【拓扑基础】\Hatcher_2.1_sample.tex" with open(out_path, "w", encoding="utf-8") as f: f.write(tex) print(f"Written to {out_path}") print(f"Length: {len(tex)} chars")