| ((abs(tree, ino) * abs(sdt0, entries0) * ino0 => mkdir(# entries0 + 1, md, m0, m1, entries0[str, ino])))(dirs2 ∪ dirs ∪ dirs1), ((ino0 => mkdir(# entries0 + 1, md, m0, m1, entries0[str, ino]) * abs(sdt0, entries0)))(dirs1), ((abs(tree[p0], ino1) -* abs(tree, ino)))(dirs), abs(tree, ino)(dirs2 ∪ dirs), abs(tree[p0], ino1)(dirs2), p0 ∈ tree, dirs1 ⊥ dirs2, dirs2 ⊥ dirs, dirs1 ⊥ dirs ⊦ (( 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⌝ ))) )(dirs2 ∪ dirs ∪ dirs1), str ∈ entries0, str ∈ sdt0, (( 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⌝ )) )(dirs ∪ dirs1) ∧ dirs2 ⊥ dirs ∪ dirs1 |
⊦ dirs ⊥ dirs0 → (dirs1 ⊥ dirs ∪ dirs0 ↔ dirs1 ⊥ dirs ∧ dirs1 ⊥ dirs0)
((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])))(dirs2 ∪ dirs ∪ dirs1), ((abs(tree[p0], ino1) -* abs(tree, ino)))(dirs), abs(tree[p0], ino1)(dirs2), abs(tree, ino)(dirs2 ∪ dirs), p0 ∈ tree, dirs1 ⊥ dirs, dirs2 ⊥ dirs, dirs1 ⊥ dirs2, dirs ⊥ 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⌝ ))) )(dirs2 ∪ dirs ∪ dirs1), str ∈ sdt0, str ∈ entries0, (( 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⌝ )) )(dirs ∪ dirs1) ∧ dirs2 ⊥ dirs ∧ dirs2 ⊥ dirs1
Used simplifier rules: ⊦ dirs ⊥ dirs0 → dirs0 ⊥ dirs; (s) Used terms: dirs1, dirs, dirs2