So I understand how a patricia trie works, it's a trie using 0 to f as root nodes, and it also removes empty nodes to make leafs and extensions.
What I don't get is how the stateRoot hash is made.
From what I read, the stateRoot is a hash of the root nodes, but he root nodes contain every other nodes, so wouldn't it require the entire state to make/verify it?
And let's say it only contains the root nodes, without their children, well that's always 0 to f, so it would always be the same.
How do I calculate a proof of this stateHash?
Is the stateHash even a merkle proof?
How is their any computation or data requirement savings like there is with the bitcoin merkle tree proofs? Do I need the entire Ethereum state to calculate the stateRoot/state proof? How do light clients work?