One is a modus ponens block -- given the two inputs (X -> Y) and (X), it produces the output (Y).
The other is a block for positing assumptions ("local hypotheses"). In the block selection menu, it has an ordinary output of (X -> Y). It has a notch in the top with an output of (X) on the left and an input of (Y) on the right.
The function of this block, as shown by the ordinary output, is to prove statements of the form (X -> Y). For this purpose, it gives you a free output of X, but every path you send that X through must eventually either be abandoned or come back to the matching Y input in its notch.
The X will magically become the variable you need when connected to the appropriate input of a modus ponens block.