5

Let $X = S^n$ and $Y = S^n$ and let $f: X \to Y$ be a continuous map. Suppose that for some $y \in Y$, the preimage $f^{-1}(y)$ consists of finitely many points $x_1, \dots , x_m$. Let $U_1, \dots, U_m$ be disjoint neighbourhoods of $x_1, \dots, x_m$, each mapped by $f$ into a neighborhood $V$ of $y$.

The local degree formula states that $$ \text{deg }(f)=\sum_i \text{deg }(f|x_i).$$ Here, $\text{deg }(f)$ is the integer of multiplication characterising the homomorphism $f_\star : H_n(X) \to H_n(Y)$. [Since $H_n(X) \cong \mathbb Z$ and $H_n(y) \cong \mathbb Z$, the homomorphism $f_\star$ is multiplication by an integer; this integer is $\text{deg }(f)$.] In a similar manner, $\text{deg }(f|x_i)$ is the integer of multiplication characterising the homomorphism $f_\star : H_n (U_i , U_i - x_i) \to H_n(V, V-y)$.

At first glance, this local degree formula looks like a great computational tool. But when you sit down to apply it to any concrete example, you realise that determining the signs of the $\text{deg }(f|x_i)$'s is a real pain.

First of all, how do we fix the signs of the various degrees appearing in the formula? After all, the signs of the various degrees are only fixed once we fix choices of generators of $H_n(X)$, $H_n(Y)$, $H_n (U_i , U_i - x_i)$ and $H_n (V, V-y)$.

In Hatcher, this issue is totally glossed over. However, after carefully reading the proof of the local degree formula, it is apparent that the signs work out provided that the generators we choose for the $H_n(U_i, U_i - x_i)$ are sign-compatible with the generator we choose for $H_n(X)$, and the generator we choose for $H_n(V, V-y)$ is sign-compatible with the generator we choose for $H_n(Y)$.

The word "sign-compatible" is non-standard terminology that I have invented, but the concept is lifted straight out of the details of Hatcher's proof. Here is its definition:

Let $i_i$ and $j$ denote the natural inclusions of pairs, $$i_i : (U_i, U_i-x_i) \to (X, X - x_i),$$ $$j: (X, \emptyset) \to (X, X - x_i),$$ and let $(i_i)_\star$ and $j_\star$ denote the homomorphisms they induce on homology, $$(i_i)_\star : H_n(U_i, U_i - x_i) \to H_n(X , X - x_i),$$ $$j_\star : H_n(X) \to H_n(X, X - x_i).$$ $(i_i)_\star$ and $j_\star$ are in fact isomorphisms: $(i_i)_\star$ is an isomorphism by excision, and $(j_\star)$ is an isomorphism by the long exact sequence for the pair $(X, X - x_i)$.

Let $e_i$ be a generator of $H_n(U_i, U_i - x_i)$, and let $e$ be a generator of $H_n(X)$. We say that $e_i$ and $e$ are sign-compatible if $$(i_i)_\star(e_i) = j_\star(e).$$

A similar notion of sign-compatibility applies to generators of $H_n(V, V-y)$ and $H_n(Y)$.

The local degree formula is valid, provided that the various degrees are computed relative to a sign-compatible set of generators of the various homology groups.

In many applications, $f$ maps $U_i$ homeomorphically to $V$, so each $\text{deg }(f |x_i)$ is either $+1$ or $-1$. However, determining the sign requires us to wrangle with the complicated definition of "sign-compatible" generators.

I'd be grateful if somebody could provide some techniques for determining these signs that apply to a broad range of situations.


A concrete example

For illustration, I'll use the local degree formula to compute the degree of the map $f: X \to Y$ with $X = S^1$ and $Y = S^1$ defined by $$f(\cos \phi, \sin \phi) = (\cos 2\phi, \sin 2\phi).$$ This is an example where I can successfully determine the local degrees up to signs, but only by exploiting the high level of symmetry in the setup. My concern is that the technique I've come up with is not generally applicable - it only works in this particular example because of the high level of symmetry.

So let's get into it. Take $y = (1, 0)$. Then $f^{-1}(y) = \{ x_1, x_2 \}$, where $x_1 = (1,0)$ and $x_2 = (-1, 0)$. Take $V$ to be a small open arc around $y$, and take $U_1$ and $U_2$ to be the two connected components of $f^{-1}(V)$ containing $x_1$ and $x_2$ respectively.

