| files1 -- mkinode(ino, md, false, m1, 0, m0).ino = files0 -- mkinode(ino, md, false, m1, 0, m0).ino, files1[mkinode(ino, md, false, m1, 0, m0).ino].meta = files0[mkinode(ino, md, false, m1, 0, m0).ino].meta, files0[mkinode(ino, md, false, m1, 0, m0).ino].size = mkinode(ino, md, false, m1, 0, m0).size, files1[mkinode(ino, md, false, m1, 0, m0).ino].size = files0[mkinode(ino, md, false, m1, 0, m0).ino].size, files1[ino] = mkfile(m, md, m1, content), afs-cons(dirs, files1), write-inv(0, n1, buf, n, files0[mkinode(ino, md, false, m1, 0, m0).ino].content, files1[mkinode(ino, md, false, m1, 0, m0).ino].content), ino ∈ files1, mkinode(ino, md, false, m1, 0, m0).ino ∈ files0, mkinode(ino, md, false, m1, 0, m0).ino ∈ files1, 0 + n ≤ n1, n1 - 0 ≤ # buf ⊦ write-inv (0, n1, mkinode(ino, md, false, m1, 0, m0 + n), buf, n, dirs, files0[ino, files0[ino].size:= (m0 + n)], files1[ino, mkfile(m0 + n, md, m1, content)]) |
files1 -- ino = files0 -- ino, files1[ino] = mkfile(files0[ino].size, files0[ino].meta, # links(ino, dirs), content), afs-cons(dirs, files1), write-inv(0, n1, buf, n, files0[ino].content, content), ino ∈ files0, ino ∈ files1, n ≤ # buf, n1 ≤ # buf, n ≤ n1 ⊦ write-inv (0, n1, mkinode(ino, files0[ino].meta, false, # links(ino, dirs), 0, files0[ino].size + n), buf, n, dirs, files0[ino, files0[ino].size:= (files0[ino].size + n)], files1[ino, mkfile(files0[ino].size + n, files0[ino].meta, # links(ino, dirs), content)])
Used simplifier rules: ⊦ mkfile(m, md, m0, content).content = content; (s)% ⊦ mkfile(m, md, m0, content).size = m; (s)% ⊦ mkfile(m, md, m0, content).meta = md; (s)%afs-cons-file-nlink: ⊦ afs-cons(dirs, files) ∧ ino ∈ files ∧ files[ino] = mkfile(m, md, n, content) → # links(ino, dirs) = n; (forward) from specification afs-base%let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ n + 0 = n; (s)% ⊦ m - 0 = m; (s)% ⊦ mkinode(m, md, boolvar, m0, m1, m2).size = m2; (s)% ⊦ mkinode(m, md, boolvar, m0, m1, m2).ino = m; (s)