  A 2-group is a "categorified" version of a group, in which the underlying set
G has been replaced by a category and the multiplication map has been replaced
by a functor. Various versions of this notion have already been explored; our
goal here is to provide a detailed introduction to two, which we call "weak"
and "coherent" 2-groups. A weak 2-group is a weak monoidal category in which
every morphism has an inverse and every object x has a "weak inverse": an
object y such that x tensor y and y tensor x are isomorphic to 1. A coherent
2-group is a weak 2-group in which every object x is equipped with a specified
weak inverse x* and isomorphisms i_x: 1 -> x tensor x* and e_x: x* tensor x ->
1 forming an adjunction. We describe 2-categories of weak and coherent 2-groups
and an "improvement" 2-functor that turns weak 2-groups into coherent ones, and
prove that this 2-functor is a 2-equivalence of 2-categories. We internalize
the concept of coherent 2-group, which gives a quick way to define Lie
2-groups. We give a tour of examples, including the "fundamental 2-group" of a
space and various Lie 2-groups. We also explain how coherent 2-groups can be
classified in terms of 3rd cohomology classes in group cohomology. Finally,
using this classification, we construct for any connected and simply-connected
compact simple Lie group G a family of 2-groups G_hbar (for integral values of
hbar) having G as its group of objects and U(1) as the group of automorphisms
of its identity object. These 2-groups are built using Chern-Simons theory, and
are closely related to the Lie 2-algebras g_hbar (for real hbar) described in a
companion paper.
