Zero-knowledge proof systems have three properties: soundness, completeness and zero-knowledge. I can't understand the definition of "zero-knowledge". What does "simulate" mean? And what is the difference between "honest-verifier zero-knowledge" and "zero-knowledge"?
The intuition behind Zero Knowledge is that the Verfifier should not learn something about the secret. That means, that the communication between the Prover and the Verifier ("Transcript") must not reveal any information about the secret. So, there must exist a Simulator, not knowing the secret, that can falsify the transcript between Prover and Verifier. A "real" transcript and a transcript falsified by a Simulator must be indistinguishable. Thus, "simulate" means that the Simulator simulates the communication between a Prover and a Verifier.
Honest Verifier ZK means, that we can expect that the Verifier behaves honestly according to the specified protocol. That is, he does what the protocol specifies. In "normal" ZK, the Verifier can be malicious.
Example: The Graph 3-Color protocol . An honest Verifier chooses a random edge (as the protocol says). A malicious Verifier may choose every time the same edge.