| # buf0 = VFS_PAGE_SIZE, VFS_PAGE_SIZE = n0 + m2 % VFS_PAGE_SIZE, files0[m3] = mkfile(m5, md2, # links(m3, dirs), content1), pcache0[datakey(m3, m2 / VFS_PAGE_SIZE)] = mkpentry(boolvar, buf0), afs-cons(dirs, files0[m3, mkfile(m, md, # links(m3, dirs), content1[m2 / VFS_PAGE_SIZE, fill(buf0, zero, m2 % VFS_PAGE_SIZE, n0)] upto m2)]), afs-cons(dirs, files0), synced(dirs, icache, pcache0), datakey(m3, m2 / VFS_PAGE_SIZE) ∈ pcache0, m3 ∈ files0, m2 ≤ m, m2 ≤ m2 / VFS_PAGE_SIZE * VFS_PAGE_SIZE, asynced2 → synced(files0, icache, pcache0), ¬ boolvar → m2 / VFS_PAGE_SIZE ∈ content1 ∧ buf0 = content1[m2 / VFS_PAGE_SIZE], ∀ key. key ∈ pcache0 → key.data?, ∀ key0. key0 ∈ pcache0 → key0.data? ∧ # pcache0[key0].page = VFS_PAGE_SIZE ∧ key0.ino ∈ files0 ∧ (¬ pcache0[key0].dirty → key0.part ∈ files0[key0.ino].content ∧ pcache0[key0].page = files0[key0.ino].content[key0.part]) ⊦ m2 % VFS_PAGE_SIZE = 0 |
n ≠ 0, m / n * n ≤ m ⊦ m % n = m - m / n * n
Used simplifier rules: n ≠ 0 ⊦ m / n * n ≤ m; (s)%mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult%mult-c: ⊦ m * n = n * m; from specification nat-mult%n ≤ m ⊦ (m - n) + n0 = n1 ↔ m + n0 = n + n1; (s)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic% ⊦ VFS_PAGE_SIZE ≠ 0; (s)% ⊦ m ≤ n → (n - m = 0 ↔ n = m); (s)% ⊦ m ≠ n → (m ≤ n ↔ m < n); (s)%n ≠ 0 ⊦ ¬ m < m / n * n; (s) Used terms: VFS_PAGE_SIZE, m2