In school, we understand a function $\mathrm{f} :\mathrm{X\to Y}$ by its graph: the relation of inputs $\mathrm{x:X}$ to outputs $\mathrm{f(x):Y}$.

$$ \mathrm{graph}f \;\equiv\;\; [f(\mathrm{x}) = \mathrm{y}]:\{0,1\} $$

The graph of $\mathrm{f}$ relates each input $\mathrm{x:X}$ to its image $\mathrm{f(x):Y}$. **We can understand this as “pushing forward” by $\mathrm{f}$.

The mirror image is the cograph:

$$ \mathrm{cograph}f\;\equiv\;\; [\mathrm{y}=f(\mathrm{x})]:\{0,1\} $$

The cograph of $\mathrm{f}$ relates each output $\mathrm{y:Y}$ to its preimage $\{\mathrm{x:X} \,|\, \mathrm{f(x)=y}\}$. We can understand this as “pulling backward” by $\mathrm{f}$.

example.

The graph can be drawn as follows.

The cograph can be drawn as follows.

So, every function gives a “dual pair” of relations: in fact, there are special inferences which connect the two, which define how we use processes to “push and pull” relations.

[bends]

image.png

subst.png