| (ino ∈ dirs ⊃ mkinode(ino, dirs[ino].meta, true, dirs[ino].nlink, dirs[ino].nsubdirs, dirs[ino].size) ;mkinode(ino, files[ino].meta, false, files[ino].nlink, 0, files[ino].size) ) = mkinode(m, md, false, m0, m1, m2), buf-opt = none, files0 = files, inode = mkinode(ino, files[ino].meta, false, files[ino].nlink, 0, files[ino].size), afs-cons(dirs, files) ⊦ [afs_truncate#(files[ino].size, files[ino].size / VFS_PAGE_SIZE; buf-opt, inode, bv, err, dirs, files, asynced)] (files0 ~ files ∧ (⌊err⌋ ∨ err = ESUCCESS)) |
(ino ∈ dirs ⊃ mkinode(ino, dirs[ino].meta, true, dirs[ino].nlink, dirs[ino].nsubdirs, dirs[ino].size);mkinode(ino, md0, false, m4, 0, m3)) = mkinode(m, md, false, m0, m1, m2), files[ino] = mkfile(m3, md0, m4, content), buf-opt = none, files0 = files, inode = mkinode(ino, md0, false, m4, 0, m3), afs-cons(dirs, files) ⊦ [afs_truncate#(m3, m3 / VFS_PAGE_SIZE; buf-opt, inode, bv, err, dirs, files, asynced)] (files0 ~ files ∧ (⌊err⌋ ∨ err = ESUCCESS))
Used simplifier rules: ⊦ ((m = af.size ∧ md = af.meta) ∧ m0 = af.nlink) ∧ content = af.content ↔ af = mkfile(m, md, m0, content); (elim) Used terms: files[ino], m3, md0, m4, content