Trong Promela không có sự phân biệt giữa lệnh điều kiện và câu lệnh, thậm chí cả các điều kiện boolean cũng có thểđược sử dụng như các câu lệnh. Câu lệnh có thể là câu lệnh thi hành (executable) hoặc lệnh bị tạm thời trì
hoãn (blocked) tuỳ thuộc vào trạng thái tổng thể của hệ thống. Khi điều kiện
được thoả mãn, thì câu lệnh điều kiện chính là lệnh thi hành. Lệnh thi hành là các lệnh có thểđược thi hành ngay lập tức, lệnh blocked là lệnh chưa được thi hành ngay. Câu lệnh gán luôn là câu lệnh thi hành.
Một biểu thức logic có thể là một câu lệnh thực thi nếu nó có giá trị khác 0 2 < 3 : luôn là lệnh thi hành
x < 27 chỉ là lệnh thi hành nếu giá trị của x < 27 3 + x chỉ là lệnh thi hành nếu x khác –3
Một số lệnh thường dùng:
¾ Lệnh skip: không làm gì cả (does nothing), chỉ dùng để thay đổi biến
đếm tiến trình của tiến trình), luôn là lệnh thi hành.
¾ Lệnh run: chỉ là lệnh thi hành nếu một tiến trình mới được tạo ra, chú ý số tiến trình được tạo ra là có giới hạn.
¾ Lệnh printf: luôn là lệnh thi hành, nhưng không dùng đểđánh giá trong
suốt quá trình xác thực. int x; proctype Aap() { int y=1; skip;
run Noot(); /*Là lệnh thi hành nếu Noot được tạo */ x=2;
x>2 && y==1;
/* Chỉ thi hành nếu một số tiến trình khác làm x>2 */ skip;
}
¾ Lệnh assert (<expr>): luôn luôn là lệnh thi hành. Nếu <expr> có giá trị
(violated). Câu lệnh assert thường được sử dụng trong các mô hình Promela để kiểm tra xem các điều kiện có được thoả mãn hay không