In array env,
how to add extra space between two columns?
how to enumerate acrossrows?
e.g.

In array env,
how to add extra space between two columns?
how to enumerate acrossrows?
e.g.

The answer to How to enumerate the rows of a table may not satisfy you, since it numbers all the rows.
I suggest a modification, also for allowing you to refer to the row numbers via the \label-\ref mechanism.
\documentclass{article}
\usepackage{array}
\newcounter{formalproof}
\newenvironment{formalproof}
{\setcounter{formalproof}{0}%
\begin{tabular}{
@{}
>{\refstepcounter{formalproof}\theformalproof. $}l<{$}
@{\hspace{2em}}
l
@{}
}
\multicolumn{1}{@{}l@{\hspace{2em}}}{\textbf{Step}} & \multicolumn{1}{@{}l@{}}{\textbf{Reason}}\\}
{\end{tabular}}
\begin{document}
\noindent\begin{formalproof}
\label{ONE} \forall x(D(x)\to C(x)) & Premise \\
\label{TWO} D(\textrm{Marla})\to C(\textrm{Marla}) & Universal instantiation from (\ref{ONE}) \\
\label{THR} D(\textrm{Marla}) & Premise \\
C(\textrm{Marla}) & Modus ponens from (\ref{TWO}) and (\ref{THR})
\end{formalproof}
\end{document}
The labels you use are arbitrary, of course.

add commentfunction. – egreg Nov 18 '12 at 16:13