5
$\begingroup$

I don't understand the construction of open nbds $N_\epsilon(A)$ of $A$ in a CW-complex $X$ given in page 522 of Hatcher's Book. Since the book is available for free online, I'll just copy the entire paragraph:

Next we describe a convenient way of constructing open neighborhoods $N_\epsilon(A)$ of subsets $A$ of a CW complex $X$, where $\epsilon$ is a function assigning a number $\epsilon_\alpha>0$ to each cell $e^n_\alpha$. The construction is inductive over the skeleta $X^n$, so suppose we have already constructed $N^n_\epsilon(A)$, a neighborhood of $A\cap X^n$ in $X^n$, starting the process with $N_\epsilon^0(A)=A\cap X^0$. Then we define $N_\epsilon^{n+1}$ by specifying its preimage under the characteristic map $\phi_\alpha:D^{n+1}\to X$ of each cell $e^{n+1}_\alpha$, namely $\phi_\alpha^{-1}(N_\epsilon^{n+1}(A))$ is the union of two parts: an open $\epsilon_\alpha$-neighborhood of $\phi^{-1}(A)-\partial D^{n+1}$ in $D^{n+1}-\partial D^{n+1}$, and a product $(1-\epsilon_\alpha,1]\times \phi_\alpha^{-1}(N_\epsilon^n(A))$ with respect to 'spherical' coordinates $(r,\theta)$ where $r\in [0,1]$ is the radial coordinate and $\theta$ lies in $\partial D^{n+1}=S^n$. Then we define $N_\epsilon(A)=\bigcup_nN^n_\epsilon(A)$. This is an open set in $X$ since it pulls back to an open set under each characteristic map.

I don't understand the sentence in boldface. First of all let's precise some notation: We have maps $\phi^n_\alpha:D^n\to X$ where $n$ ranges over either $\mathbb{N}$ or $\{1,2,...,m\}$. The cells of $X$ are $e^n_\alpha=\phi^n_\alpha(D^n-\partial D^n)$ and the skeletons are $X^n=\bigcup_{m\le n}\bigcup_{\alpha\in A_m}e^m_\alpha$ (Hatcher doesn't use the superscript $^n$ but they really should be there, the $A_m$'s aren't also there but I'm putting them for emphasis). This also goes for $\epsilon$ so we should really have $\epsilon^n_\alpha$ instead.

How is $N_\epsilon^{n+1}(A)$ defined if one knows it's preimage under every $\phi^{n+1}_\alpha$. Also what do we mean by an open $\epsilon_\alpha$-neighborhood of $\phi^{-1}(A)-\partial D^{n+1}$ in $D^{n+1}-\partial D^{n+1}$ and what is that thing of spherical coordinates? Shouldn't it be $(\phi_\alpha|D^n)^{-1}(N_\epsilon^n(A))$ instead? There is a very similar question here Question about Hatcher's book CW complex but I don't think the question is good or even if the answer is correct.

$\endgroup$
  • $\begingroup$ If you have a question about my answer to the linked question, feel free to ask. $\endgroup$ – Stefan Hamcke Sep 24 '15 at 9:47
4
$\begingroup$

$\require{AMScd}$

I think I figured it out. We define $B(Y,\epsilon)=\bigcup_{y\in Y}B(y,\epsilon)$ the open $\epsilon$-nbd of $Y$ and the homeomorphism $r:(0,1]\times \partial D^n\to D^n-0,r(t,s)=ts$ (this is just scalar product and is what Hatcher means by spherical coordinates). Let's define inductively $N_\epsilon^0(A)=A\cap X^0$ and for $n\ge 1$ suppose $N^{n-1}_\epsilon(A)$ is a nbd of $A\cap X^{n-1}$ in $X^{n-1}$. We will write $\phi^n_\alpha$ as $\phi_\alpha$ and similarly for $\epsilon_\alpha$ and $e_\alpha$. We define: \begin{align*} B_\alpha&=B((\phi_\alpha|D^n-\partial D^n)^{-1}(A),\epsilon_\alpha) \\ C_\alpha&=r((1-\epsilon_\alpha,1]\times\phi_\alpha^{-1}(N^{n-1}_\epsilon(A))) \\ A_\alpha&=B_\alpha\cup C_\alpha \\ N^n_\epsilon(A)&=\bigcup_\alpha\phi_\alpha(A_\alpha)\cup N^{n-1}_\epsilon(A) \end{align*} Note that in the definition of $B_\alpha$ the metric $d$ is supposed to be restricted to $D^n-\partial D^n$ so $B_\alpha$ is an open set in $D^n-\partial D^n$ and so is $C_\alpha$ because $r$ is an homeomorphism, $(1-\epsilon^n_\alpha,1]\times\phi_\alpha^{-1}(N^{n-1}_\epsilon(A))$ is open in $(0,1]\times \partial D^n$ and $D^n-0$ is open in $D^n$ (note that here we assume $\epsilon_\alpha\le 1$ and we also use the fact that $N^{n-1}_\epsilon(A)\subseteq X^{n-1}$ so that $\phi_\alpha^{-1}(N^{n-1}_\epsilon(A))=(\phi_\alpha|\partial D^n)^{-1}(N^{n-1}_\epsilon(A))$ and what I put in the question was redudant). So we get $A_\alpha$ open in $D^n$.

