| dirs[p_ino] = mkdir(m, md, n0, n1, entries), str0 ∈ (ino ∈ dirs ⊃ subdirs(p_ino, dirs) ++ str;(str ∈ entries ∧ entries[str] ∈ dirs ⊃ subdirs(p_ino, dirs) -- str;subdirs(p_ino, dirs))), p_ino ∈ dirs, ¬ str ∈ entries ∨ ¬ entries[str] ∈ dirs ⊦ # (ino ∈ dirs ⊃ subdirs(p_ino, dirs) ++ str;(str ∈ entries ∧ entries[str] ∈ dirs ⊃ subdirs(p_ino, dirs) -- str;subdirs(p_ino, dirs))) = 0, (ino ∈ dirs ⊃ subdirs(p_ino, dirs) ++ str;(str ∈ entries ∧ entries[str] ∈ dirs ⊃ subdirs(p_ino, dirs) -- str;subdirs(p_ino, dirs))) = ∅, str0 = str, str0 ∈ (ino ∈ dirs ⊃ ∅ ++ str;∅), str0 ∈ entries ∧ entries[str0] ∈ dirs |
dirs[p_ino] = mkdir(m, md, n0, n1, entries), p_ino ∈ dirs, str0 ∈ (ino ∈ dirs ⊃ subdirs(p_ino, dirs) ++ str;(str ∈ entries ∧ entries[str] ∈ dirs ⊃ subdirs(p_ino, dirs) -- str;subdirs(p_ino, dirs))), ¬ str ∈ entries ∨ ¬ entries[str] ∈ dirs ⊦ # (str ∈ entries ∧ entries[str] ∈ dirs ⊃ subdirs(p_ino, dirs) -- str;subdirs(p_ino, dirs)) = 0, (ino ∈ dirs ⊃ subdirs(p_ino, dirs) ++ str;(str ∈ entries ∧ entries[str] ∈ dirs ⊃ subdirs(p_ino, dirs) -- str;subdirs(p_ino, dirs))) = ∅, str0 = str, str0 ∈ (ino ∈ dirs ⊃ ∅ ++ str;∅), ino ∈ dirs, str0 ∈ entries ∧ entries[str0] ∈ dirs
Used simplifier rules: subdirs: ⊦ str ∈ subdirs(ino, dirs) ↔ ino ∈ dirs ∧ str ∈ dirs[ino].entries ∧ dirs[ino].entries[str] ∈ dirs;% ⊦ ∅ ≠ strings ++ str; (s)% ⊦ str ≠ str0 → (str ∈ strings ++ str0 ↔ str ∈ strings); (s)% ⊦ str ∈ ∅ ++ str0 ↔ str = str0; (s)%size-zero: ⊦ # strings ≠ 0 → strings ≠ ∅; (forward) from specification set-basic[dir-entries]% ⊦ mkdir(m, md, m0, m1, entries).entries = entries; (s)