| dirs[p_ino] = mkdir(m, md, n0, n1, entries), str0 ∈ (subdirs(p_ino, dirs) \ (str ∈ entries ∧ entries[str] ∈ dirs ⊃ ∅ ++ str;∅)) ∪ (ino ∈ dirs ⊃ ∅ ++ str;∅), p_ino ∈ dirs, ¬ str ∈ entries ∨ ¬ entries[str] ∈ dirs ⊦ # subdirs(p_ino, dirs) = 0, str0 = str, subdirs(p_ino, dirs) = ∅, str0 ∈ (str ∈ entries ∧ entries[str] ∈ dirs ⊃ subdirs(p_ino, dirs) -- str;subdirs(p_ino, dirs)), ino ∈ dirs |
dirs[p_ino] = mkdir(m, md, n0, n1, entries), p_ino ∈ dirs, entries[str0] ∈ dirs, str0 ∈ entries, ¬ str ∈ entries ∨ ¬ entries[str] ∈ dirs ⊦ # subdirs(p_ino, dirs) = 0, str0 = str, subdirs(p_ino, dirs) = ∅, str0 ∈ (str ∈ entries ∧ entries[str] ∈ dirs ⊃ ∅ ++ str;∅), str0 ∈ (str ∈ entries ∧ entries[str] ∈ dirs ⊃ subdirs(p_ino, dirs) -- str;subdirs(p_ino, dirs)), ino ∈ dirs
Used simplifier rules: subdirs: ⊦ str ∈ subdirs(ino, dirs) ↔ ino ∈ dirs ∧ str ∈ dirs[ino].entries ∧ dirs[ino].entries[str] ∈ dirs;% ⊦ mkdir(m, md, m0, m1, entries).entries = entries; (s)% ⊦ str ∈ strings \ strings0 ↔ str ∈ strings ∧ ¬ str ∈ strings0; (ws)%unc: ⊦ strings ∪ strings0 = strings0 ∪ strings; from specification set-union[dir-entries]%una: ⊦ (strings ∪ strings0) ∪ strings1 = strings ∪ strings0 ∪ strings1; from specification set-union[dir-entries]% ⊦ strings ∪ ∅ = strings; (s)