One can then prove that $\phi_\beta^{-1}(\phi_\alpha(A_\alpha))\subseteq C_\beta$ if $\beta\neq \alpha$ and $\phi_\alpha^{-1}(\phi_\alpha(A_\alpha))=A_\alpha$ so that one gets $\phi_\beta^{-1}(N^n_\epsilon(A))=A_\beta$, an open set in $D^n$ (this is what Hatcher means by defining its preimage under the characteristic map $\phi_\alpha$). Then one proves $N^n_\epsilon(A)\cap X^{n-1}=N^{n-1}_\epsilon(A)$ and finally $N^n_\epsilon(A)$ is indeed open in $X^n$ because of the quotient map defined in the proof of Proposition A.2 p.521. We add $N^{n-1}_\epsilon(A)$ to $N^n_\epsilon(A)$ so that $N^n_\epsilon(A)\cap X^{n-1}$ is indeed open in $X^{n-1}$, another reason is given in the next sentence. It remains to show that $N^n_\epsilon(A)$ contains $A\cap X^n$. Since $N^{n-1}_\epsilon(A)$ contains $A\cap X^{n-1}$ we need to show that $N^n_\epsilon(A)$ contains $A\cap(X^n-X^{n-1})=\bigcup_\alpha A\cap e_\alpha$, this is obvious since $(\phi_\alpha|D^n-\partial D^n)^{-1}(A)\subseteq B_\alpha$ implies $A\cap e_\alpha\subseteq \phi_\alpha(B_\alpha)$.

We finally define $N_\epsilon(A)=\bigcup_nN^n_\epsilon(A)$ and one proves $N_\epsilon(A)\cap X^n=N^n_\epsilon(A)$, an open set in $X^n$ so $N_\epsilon(A)$ is open in $X$ and is clear that $A\subseteq N_\epsilon(A)$ because each $A\cap X^n\subseteq N^n_\epsilon(A)$

Now as an application of all of this I'm gonna precise Proposition A.4 p.522:

Each point in a CW complex has arbitrarily small contractible open neighborhoods, so CW complexes are locally contractible.

