| (gndx0 + gndx1).head = mkgnode(nd0, m0, boolvar1, boolvar2), gndx0[n0] = mkgnode(nd, m, boolvar, boolvar0), # gndx0 + # gndx1 < # ndx, # gndx0 < # ndx, ∀ n. n < # gndx0 + # gndx1 → (gndx0 + gndx1)[n].nd = ndx[n], gndx0 + gndx1 = [] ∨ boolvar1 ∧ (∀ n. (n ≠ 0 ∧ n < # gndx0 + # gndx1 → ¬ (gndx0 + gndx1)[n].start) ∧ (n < # gndx0 + # gndx1 → ¬ (gndx0 + gndx1)[n].end)) ⊦ ndx = [], (n0 < # gndx0 → nd = ndx[n0]) ∧ (gndx0 = [] ∨ gndx0.head.start ∧ (n ≠ 0 ∧ n < # gndx0 → ¬ gndx0[n].start) ∧ (n < # gndx0 → ¬ gndx0[n].end)) |
(gndx0 + gndx1).head = mkgnode(nd0, m0, boolvar1, boolvar2), gndx0.head = mkgnode(nd1, m1, boolvar3, boolvar4), gndx0[n0] = mkgnode(nd, m, boolvar, boolvar0), # gndx0 < # ndx, # gndx0 + # gndx1 < # ndx, ∀ n. n < # gndx0 + # gndx1 → (gndx0 + gndx1)[n].nd = ndx[n], gndx0 + gndx1 = [] ∨ boolvar1 ∧ (∀ n. (n ≠ 0 ∧ n < # gndx0 + # gndx1 → ¬ (gndx0 + gndx1)[n].start) ∧ (n < # gndx0 + # gndx1 → ¬ (gndx0 + gndx1)[n].end)) ⊦ ndx = [], (n0 < # gndx0 → nd = ndx[n0]) ∧ (gndx0 = [] ∨ boolvar3 ∧ (n ≠ 0 ∧ n < # gndx0 → ¬ gndx0[n].start) ∧ (n < # gndx0 → ¬ gndx0[n].end))
Used simplifier rules: ⊦ ((nd = gnd.nd ∧ m = gnd.sqnum) ∧ (boolvar ↔ gnd.start)) ∧ (boolvar0 ↔ gnd.end) ↔ gnd = mkgnode(nd, m, boolvar, boolvar0); (elim) Used terms: gndx0.head, nd1, m1, boolvar3, boolvar4