| P = pe(0, 2, 1) ' + pe(3, 5, 2) ', F = (∅)[0, 0][1, 0][2, 0][3, 1][4, 1][5, 1] ⊦ ⟨let Pdone = [], Pnew = [], length_of_P = # P in {F0 := F, P0 := P; while P0 ≠ [] do let p = P0.head in {P0 := P0.tail; if p.count ≠ 0 ∧ p.first + p.count ≤ p.last then Pdone := Pdone + pe(p.first, p.first + p.count -1, 0), Pnew := Pnew + pe(p.first + p.count, p.last, 0), F0 := F0[p.first + p.count, p.last, length_of_P + # Pnew] else Pdone := Pdone + p}; P0 := Pdone + Pnew}⟩ ( P0 = pe(0, 0, 0) ' + pe(3, 4, 0) ' + pe(1, 2, 0) ' + pe(5, 5, 0) ' ∧ F0 = (∅)[0, 0][1, 2][2, 2][3, 1][4, 1][5, 3]) |
P = pe(0, 2, 1) ' + pe(3, 5, 2) ', F = (∅)[0, 0][1, 0][2, 0][3, 1][4, 1][5, 1], length_of_P = # P, Pnew = [], Pdone = [] ⊦ ⟨F0 := F, P0 := P⟩ ⟨while P0 ≠ [] do let p = P0.head in {P0 := P0.tail; if p.count ≠ 0 ∧ p.first + p.count ≤ p.last then Pdone := Pdone + pe(p.first, p.first + p.count -1, 0), Pnew := Pnew + pe(p.first + p.count, p.last, 0), F0 := F0[p.first + p.count, p.last, length_of_P + # Pnew] else Pdone := Pdone + p}⟩ ⟨P0 := Pdone + Pnew⟩ ( P0 = pe(0, 0, 0) ' + pe(3, 4, 0) ' + pe(1, 2, 0) ' + pe(5, 5, 0) ' ∧ F0 = (∅)[0, 0][1, 2][2, 2][3, 1][4, 1][5, 3])
[Concretesimprules(())]