$f$ maps each $U_i$ homeomorphically onto $V$, so the two local degrees are either $+1$ or $-1$. We must determine whether they have the same sign (in which case $\text{deg }(f) = \pm 2$), or whether they have opposite signs (in which case $\text{deg }(f) = 0$).

To determine the signs, let $r : X \to X$ be a $180$-degree rotation. We have the commutative diagram $\require{AMScd}$ \begin{CD} H_1(X) @>{j_\star}>> H_1(X,X-x_1) @<{(i_1)_\star}<< H_1(U_1, U_1 - x_1)\\ @V{r_\star}VV @V{r_\star}VV @V{r_\star}VV \\ H_1(X) @>{j_\star}>> H_1(X,X-x_2) @<{(i_2)_\star}<< H_1(U_2, U_2 - x_2)\end{CD}

If $e_{U_1}$ is a generator of $H_1(U_1, U_1 - x_1)$ that is "sign-compatible" with a generator $e_X$ of $H_1(X)$, then by our commutative diagram, $e_{U_2} := r_\star(e_{U_1}) \in H_1(U_2, U_2 - x_2)$ is a generator that is "sign-compatible" with the generator $r_\star(e_X) \in H_1(X)$.

But $r : X \to X$, being a rotation, is homotopic to the identity map $X \to X$. So $r_\star(e_X) = e_X$. Thus, the generator $e_{U_2} \in H_1(U_2, U_2 - x_2)$ is actually "sign-compatible" with our original generator $e_X \in H_1(X)$ too.

Now consider the following commutative diagram. $\require{AMScd}$ \begin{CD} H_1(U_1, U_1 - x_1) @>{f_\star}>> H_1(V, V-y) \\ @V{r_\star}VV @V{(\text{id})_\star}VV \\ H_1(U_2, U_2 - x_2) @>{f_\star}>> H_1(V, V-y) \end{CD}

By this commutative diagram, we have $f_\star(e_{U_1}) = f_\star(r_\star(e_{U_1})) = f_\star(e_{U_2}).$

Now let's choose a generator $e_V$ of $H_n(V, V - y)$ and a generator $e_Y$ of $H_n(Y)$ that are "sign-compatible" with one another.

We have $f_\star(e_{U_1}) = \eta e_V$, where $\eta$ is either $+1$ or $-1$. But then, $f_\star(e_{U_2}) = f_\star(e_{U_1}) = \eta e_V$ too.

Therefore, if we define all of our degrees relative to the "sign-compatible" generators $e_{U_1}, e_{U_2}, e_X, e_V, e_Y$, then $$\text{deg }(f | x_1) = \text{deg }(f | x_2) = \eta,$$ and so, the local degree formula tells us that $$\text{deg }(f) = 2\eta.$$ In other words, $\text{deg }(f) = \pm 2$.

It took me a bit of time to come up with this technique, and it is somewhat disheartening that my technique only works in a restricted class of scenarios where there is a large amount of symmetry. Therefore, I'd be grateful to learn about other techniques for computing local degrees that are applicable to situations where my technique can't be applied. Of course, I'd also be happy to learn of ways to simplify my argument for the map $f(\cos \phi, \sin\phi) = (\cos 2\phi, \sin 2\phi)$.


Edit: On rereading my calculation for the map $f(\cos \phi, \sin\phi) = (\cos 2\phi, \sin 2\phi)$, I realise that it is inaccurate to claim that the symmetry of the setup is the ingredient that makes my technique work.

Here's a better summary of what's important.

Suppose that $f^{-1}(y)$ consists of two points, $x_1$ and $x_2$. Let $U_1$ and $U_2$ be disjoint neighbourhoods of $x_1$ and $x_2$ respectively, and let $V$ be a neighbourhood of $y$ containing the images of $U_1$ and $U_2$ under $f$.

Suppose that $f|_{U_1} : U_1 \to V$ and $f|_{U_2} : U_2 \to V$ are in fact homeomorphisms. (So in particular, $\text{deg}(f|x_1)$ and $\text{deg}(f|x_2)$ are both $\pm 1$.)

Let $g : U_1 \to U_2$ be the homeomorphism defined as the composition $g = (f|_{U_2})^{-1} \circ f|_{U_1}$.

