  The classic Poincare inequality bounds the $L^q$-norm of a function $f$ in a
bounded domain $\Omega \subset \R^n$ in terms of some $L^p$-norm of its
gradient in $\Omega$. We generalize this in two ways: In the first
generalization we remove a set $\Gamma$ from $\Omega$ and concentrate our
attention on $\Lambda = \Omega \setminus \Gamma$. This new domain might not
even be connected and hence no Poincare inequality can generally hold for it,
or if it does hold it might have a very bad constant. This is so even if the
volume of $\Gamma$ is arbitrarily small. A Poincare inequality does hold,
however, if one makes the additional assumption that $f$ has a finite $L^p$
gradient norm on the whole of $\Omega$, not just on $\Lambda$. The important
point is that the Poincare inequality thus obtained bounds the $L^q$-norm of
$f$ in terms of the $L^p$ gradient norm on $\Lambda$ (not $\Omega$) plus an
additional term that goes to zero as the volume of $\Gamma$ goes to zero. This
error term depends on $\Gamma$ only through its volume. Apart from this
additive error term, the constant in the inequality remains that of the `nice'
domain $\Omega$. In the second generalization we are given a vector field $A$
and replace $\nabla $ by $\nabla +i A(x)$ (geometrically, a connection on a
U(1) bundle). Unlike the A=0 case, the infimum of $\|(\nabla +i A)f\|_p $ over
all $f$ with a given $\|f\|_q$ is in general not zero. This permits an
improvement of the inequality by the addition of a term whose sharp value we
derive. We describe some open problems that arise from these generalizations.