Let's call $y$ instead of $x$ as in the book the point we are studying and let $U$ be a given nbd of $y$. We want to find the right $\epsilon^n_\alpha$'s so that $N_\epsilon(y)\subseteq U$. Suppose $m$ is the least nonnegative integer such that $y\in X^m$. We then have $N^n_\epsilon(y)=\emptyset$ for $n<m$ and note that $N^m_\epsilon(y)=\phi^m_\alpha(B(z,\epsilon^m_\alpha))$ where $\alpha$ is the index such that $y\in e^m_\alpha$ and $z\in D^m-\partial D^m$ is such that $\phi^m_\alpha(z)=y$. Pick $\epsilon^m_\alpha$ so that $\overline{B(z,\epsilon^m_\alpha)}\subseteq(\phi^m_\alpha|D^m-\partial D^m)^{-1}(U)$. Then since $\phi^m_\alpha|D^m-\partial D^m$ is an homeomorphism one gets $\overline{N^m_\epsilon(y)}=\overline{(\phi^m_\alpha|D^m-\partial D^m)(B(z,\epsilon^m_\alpha))}=(\phi^m_\alpha|D^m-\partial D^m)(\overline{B(z,\epsilon^m_\alpha)})\subseteq U$, as desired. Suppose inductively we defined the $\epsilon$'s so that $\overline{N^{n-1}_\epsilon(y)}\subseteq U$. We will drop the superscripts $^n$ as in the book. Using the same notation as before but with $A=\{y\}$, note that $B_\alpha=\emptyset$ and so $A_\alpha=C_\alpha=r((1-\epsilon_\alpha,1]\times\phi_\alpha^{-1}(N^{n-1}_\epsilon(y)))\subseteq r((1-\epsilon_\alpha,1]\times\phi_\alpha^{-1}(\overline{N^{n-1}_\epsilon(y)}))$. We know $X$ is normal from the previous proposition in the book so we can choose $V$ nbd $\overline{N^{n-1}_\epsilon(y)}$ in $X$ such that $\overline{N^{n-1}_\epsilon(y)}\subseteq V\subseteq \overline{V}\subseteq U$. Since $\phi_\alpha^{-1}(\overline{N^{n-1}_\epsilon(y)})$ is a closed subset of $\partial D^n$ and hence also a closed subset of $D^n$ that is contained in the open subset $\phi_\alpha^{-1}(V)$ of $D^n$ we can use lemma 1. to get $\epsilon_\alpha$ so that $r((1-\epsilon_\alpha,1]\times\phi_\alpha^{-1}(\overline{N^{n-1}_\epsilon(y)}))\subseteq \phi_\alpha^{-1}(V)$. We then get $\phi(C_\alpha)\subseteq V$ for each $\alpha$ so that $N^n_\epsilon(y)\subseteq V\cup N^{n-1}_\epsilon(y)$ and then $\overline{N^n_\epsilon(y)}\subseteq \overline{V}\cup U\subseteq U$, as desired.