Suppose, furthermore, that there exists a homeomorphism $\tilde g : X \to X$ extending $g$.

Then, assuming that our degrees are computed relative to a "sign-compatible" set of generators, we have:

  • $\text{deg}(f|x_1) = +\text{deg}(f|x_2)$ if $\text{deg}(\tilde g) = +1$.
  • $\text{deg}(f|x_1) = -\text{deg}(f|x_2)$ if $\text{deg}(\tilde g) = -1$.

In my example, it is possible to choose $\tilde g$ to be a $180$-degree rotation (the map that I called $r$), and $\tilde g$ happens to be a homeomorphism of the circle to itself with degree $+1$.

The upshot is that the technique I used for $f(\cos \phi, \sin \phi) = (\cos 2\phi, \sin 2\phi)$ is more general than I initially thought - but by no means is it fully general.

Kenny Wong
  • 32,192
  • Somehow, I read "into" as "onto." Will delete my comments. – Thomas Andrews Mar 16 '23 at 13:43
  • 1
    An equivalent way to think about the sign is whether or not the map locally preserves orientations. – Cheerful Parsnip Mar 16 '23 at 15:54
  • @CheerfulParsnip Could you please elaborate on that? What does it mean to locally preserve orientations? And can we leverage this to perform concrete computations? Feel free to write an actual answer, by the way! – Kenny Wong Mar 16 '23 at 15:56

3 Answers3

4

Here's an answer that works in the smooth case. That is, we consider $X$ and $Y$ as smooth manifolds, and we assume $f:X\rightarrow Y$ is smooth.

Choose orientations on $X$ and $Y$. For topological manifolds, this means something in homology. However, because things are smooth, we have a few more ways to define an orientation. Here is one.

Fix, once and for all, a volume form $\omega_X$ on $X$ and $\omega_Y$ on $Y$. Being volume forms simply means that $\omega_X$ is a non-vanishing differential $n$-form on $X$, and similary for $Y$.

Then, given a smooth map $f:X\rightarrow Y$, we select a point $y\in Y$ which is a regular value of $f$. This means that for any $x\in f^{-1}(y)$, that the differential $d_x f:T_x X\rightarrow T_y Y$ is surjective. Sard's theorem guarantees that the set of non-regular $y\in Y$ has measure $0$, so finding such a $y$ is typically not difficult.

Since $y$ is a regular value, the pull back $f^\ast \omega_Y$ is injective. In particular, at any $x\in f^{-1}(y)$, the (algebraic) form $(f^\ast \omega_Y)_x$ is non-zero, so is either a positive multiple of $(\omega_X)_x$ or a negative multiple of $(\omega_X)_x$. Positive is the same as local degree $1$, and negative is the same as local degree $-1$.


Before doing an example, I wanted to mention that, in some sense, the above answer is fully general. To see this, first observe that $X$ and $Y$ are naturally smooth manifolds, so that's not really an extra assumption. And while there are continuous non-smooth $f:X\rightarrow Y$, the $C^\infty$ functions are dense in the space of all continuous functions, so any such $f$ is "close" to a smooth one. Since homotopic maps have the same degree, one can, at least in theory, use the above approach on everything.


Now, let me do your example in this language. To begin with, we need to pick $\omega_X$ and $\omega_Y$.

Thinking of $S^1\subseteq \mathbb{R}^2$, I'll let $\omega_X = \omega_Y$ be the restriction of the form $-y dx + x dy$ to $S^1$. Let's quickly verify that this is a volume form (that is, it's never zero).

Fix the point $(x,y)\in S^1$. Then the tangent vector $-y \frac{\partial}{\partial x} + x\frac{\partial}{\partial y}\in T_{(a,b)} S^1$ and $$(-y dx + xdy)\left(-y \frac{\partial}{\partial x} + x\frac{\partial}{\partial y}\right) = y^2 + x^2 = 1\neq 0.$$

Now, consider the point $y = (1,0)$. Let's verify that this is a regular point of $f$. This means that we need to check that for any $x\in f^{-1}(y)$, that $d_x f:T_x S^1\rightarrow T_y S^1$ is surjective. Since the domain and co-domain are both $1$-dimensional real vector spaces, we simply need to show that $d_x f$ is non-zero at any $x\in f^{-1}(y).$

As you noted, this has two preimages, $x_{\pm 1} = (\pm 1,0)$. Consider the two curves $\gamma_{\pm}(t) = \pm(\cos(t),\sin(t))$. Then $\gamma_{\pm}(0) = x_\pm$ and $\gamma_{\pm}'(0) =\pm \frac{\partial}{\partial y}\neq 0$, so we need to verify that $d_{x_{\pm}}f (\gamma_{\pm}'(0))\neq 0$.

