An alignment issue with \begin{matrix}

It is much simpler to do that with the dedicated cases environment, or its dcases* variant defined by mathtools):

\documentclass{article}
\usepackage{mathtools}

\begin{document}

\begin{equation}
d(T,b)=\begin{dcases*}
0 & if branch has been covered, \\
v(d_{\min}(t\in T, b)) & \parbox[t]{15em}{if the predicate has been executed at least twice,}\\
1 & otherwise. \\
\end{dcases*}
\end{equation}

\end{document} 

enter image description here


This is only a combination of array and matrix...but the enviroment cases it is the just and correct solution.

\documentclass[a4paper,12pt]{article}
\usepackage{mathtools,amssymb}
 
\begin{document}
\begin{equation*}
   d(T,b)=\left\{\begin{array}{lll}
      0 \\ 
      v(d_{\min}(t\in T, b)) \\
      1
    \end{array}\right.
    \begin{matrix*}[l]
\text{if branch has been covered,}  & \\
\text{if the predicate has been executed at least twice,}& \\
\text{otherwise.}
\end{matrix*}
\end{equation*}

\end{document}


In order not to guess the width, you could use tabular:

\documentclass{article}
\usepackage{amsmath}

\newcommand{\btext}[1]{%
  \begingroup\renewcommand{\arraystretch}{1}%
  \begin{tabular}[t]{@{}l@{}}#1\end{tabular}
  \endgroup
}

\begin{document}

\begin{equation}
d(T,b)=
\begin{cases}
  0                      & \text{if branch has been covered,}\\[0.5ex]
  v(d_{\min}(t\in T, b)) & \btext{if the predicate has been \\
                             executed at least twice,}\\[3ex]
  1 & \text{otherwise.}
\end{cases}
\end{equation}

\end{document}

The (local) resetting of \arraystretch is necessary because cases changes it. Some guessing is still needed, in order to separate the rows.

enter image description here