| ((abs(tree[p0], ino1) * (abs(tree[p0], ino1) -* abs(tree, ino))))(dirs0), ((abs(tree, ino) * abs(sdt0, entries0) * ino0 => mkdir(# entries0 + 1, md, m0, m1, entries0[str, ino])))(dirs0 ∪ dirs1), ((ino0 => mkdir(# entries0 + 1, md, m0, m1, entries0[str, ino]) * abs(sdt0, entries0)))(dirs1), abs(tree, ino)(dirs0), p0 ∈ tree, dirs0 ⊥ dirs1 ⊦ (( abs(tree[p0], ino1) * ( abs(tree[p0], ino1) -* _∃ (λ ad. (⌜str ∈ ad.entries⌝ ∧ (abs(tree, ad.entries[str]) * abs(sdt0, ad.entries -- str)) * ino0 => ad) ∧ ⌜ad.meta = md⌝ ∧ ⌜ad.size = # ad.entries⌝ ))) )(dirs0 ∪ dirs1), str ∈ entries0, str ∈ sdt0 |
⊦ ((D * D0))(dirs) ↔ (∃ dirs0, dirs1. dirs0 ⊥ dirs1 ∧ dirs = dirs0 ∪ dirs1 ∧ D(dirs0) ∧ D0(dirs1))
((ino0 => mkdir(# entries0 + 1, md, m0, m1, entries0[str, ino]) * abs(sdt0, entries0)))(dirs1), ((abs(tree, ino) * abs(sdt0, entries0) * ino0 => mkdir(# entries0 + 1, md, m0, m1, entries0[str, ino])))(dirs0 ∪ dirs1), abs(tree, ino)(dirs0), p0 ∈ tree, dirs0 ⊥ dirs1, ∃ dirs2, dirs1. dirs2 ⊥ dirs1 ∧ dirs0 = dirs2 ∪ dirs1 ∧ abs(tree[p0], ino1)(dirs2) ∧ ((abs(tree[p0], ino1) -* abs(tree, ino)))(dirs1) ⊦ (( abs(tree[p0], ino1) * ( abs(tree[p0], ino1) -* _∃ (λ ad. (⌜str ∈ ad.entries⌝ ∧ (abs(tree, ad.entries[str]) * abs(sdt0, ad.entries -- str)) * ino0 => ad) ∧ ⌜ad.meta = md⌝ ∧ ⌜ad.size = # ad.entries⌝ ))) )(dirs0 ∪ dirs1), str ∈ sdt0, str ∈ entries0
Used terms: dirs0, abs(tree[p0], ino1) -* abs(tree, ino), abs(tree[p0], ino1)