Well then, wouldn't it be possible to put in checkpoints containing parts (or hashes) of the historically valid chain, so it becomes impossible to supply a longer fake chain ?
The checkpoints do contain the hashes see the source code
https://github.com/bitcoin/bitcoin/blob/master/src/checkpoints.cpp Even with checkpoints you can still make longer fake chains (which fork after the last checkpoint) but they won't be the real chain because they will have lower cumulative difficulty.
Ah, so I was (partially) right after all.
Well, that's right - you can still make longer fake chains.
OK, nothing more for me to do here.