You're right in many ways. F is a function type, and FPT is a function pointer type.
If you have an object of function type, you can take its address and get a function pointer. However, objects of function type aren't real, first-class C++ objects. Only actual functions are of such a type, and you can't create an object that is a function (other than by declaring a function!) and thus you cannot assign to it (as in F f = foo;).
The only way you can refer to a function is via a function pointer or reference:
FPT f1 = &foo;
F * f2 = &foo;
F & f3 = foo;
See also this answer.
Note that for a callback I would prefer the reference type over the pointer type, because it's more natural compared to how you pass any other variable, and because you can apply address-of and decay to the reference and get the pointer, which you can't do with a pointer:
double callme(F & f, double val) // not: "F *" or "FPT"
{
return f(val);
// "&f" and "std::decay<F>::type" still make sense
}