| ∀ a, h. a ∈ s ∧ aP0(a)(h) → aP(a)(h) ⊦ ((aP0 ∧_ s))(h) → ((aP ∧_ s))(h) |
((aP0 ∧_ s))(h), ¬ ((aP ∧_ s))(h), ∀ a, h. a ∈ s ∧ aP0(a)(h) → aP(a)(h) ⊦
| ((aP0 ∧_ s))(h), ¬ ((aP ∧_ s))(h), ∀ a, h. a ∈ s ∧ aP0(a)(h) → aP(a)(h) ⊦ |
((aP0 ∧_ s))(h), ¬ ((aP ∧_ s))(h), ∀ a, h. a ∈ s ∧ aP0(a)(h) → aP(a)(h) ⊦
| ((aP0 ∧_ s))(h), ¬ ((aP ∧_ s))(h), ∀ a, h. a ∈ s ∧ aP0(a)(h) → aP(a)(h) ⊦ |
((aP0 ∧_ s))(h), ¬ ((aP ∧_ s))(h), ∀ a, h. a ∈ s ∧ aP0(a)(h) → aP(a)(h), ∀ s0, aP0, h, aP. # s0 < # s → ((aP0 ∧_ s0))(h) ∧ ¬ ((aP ∧_ s0))(h) ∧ (∀ a, h. a ∈ s0 ∧ aP0(a)(h) → aP(a)(h)) → false ⊦
Used simplifier rules: <; (wellfounded) Used terms: # s
| ((aP0 ∧_ s))(h), ¬ ((aP ∧_ s))(h), ∀ a, h. a ∈ s ∧ aP0(a)(h) → aP(a)(h), ∀ s0, aP0, h, aP. # s0 < # s → ((aP0 ∧_ s0))(h) ∧ ¬ ((aP ∧_ s0))(h) ∧ (∀ a, h. a ∈ s0 ∧ aP0(a)(h) → aP(a)(h)) → false ⊦ |
((aP0 ∧_ s))(h), ¬ ((aP ∧_ s))(h), ∀ a, h. a ∈ s ∧ aP0(a)(h) → aP(a)(h), ∀ s0, aP0, h, aP. # s0 < # s → ((aP0 ∧_ s0))(h) ∧ ¬ ((aP ∧_ s0))(h) ∧ (∀ a, h. a ∈ s0 ∧ aP0(a)(h) → aP(a)(h)) → false ⊦
| ((aP0 ∧_ s))(h), ¬ ((aP ∧_ s))(h), ∀ a, h. a ∈ s ∧ aP0(a)(h) → aP(a)(h), ∀ s0, aP0, h, aP. # s0 < # s → ((aP0 ∧_ s0))(h) ∧ ¬ ((aP ∧_ s0))(h) ∧ (∀ a, h. a ∈ s0 ∧ aP0(a)(h) → aP(a)(h)) → false ⊦ |
s ≠ ∅, ((aP0 ∧_ s))(h), ¬ ((aP ∧_ s))(h), ∀ a, h. a ∈ s ∧ aP0(a)(h) → aP(a)(h), ∀ s0, aP0, h, aP. # s0 < # s → ((aP0 ∧_ s0))(h) ∧ ¬ ((aP ∧_ s0))(h) ∧ (∀ a, h. a ∈ s0 ∧ aP0(a)(h) → aP(a)(h)) → false ⊦
Used simplifier rules: And-emp: ⊦ aP ∧_ ∅ = true; ⊦ true(h); (s) Used formulas: s = ∅
| s ≠ ∅, ((aP0 ∧_ s))(h), ¬ ((aP ∧_ s))(h), ∀ a, h. a ∈ s ∧ aP0(a)(h) → aP(a)(h), ∀ s0, aP0, h, aP. # s0 < # s → ((aP0 ∧_ s0))(h) ∧ ¬ ((aP ∧_ s0))(h) ∧ (∀ a, h. a ∈ s0 ∧ aP0(a)(h) → aP(a)(h)) → false ⊦ |
# s ≠ 0, s ≠ ∅, ((aP0 ∧_ s))(h), ¬ ((aP ∧_ s))(h), ∀ a, h. a ∈ s ∧ aP0(a)(h) → aP(a)(h), ∀ s0, aP0, h, aP. # s0 < # s → ((aP0 ∧_ s0))(h) ∧ ¬ ((aP ∧_ s0))(h) ∧ (∀ a, h. a ∈ s0 ∧ aP0(a)(h) → aP(a)(h)) → false ⊦
Used simplifier rules: size-zero: ⊦ # s ≠ 0 → s ≠ ∅; (forward) from specification set-basic size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic
| # s ≠ 0, s ≠ ∅, ((aP0 ∧_ s))(h), ¬ ((aP ∧_ s))(h), ∀ a, h. a ∈ s ∧ aP0(a)(h) → aP(a)(h), ∀ s0, aP0, h, aP. # s0 < # s → ((aP0 ∧_ s0))(h) ∧ ¬ ((aP ∧_ s0))(h) ∧ (∀ a, h. a ∈ s0 ∧ aP0(a)(h) → aP(a)(h)) → false ⊦ |
⊦ s1 = s2 ↔ (∀ a. a ∈ s1 ↔ a ∈ s2)
# s ≠ 0, ((aP0 ∧_ s))(h), ¬ ((aP ∧_ s))(h), ∀ a, h. a ∈ s ∧ aP0(a)(h) → aP(a)(h), ∃ a. ¬(a ∈ s ↔ a ∈ ∅), ∀ s0, aP0, h, aP. # s0 < # s → ((aP0 ∧_ s0))(h) ∧ ¬ ((aP ∧_ s0))(h) ∧ (∀ a, h. a ∈ s0 ∧ aP0(a)(h) → aP(a)(h)) → false ⊦
Used terms: ∅, s
| ⊦ s1 = s2 ↔ (∀ a. a ∈ s1 ↔ a ∈ s2) |
| # s ≠ 0, ((aP0 ∧_ s))(h), ¬ ((aP ∧_ s))(h), ∀ a, h. a ∈ s ∧ aP0(a)(h) → aP(a)(h), ∃ a. ¬(a ∈ s ↔ a ∈ ∅), ∀ s0, aP0, h, aP. # s0 < # s → ((aP0 ∧_ s0))(h) ∧ ¬ ((aP ∧_ s0))(h) ∧ (∀ a, h. a ∈ s0 ∧ aP0(a)(h) → aP(a)(h)) → false ⊦ |
# s ≠ 0, a ∈ s, ((aP0 ∧_ s))(h), ¬ ((aP ∧_ s))(h), ∀ a, h. a ∈ s ∧ aP0(a)(h) → aP(a)(h), ∀ s0, aP0, h, aP. # s0 < # s → ((aP0 ∧_ s0))(h) ∧ ¬ ((aP ∧_ s0))(h) ∧ (∀ a, h. a ∈ s0 ∧ aP0(a)(h) → aP(a)(h)) → false ⊦
Used simplifier rules: ⊦ ¬ a ∈ ∅; (s)
| # s ≠ 0, a ∈ s, ((aP0 ∧_ s))(h), ¬ ((aP ∧_ s))(h), ∀ a, h. a ∈ s ∧ aP0(a)(h) → aP(a)(h), ∀ s0, aP0, h, aP. # s0 < # s → ((aP0 ∧_ s0))(h) ∧ ¬ ((aP ∧_ s0))(h) ∧ (∀ a, h. a ∈ s0 ∧ aP0(a)(h) → aP(a)(h)) → false ⊦ |
⊦ a ∈ s ↔ (∃ s0. s = s0 ++ a ∧ ¬ a ∈ s0)
# s ≠ 0, ((aP0 ∧_ s))(h), ¬ ((aP ∧_ s))(h), ∀ a, h. a ∈ s ∧ aP0(a)(h) → aP(a)(h), ∃ s0. s = s0 ++ a ∧ ¬ a ∈ s0, ∀ s0, aP0, h, aP. # s0 < # s → ((aP0 ∧_ s0))(h) ∧ ¬ ((aP ∧_ s0))(h) ∧ (∀ a, h. a ∈ s0 ∧ aP0(a)(h) → aP(a)(h)) → false ⊦
Used terms: s, a
| ⊦ a ∈ s ↔ (∃ s0. s = s0 ++ a ∧ ¬ a ∈ s0) |
| # s ≠ 0, ((aP0 ∧_ s))(h), ¬ ((aP ∧_ s))(h), ∀ a, h. a ∈ s ∧ aP0(a)(h) → aP(a)(h), ∃ s0. s = s0 ++ a ∧ ¬ a ∈ s0, ∀ s0, aP0, h, aP. # s0 < # s → ((aP0 ∧_ s0))(h) ∧ ¬ ((aP ∧_ s0))(h) ∧ (∀ a, h. a ∈ s0 ∧ aP0(a)(h) → aP(a)(h)) → false ⊦ |
aP0(a)(h), ((aP0 ∧_ s0))(h), ¬ a ∈ s0, ∀ a0, h0. (a0 = a ∨ a0 ∈ s0) ∧ aP0(a0)(h0) → aP(a0)(h0), ∀ s1, aP0, h, aP. # s1 < #(s0 ++ a) → ((aP0 ∧_ s1))(h) ∧ ¬ ((aP ∧_ s1))(h) ∧ (∀ a, h. a ∈ s1 ∧ aP0(a)(h) → aP(a)(h)) → false ⊦ aP(a)(h) ∧ ((aP ∧_ s0))(h)
Used simplifier rules: And-ins: ⊦ ¬ a ∈ s → aP ∧_ (s ++ a) = (aP(a) ∧ aP ∧_ s); ⊦ a ∈ s ++ b ↔ a = b ∨ a ∈ s; (s) and-com: ⊦ (hP0 ∧ hP1) = (hP1 ∧ hP0); from specification heap-sep and-ass: ⊦ ((hP0 ∧ hP1) ∧ hP2) = (hP0 ∧ hP1 ∧ hP2); from specification heap-sep ⊦ ((hP0 ∧ hP1))(h) ↔ hP0(h) ∧ hP1(h); (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) ⊦ ¬ a ∈ s → #(s ++ a) = # s + 1; (s)
| aP0(a)(h), ((aP0 ∧_ s0))(h), ¬ a ∈ s0, ∀ a0, h0. (a0 = a ∨ a0 ∈ s0) ∧ aP0(a0)(h0) → aP(a0)(h0), ∀ s1, aP0, h, aP. # s1 < #(s0 ++ a) → ((aP0 ∧_ s1))(h) ∧ ¬ ((aP ∧_ s1))(h) ∧ (∀ a, h. a ∈ s1 ∧ aP0(a)(h) → aP(a)(h)) → false ⊦ aP(a)(h) ∧ ((aP ∧_ s0))(h) |
aP0(a)(h), ((aP0 ∧_ s0))(h), ¬ a ∈ s0, (a = a ∨ a ∈ s0) ∧ aP0(a)(h) → aP(a)(h), ∀ a0, h0. (a0 = a ∨ a0 ∈ s0) ∧ aP0(a0)(h0) → aP(a0)(h0), ∀ s1, aP0, h, aP. # s1 < #(s0 ++ a) → ((aP0 ∧_ s1))(h) ∧ ¬ ((aP ∧_ s1))(h) ∧ (∀ a, h. a ∈ s1 ∧ aP0(a)(h) → aP(a)(h)) → false ⊦ aP(a)(h) ∧ ((aP ∧_ s0))(h)
Used terms: a, h
| aP0(a)(h), ((aP0 ∧_ s0))(h), ¬ a ∈ s0, (a = a ∨ a ∈ s0) ∧ aP0(a)(h) → aP(a)(h), ∀ a0, h0. (a0 = a ∨ a0 ∈ s0) ∧ aP0(a0)(h0) → aP(a0)(h0), ∀ s1, aP0, h, aP. # s1 < #(s0 ++ a) → ((aP0 ∧_ s1))(h) ∧ ¬ ((aP ∧_ s1))(h) ∧ (∀ a, h. a ∈ s1 ∧ aP0(a)(h) → aP(a)(h)) → false ⊦ aP(a)(h) ∧ ((aP ∧_ s0))(h) |
aP(a)(h), aP0(a)(h), ((aP0 ∧_ s0))(h), ¬ a ∈ s0, ¬ ((aP ∧_ s0))(h), ∀ a0, h0. (a0 = a ∨ a0 ∈ s0) ∧ aP0(a0)(h0) → aP(a0)(h0), ∀ s1, aP0, h, aP. # s1 < #(s0 ++ a) → ((aP0 ∧_ s1))(h) ∧ ¬ ((aP ∧_ s1))(h) ∧ (∀ a, h. a ∈ s1 ∧ aP0(a)(h) → aP(a)(h)) → false ⊦
| aP(a)(h), aP0(a)(h), ((aP0 ∧_ s0))(h), ¬ a ∈ s0, ¬ ((aP ∧_ s0))(h), ∀ a0, h0. (a0 = a ∨ a0 ∈ s0) ∧ aP0(a0)(h0) → aP(a0)(h0), ∀ s1, aP0, h, aP. # s1 < #(s0 ++ a) → ((aP0 ∧_ s1))(h) ∧ ¬ ((aP ∧_ s1))(h) ∧ (∀ a, h. a ∈ s1 ∧ aP0(a)(h) → aP(a)(h)) → false ⊦ |
aP(a)(h), aP0(a)(h), ((aP0 ∧_ s0))(h), ¬ a ∈ s0, ¬ ((aP ∧_ s0))(h), ∀ a0, h0. (a0 = a ∨ a0 ∈ s0) ∧ aP0(a0)(h0) → aP(a0)(h0), ∀ s1, aP0, h, aP. # s1 < #(s0 ++ a) → ((aP0 ∧_ s1))(h) ∧ ¬ ((aP ∧_ s1))(h) ∧ (∀ a, h. a ∈ s1 ∧ aP0(a)(h) → aP(a)(h)) → false ⊦ ((aP0 ∧_ s0))(h) ∧ ¬ ((aP ∧_ s0))(h) ∧ (∀ a, h. a ∈ s0 ∧ aP0(a)(h) → aP(a)(h))
Used simplifier rules: ⊦ ¬ a ∈ s → #(s ++ a) = # s + 1; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ ¬ n < n; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: s0, aP0, h, aP
| aP(a)(h), aP0(a)(h), ((aP0 ∧_ s0))(h), ¬ a ∈ s0, ¬ ((aP ∧_ s0))(h), ∀ a0, h0. (a0 = a ∨ a0 ∈ s0) ∧ aP0(a0)(h0) → aP(a0)(h0), ∀ s1, aP0, h, aP. # s1 < #(s0 ++ a) → ((aP0 ∧_ s1))(h) ∧ ¬ ((aP ∧_ s1))(h) ∧ (∀ a, h. a ∈ s1 ∧ aP0(a)(h) → aP(a)(h)) → false ⊦ ((aP0 ∧_ s0))(h) ∧ ¬ ((aP ∧_ s0))(h) ∧ (∀ a, h. a ∈ s0 ∧ aP0(a)(h) → aP(a)(h)) |
# s0 ≠ 0, s0 ≠ ∅, aP(a)(h), aP0(a0)(h0), aP0(a)(h), a0 ∈ s0, ((aP0 ∧_ s0))(h), ¬ aP(a0)(h0), ¬ a ∈ s0, ¬ ((aP ∧_ s0))(h), ∀ a0, h0. (a0 = a ∨ a0 ∈ s0) ∧ aP0(a0)(h0) → aP(a0)(h0), ∀ s1, aP0, h, aP. # s1 < #(s0 ++ a) → ((aP0 ∧_ s1))(h) ∧ ¬ ((aP ∧_ s1))(h) ∧ (∀ a, h. a ∈ s1 ∧ aP0(a)(h) → aP(a)(h)) → false ⊦
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| # s0 ≠ 0, s0 ≠ ∅, aP(a)(h), aP0(a0)(h0), aP0(a)(h), a0 ∈ s0, ((aP0 ∧_ s0))(h), ¬ aP(a0)(h0), ¬ a ∈ s0, ¬ ((aP ∧_ s0))(h), ∀ a0, h0. (a0 = a ∨ a0 ∈ s0) ∧ aP0(a0)(h0) → aP(a0)(h0), ∀ s1, aP0, h, aP. # s1 < #(s0 ++ a) → ((aP0 ∧_ s1))(h) ∧ ¬ ((aP ∧_ s1))(h) ∧ (∀ a, h. a ∈ s1 ∧ aP0(a)(h) → aP(a)(h)) → false ⊦ |
Used terms: a0, h0
The following image shows the proof tree of sequent calculus. The proved goal is at the bottom. You can click on the nodes to view additional rules. See here for details on colors in a proof tree.