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

Theorem base for Specification aubifs-base

This is a listing of all goals defined over the current specification. Axioms are marked yellow, proved theorems green and unproved theorems blue. Click on individual names to get more information on the proof.

Name: Sequent: Type:
datakeys-set ⊦ key ∈ datakeys(ks, ri) ↔ key ∈ ri ∧ key.data? ∧ inodekey(key.ino) ∈ ks An Axiom
datakeys-ge ⊦ key ∈ datakeys(key0, n, ri) ↔ key ∈ datakeys(key0, ri) ∧ n ≤ key.part * VFS_PAGE_SIZE An Axiom
datakeys ⊦ key ∈ datakeys(key0, ri) ↔ key ∈ ri ∧ key.data? ∧ key0.inode? ∧ key.ino = key0.ino An Axiom
dentrykeys ⊦ key ∈ dentrykeys(key0, ri) ↔ key ∈ ri ∧ key.dentry? ∧ key0.inode? ∧ key.ino = key0.ino An Axiom
dentries ⊦ str ∈ dentries(key, ri) ↔ dentrykey(key.ino, str) ∈ dentrykeys(key, ri) An Axiom
dels-with-data ⊦ ri ⊖ ks = (ri \ ks) \ datakeys(ks, ri) An Axiom
del-with-data ⊦ ri ⊖ key = (ri -- key) \ datakeys(key, ri) An Axiom
valid-negdentry-with-parent ⊦ valid-negdentry(ino, dent, fs, ri, ro) ↔ dent.negdentry? ∧ valid-parent-ino(ino, fs, ri, ro) ∧ ¬ dentrykey(ino, dent.name) ∈ ri An Axiom
valid-dentry-with-parent⊦ valid-dentry(ino, dent, fs, ri, ro) ↔ dent.dentry? ∧ valid-parent-ino(ino, fs, ri, ro) ∧ valid-ino(dent.ino, fs, ri) ∧ dentrykey(ino, dent.name) ∈ ri ∧ fs[ri[dentrykey(ino, dent.name)]].ino = dent.ino An Axiom
valid-dentry ⊦ valid-dentry(dent, fs, ri, ro) ↔ (∃ ino. valid-dentry(ino, dent, fs, ri, ro)) An Axiom
valid-parent-ino ⊦ valid-parent-ino(ino, fs, ri, ro) ↔ (valid-dir-ino(ino, fs, ri) ∧ (fs[ri[inodekey(ino)]].nlink ≠ 0 ∨ ino = ROOT_INO)) ∧ ¬ inodekey(ino) ∈ ro An Axiom
valid-dir-ino ⊦ valid-dir-ino(ino, fs, ri) ↔ inodekey(ino) ∈ ri ∧ fs[ri[inodekey(ino)]].directory An Axiom
valid-file-ino ⊦ valid-file-ino(ino, fs, ri) ↔ inodekey(ino) ∈ ri ∧ ¬ fs[ri[inodekey(ino)]].directory An Axiom
valid-ino ⊦ valid-ino(ino, fs, ri) ↔ inodekey(ino) ∈ ri An Axiom
links ⊦ key ∈ links(ino, fs, ri) ↔ key ∈ ri ∧ key.dentry? ∧ fs[ri[key]].ino = ino An Axiom
new-rec ⊦ new(adr ' + log, fs) ↔ ¬ adr ∈ fs ∧ new(log, fs) An Axiom
new-base ⊦ new([], fs) An Axiom
index-update-key-rec ⊦ ri[key ' + kx, adr ' + ax] = ri[key, adr][kx, ax] An Axiom
index-update-key-base ⊦ ri[[], []] = ri An Axiom
keys-rec ⊦ keys(fs, adr ' + ax) = fs[adr].key + keys(fs, ax) An Axiom
keys-base ⊦ keys(fs, []) = [] An Axiom
range ⊦ adr ∈ range ri ↔ adr ∈ ri An Axiom
aubifs-crash ⊦ aubifs-crash(ri0, ld0, ro0, fi0, fo0, fs0, log0, ri1, ld1, ro1, fi1, fo1, fs1, log1) ↔ fi1 = fi0 ∧ fo1 = fo0 ∧ fs1 = fs0 ∧ log1 = log0 An Axiom
index-lookup-rec ⊦ ri[key ' + kx] = ri[key] + ri[kx] An Axiom
index-lookup-base ⊦ ri[[]] = [] An Axiom
read-rec ⊦ fs[adr ' + ax] = fs[adr] + fs[ax] An Axiom
read-base ⊦ fs[[]] = [] An Axiom
write-rec ⊦ fs[adr ' + ax, nd ' + ndx] = fs[adr, nd][ax, ndx] An Axiom
write-base ⊦ fs[[], []] = fs An Axiom
at-del-ro-data ⊦ datakey(ino, n) ∈ ri ∧ datakey(ino, n) ≠ key0 ∧ inodekey(ino) ≠ key0 → (ri ⊖ key0)[datakey(ino, n)] = ri[datakey(ino, n)] A User Theorem
at-del-ro-nodata ⊦ key ∈ ri ∧ key ≠ key0 ∧ ¬ key.data? → (ri ⊖ key0)[key] = ri[key] A User Theorem
at-dels-ro-data ⊦ datakey(ino, n) ∈ ri ∧ ¬ datakey(ino, n) ∈ ks ∧ ¬ inodekey(ino) ∈ ks → (ri ⊖ ks)[datakey(ino, n)] = ri[datakey(ino, n)] A User Theorem
at-dels-ro-nodata ⊦ key ∈ ri ∧ ¬ key ∈ ks ∧ ¬ key.data? → (ri ⊖ ks)[key] = ri[key] A User Theorem
at-write-at ⊦ # ax = # ndx ∧ adr ∈ ax ∧ ¬ dups(ax) → fs[ax, ndx][adr] = ndx[pos(adr, ax)] A User Theorem
at-write-other ⊦ # ax = # ndx ∧ ¬ adr ∈ ax → fs[ax, ndx][adr] = fs[adr] A User Theorem
data-at-del-datakeys ⊦ ino0 ≠ ino → (ri \ datakeys(inodekey(ino0), ri))[datakey(ino, n)] = ri[datakey(ino, n)] A User Theorem
data-in-empty ⊦ ¬ adr ∈ ∅ A User Theorem
datakeys-0 ⊦ datakeys(key, 0, ri) = datakeys(key, ri) A User Theorem
datakeys-del-dentry ⊦ datakeys(key, ri -- dentrykey(ino, str)) = datakeys(key, ri) A User Theorem
datakeys-put-dentry ⊦ datakeys(ks, ri[dentrykey(n, str), adr]) = datakeys(ks, ri) A User Theorem
datakeys-put-inode ⊦ datakeys(ks, ri[inodekey(n), adr]) = datakeys(ks, ri) A User Theorem
datakeys-put-inode-01 ⊦ datakeys(key, ri[inodekey(ino), adr]) = datakeys(key, ri) A User Theorem
datakeys-set-add ⊦ datakeys(ks ++ key, ri) = datakeys(ks, ri) ∪ datakeys(key, ri) A User Theorem
datakeys-set-del ⊦ datakeys(ks -- key, ri) = datakeys(ks, ri) \ datakeys(key, ri) A User Theorem
datakeys-set-empty ⊦ datakeys(∅, ri) = ∅ A User Theorem
del-commute-dels ⊦ ¬ key ∈ ks → (ri ⊖ key) ⊖ ks = (ri ⊖ ks) ⊖ key A User Theorem
del-del-again ⊦ inodekey(m) ∈ ks → (ri ⊖ ks) ⊖ inodekey(m) = ri ⊖ ks A User Theorem
del-merge-dels ⊦ key ∈ ks → (ri ⊖ key) ⊖ ks = ri ⊖ ks A User Theorem
del-put-again ⊦ inodekey(m) ∈ ks → ri[inodekey(m), adr] ⊖ ks = ri ⊖ ks A User Theorem
del-this ⊦ ri[key, adr] ⊖ key = ri ⊖ key A User Theorem
del-with-emp ⊦ ri ⊖ ∅ = ri A User Theorem
dels-ignore-data ⊦ inodekey(ino) ∈ ro → (ri -- datakey(ino, n)) ⊖ ro = ri ⊖ ro A User Theorem
dentry-at-del-datakeys ⊦ (ri \ datakeys(key, ri))[dentrykey(ino, str)] = ri[dentrykey(ino, str)] A User Theorem
in-del-ro ⊦ key ∈ ri ⊖ key0 ↔ key ∈ ri ∧ key ≠ key0 ∧ (key.data? → inodekey(key.ino) ≠ key0) A User Theorem
in-dels-inode ⊦ inodekey(ino) ∈ ri → (inodekey(ino) ∈ ri ⊖ ro ↔ ¬ inodekey(ino) ∈ ro) A User Theorem
in-dels-ro ⊦ key ∈ ri ⊖ ks ↔ key ∈ ri ∧ ¬ key ∈ ks ∧ (key.data? → ¬ inodekey(key.ino) ∈ ks) A User Theorem
in-read-in-dom ⊦ kx.toSet ⊆ dom ri ∧ adr ∈ ri[kx] → adr ∈ ri A User Theorem
in-write# ax = # ndx ⊦ adr ∈ fs[ax, ndx] ↔ adr ∈ fs ∨ adr ∈ ax A User Theorem
index-lookup-app ⊦ ri[kx0 + kx1] = ri[kx0] + ri[kx1] A User Theorem
index-lookup-length ⊦ # ri[kx] = # kx A User Theorem
index-lookup-one ⊦ ri[key '] = ri[key] ' A User Theorem
index-update-at-last-oc ⊦ # ax = # kx0 + # kx1 + 1 ∧ ¬ key ∈ kx1 → ri[kx0 + key ' + kx1, ax][key] = ax[# kx0] A User Theorem
index-update-dom# kx = # ax ⊦ dom ri[kx, ax] = dom ri ∪ kx.toSet A User Theorem
index-update-in ⊦ # kx = # ax → (key ∈ ri[kx, ax] ↔ key ∈ ri ∨ key ∈ kx) A User Theorem
inode-at-del-datakeys ⊦ (ri \ datakeys(key, ri))[inodekey(ino)] = ri[inodekey(ino)] A User Theorem
keys-append ⊦ keys(fs, ax0 + ax1) = keys(fs, ax0) + keys(fs, ax1) A User Theorem
keys-at-other ⊦ # kx = # ax ∧ key ∈ ri ∧ ¬ key ∈ kx → ri[kx, ax][key] = ri[key] A User Theorem
keys-drop-fs ⊦ ¬ adr ∈ ax → keys(fs[adr, nd], ax) = keys(fs, ax) A User Theorem
keys-firstn ⊦ n ≤ # ax → firstn(n, keys(fs, ax)) = keys(fs, firstn(n, ax)) A User Theorem
keys-in-elim ⊦ key ∈ keys(fs, ax) ↔ (∃ adr. adr ∈ ax ∧ fs[adr].key = key) A User Theorem
keys-in-elim-last-oc ⊦ key ∈ keys(fs, ax) ↔ (∃ ax0, ax1, adr. ax = ax0 + adr ' + ax1 ∧ fs[adr].key = key ∧ ¬ key ∈ keys(fs, ax1)) A User Theorem
keys-length ⊦ # keys(fs, ax) = # ax A User Theorem
keys-one ⊦ keys(fs, adr ') = fs[adr].key ' A User Theorem
new-append ⊦ new(ax0 + ax1, fs) ↔ new(ax0, fs) ∧ new(ax1, fs) A User Theorem
new-butlastn ⊦ n ≤ # ax ∧ new(ax, fs) → new(butlastn(n, ax), fs) A User Theorem
new-ext ⊦ new(log, fs) ↔ (∀ adr. adr ∈ log → ¬ adr ∈ fs) A User Theorem
new-in-fs ⊦ new(log, fs) ∧ adr ∈ fs → ¬ adr ∈ log A User Theorem
new-in-log ⊦ new(log, fs) ∧ adr ∈ log → ¬ adr ∈ fs A User Theorem
new-inode-exists ⊦ ∃ ino. ¬ inodekey(ino) ∈ ks A User Theorem
new-not-new ⊦ new(ax, fs) ∧ adr ∈ ax → (adr ∈ fs ↔ false) A User Theorem
new-one ⊦ new(adr ', fs) ↔ ¬ adr ∈ fs A User Theorem
new-write ⊦ new(ax, fs) → (new(ax, fs[adr, nd]) ↔ ¬ adr ∈ ax) A User Theorem
nodups-new# ax0 = # ndx0 ⊦ ¬ dups(ax0) ∧ ¬ dups(ax1) ∧ new(ax1, fs1) ∧ fs1 = fs0[ax0, ndx0] → ¬ dups(ax0 + ax1) A User Theorem
notin-del ⊦ ¬ adr ∈ ri → ¬ adr ∈ ri ⊖ key A User Theorem
notin-dels ⊦ ¬ adr ∈ ri → ¬ adr ∈ ri ⊖ ks A User Theorem
range-empty ⊦ range ∅ = ∅ A User Theorem
range-inter-empty-in ⊦ key ∈ ri ∧ as ∩ range ri = ∅ → ¬ ri[key] ∈ as A User Theorem
read-app ⊦ fs[ax0 + ax1] = fs[ax0] + fs[ax1] A User Theorem
read-eq-empty ⊦ fs[ax] = [] ↔ ax = [] A User Theorem
read-eq-one ⊦ fs[ax] = nd ' ↔ (∃ adr. ax = adr ' ∧ fs[adr] = nd) A User Theorem
read-length ⊦ # fs[ax] = # ax A User Theorem
read-one ⊦ fs[adr '] = fs[adr] ' A User Theorem
read-split ⊦ fs[ax] = ndx0 + ndx1 ↔ (∃ ax0, ax1. ax = ax0 + ax1 ∧ fs[ax0] = ndx0 ∧ fs[ax1] = ndx1) A User Theorem
read-write-other ⊦ ¬ key ∈ kx → ri[key, adr][kx] = ri[kx] A User Theorem
read-write-other-fs ⊦ ¬ adr ∈ ax → fs[adr, nd][ax] = fs[ax] A User Theorem
toSet-subseteq-domri-notin ⊦ kx.toSet ⊆ dom ri ∧ ¬ key ∈ ri → ¬ key ∈ kx A User Theorem
update-index-app# kx = # ax ⊦ ri[kx + key ', ax + adr '] = ri[kx, ax][key, adr] A User Theorem
update-index-append# kx0 = # ax0, # kx1 = # ax1 ⊦ ri[kx0 + kx1, ax0 + ax1] = ri[kx0, ax0][kx1, ax1] A User Theorem
update-index-data-notin# kx = # ax ⊦ ¬ adr ∈ ax ∧ ¬ adr ∈ ri → ¬ adr ∈ ri[kx, ax] A User Theorem
update-index-one ⊦ ri[key ', adr '] = ri[key, adr] A User Theorem
update-index-shift# ax = # kx ⊦ ¬ key ∈ kx → ri[key, adr][kx, ax] = ri[kx, ax][key, adr] A User Theorem
write-app# ax0 = # ndx0, # ax1 = # ndx1 ⊦ fs[ax0 + ax1, ndx0 + ndx1] = fs[ax0, ndx0][ax1, ndx1] A User Theorem
write-dom# ax = # ndx ⊦ dom fs[ax, ndx] = dom fs ∪ ax.toSet A User Theorem
write-new# ax0 = # ndx ⊦ new(ax1, fs1) ∧ fs1 = fs0[ax0, ndx] → new(ax1, fs0) A User Theorem
write-new-app# ax0 = # ndx0 ⊦ new(ax0, fs0) ∧ new(ax1, fs0[ax0, ndx0]) → new(ax0 + ax1, fs0) A User Theorem
write-new-app-nodups# ax0 = # ndx0 ⊦ ¬ dups(ax0) ∧ ¬ dups(ax1) ∧ new(ax1, fs0[ax0, ndx0]) → ¬ dups(ax0 + ax1) A User Theorem
write-one ⊦ fs[adr ', nd '] = fs[adr, nd] A User Theorem
write-shift# ax = # ndx ⊦ ¬ adr ∈ ax → fs[adr, nd][ax, ndx] = fs[ax, ndx][adr, nd] A User Theorem