| ri[key0] = @(m, m0, m1), ri[gstore[@(m, m0, m1)].nd.key] = @(m, m0, m1), key-cons(key0, gstore[@(m, m0, m1)].nd), @(m, m0, m1) ∈ gstore, key0 ∈ ri, gstore[@(m, m0, m1)].nd.key ∈ ri, gstore[@(m, m0, m1)].nd.key.data? → gstore[@(m, m0, m1)].nd.data?, gstore[@(m, m0, m1)].nd.key.dentry? → gstore[@(m, m0, m1)].nd.dentry?, gstore[@(m, m0, m1)].nd.key.inode? → gstore[@(m, m0, m1)].nd.inode? ∧ gstore[@(m, m0, m1)].nd.key.ino ≠ 0 ⊦ key0 = gstore[@(m, m0, m1)].nd.key, m ∈ ginval |
ri[nd.key] = @(m, m0, m1), ri[key0] = @(m, m0, m1), gstore[@(m, m0, m1)] = mkgnode(nd, m2, boolvar, boolvar0), key-cons(key0, nd), nd.key ∈ ri, key0 ∈ ri, @(m, m0, m1) ∈ gstore, nd.key.inode? → nd.inode? ∧ nd.key.ino ≠ 0, nd.key.dentry? → nd.dentry?, nd.key.data? → nd.data? ⊦ key0 = nd.key, m ∈ ginval
Used simplifier rules: ⊦ ((nd = gnd.nd ∧ m = gnd.sqnum) ∧ (boolvar ↔ gnd.start)) ∧ (boolvar0 ↔ gnd.end) ↔ gnd = mkgnode(nd, m, boolvar, boolvar0); (elim) Used terms: gstore[@(m, m0, m1)], nd, m2, boolvar, boolvar0