Why miners need to broadcast blocks that contains full transactions in Bitcoin? Does anyone know why Bitcoin requires miners to broadcast blocks that contains full transactions?

When a user want to make a payment on Bitcion, he/she needs to broadcast a signed transaction, and miners will gather all transactions in a transaction pool. Later, when a miner successfully mined a 1MB block, he/she will broadcast this block including thousands of transactions. My question is that why cannot the miner only include transaction hashes in the block so that more transactions can be included?
In current versions of Bitcoin Core, most transactions are only relayed once and all transaction are only validated once.

New blocks and transactions in Bitcoin are usually advertised to peers by use of inv (inventory) messages. Blocks are thereby identified with the hash of their header, while transactions are identified by a hash over the complete transaction (also called txid). The peer that receives the inv message will respond by requesting the block header, the full block, a compact block, a Merkle block, or the transaction data if they want it. 

Transactions are only relayed twice on older implementations of Bitcoin Core that always request the full block when it is announced by a peer for the first time. Newer implementations use Compact Blocks which transfer only the block header, an encoding of the transactions and up to a handful of transactions that the sending node didn't have when it received the block itself. Nodes don't revalidate transactions that they already had in their mempool, as transactions get validated before a node adds them to their the mempool.


via Compact Blocks FAQ

The full list of transactions must be stored in the blockchain to allow new peers to independently validate the entire transaction history of Bitcoin.