[Imprint][Data Privacy Statement][E-Mail]
Back to main index.
View the specification.
View theorem base summary,
View theorem base listing,
the used properties by spec,
the dependency list,
the symbol table,
enrich
vfs-asm,
afs-contracts
with
predicates write-inv : nat × nat × buffer × nat × file-content × file-content;
write-inv : nat × nat × inode × buffer × nat × dir-heap × file-heap × file-heap;
read-inv : nat × nat × buffer × buffer × nat × file-content;
read-inv : nat × nat × inode × buffer × buffer × nat × dir-heap × file-heap;
axioms write-inv
: ⊦ write-inv(n0, n1, buf, n, content0, content1)
↔ content1.stream = (content0.stream to n0) + (⌜buf⌝ to n) + (content0.stream from n0 + n);
write-inv-strong
: ⊦ write-inv(n0, n1, inode, buf, n, dirs, files0, files1)
↔ afs-cons(dirs, files1) ∧ inode.ino ∈ files0 ∧ inode.ino ∈ files1 ∧ files0[inode.ino].size = inode.size
∧ files1[inode.ino].size = files0[inode.ino].size ∧ files1[inode.ino].meta = files0[inode.ino].meta
∧ files1 -- inode.ino = files0 -- inode.ino ∧ n0 + n ≤ n1 ∧ n1 - n0 ≤ # buf
∧ write-inv(n0, n1, buf, n, files0[inode.ino].content, files1[inode.ino].content);
read-inv : ⊦ read-inv(n0, n1, buf0, buf1, n, content) ↔ ⌜buf1⌝ = ((content.stream from n0) to n) + (⌜buf0⌝ from n);
read-inv-strong
: ⊦ read-inv(n0, n1, inode, buf0, buf1, n, dirs, files)
↔ afs-cons(dirs, files) ∧ # buf0 = # buf1 ∧ inode.ino ∈ files ∧ files[inode.ino].size = inode.size ∧ n0 + n ≤ n1
∧ n0 + n ≤ inode.size ∧ n1 - n0 ≤ # buf0 ∧ read-inv(n0, n1, buf0, buf1, n, files[inode.ino].content);
end enrich