| files[ino] = mkfile(m, md, m1, content), read-inv(n0, n1, mkinode(ino, md, false, m0, 0, m), buf0, buf1, n, dirs, files) ⊦ copy((content.stream to m).buf, n0, buf0, 0, n) = buf1 |
⊦ read-inv(n0, n1, inode, buf0, buf1, n, dirs, files) ↔ afs-cons(dirs, files) ∧ # buf0 = # buf1 ∧ inode.ino ∈ files ∧ files[inode.ino].size = inode.size ∧ n0 + n ≤ n1 ∧ n0 + n ≤ inode.size ∧ n1 - n0 ≤ # buf0 ∧ read-inv(n0, n1, buf0, buf1, n, files[inode.ino].content)
# buf0 = # buf1, files[mkinode(ino, md, false, m0, 0, m).ino].size = mkinode(ino, md, false, m0, 0, m).size, files[ino] = mkfile(m, md, m1, content), afs-cons(dirs, files), read-inv(n0, n1, buf0, buf1, n, files[mkinode(ino, md, false, m0, 0, m).ino].content), mkinode(ino, md, false, m0, 0, m).ino ∈ files, n0 + n ≤ n1, n0 + n ≤ mkinode(ino, md, false, m0, 0, m).size, n1 - n0 ≤ # buf0 ⊦ copy((content.stream to m).buf, n0, buf0, 0, n) = buf1
Used terms: files, dirs, n, buf1, buf0, mkinode(ino, md, false, m0, 0, m), n1, n0