How does the lightning network solve double spending? This is probably obvious to some of you on here, but I'm a beginner. I recently read the lightning network whitepaper and its very unclear to me how the lightning network addresses the double spend problem without broadcasting transactions to the public blockchain. Can someone explain this to me? 

To use the example in the white paper, if Alice and Bob are sending BTC back and forth to each other through a secure payments channel, I agree this provides Byzantine fault tolerance in a two-person economy of just Alice and Bob. Moreover, I agree this solves for scaling issues currently present in Bitcoin. My understanding here is that the net result of Alice and Bob's transactions are posted to the network at some later date, which is what solves the bitcoin scaling issue. That said, if the transactions of Alice and Bob are not immediately broadcasted to the network, then why can't either of Alice and Bob double spend with another party, Cindy? Provided that either of Alice and Bob transact with Cindy before the wallet states of Alice and Bob are broadcast via the blockchain, then there is no way for Cindy's wallet to be "aware" of whether Alice / Bob's wallet state has sufficient bitcoin for a transaction with Cindy. For this reason, I don't understand how double spending is avoided and why Cindy can be sure that Alice / Bob aren't cheating Cindy in a transaction.
To open a channel you have to lock funds in a multisig address. This is with an on-chain transaction. So those funds can't be used to pay Cindy on-chain. They can't be used to pay Cindy on LN either without both Alice and Bob's approval since it's a multisig address that requires both Alice's and Bob's signature.