| ri[key0] = @(m, m0, m1), ri[key] = @(m, m0, m1), key-cons(key0, nodes(gstore, ginval)[@(m, m0, m1)]), key-cons(key, nodes(gstore, ginval)[@(m, m0, m1)]), @(m, m0, m1) ∈ gstore, key0 ∈ ri, key ∈ ri ⊦ key0 = key, m ∈ ginval |
⊦ key-cons(key, nd) ↔ nd.key = key ∧ (key.inode? → nd.inode? ∧ key.ino ≠ 0) ∧ (key.dentry? → nd.dentry?) ∧ (key.data? → nd.data?)
nodes(gstore, ginval)[@(m, m0, m1)].key = key, ri[key] = @(m, m0, m1), ri[key0] = @(m, m0, m1), key-cons(key0, nodes(gstore, ginval)[@(m, m0, m1)]), key ∈ ri, key0 ∈ ri, @(m, m0, m1) ∈ gstore, key.inode? → nodes(gstore, ginval)[@(m, m0, m1)].inode? ∧ key.ino ≠ 0, key.dentry? → nodes(gstore, ginval)[@(m, m0, m1)].dentry?, key.data? → nodes(gstore, ginval)[@(m, m0, m1)].data? ⊦ key0 = key, m ∈ ginval
Used terms: nodes(gstore, ginval)[@(m, m0, m1)], key