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