It remains to show that $N^m(y)$ is contractible. This is the tricky part of this proof. For $n>m$, Hatcher claims one can construct a deformation retraction of $N^n_\epsilon(y)$ onto $N^{n-1}_\epsilon(y)$ by sliding outward along radial segments in cells $e^n_\alpha$, the images under the characteristic maps $\phi_\alpha$ of radial segments in $D^n$. This last statement is quite intuitive and easy to understand but kinda cumbersome to write down and prove formally, but I'm gonna do it anyways. Call $V=N^{n-1}_\epsilon(y)$. For each $\alpha$ let $R_\alpha:((1-\epsilon_\alpha,1]\times \phi_\alpha^{-1}(V))\times I\to ((1-\epsilon_\alpha,1]\times \phi_\alpha^{-1}(V))$ be the deformation retraction of $(1-\epsilon_\alpha,1]\times \phi_\alpha^{-1}(V)$ onto $1\times \phi_\alpha^{-1}(V)$ defined as $R_\alpha((s,a),t)=((1-t)s+t,a) $ (intuitively this map slides the elements of $(1-\epsilon_\alpha,1]\times \phi_\alpha^{-1}(V)$ in a rectangular way and at constant speed to $1\times \phi_\alpha^{-1}(V)$). Then noting that $\phi_\alpha(\phi_\alpha^{-1}(V))=N^{n-1}_\epsilon(y)\cap \phi_\alpha(\partial D^n)$ I define $F_\alpha:\phi_\alpha(C_\alpha)\times I\to \phi_\alpha(C_\alpha)$ as (there is a simpler way to do this in the edit at the end) \begin{equation*} F_\alpha(x,t)= \begin{cases} \phi_\alpha(r(R_\alpha(r^{-1}((\phi_\alpha|D^n-\partial D^n)^{-1}(x)),t)))& x\in \phi_\alpha(C_\alpha-\phi_\alpha^{-1}(V)) \\ x & x\in N^{n-1}_\epsilon(y)\cap \phi_\alpha(\partial D^n) \end{cases} \end{equation*} This is part of the final deformation retraction $F$ of $N^n_\epsilon(y)$ onto $N^{n-1}_\epsilon(y)$. We must first prove each $F_\alpha$ is continuous. Note that $\phi_\alpha(C_\alpha-\phi_\alpha^{-1}(V))$ is an open subset of $\phi_\alpha(C_\alpha)$ (actually an open subset of $N^n_\epsilon(y)$) and then it's clear from the definition that $F_\alpha$ is continous in $\phi_\alpha(C_\alpha-\phi_\alpha^{-1}(V))\times I$, it remains to show it's continuous in $N^{n-1}_\epsilon(y)\cap \phi_\alpha(\partial D^n)\times I$, this is the cumbersome part. Let $z\in N^{n-1}_\epsilon(z)\cap \phi_\alpha(\partial D^n)$ and $s\in I$, let's prove $F_\alpha$ it's continous at $(z,s)$. Let $U$ be an open nbd of $F_\alpha(z,s)=z$ in $\phi_\alpha(C_\alpha)$, then $U\cap N^{n-1}_\epsilon(z)\cap \phi_\alpha(\partial D^n)$ is open in $\phi_\alpha(C_\alpha)\cap N^{n-1}_\epsilon(z)\cap \phi_\alpha(\partial D^n)=N^{n-1}_\epsilon(z)\cap \phi_\alpha(\partial D^n)$ which in turn is open in $\phi_\alpha(\partial D^n)$ because $N^{n-1}_\epsilon(z)$ is open in $X^{n-1}$ so $U\cap N^{n-1}_\epsilon(z)\cap \phi_\alpha(\partial D^n)$ is open in $\phi_\alpha(\partial D^n)$. Since $\phi_\alpha(\partial D^n)$ is normal (this is because normality is invariant under continuous closed surjections) there is $W$ nbd $z$ in $\phi_\alpha(\partial D^n)$ such that $z\in W\subseteq \overline{W}\subseteq U\cap N^{n-1}_\epsilon(z)\cap \phi_\alpha(\partial D^n)$. Define $K=\phi_\alpha^{-1}(\overline{W})$ and $R=\phi_\alpha^{-1}(W)$, then $K$ is closed in $\partial D^n$ and thus closed in $D^n$, $\phi_\alpha^{-1}(U)$ is open in $D^n$ and $K\subseteq \phi_\alpha^{-1}(U)$ so we can use lemma 1. to get a $\delta$ such that $r((1-\delta,1]\times K)\subseteq \phi_\alpha^{-1}(U)$ and since $R\subseteq K$ we get $r((1-\delta,1]\times R)\subseteq \phi_\alpha^{-1}(U)$, note also $R$ is open in $D^n$. We need to prove $\phi_\alpha(r((1-\delta,1]\times R))\times I$ is the desired nbd of $(z,t)$. First note that $\phi_\alpha$ is a quotient map and $r((1-\delta,1]\times R)$ is an open $\phi_\alpha$-saturated subset of $D^n$ (here we use the fact that $R$ is open and that it's of the form $\phi_\alpha^{-1}(W)$), this means $\phi_\alpha(r((1-\delta,1]\times R))$ is open in $\phi_\alpha(D^n)$ which implies that it's also open in $\phi_\alpha(C_\alpha)$ and also satisfies $\phi_\alpha(r((1-\delta,1]\times R))\subseteq U$. So it remains to show that $F_\alpha(\phi_\alpha(r((1-\delta,1]\times R))\times I)\subseteq U$, this follows from the fact that $R_\alpha(((1-\delta,1)\times J)\times I)\subseteq (1-\delta]\times J$ for any $J\subseteq \partial D^n$: \begin{align*} F_\alpha(\phi_\alpha(r((1-\delta,1]\times R))\times I)&=F_\alpha(\phi_\alpha(r((1-\delta,1)\times R))\times I)\cup F_\alpha(\phi_\alpha(R)\times I) \\ &=\phi_\alpha(r(R_\alpha(((1-\delta,1)\times R)\times I)))\cup \phi_\alpha(R) \\ &\subseteq \phi_\alpha(r((1-\delta,1]\times R))\cup \phi_\alpha(R) \\ &=\phi_\alpha(r((1-\delta,1]\times R)) \\ &\subseteq U \end{align*} Thus we get that $F_\alpha$ is indeed continuous at $(z,t)$ and $F_\alpha$ is a deformation retraction of $\phi_\alpha(C_\alpha)$ onto $N^{n-1}_\epsilon(y)\cap \phi_\alpha(\partial D^n)$

