Your pt proc is a generic proc, that is when you call it with different types, then for each type an instance is created.
For t1 you call it with int arguments, so an instance for ints is created. For t2 and t3 first argument is a float, so a float instance is created, the other literals are passed as float too. For t4 first arg is a int literal, so the already existing int instance is used, but second arg if of type float, which is not automatically converted to int, so the compile error. Hope that is right.
