191/191
\begin{frame}{Proving Partial Correctness of \texttt{Fac2}}
  \hspace*{-3.5ex}
  \begin{minipage}{\textwidth}
  \begin{talign}
    \scalebox{.78}{
    \infer[c]{
      \hoaretriple{\formula{\true}}
                  {\underbrace{
                     \Assign{y}{1}; \Assign{z}{0}; 
                     \WhileDo{(\boolnotequalto{z}{x})}{\Assign{z}{z+1};\Assign{y}{y*z}}
                   }_{\normalsize \forestgreen{\texttt{Fac2}}}}
                  {\formula{\equalto{y}{\fac{x}}}}
    }{
      \cdots
      &
      \infer[i]{
        \hoaretriple{\formula{\logand{\equalto{y}{1}}{\equalto{z}{0}}}}
                    {\WhileDo{(\boolnotequalto{z}{x})}{\Assign{z}{z+1};\Assign{y}{y*z}}}
                    {\formula{y=\fac{x}}}
      }{
        \infer[w]{
          \hoaretriple{\formula{\alert{\equalto{y}{\fac{z}}}}}
                      {\WhileDo{(\boolnotequalto{z}{x})}{\Assign{z}{z+1};\Assign{y}{y*z}}}
                      {\formula{\logand{\alert{\equalto{y}{\fac{z}}}}{\equalto{z}{x}}}}
        }{
          \infer[c]{
            \hoaretriple{\formula{\logand{\alert{\equalto{y}{\fac{z}}}}{\notequalto{z}{x}}}}
                        {\Assign{z}{z+1};\Assign{y}{y*z}}
                        {\formula{\alert{\equalto{y}{\fac{z}}}}}
          }{
            \infer[i]{
              \hoaretriple{\formula{\logand{\equalto{y}{\fac{z}}}{\notequalto{z}{x}}}}
                          {\Assign{z}{z+1}}
                          {\formula{y\cdot z = \fac{z}}}
            }{
              \infer[a]{
                \hoaretriple{\formula{y\cdot(z+1) = \fac{(z + 1)}}}
                         {\Assign{z}{z+1}}
                         {\formula{y\cdot z = \fac{z}}}
              }{
              }
            }
            &
            \infer[a]{
              \hoaretriple{\formula{y\cdot z = \fac{z}}}
                          {\Assign{y}{y*z}}
                          {\formula{\equalto{y}{\fac{z}}}}
            }{}
          }
        }
      }
    }
    }
  \end{talign}
  \end{minipage}
  \bigskip
  
  \begin{goal}{}
    \begin{malign}
      \rulewhile[\alert]
    \end{malign}
  \end{goal}
  (loop invariant $\alert{\psi}$)
\end{frame}