Automatic verification of distributed concurrent systems: the process algebra approach