| dentrykey(m0, str0).dentry? → ( dentrykey(m0, str0) = dentrykey(m, str) ∨ dentrykey(m0, str0) ∈ ks0 ↔ mklink(dentrykey(m0, str0).ino, dentrykey(m0, str0).name) = mklink(m, str) ∨ mklink(dentrykey(m0, str0).ino, dentrykey(m0, str0).name) ∈ ls0), ∀ key. key.dentry? → (key = dentrykey(m, str) ∨ key ∈ ks0 ↔ mklink(key.ino, key.name) = mklink(m, str) ∨ mklink(key.ino, key.name) ∈ ls0), ∀ key0. key0 ∈ ks0 → key0.dentry?, ∀ ls1, ks. # ls1 < #(ls0 ++ mklink(m, str)) → (∀ key. key ∈ ks → key.dentry?) ∧ (∀ key. key.dentry? → (key ∈ ks ↔ mklink(key.ino, key.name) ∈ ls1)) → # ks = # ls1 ⊦ # ks0 = # ls0, dentrykey(m0, str0) ∈ ks0 ↔ mklink(m0, str0) ∈ ls0, mklink(m, str) ∈ ls0, dentrykey(m, str) ∈ ks0 |
dentrykey(m0, str0) = dentrykey(m, str) ∨ dentrykey(m0, str0) ∈ ks0 ↔ mklink(m0, str0) = mklink(m, str) ∨ mklink(m0, str0) ∈ ls0, ∀ key0. key0 ∈ ks0 → key0.dentry?, ∀ key. key.dentry? → (key = dentrykey(m, str) ∨ key ∈ ks0 ↔ mklink(key.ino, key.name) = mklink(m, str) ∨ mklink(key.ino, key.name) ∈ ls0), ∀ ls1, ks. # ls1 < #(ls0 ++ mklink(m, str)) → (∀ key. key ∈ ks → key.dentry?) ∧ (∀ key. key.dentry? → (key ∈ ks ↔ mklink(key.ino, key.name) ∈ ls1)) → # ks = # ls1 ⊦ # ks0 = # ls0, dentrykey(m0, str0) ∈ ks0 ↔ mklink(m0, str0) ∈ ls0, dentrykey(m, str) ∈ ks0, mklink(m, str) ∈ ls0
Used simplifier rules: ⊦ dentrykey(m, str).name = str; (s)% ⊦ dentrykey(m, str).ino = m; (s)% ⊦ dentrykey(m, str).dentry?; (s)