\[ \definecolor{ink}{RGB}{26,26,26} \definecolor{tight}{RGB}{0,120,174} \definecolor{loose}{RGB}{224,112,26} \definecolor{accent}{RGB}{224,112,26} \definecolor{muted}{RGB}{91,93,97} \newcommand{\tight}[1]{{\color{tight}{#1}}} \newcommand{\loose}[1]{{\color{loose}{#1}}} \newcommand{\larr}{\mathrel{\color{loose}{\rightsquigarrow}}} \newcommand{\tarr}{\mathrel{\color{tight}{\to}}} \newcommand{\set}{\mathcal{S}\mathrm{et}} \newcommand{\rel}{\mathbb{R}\mathrm{el}} \]
Programs compose. Specifications compose.
Double categories let them compose together.
A double category is a category of programs and a category of specifications, glued together by squares that say “this program meets this spec”.
More about double categories