Non-abelian cohomology