Let's define our final deformation retraction $F:N^n_\epsilon(y)\times I\to N^n_\epsilon(y)$ as \begin{equation*} F(x,t)= \begin{cases} F_\alpha(x,t) & x\in \phi_\alpha(C_\alpha)\text{ for some $\alpha$} \\ x & x\in N^{n-1}_\epsilon(y) \end{cases} \end{equation*} Note that $F$ is well defined. Recall that a space $Y$ is generated by $Y_\alpha$ iff $Y=\bigcup Y_\alpha$ and $U\subseteq Y$ is open (closed) in $Y$ iff for each $\alpha$, $U\cap Y_\alpha$ is open (closed) in $Y_\alpha$. In Proposition A.15 it is proven that $F:Y\times I\to Z$ is continuous iff each $F|Y_\alpha\times I:Y_\alpha\times I\to Z$ is continuous (the theorem is about compact subspaces but it clearly applies in the general case). Later in the appendix it is also proven that a cell complex $X$ is generated by the closures of its cells $e^n_\alpha$. Since $N^n_\epsilon(y)$ is open in $X^n$, a subcomplex of $X$ and thus a cell complex by itself, one easily gets that $N^n_\epsilon(y)$ is generated by $N^n_\epsilon(y)\cap \overline{e^n_\alpha}=\phi_\alpha(C_\alpha)$ and $N^{n-1}_\epsilon(y)$. Since each $F|\phi_\alpha(C_\alpha)\times=F_\alpha$ is continuous and the restriction of $F$ to $N^{n-1}_\epsilon(y)\times I$ is the identity we get that $F$ is continuous.

We now have deformation retractions from $N^n_\epsilon(y)$ onto $N^{n-1}_\epsilon(y)$ for $n>m$ and want to construct a retraction from $N_\epsilon(y)$ to $N^m_\epsilon(y)$. Hatcher gives some hints about this by saying that one has to perform the deformation retraction of $N^n_\epsilon(y)$ onto $N^{n-1}_\epsilon(y)$ during the $t$-interval $[1/2^n,1/2^{n-1}]$, points of $N^n_\epsilon(y)-N^{n-1}_\epsilon(y)$ being stationary outside this $t$-interval. While this is clear in the finite case it's not very clear how one gets the final deformation retraction of $N_\epsilon(y)$ onto $N^m_\epsilon(y)$ when $N_\epsilon(y)$ is an infinite union, details about this are in the lemma 2. To apply this lemma one merely has to note that $N_\epsilon(y)$ open in $X$ implies that $N_\epsilon(y)$ is generated by $N^n_\epsilon(y)$ for $n\ge m$. We thus get our desired deformation retraction of $N_\epsilon(y)$ onto $N^m_\epsilon(y)$. The deformation retraction from $N^m_\epsilon(y)$ to $y$ is obvious since $N^m_\epsilon(y)=\phi^m_\alpha(B(z,\epsilon^m_\alpha))$ and the ball $B(z,\epsilon^m_\alpha)$ retracts to $z$ in the obvious way. We are done.

Lemma 1. If $X$ is a compact metric space with metric $d$ and $A$, $B$ are closed disjoint subsets of $X$ then $d(A,B)=\inf_{a\in A}d(a,B)>0$. This implies that setting $\epsilon=d(A,B)/2$, $B(A,\epsilon)$ and $B(B,\epsilon)$ disjoint and in particular if $A$ is closed in $X$, $U$ is open in $X$ and $A\subseteq X$ there is $\epsilon>0$ such that $B(A,\epsilon)\subseteq U$. In the problem we use the fact that if $J\subseteq\partial D^n$ then $r((1-\delta,1]\times J)\subseteq B(J,\delta)$.

Proof. Assume $d(A,B)=0$ then there exist a sequence $a_n$ in $A$ such that $0=\lim_{n\to \infty}d(a_n,B)$. Since $X$ is compact we can pick a subsequence $a_{n_k}$ converging to $a\in A$ because $A$ is closed and since $x\mapsto d(x,B)$ is continuous we get $0=\lim_{k\to \infty}d(a_{n_k},B)=d(a,B)$ which means $a\in B$ because $B$ is closed, a contradiction. Thus $d(A,B)>0$

Lemma 2. If $X$ is a space generated by $X_n$ for $n\ge 0$ and each $X^n$ deformation retracts to $X^{n-1}$ for $n\ge 1$ then $X$ deformation retracts to $X_0$.

