| err = ESUCCESS, file = of1[fd], files = files1, files0 = files1, n = n1, n = 0, n0 = n1, of = of1, of0 = of1, afs-cons(dirs, files1), of-cons(of1, dirs, files1), fd ∈ of, n1 ≤ # buf, of[fd].mode ≠ MODE_W → fd ∈ of ⊦ (err = ESUCCESS ⊃ (files[file.ino].content.stream to files[file.ino].size).buf = splice(buf, 0, (files0[file.ino].content.stream to files0[file.ino].size).buf, file.pos, n) ∧ fd ∈ of0 ∧ of = of0[fd, file.pos:= (file.pos + n)] ∧ n ≤ n0 ∧ file.ino ∈ files0 ∧ file.ino ∈ files ∧ files[file.ino].meta = files0[file.ino].meta ∧ files -- file.ino = files0 -- file.ino ∧ (file.mode = MODE_W ∨ file.mode = MODE_RW) ;files ~ files0 ∧ of0 = of ∧ (err = EBADFD ∧ (fd ∈ of → file.mode ≠ MODE_W ∧ file.mode ≠ MODE_RW) ∨ ⌊err⌋ ) ), of[fd].mode ≠ MODE_W ∧ of[fd].mode ≠ MODE_RW |
afs-cons(dirs, files1), of-cons(of1, dirs, files1), fd ∈ of1 ⊦ of1[fd].mode ≠ MODE_W ∧ of1[fd].mode ≠ MODE_RW, of1 = of1[fd, of1[fd].pos:= of1[fd].pos] ∧ of1[fd].ino ∈ files1 ∧ (of1[fd].mode = MODE_W ∨ of1[fd].mode = MODE_RW)
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ n + 0 = n; (s)% ⊦ splice(buf, n0, buf0, n1, 0) = buf0; (s)% ⊦ ¬ fd ∈ of → of[fd] = (∅)[fd]; (s)% ⊦ 0 ≤ m; (s)