I have read articles about how Invertible Bloom Filters (IBLT) work and I have some basic knowledge how Bitcoin works for block propagation using IBLT. But since IBLT would introduce false positive, participants in the network would have a chance in unsuccessful in receiving all differences between two IBLTs. So I am wondering how Bitcoin solve this problem to recover all blocks?
The purpose of IBLT-based block transfer mechanism is reducing bandwidth (how much data is sent in total) and latency (how long it takes to transfer the block), and depending on which has the priority there are different solutions.
If latency is of no concern at all, you would simply send a block header together with a list of (truncated) txids, and the peer would reply with "i'm missing transactions 3, 7, 112, and 234", followed by just sending those transactions. Such a solution would require several round trips: first sending the txids, the peer requesting the ones he is missing, and us sending the transactions.
If latency is a concern however, that's still just 3 steps, but each of those steps may be in the order of half a second or more, depending on how far away you are. If your network connection is over 10 Mbit/s, you could just transmit the entire block in the extra time wasted by the roundtrips.
So this is where IBLT and other efficient block propagation protocols come in: they try to construct a single packet that gives enough information for the peer to reconstruct the block, but without sending the full block. Occasionally that attempt will fail, false positives will occur, and the reconstruction will fail (as the block hash doesn't match what was claimed). In that case we just fall back to the naive version: go request the transactions you're missing, and incur the associated extra latency.