| err = ESUCCESS, files = files1, files0 = files1, n = 0, n = n1, n0 = n1, of = of1, of0 = of1, afs-cons(dirs, files1), of-cons(of1, dirs, files1), fd ∈ of0, fd ∈ of, n1 ≤ # buf, of[fd].mode ≠ MODE_W → fd ∈ of ⊦ (err = ESUCCESS ⊃ (files[of0[fd].ino].content.stream to files[of0[fd].ino].size).buf = splice(buf, 0, (files0[of0[fd].ino].content.stream to files0[of0[fd].ino].size).buf, of0[fd].pos, n) ∧ fd ∈ of0 ∧ of = of0[fd, of0[fd].pos:= (of0[fd].pos + n)] ∧ n ≤ n0 ∧ of0[fd].ino ∈ files0 ∧ of0[fd].ino ∈ files ∧ files[of0[fd].ino].meta = files0[of0[fd].ino].meta ∧ files -- of0[fd].ino = files0 -- of0[fd].ino ∧ (of0[fd].mode = MODE_W ∨ of0[fd].mode = MODE_RW) ;files ~ files0 ∧ of0 = of ∧ (err = EBADFD ∧ (fd ∈ of → of0[fd].mode ≠ MODE_W ∧ of0[fd].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)