Proof. If $X\subseteq Y\subseteq Z$ and $F:Z\times [a,b]\to Z$ is a deformation retraction of $Z$ onto $Y$ and $G:Y\times [b,c]\to Y$ is a deformation retraction of $Y$ onto $X$ then define the deformation retraction $F\cdot G:Z\times [a,c]\to Z$ of $Z$ onto $X$ as \begin{equation*} F\cdot G(z,t)= \begin{cases} F(z,t)&t\in [a,b] \\ G(F(z,b),t)& t\in [b,c] \end{cases} \end{equation*} It's easy to verify that $F\cdot G$ is indeed a deformation retraction and that $F\cdot G|Z\times [a,b]=F$ and $F\cdot G|Y\times [b,c]= G$ so $F\cdot G$ extends both $F$ and $G$. Now suppose $F_n:X_n\to [1/2^n,1/2^{n-1}]\to X_n$ is a deformation retraction of $X_n$ onto $X_{n-1}$ for each $n\ge 1$ and define inductively $D_1=F_1$ and for $n\ge 2$, $D_n=F_n\cdot D_{n-1}:X_n\times [1/2^n,1]\to X_n$ a deformation retraction of $X_n$ onto $X_0$. Now define $R_n=X_n\times I\to X_n$ as \begin{equation*} R_n(x,t)= \begin{cases} x & t\in[0, 1/2^n] \\ D_n(x,t) & t\in [1/2^n,1] \end{cases} \end{equation*} It's clear that $R_n$ is well defined and that each $R_{n+1}$ extends $R_n$ so that we can define $R:X\times I\to X$ as $R(x,t)=R_n(x,t)$ for any $n$ such that $x\in X_n$. $R$ is continuous since each $R|X_n\times I=R_n$ is continous and the rest of the properties of a deformation retraction are easy to verify so $R$ is our desired deformation retraction of $X$ onto $X_0$.

EDIT: I found a much simpler way to define $F_\alpha$ and also to prove it's continuous. It's based in proposition A.17 which appears later and says that if $q:X\to Y$ is a quotient map then so is $q\times 1:X\times I\to Y\times I$ is also a quotient map. Let $T_\alpha:C_\alpha\times I\to C_\alpha$, $T_\alpha(x,t)=r(R_\alpha(r^{-1}(x),t))$ be a deformation retraction of $C_\alpha$ onto $\phi_\alpha^{-1}(V)$. Note that $C_\alpha$ is an open $\phi$-saturated subset of $D^n$ and thus $\phi_\alpha|C_\alpha:C_\alpha\to \phi_\alpha(C_\alpha)$ is a quotient map and then so is $\phi_\alpha|C_\alpha\times 1:C_\alpha\times I\to \phi_\alpha(C_\alpha)\times I$. Then $F_\alpha$ can be defined as the map that makes the following diagram commutative.

\begin{equation} \begin{CD} C_\alpha\times I @>\phi_\alpha|C_\alpha\times 1>> \phi_\alpha(C_\alpha)\times I\\ @VVT_\alpha V @VVF_\alpha V\\ C_\alpha @>\phi_\alpha>> \phi_\alpha(C_\alpha) \end{CD} \end{equation}

$\endgroup$
  • $\begingroup$ One should better define $B_α = B(ϕ_α|_{D^n−∂D^n}^{−1}(A),ϵ_α)-∂D^n$. Otherwise, it could happen that this $ϵ_α$-neighborhood touches the boundary of the $n$-ball, and $ϕ^{−1}_β(ϕ_α(A_α))⊆C_β$ would not necessarily be satisfied. $\endgroup$ – Stefan Hamcke Oct 3 '15 at 14:39
  • $\begingroup$ The metric is restricted to $D^n-\partial D^n$, but yes, this may lead to misunderstanding so I'll edit the answer accordingly. $\endgroup$ – Zero Oct 3 '15 at 14:43
  • 1
    $\begingroup$ +1. The construction of the $ϵ$-neighborhood looks correct. I didn't read the rest of your answer since you didn't originally ask about the deformation retraction. But I would give another +1 just for the effort, if I could. $\endgroup$ – Stefan Hamcke Oct 3 '15 at 14:52

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.