| P = P0, DAid(A, D), ADid(A, D), nodups(A), split(P0, A, X), partitions(P0, # A), Fok(F, P0, # A), samepartitions(P0, A, P4, A4), length_of_P = # P, Pnew = [], Pdone = [] ⊦ ⟨F0 := F, P1 := P⟩ ⟨while P1 ≠ [] do let p = P1.head in {P1 := P1.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}⟩ ⟨P1 := Pdone + Pnew⟩ (partitions(P1, # A) ∧ divides(P1, P0, X, A) ∧ Fok(F0, P1, # A) ∧ partitionRefinement(P1, A, P4, A4, X)) |
P = P0, DAid(A, D), ADid(A, D), nodups(A), split(P0, A, X), partitions(P0, # A), Fok(F, P0, # A), samepartitions(P0, A, P4, A4), length_of_P = # P, Pnew = [], Pdone = [], F1 = F ∧ P2 = P ⊦ ⟨while P2 ≠ [] do let p = P2.head in {P2 := P2.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), F1 := F1[p.first + p.count, p.last, length_of_P + # Pnew] else Pdone := Pdone + p}⟩ ⟨P2 := Pdone + Pnew⟩ (partitions(P2, # A) ∧ divides(P2, P0, X, A) ∧ Fok(F1, P2, # A) ∧ partitionRefinement(P2, A, P4, A4, X))
[Concretesimprules(())]