| dirs[p_ino] = mkdir(m, md, # links(p_ino, dirs), m1, entries), dirs[key.ino] = mkdir(m0, md0, m2, m3, entries0), afs-cons(dirs, files), dcache-cons(dcache, dirs, files), synced(dirs, icache, pcache), dent0.name ∈ entries, p_ino ∈ dirs, key ∈ dcache[dentrykey(p_ino, dent0.name), mkdentry(dent0.name, entries[dent0.name])], asynced1 → synced(files, icache, pcache), links(p_ino, dirs) ≠ ∅ ∨ p_ino = ROOT_INO ⊦ dentrykey(p_ino, dent0.name) ∈ dcache, key.dentry? ∧ key.name = dcache[dentrykey(p_ino, dent0.name), mkdentry(dent0.name, entries[dent0.name])][key].name ∧ key.ino ∈ dirs ∧ (links(key.ino, dirs) ≠ ∅ ∨ key.ino = ROOT_INO) ∧ ( dcache[dentrykey(p_ino, dent0.name), mkdentry(dent0.name, entries[dent0.name])][key].ino ∈ dirs ∨ dcache[dentrykey(p_ino, dent0.name), mkdentry(dent0.name, entries[dent0.name])][key].ino ∈ files) ∧ dcache[dentrykey(p_ino, dent0.name), mkdentry(dent0.name, entries[dent0.name])][key].name ∈ entries0 ∧ dcache[dentrykey(p_ino, dent0.name), mkdentry(dent0.name, entries[dent0.name])][key].ino = entries0[dcache[dentrykey(p_ino, dent0.name), mkdentry(dent0.name, entries[dent0.name])][key].name] ∧ dcache[dentrykey(p_ino, dent0.name), mkdentry(dent0.name, entries[dent0.name])][key].dentry? |
dirs[key.ino] = mkdir(m0, md0, m2, m3, entries0), dirs[p_ino] = mkdir(m, md, # links(p_ino, dirs), m1, entries), afs-cons(dirs, files), dcache-cons(dcache, dirs, files), synced(dirs, icache, pcache), key ∈ dcache[dentrykey(p_ino, dent0.name), mkdentry(dent0.name, entries[dent0.name])], p_ino ∈ dirs, dent0.name ∈ entries, asynced1 → synced(files, icache, pcache), links(p_ino, dirs) ≠ ∅ ∨ p_ino = ROOT_INO ⊦ key = dentrykey(p_ino, dent0.name), dentrykey(p_ino, dent0.name) ∈ dcache, key.dentry? ∧ key.name = dcache[dentrykey(p_ino, dent0.name), mkdentry(dent0.name, entries[dent0.name])][key].name ∧ key.ino ∈ dirs ∧ (links(key.ino, dirs) ≠ ∅ ∨ key.ino = ROOT_INO) ∧ ( dcache[dentrykey(p_ino, dent0.name), mkdentry(dent0.name, entries[dent0.name])][key].ino ∈ dirs ∨ dcache[dentrykey(p_ino, dent0.name), mkdentry(dent0.name, entries[dent0.name])][key].ino ∈ files) ∧ dcache[dentrykey(p_ino, dent0.name), mkdentry(dent0.name, entries[dent0.name])][key].name ∈ entries0 ∧ dcache[dentrykey(p_ino, dent0.name), mkdentry(dent0.name, entries[dent0.name])][key].ino = entries0[dcache[dentrykey(p_ino, dent0.name), mkdentry(dent0.name, entries[dent0.name])][key].name] ∧ dcache[dentrykey(p_ino, dent0.name), mkdentry(dent0.name, entries[dent0.name])][key].dentry?
Used simplifier rules: ⊦ dentrykey(m, str).ino = m; (s)% ⊦ key ∈ dcache[key0, dent] ↔ key = key0 ∨ key ∈ dcache; (ws)% ⊦ dentrykey(m, str).dentry?; (s)% ⊦ dentrykey(m, str).name = str; (s)% ⊦ dcache[key, dent][key] = dent; (s)% ⊦ mkdentry(str, m).name = str; (s)% ⊦ mkdentry(str, m).ino = m; (s)% ⊦ mkdentry(str, m).dentry?; (s)%afs-cons-dir-nlink: ⊦ afs-cons(dirs, files) ∧ ino ∈ dirs ∧ dirs[ino] = mkdir(n0, md, n, n1, entries) → # links(ino, dirs) = n; (forward) from specification afs-base%⊦ mkdir(m, md, m0, m1, entries) = mkdir(m2, md0, m3, m4, entries0) ↔ m = m2 ∧ md = md0 ∧ m0 = m3 ∧ m1 = m4 ∧ entries = entries0; (ws)%⊦ ino ∈ dirs ∧ dirs[ino] = mkdir(n0, md, n, n1, entries) ∧ str ∈ entries ∧ afs-cons(dirs, files) → (entries[str] ∈ files ↔ ¬ entries[str] ∈ dirs); (ss) Used formulas: key = dentrykey(p_ino, dent0.name)