@ariadne There's also another factor.
They don't need that level of flexibility.
They know how many trains they need to run on the line for a given level of service, and they can't run more trains than there are blocks. And often once a consist is assembled it isn't broken unless some of the cars need maintenance or there is some other operational need.
They already usually have spares too. So there's no real operational need to dynamically assign trains, and in fact it creates an annoying inventory management issue. It's easier to just keep them assigned to a single line.
In larger railways, they might assign rolling stock from a different route onto another, but even then they might not. There's often issues with it. Things like: is there room for it at the destination facility, if that needs to change? Can the demand be met by using existing assigned cars without fucking with the IMS/moving it around/etc.? In some cursed systems like SkyTrain, does it work with the voltage/traction power requirements? Etc.