It's not two transactions, it's one transaction plus the number of inputs transactions and their merkel paths. However, if you're asserting that an input simply doesn't exist there is no compact proof for that currently (though one could be added with an additional commitment). Proving things like "coinbase takes too much subsidy" also requires additional data. I enumerated many (most?) of the things that need additional data to be proved a long time back:
https://en.bitcoin.it/wiki/User:Gmaxwell/features#ProofsThe big one is missing data.
SPV header checks
Header size is unaffected by number of transactions per second, so I think SPV nodes could be assumed to check headers.
Making the header chain the root for all the other proofs is reasonable.
Even if some SPV nodes only keep the 10-20k newest blocks, it would likely be safe.
Proof of invalid script
If P2SH was made mandatory, then this is made easier. The entire script and release script is included in the spending transaction.
It is still necessary to prove that the output actually exists. That can be handled by the UTXO commit system.
If merkle tree changes are allowed, the merkle tree could also have paths to the hash for all outputs. That keeps the proof of existence easier.
Failing that, there could be a rule that transactions can't have more than 4 outputs. That (somewhat) limits the size of transactions.
Proof of double spend
The UTXO commit system would also cover this.
Proof of false inflation
Proof of block too large
Right, needs a new merkle tree.
Proof of spending a non-existing input
This is the hard one. If there was a commit system, then blocks should include the extra data needed to verify each of the commits.
If all UTXOs are in a tree, then only the hash of the root is needed.
To verify each transaction, it is necessary to know the root before and after the transaction to prove that the transaction tree has been correctly updated.
This means that there is a need for a merkle tree containing the root of the tree after each update.
To verify that the UTXO tree has been updated correctly, then you need
merkle root of UTXO merkle tree for the block
path to the node before and after the transaction
- This proves the tree's root before and after the transaction was inserted
path through the UTXO tree for each input and output in the transaction
- This allows the TXO's to be inserted and removed
This allows a SPV node to check a particular transaction.
The final issue is proving that proof data is missing. If an illegal transaction is included, nodes have to be able to obtain the extra data. If they can't, then they can't create the proof.