\documentclass[oneside,12pt]{article}
\usepackage{geometry}
\usepackage{microtype}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{enumitem}
\setlist[enumerate,1]{label=\bfseries\Alph*,align=left,leftmargin=*,
labelsep=1.5em}
\setlist[enumerate,2]{label=\arabic*.,labelindent=1em,labelsep=1.5em,
leftmargin=*}
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{amsthm}
\theoremstyle{definition}
\newtheorem*{sol}{Solution}
\usepackage{forest}
\forestset{
ass/.append style={
before computing xy={l=\baselineskip},
no edge
},
prooftree/.style={
for tree={
child anchor=north,
parent anchor=south
}
},
default preamble={
prooftree,
for root={baseline},
for tree={%
if n children=1{for children={ass}}{},
math content
}
}
}
\begin{document}
\subsection*{Exercises 28}
\begin{enumerate}
\item Let's use `$\vDash$' now to abbreviate `q-entails'. Which of the
following claims are true? Provide arguments in the style of 28.2 and 28.6
to defend your answers.
\begin{enumerate}
\item $\forall x(Fx\supset Gx)\vDash\forall x(Gx\supset Fx)$
\begin{sol}
False. Try the following q-valuation:
\begin{quote}
Domain = all people\\
Extension of `F' = all singers\\
Extension of `G' = all people who know how to sing
\end{quote}
Then, the premiss is true, but the conclusion is false.
\end{sol}
\item $\forall x(Fx\supset Gx)\vDash\forall x(\neg Gx\supset\neg Fx)$
\begin{sol}
True.
\begin{forest}
prooftree
[$\forall x(Fx\supset Gx)\Rightarrow_q T$,baseline
[$\neg\forall x(\neg Gx\supset\neg Fx)\Rightarrow_q T\checkmark$,ass
[$\exists x\neg(\neg Gx\supset\neg Fx)\Rightarrow_q T\checkmark$,ass
[$\neg(\neg Ga\supset\neg Fa)\Rightarrow_{q^+}T$,ass
[$\neg Ga\Rightarrow_{q^+}T$,ass
[$\neg\neg Fa\Rightarrow_{q^+}T$,ass
[$(Fa\supset Ga)\Rightarrow_{q^+}T\checkmark$,ass
[$\neg Fa\Rightarrow_{q^+}T$ [*,ass]]
[$Ga\Rightarrow_{q^+}T$ [*,ass]]]]]]]]]
\end{forest}
\end{sol}
\item $\forall x\exists yLxy\vDash\forall y\exists xLyx$
\begin{sol}
True because the conclusion just swaps x and y in the premiss.
\end{sol}
\item $\forall x((Fx\wedge Gx)\supset Hx)\vDash\forall
x(Fx\supset(Gx\supset Hx))$
\begin{sol}
True because the following proof tree closes.
\begin{forest}
prooftree
[$\forall x((Fx\wedge Gx)\supset Hx)\Rightarrow_q T$,baseline
[$\neg\forall x(Fx\supset(Gx\supset Hx))\Rightarrow_q T\checkmark$,ass
[$\exists x\neg(Fx\supset(Gx\supset Hx))\Rightarrow_q T\checkmark$,ass
[$\neg(Fa\supset(Ga\supset Ha))\Rightarrow_{q^+}T\checkmark$,ass
[$Fa\Rightarrow_{q^+}T$,ass
[$\neg(Ga\supset Ha)\Rightarrow_{q^+}T\checkmark$,ass
[$Ga\Rightarrow_{q^+}T$,ass
[$\neg Ha\Rightarrow_{q^+}T$,ass
[$((Fa\wedge Ga)\supset Ha)\Rightarrow_{q^+}T\checkmark$,ass
[$\neg(Fa\wedge Ga)\Rightarrow_{q^+}T\checkmark$
[$\neg Fa\Rightarrow_{q^+}T$ [*,ass]]
[$\neg Ga\Rightarrow_{q^+}T$ [*,ass]]]
[$Ha\Rightarrow_{q^+}T$ [*,ass]]]]]]]]]]]
\end{forest}
\end{sol}
\end{enumerate}
\end{enumerate}
\end{document}
results in an ugly page split as below.
How can I make the document look pretty?

forest. (In the sense that, yes, TeX is Turing complete, but you'd have to essentially rewrite the relevant bit of PGF/TikZ to be able to do this.) In this case, though, you can just fake it with twoforestenvironments, surely? – cfr Feb 29 '16 at 13:35default preambleseems to require it. You could just add the stuff fromdefault preamble(exceptprooftree) into theprooftreestyle. Then your examples will work if you delete the dollar signs. The only difference will be that, in version 2, the code will unnecessarily use theprooftreestyle twice. (And you wouldn't need to say, assthough it wouldn't matter if you did.) – cfr Feb 29 '16 at 13:42