| files[m] = mkfile(m0, md, # links(m, dirs), content0), files0[m] = mkfile(m0, md, # links(m, dirs), content), n0 * VFS_PAGE_SIZE < m2, afs-cons(dirs, files), afs-cons(dirs, files0), pcache-cons(pcache, dirs, files), pcache-cons(pcache1, dirs, files0), m ∈ files0, m ∈ files, m2 ≤ n * VFS_PAGE_SIZE, ∀ pageno. (pageno < n ⊃ (pageno ∈ content0 ↔ pageno ∈ content ⊕ mkcontent(m, pcache1)) ∧ content0[pageno] = (content ⊕ mkcontent(m, pcache1))[pageno] ;(pageno ∈ content0 ↔ pageno ∈ content) ∧ content0[pageno] = content[pageno] ), ∀ key. (key ∈ pcache ↔ key ∈ pcache1) ∧ pcache[key].page = pcache1[key].page ∧ (pcache[key].dirty → pcache1[key].dirty) ⊦ (n0 * VFS_PAGE_SIZE < m2 → (n0 ∈ content0 ↔ n0 ∈ content ⊕ mkcontent(m, pcache1))) ∧ (n0 * VFS_PAGE_SIZE < m2 ∧ n0 ∈ content0 → content0[n0] = ((content ⊕ mkcontent(m, pcache1)) upto m2)[n0]) |
files0[m] = mkfile(m0, md, # links(m, dirs), content), files[m] = mkfile(m0, md, # links(m, dirs), content0), n0 < n, n0 * VFS_PAGE_SIZE < m2, afs-cons(dirs, files0), afs-cons(dirs, files), pcache-cons(pcache1, dirs, files0), pcache-cons(pcache, dirs, files), m ∈ files, m ∈ files0, m2 ≤ n * VFS_PAGE_SIZE, ∀ key. (key ∈ pcache ↔ key ∈ pcache1) ∧ pcache[key].page = pcache1[key].page ∧ (pcache[key].dirty → pcache1[key].dirty), ∀ pageno. (pageno < n ⊃ (pageno ∈ content0 ↔ pageno ∈ content ⊕ mkcontent(m, pcache1)) ∧ content0[pageno] = (content ⊕ mkcontent(m, pcache1))[pageno] ;(pageno ∈ content0 ↔ pageno ∈ content) ∧ content0[pageno] = content[pageno] ) ⊦ (n0 ∈ content0 ↔ n0 ∈ content ⊕ mkcontent(m, pcache1)) ∧ (n0 ∈ content0 → content0[n0] = ((content ⊕ mkcontent(m, pcache1)) upto m2)[n0])
Used simplifier rules: mult-c: ⊦ m * n = n * m; from specification nat-mult%mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult% ⊦ VFS_PAGE_SIZE ≠ 0; (s)% ⊦ m0 * m < m0 * n ↔ m0 ≠ 0 ∧ m < n; (ws)% ⊦ m < n → n ≠ 0; (s)%fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic