[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-abs
enrich
   posix-permission
, 
   afs-stream
, 
   vfs-permission
, 
   file-id-data, 
   posix-links

with
   

   
   
   functions  abs : directory-tree × nat → dir-heap → bool;
              abs : entries-tree × dir-entries → dir-heap → bool;
              abs| : directory-tree × nat × path × nat → dir-heap → bool;
              abs| : entries-tree × dir-entries × path × nat → dir-heap → bool;
              abs-files : file-heap → file-data-store;
              abs-of : open-files → open-file-handles;
              clinks : pathset × nat × dir-heap × file-heap → alink-set;
   
   
   variables  err2 : error;
              err3 : error;
              err4 : error;
              Pstr : string → dir-heap → bool;
              sdi : dir-entries;
              fpathtolink : path → alink;
   
   

   

   axioms clinks :  ⊦ alink ∈ clinks(ps, ino0, dirs, files) ↔ (∃ ino1, p. p ∈ ps ∧ ispath(p, ino0, ino1, dirs, files));
          abs-of-in :  ⊦ fd ∈ abs-of(of) ↔ fd ∈ of;
          used for: s, ls;
          abs-of-at : fd ∈ of ⊦ abs-of(of)[fd] = mkfh(⌜of[fd].ino⌝ , of[fd].mode, of[fd].pos);
          used for: s, ls;
          abs-fnode :  ⊦ abs(fnode(fid), ino) = (emp ∧ ⌜ino = fid.ino⌝ );
          used for: s, ls;
          abs-dnode :  ⊦ abs(dnode(md, sdt), ino) = _∃(λ ad. ino => ad * abs(sdt, ad.entries) ∧ ⌜ad.meta = md⌝  ∧ ⌜ad.size = # ad.entries⌝ );
          used for: ls;
          abs-empty :  ⊦ abs(∅, entries) = (⌜entries = ∅⌝  ∧ emp);
          used for: s, ls;
          abs-rec :  ⊦ ¬ name ∈ sdt → abs(sdt[name, tree], entries) = (⌜name ∈ entries⌝  ∧ abs(tree, entries[name]) * abs(sdt, entries -- name));
          used for: ls;
          abs-files-in :  ⊦ ⌜ino⌝  ∈ abs-files(files) ↔ ino ∈ files;
          used for: s, ls;
          abs-files-at :  ⊦ ino ∈ files → abs-files(files)[⌜ino⌝ ] = mkfile(files[ino].meta, (files[ino].content.stream to files[ino].size).buf);
          used for: s, ls;
          absc-emp :  ⊦ abs|(tree, ino, ε, ino0) = (emp ∧ ⌜ino = ino0⌝ );
          used for: s, ls;
          absc-dnode
          : ⊦   p ≠ ε
              →   abs|(dnode(md, sdt), ino, p, ino0)
                = _∃(λ ad. ino => ad * abs|(sdt, ad.entries, p, ino0) ∧ ⌜ad.meta = md⌝  ∧ ⌜ad.size = # ad.entries⌝ );
          used for: ls;
          absc-entries
          :  ⊦ abs|(sdt, entries, str ' + p, ino0) = (⌜str ∈ entries⌝  ∧ abs|(sdt[str], entries[str], p, ino0) * abs(sdt -- str, entries -- str));
          used for: ls;

   

   
end enrich