by Yu Feng
e ::= n | x | e1 + e2
| e1 - e2 | e1 * e2b ::= true | false
| e1 = e2
| e1 ≤ e2 | ¬b | b1 ∧ b2c ::= skip | x := e
| c1 ; c2
| if b then c1 else c2
| while b do cwhile x ≤ 5 do
x := x + 1;
y := y * 2 ⟨x + 1, σ⟩ ⇓ 3
/ \
⟨x, σ⟩ ⇓ 2 ⟨1, σ⟩ ⇓ 1
(by Var rule) (by Const rule)
⟨x := 1; y := x + 2, {}⟩ ⇓ {x ↦ 1, y ↦ 3} (by Seq rule)
├── ⟨x := 1, {}⟩ ⇓ {x ↦ 1} (by Assign rule)
│ └── ⟨1, {}⟩ ⇓ 1 (by Const rule)
└── ⟨y := x + 2, {x ↦ 1}⟩ ⇓ {x ↦ 1, y ↦ 3} (by Assign rule)
└── ⟨x + 2, {x ↦ 1}⟩ ⇓ 3 (by Plus rule)
├── ⟨x, {x ↦ 1}⟩ ⇓ 1 (by Var rule)
└── ⟨2, {x ↦ 1}⟩ ⇓ 2 (by Const rule)

⟨while x ≤ 4 do x := x + 1, {x ↦ 3}⟩ ⇓ {x ↦ 5} (by While-True rule)
├── ⟨x ≤ 4, {x ↦ 3}⟩ ⇓ true (by Leq rule)
│ ├── ⟨x, {x ↦ 3}⟩ ⇓ 3 (by Var rule)
│ └── ⟨4, {x ↦ 3}⟩ ⇓ 4 (by Const rule)
├── ⟨x := x + 1, {x ↦ 3}⟩ ⇓ {x ↦ 4} (by Assign rule)
│ └── ⟨x + 1, {x ↦ 3}⟩ ⇓ 4 (by Plus rule)
│ ├── ⟨x, {x ↦ 3}⟩ ⇓ 3 (by Var rule)
│ └── ⟨1, {x ↦ 3}⟩ ⇓ 1 (by Const rule)
└── ⟨while x ≤ 4 do x := x + 1, {x ↦ 4}⟩ ⇓ {x ↦ 5} (by While-True rule)
├── ⟨x ≤ 4, {x ↦ 4}⟩ ⇓ true (by Leq rule)
│ ├── ⟨x, {x ↦ 4}⟩ ⇓ 4 (by Var rule)
│ └── ⟨4, {x ↦ 4}⟩ ⇓ 4 (by Const rule)
├── ⟨x := x + 1, {x ↦ 4}⟩ ⇓ {x ↦ 5} (by Assign rule)
│ └── ⟨x + 1, {x ↦ 4}⟩ ⇓ 5 (by Plus rule)
│ ├── ⟨x, {x ↦ 4}⟩ ⇓ 4 (by Var rule)
│ └── ⟨1, {x ↦ 4}⟩ ⇓ 1 (by Const rule)
└── ⟨while x ≤ 4 do x := x + 1, {x ↦ 5}⟩ ⇓ {x ↦ 5} (by While-False rule)
└── ⟨x ≤ 4, {x ↦ 5}⟩ ⇓ false (by Leq rule)
├── ⟨x, {x ↦ 5}⟩ ⇓ 5 (by Var rule)
└── ⟨4, {x ↦ 5}⟩ ⇓ 4 (by Const rule)