  The notion of knowledge-based program introduced by Halpern and Fagin
provides a useful formalism for designing, analysing, and optimising
distributed systems. This paper formulates the two phase commit protocol as a
knowledge-based program and then an iterative process of model checking and
counter-example guided refinement is followed to find concrete implementations
of the program for the case of perfect recall semantic in the Byzantine
failures context with synchronous reliable communication. We model several
different kinds of Byzantine failures and verify different strategies to fight
and mitigate them. We address a number of questions that have not been
considered in the prior literature, viz., under what circumstances a sender can
know that its transmission has been successful, and under what circumstances an
agent can know that the coordinator is cheating, and find concrete answers to
these questions. The paper describes also a methodology based on
temporal-epistemic model checking technology that can be followed to verify the
shortest and longest execution time of a distributed protocol and the scenarios
that lead to them.
