| files0[ino2] = mkfile(m0, md0, # links(ino2, dirs), content0), root.dir?, dom of < ino3, abs(root, ROOT_INO)(dirs), afs-cons(dirs, files0), afs-cons(dirs, files0[ino2, mkfile(n, md0, # links(ino2, dirs), content0 upto min(n, m0))]), fids-cons(root, abs-files(files0), abs-of(of)), ispath(path, ROOT_INO, ino2, dirs, files0), of-cons(of, dirs, files0), of-cons(of, dirs, files0[ino2, mkfile(n, md0, # links(ino2, dirs), content0 upto min(n, m0))]), pw(user, md0), px-parent(user, path, ROOT_INO, dirs, files0), ino2 ∈ files0, ROOT_INO ∈ dirs, psynced → asynced0 ⊦ ⟨psynced := ?⟩ ( ( # resize((content0.stream to m0).buf, n) = # ((content0 upto min(n, m0)).stream to n).buf ∧ (∀ n0. n0 < # resize((content0.stream to m0).buf, n) → resize((content0.stream to m0).buf, n)[n0] = ((content0 upto min(n, m0)).stream to n).buf[n0])) ∧ (psynced → asynced)), root[path].dir?, ino2 ∈ dirs, m0 ≤ n ∧ m0 % VFS_PAGE_SIZE ≠ 0 ∧ m0 / VFS_PAGE_SIZE ∈ content0 |
files0[ino2] = mkfile(m0, md0, # links(ino2, dirs), content0), root.dir?, dom of < ino3, abs(root, ROOT_INO)(dirs), afs-cons(dirs, files0[ino2, mkfile(n, md0, # links(ino2, dirs), content0 upto min(n, m0))]), afs-cons(dirs, files0), fids-cons(root, abs-files(files0), abs-of(of)), ispath(path, ROOT_INO, ino2, dirs, files0), of-cons(of, dirs, files0[ino2, mkfile(n, md0, # links(ino2, dirs), content0 upto min(n, m0))]), of-cons(of, dirs, files0), pw(user, md0), px-parent(user, path, ROOT_INO, dirs, files0), ROOT_INO ∈ dirs, ino2 ∈ files0, ¬ root[path].dir?, ¬ ino2 ∈ dirs, psynced → asynced0 ⊦ ⟨psynced := ?⟩ ((∀ n0. n0 < n → (m0 ≤ n0 ⊃ zero;getbyte(n0, content0)) = getbyte(n0, content0 upto min(n, m0))) ∧ (psynced → asynced)), m0 ≤ n ∧ m0 % VFS_PAGE_SIZE ≠ 0 ∧ m0 / VFS_PAGE_SIZE ∈ content0
Used simplifier rules: ⊦ content.stream[n] = getbyte(n, content); (s)%m < n, ¬ # σ0 < ⌜n⌝ ⊦ (σ0 to n)[m] = σ0[m]; (s)%finp(σ), ⌜n⌝ < # σ ⊦ σ.buf[n] = σ[n]; (s)% ⊦ m < n ↔ ¬ n ≤ m; (ss)% ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s)% ⊦ m < n → resize(buf, n)[m] = (# buf ≤ m ∧ m < n ⊃ zero;buf[m]); (s)% ⊦ ⌜m⌝ .n = m; (s)%¬ # σ0 < ⌜n⌝ ⊦ #(σ0 to n) = ⌜n⌝ ; (s)% ⊦ ¬ ∞ < n∞; (s)% ⊦ # content.stream = ∞; (s)%finp(σ) ⊦ # σ.buf = (# σ).n; (s)% ⊦ finp(σ0 to m); (s)% ⊦ # resize(buf, n) = n; (s)