| dirs[p_ino] = mkdir(m, md, n, n0, entries), p_ino ∈ dirs, str ∈ entries ⊦ links(entries[str], dirs[p_ino, mkdir(m0, md, n, n1, entries -- str)]) = links(entries[str], dirs) -- mklink(p_ino, str) |
⊦ ls = ls0 ↔ (∀ alink. alink ∈ ls ↔ alink ∈ ls0)
Used simplifier rules: links-del-entry: ⊦ ino0 ∈ dirs → links(ino, dirs[ino0, mkdir(m, md, n0, n1, entries -- str)]) = (str ∈ entries ∧ entries[str] = ino ⊃ links(ino, dirs[ino0, mkdir(m, md, n0, n1, entries)]) -- mklink(ino0, str) ;links(ino, dirs[ino0, mkdir(m, md, n0, n1, entries)]) );%links-modmeta: ⊦ ino ∈ dirs ∧ dirs[ino] = mkdir(m0, md0, n1, n2, entries) → links(ino0, dirs[ino, mkdir(m, md, n, n0, entries)]) = links(ino0, dirs);%links: ⊦ alink ∈ links(ino, dirs) ↔ alink.pino ∈ dirs ∧ alink.name ∈ dirs[alink.pino].entries ∧ ino = dirs[alink.pino].entries[alink.name];% ⊦ alink ∈ ls -- alink0 ↔ alink ≠ alink0 ∧ alink ∈ ls; (s) Used terms: links(entries[str], dirs) -- mklink(p_ino, str), links(entries[str], dirs[p_ino, mkdir(m0, md, n, n1, entries -- str)])