Mining and transaction validation are different concepts.
As far as I know, every node validates transactions and puts the valid ones into its own memory pool. Miners select (already validated) transactions from the mempool and carry out the mining process to create a block.
Do miners carry out additional checks?
I'm not proficient with C++, but it looks like transaction validation is carried out in main.cpp (AccepttoMemoryPool,...), whereas transaction selection and mining occur in miner/miner.cpp
Is it true?