add tags to TerminalMorphism to avoid ambiguity
Add categorical products and define product categories by a universal property