[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,

Specification vfs-contracts
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