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
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).