These track linearity, but isn't there a bunch more if you want borrow checking? Like the fractional permission style stuff the borrow checker does goes far beyond linearity IIUC.
Like, I'm thinking of stuff like how you can lend out a local immutable reference to an owned binding in a scope, which prevents you altering the owned binding. Or stuff like partial borrows, etc.
Linear types can model the ownership stuff I think - although it's a bit awkward - ie. I think you need to use CPS to make it work. It's a bit more natural with uniqueness types though (like in Clean).
et. al.? https://arxiv.org/pdf/1903.00982.pdf… - I think it has a good, precise description of things Rust's borrow checker supports, but I admittedly have not got around to sitting down to read it deeply yet. 😅
6.2 also brings up another kind of feature of the borrow checker, but between that and section 2, I think that should be all of the "borrow checking" functionality.