For verifying transactions, normally nodes do proof of work and agree with the majority of workers, but why can't they just do the computation themselves and agree with any other node that has the same result? That way even if an attacker has 99% of the work/stake/etc, the other 1% (aka all the actual users) can ignore the attacker because they all know he's wrong, essentially an automatic pruning of incorrect transaction history branches.
1 Answer
The purpose of proof-of-work or proof-of-stake is not to exclude block chains with invalid transactions; it is to make sure there is only one chain with valid transactions.
Without proof-of-work, any old fool (like me) can compute a whole bunch of blocks: one with a transaction where I sent \$100 to Alice, one with a transaction where I sent \$100 to Bob, one where I still have the \$100.
So which one is the block that actually counts? Who has the \$100? That's what proof-of-work and proof-of-stake systems attempt to solve.