This is computed as follows: \begin{align*} d_{x_{+}}f(\gamma_{+}'(0)) &= \frac{d}{dt}|_{t=0} f(\gamma_{+}(t))\\ &= \frac{d}{dt}|_{t=0} (\cos(2t), \sin(2t))\\ &= (-2\sin(2t), 2\cos(2t))|_{t=0}\\ &= 2 \frac{\partial}{\partial y}\\ &\neq 0\end{align*} and

\begin{align*} d_{x_-} f(\gamma_-'(0)) &= \frac{d}{dt}|_{t=0} f(-(\cos(t),\sin(t)))\\ &= \frac{d}{dt}|_{t=0} f((\cos(t+\pi),\sin(t+\pi)))\\ &= \frac{d}{dt}|_{t=0} (\cos(2t + 2\pi), \sin(2t+2\pi))\\ &= (-2\sin(2t+2\pi), 2\cos(2t+2\pi))|_{t=0}\\ &= 2\frac{\partial}{\partial y}\\ &\neq 0.\end{align*}

Thus, $y = (1,0)$ is a regular value.

Finally, we need to compute both $f^\ast((\omega_Y))(\gamma_{\pm}'(0))$ and $\omega_X(\gamma_{\pm}'(0))$ and compare the sign of the answers.

Since $\omega_X = -ydx + xdy$, at the point $x_\pm = \pm(1,0)$, this becomes $(\omega_X)_{x_\pm} = \pm dy$, so $$\omega_X(\gamma_\pm'(0)) = \pm dy\left(\pm \frac{\partial}{\partial y}\right) = 1.$$

On the other hand, $$(f^\ast(\omega_Y))(\gamma_{\pm}'(0)) = \omega_Y( d_{x_{\pm}} f \gamma_{\pm}'(0)) = dy\left( 2 \frac{\partial}{\partial y} \right) = 2.$$

Since $1$ and $2$ have the same sign, the local degrees are both $+1$, so the total degree is $2$.

  • Thanks! I hadn't appreciated that the smooth case is actually completely general between every continuous map is homotopic to a smooth one. – Kenny Wong Mar 16 '23 at 17:58
  • I'm trying to connect your approach to the stuff in Hatcher, which is about singular homology. By de Rham's theorem, $\omega_X$ represents an element in $H^n(X, \mathbb C)$. However, I'm not familiar enough with the dictionary between singular homology and de Rham cohomology to see that (for example) that $(\omega_X){x{+}}$ represents an element of $H^n(U_1, U_1 - x_1; \mathbb C)$. – Kenny Wong Mar 16 '23 at 18:01
  • Another place where I would need to think more is to link the fact that $(\omega_X){x{+}}$ is gotten by evaluating $\omega_X$ at the point $x_+$ to the fact that the associated classes in $H^n(U_1, U_1 - x_1; \mathbb C)$ and $H^n(X, \mathbb C)$ are "compatible" in the sense described in my original post. Furthermore, I'd have to think about how to translate between Hatcher's framing (in terms of homology with $\mathbb Z$ coefficients) to your framing (in terms of cohomology with $\mathbb C$ coefficients. But the main gap is understanding the de Rham theorem "dictionary" better. – Kenny Wong Mar 16 '23 at 18:03
  • Regardless, it's been very useful to know that there is a version of a local degree formula in the smooth case, which works in the way you illustrated in your example, and that it is very easy to compute with. – Kenny Wong Mar 16 '23 at 18:05
3

You are right, Hatcher is a bit sloppy when defining the local degree of a map $f : S^n \to S^n$. Based on the diagram on p. 136 he writes

Via these four isomorphisms, the top two groups in the diagram can be identified with $H_n(S^n) \approx \mathbb Z$, and the top homomorphism $f_∗$ becomes multiplication by an integer called the local degree of $f$ at $x_i$, written as $\deg f |x_i$.

This means that he actually considers the diagram

$\require{AMScd}$ \begin{CD} H_n(U_i,U_i-x_i) @>{(f_i)_*}>> H_n(V,V -y) \\ @V{\approx}VV @V{\approx}VV \\ H_n(S^n) @>{\psi_i}>> H_n(S^n) \end{CD}
where $f_i : (U_i,U_i-x_i) \to (V,V -y)$ denotes the restriction of $f$ and the vertical isomorphisms are induced by excision $H_n(V,V -y) \stackrel{\approx}{\longrightarrow} H_n(S^n,S^n -y)$ and the canonical isomorphism $H^n(S^n) \stackrel{\approx}{\longrightarrow} H_n(S^n,S^n -y)$ given by the long exact sequence of the pair $(S^n, S^n -y)$. The homomorphism $\psi_i$ is defined to make the diagram commute; it must not be confused with $f_* : H_n(S^n) \to H_n(S^n)$. See also Doubt about Hatcher's proof of degree calculation and Understanding the local degree for local homeomorphism.

You are also right that the explicit calculation of the local degree is not that easy, not even for local homeomorphisms. I doubt that there is a general "algorithm" to do it. Here is a suggestion which may be helpful in some cases. It is not too exact - compatible with Hatcher ;-)

If $f$ is a local homeomorphism, then we may assume that $f(U_i) = V$. If we have good luck, $U_i$ and $V$ are bounded by $(n-1)$-spheres in $S^n$ which are intersections of small standard Euclidean spheres (centered at $x_i$ and $y$) with $S^n$. In your example this is true. Collapsing $S^n-U_i$ and $S^n-V$ to points, we can find homeomorphisms $h_i : S^n/(S^n-U_i) \to S^n$ and $S^n/(S^n-V) \to S^n$ which are the identities in small neighborhoods of $x_i$ and $y_i$. This gives us homeomorphisms $\phi = h \circ f \circ h_i^{-1} : S^n \to S^n$ and one can show that $\deg (\phi_i)_* = \deg f \mid x_i$. Okay, this requires some effort, but it can be done. Frequently it is easy to see what $\deg (\phi_i)_*$ is. In your example it is easily seen that $h_i \simeq id$, i.e. the degree is $+1$.

Paul Frost
  • 76,394
  • 12
  • 43
  • 125
  • Thanks! I hadn't thought of pinching off these local neighbourhoods to form spherical "bubbles", and relating the local degrees to the degrees of the maps on these bubbles. I'll sit down with pen and paper and prove that this is equivalent to Hatcher's definition. I'd presume that a generator of $H_n(S^n/(S^n-U_i))$ is "sign-compatible" with a generator of $H_n(S^n)$ if the quotient map sends the latter to the form. When I find some pen and paper, I'll try and verify this... – Kenny Wong Mar 17 '23 at 12:01
0

It's been three weeks since I posted this question. Yesterday I learnt something that sheds light on the subject. It's an example where the calculation technique in my original post gets used to calculate something that one is likely to care about, and which is not possible to calculate by more elementary methods, at least to the best of my knowledge. Strictly speaking, this example doesn't exactly supply what I asked for in my original post, since no new techniques are at play. However, I learnt a tremendous amount from seeing the technique being used in a non-trivial manner, and I believe it may be beneficial to people landing on this page in future if I record what I learnt.

The example I'm talking about is the computation of the homology groups $\mathbb {RP}^n$ by cellular homology.

$\mathbb {RP}^n$ has the cell decomposition $e^0 \cup e^1 \cup \dots \cup e^n$, where $$ e^k := \left\{ [x_1 : \dots : x_k : (1 - |\vec{x}|^2)^{1/2}: 0: \dots : 0 ] \in \mathbb{RP}^n \ \ : \ \ \vec x \in \mathbb R^k, |\vec x| < 1 \right\}. $$

The $k$th cellular chain group is isomorphic to $\mathbb Z$. The $k$th cellular boundary map is given by the degree of the composition of the maps $$ \partial e^k \to e^0 \cup \dots \cup e^{k-1} \to \frac{e^0 \cup \dots \cup e^{k-1}}{e^0 \cup \dots \cup e^{k-2}},$$ where the first map attaches the boundary of $e^k$ to the $(k-1)$-skeleton, and the second map collapses the $(k-2)$-skeleton. Let's go ahead and calculate the degree of this map.

We can think of $X := \partial e^k$ as an $S^{k-1}$, represented in the standard manner, $$ X = \{ \vec x \in \mathbb R^k : |\vec x| = 1\}.$$ We can think of $Y := \frac{e^0 \cup \dots \cup e^{k-1}}{e^0 \cup \dots \cup e^{k-2}}$ as the quotient space, $$ Y = \{ \vec x \in \mathbb R^k : |\vec x| = 1\} / \sim,$$ where $$ \vec x \sim \vec x' \iff \vec x = -\vec x' \text{ or } x_k = x'_k = 0.$$ That is, $Y$ is what you get if you take a standard $S^{k-1}$, identify antipodal points, and collapse the equator. Of course, $Y$ is itself isomorphic to $S^{k-1}$.

The map that we want to calculate the degree of is the map $f : X \to Y$, given by $$ f : (x_1, \dots, x_k) \mapsto [ (x_1, \dots, x_k) ]_\sim.$$

Now as far I can tell, there are no obvious ways of calculating the degree of $f$ that are simpler than using the local degree formula.

To use the local degree formula, let $\vec y = [(0, \dots, 0, 1)]_\sim$. Then $f^{-1}(\vec y) = \{ \vec x_1, \vec x_2 \}$, where $\vec x_1 = (0, \dots, 0, 1)$ and $\vec x_2 = (0, \dots, 0, -1)$. Let $V$ be a small disk containing $\vec y$, and let $U_1$ and $U_2$ be the two connected components of $f^{-1}(V)$, containing $\vec x_1$ and $\vec x_2$ respectively.

$f|_{U_1} : U_1 \to V$ and $f|_{U_2} : U_2 \to V$ are homeomorphisms. Defining $g : U_1 \to U_2$ to be the composition $g = (f|_{U_2})^{-1} \circ f|_{U_1}$, we see that $g$ extends to a homeomorphism $\tilde g : X \to X$, where $\tilde g$ is the inversion map.

The inversion map $\tilde g$ has degree $(-1)^k$. This can be proved by elementary methods, without using the local degree formula, so there is no circular logic. In Hatcher, this is done by representing the inversion map as the composition of $k$ reflections. For each of these reflections, Hatcher constructs a generator of $H^{k-1}(X)$ that is manifestly mapped to minus itself by that reflection.

Anyway, since $\text{deg}(\tilde g) = (-1)^k$, the reasoning in my original post tells us that $$\text{deg}(f|x_1) = (-1)^k \text{deg}(f|x_2).$$ So applying the local degree formula, we find that $$ \text{deg}(f) = \begin{cases} \pm 2 & \text{if } k \text{ even} \\ 0 & \text{if } k \text{ odd} \end{cases}.$$

Therefore, the cellular chain complex looks like $$ 0 \to \mathbb Z \overset{\pm 2}{\to} \mathbb Z \overset{0}{\to} \dots \overset{\pm 2}{\to} \mathbb Z \overset{0}{\to} \mathbb Z \overset{\pm 2}{\to} \mathbb Z \overset{0}{\to} \mathbb Z \ \ \ \ \text{if } n \text{ even}$$ $$ 0 \to \mathbb Z \overset{0}{\to} \mathbb Z \overset{\pm 2}{\to} \dots \overset{\pm 2}{\to} \mathbb Z \overset{0}{\to} \mathbb Z \overset{\pm 2}{\to} \mathbb Z \overset{0}{\to} \mathbb Z \ \ \ \ \text{if } n \text{ odd}.$$ The homology groups of $\mathbb{RP}^n$ can be obtained by taking the homology of this complex.

It's interesting that Hatcher explains the degree calculation like this:

The map $f$ is a homeomorphism when restricted to each hemisphere of $X \setminus S^{k-2}$, and these two homeomorphisms are obtained from each other by precomposing with the antipodal map of $X$, which has degree $(-1)^k$.

(The $S^{k-2}$ in Hatcher's sentence is the equator, $\{ \vec x \in X : x_k = 0 \}$.)

The first time I read this sentence, I roughly understood the Hatcher's intuition but I had no idea how to turn the intuition into a rigorous proof. Now, having given this subject much more thought, I can see that Hatcher is outlining precisely the technique that I used!

Of course, Jason's method and Paul's method can be used in this scenario too. I'm very grateful to both of them for teaching me something.

Kenny Wong
  • 32,192