A process for rigorous inspection of concurrent systems using tabular specification was developed and applied to the classic Readers/Writers concurrent program by Jin. The process involved rewriting the program into a table and then performing a manual “column-by-column" inspection for safety and clean completion properties. The key element in the process is obtaining an invariant strong enough to prove the properties of interest. This thesis presents partial automation of the proposed approach by combining theorem proving and model checking. Model checking is first used to validate a formal model of the system with a small, fixed number of concurrent process instances. The verification of the system for an arbitrary number of processes
is then performed using theorem proving together with model checking on the earlier model to quickly validate potential invariants before they are used in the formal proof. This method was used to check the manual proof of the Readers/Writers problem referred to earlier, discovering several random and one systematic mistake of the proof. Then, a new, significantly automated proof was performed.