Prototype is usually something working, while spike can be pure research (e.g. validate that APIs are feasible and enough, or that something satisfies requirements). Prototype is usually more polished/usable. Experiment in my mind is something which user-facing but not in stable yet.
So for me they are differentiated enough, but could be that I am just used to it.
An experiment doesn’t say anything about user facing or not. I do tons of them when reverse engineering poorly documented hardware and APIs to determine if the thing I’m trying to do is even supported.