| ri[gstore[@(m, m0, m1)].nd.key] = @(m, m0, m1), ri[key0] = @(m, m0, m1), key-cons(key0, gstore[@(m, m0, m1)].nd), gstore[@(m, m0, m1)].nd.key ∈ ri, key0 ∈ ri, @(m, m0, m1) ∈ gstore, @(m, m0, m1) ∈ nodes(gstore, ginval), gstore[@(m, m0, m1)].nd.key.inode? → gstore[@(m, m0, m1)].nd.inode? ∧ gstore[@(m, m0, m1)].nd.key.ino ≠ 0, gstore[@(m, m0, m1)].nd.key.dentry? → gstore[@(m, m0, m1)].nd.dentry?, gstore[@(m, m0, m1)].nd.key.data? → gstore[@(m, m0, m1)].nd.data? ⊦ key0 = gstore[@(m, m0, m1)].nd.key, m ∈ ginval |
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
Used simplifier rules: nodes-gstore-in: ⊦ adr ∈ nodes(gstore, ginval) ↔ ¬ ¬(adr ∈ gstore ∧ ¬ adr.lnum ∈ ginval);% ⊦ @(m, m0, m1).lnum = m; (s)