What is the need for a pre-vote step in tendermint?

It’s a bit more involved but essentially yes. In a system with 3f+1 nodes (at most f faulty) having only Proposal and Precomit is not sufficient as faulty processes can send different messages to different processes, leaving system in a state where a correct process p1 can decide some value v1 in round r1 and being possible for other correct processes to decide on some value v2 in later rounds. This is avoided by having processes first preagree on a single value (with Prevote) and then confirm preagreement with Precommit messages. The other option is using 5f+1 nodes to tolerate f faulty nodes; then Prevote message is not needed due to higher quorums used. You have formal treatment of this subject here: [https://infoscience.epfl.ch/record/146821/files/bcc-paper.pdf ].