It has long been thought impossible to make a proof
environment which automatically includes an 'end-of-proof' symbol.
Some proofs end in displayed maths; others do not. If the input file
contains
...\] \end{proof}
then LaTeX finishes off the displayed maths and gets
ready for a new line before it reads any instructions connected with
ending the proof, so the code is very tricky. You can insert
the symbol by hand, but the ntheorem package now solves the
problem for LaTeX users: it does indeed provide an automatic way of
signalling the end of a proof.
The AMSLaTeX package amsthm also provides a
proof
environment that does the job; though you need to
insert a \qedhere
command if the proof ends with a displayed
equation.