Given an input and a program can you derive the output without running the program?

In general, given an input and a program can you derive the output without running the program?

What are the circumstances under which this is possible and when is this impossible, i.e. when does this problem reduce to the halting problem (seems like it does)?

Thanks!