\documentclass{article}

\usepackage{proof}
\usepackage{utf8}

\begin{document}

Proof of $⊢ ((P ∧ Q) → R) → (P → (Q → R))$:
\begin{displaymath}
\infer[→ intro]{⊢ ((P ∧ Q) → R) → (P → (Q → R))}{
  \infer[→ intro]{(P ∧ Q) → R ⊢ P → (Q → R)}{
    \infer[→ intro]{(P ∧ Q) → R, P ⊢ Q → R}{
      \infer[→ elim]{(P ∧ Q) → R, P, Q ⊢ R}{
        \infer[assum]{\dots, (P∧Q)→R ⊢ (P∧Q) → R}{}
        &
        \infer[∧ intro]{\dots ⊢ P∧Q}{
          \infer[assum]{\dots, P ⊢ P}{}
          &
          \infer[assum]{\dots, Q ⊢ Q}{}
        }
      }
    }
  }
}
\end{displaymath}

\newpage{}

Proof of $⊢ ¬(P∧Q) → (¬P ∨ ¬Q)$:
\begin{displaymath}
\infer[→ intro]{⊢ ¬(P∧Q) → (¬P ∨ ¬Q)}{
  \infer[∨ elim]{¬(P∧Q) ⊢ ¬P ∨ ¬Q}{
    \infer[excl~mid]{\cdots ⊢ P∨¬P}{}
    &
    \infer[∨ elim]{\cdots, P ⊢ ¬P ∨ ¬Q}{(see~below)}
    &
    \infer[∨ intro]{\cdots, ¬P ⊢ ¬P ∨ ¬Q}{
      \infer[assum]{\cdots, ¬P ⊢ ¬P}{}
    }
  }
}
\end{displaymath}

\begin{displaymath}
\infer[∨ elim]{\cdots, P ⊢ ¬P ∨ ¬Q}{
  \infer[excl~mid]{\cdots ⊢ Q∨¬Q}{}
  &
  \infer[absurd]{\cdots, Q ⊢ ¬P ∨ ¬Q}{(see~below)}
  &
  \infer[∨ intro]{\cdots, ¬Q ⊢ ¬P ∨ ¬Q}{
    \infer[assum]{\cdots, ¬Q ⊢ ¬Q}{}
  }
}
\end{displaymath}

\begin{displaymath}
\infer[absurd]{\cdots, Q ⊢ ¬P ∨ ¬Q}{
  \infer[∧ intro]{\cdots ⊢ P∧Q}{
    \infer[assum]{\dots,P ⊢ P}{}
    &
    \infer[assum]{\dots,Q ⊢ Q}{}
  }
  &
  \infer[assum]{\dots, ¬(P∧Q) ⊢ ¬(P∧Q)}{}
}
\end{displaymath}
\end{document}

