| ∀ p. p ∈ ps → fpathtolink(p) ∈ ls, ∀ alink. alink ∈ ls → (∃ p. p ∈ ps ∧ fpathtolink(p) = alink), ∀ p, q. p ∈ ps ∧ q ∈ ps ∧ fpathtolink(p) = fpathtolink(q) → p = q, ∃ ps0. ps = ps0 ++ p ∧ ¬ p ∈ ps0, ∀ ps0, fpathtolink, ls. # ps0 < # ps → (∀ p, q. p ∈ ps0 ∧ q ∈ ps0 ∧ fpathtolink(p) = fpathtolink(q) → p = q) ∧ (∀ alink. alink ∈ ls → (∃ p. p ∈ ps0 ∧ fpathtolink(p) = alink)) ∧ (∀ p. p ∈ ps0 → fpathtolink(p) ∈ ls) → (# ps0 = # ls ↔ true) ⊦ # ps = # ls, # ps = 0 |
∀ p0, q. (p0 = p ∨ p0 ∈ ps0) ∧ (q = p ∨ q ∈ ps0) ∧ fpathtolink(p0) = fpathtolink(q) → p0 = q, ∀ alink. alink ∈ ls → (∃ p0. (p0 = p ∨ p0 ∈ ps0) ∧ fpathtolink(p0) = alink), ∀ p0. p0 = p ∨ p0 ∈ ps0 → fpathtolink(p0) ∈ ls, ∀ ps1, fpathtolink, ls. # ps1 < #(ps0 ++ p) → (∀ p, q. p ∈ ps1 ∧ q ∈ ps1 ∧ fpathtolink(p) = fpathtolink(q) → p = q) ∧ (∀ alink. alink ∈ ls → (∃ p. p ∈ ps1 ∧ fpathtolink(p) = alink)) ∧ (∀ p. p ∈ ps1 → fpathtolink(p) ∈ ls) → (# ps1 = # ls ↔ true) ⊦ # ps0 + 1 = # ls, p ∈ ps0
Used simplifier rules: ⊦ p ∈ ps ++ p0 ↔ p = p0 ∨ p ∈ ps; (s)%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ m + 1 ≠ 0; (s)% ⊦ ¬ p ∈ ps → #(ps ++ p) = # ps + 1; (s)