Homotopy invariance of singular cohomology groups My question is the following: how can we prove that singular cohomology groups are homotopy invariants given that singular homology groups are? I am studying this subject, but in the texts I am using there is no mention to this fact.
What properties, if any, of the functor $\text{Hom}$ do we need to prove to get the result? Are there any references that demonstrate this result clearly? In which way do they prove it?
Thanks in advance for your time.
P.S.: I haven't yet been introduced to the Universal Coefficients Theorem, and I would like, if possible, the least expensive and most elementary proof available of this result. And again, thanks for the effort
 A: The usual way of proving that singular homology is homotopy invariant is using chain homotopies.  In general, if $A_\bullet$ and $B_\bullet$ are chain complexes and $f,g:A_\bullet\to B_\bullet$ are chain maps, then a chain homotopy from $f$ to $g$ is a sequence of maps $h_n:A_n\to B_{n+1}$ which satisfy $$f_n-g_n=\partial^B_{n+1}h_n+h_{n-1}\partial^A_n.\qquad(*)$$  The existence of such a chain homotopy then implies that the induced maps on homology $f_*,g_*:H_*(A_\bullet)\to H_*(B_\bullet)$ are equal (proof: if $x\in A_n$ is a cycle then $f_n(x)-g_n(x)=\partial^B_{n+1}(h_n(x))+h_{n-1}(\partial^A_n(x))=\partial^B_{n+1}(h_n(x))$ so $f_n(x)$ and $g_n(x)$ differ by a boundary and so represent the same class in $H_n(B_\bullet)$).
How does this apply to singular homology?  Well, given a homotopy between two maps $f,g:X\to Y$ between topological spaces, there is a geometric construction you can do to obtain a chain homotopy between the induced chain maps $f_*,g_*:C_\bullet(X)\to C_\bullet(Y)$ on singular chains.  This then implies the induced maps on homology are equal.
So what about singular cohomology?  Well, you can just apply the Hom functor to the chain homotopy between $f_*,g_*:C_\bullet(X)\to C_\bullet(Y)$ to obtain a chain homotopy between $f^*,g^*:C^\bullet(Y)\to C^\bullet(X)$, so that they induce the same maps on cohomology.  All this uses about that Hom functor is that it is an additive functor, so that it preserves the identity $(*)$ above.  More generally, any additive functor between abelian categories will send chain homotopies to chain homotopies (since they preserve the identity $(*)$ above).
