| ⊦ (r ==>_ * hR)[rs, f, g] ↔ (∃ a. (a[r =>_] * hR)[rs, f, g]) |
(r ==>_ * hR)[rs, f, g] ⊦ ∃ a. (a[r =>_] * hR)[rs, f, g]
¬ (r ==>_ * hR)[rs, f, g], ∃ a. (a[r =>_] * hR)[rs, f, g] ⊦
| (r ==>_ * hR)[rs, f, g] ⊦ ∃ a. (a[r =>_] * hR)[rs, f, g] |
⊦ r ==>_ = _∃(λ o, a. r ==>(o, a))
(_∃(λ o, a. r ==>(o, a)) * hR)[rs, f, g] ⊦ ∃ a. (a[r =>_] * hR)[rs, f, g]
Used terms: r
| ⊦ r ==>_ = _∃(λ o, a. r ==>(o, a)) |
| (_∃(λ o, a. r ==>(o, a)) * hR)[rs, f, g] ⊦ ∃ a. (a[r =>_] * hR)[rs, f, g] |
(r ==>(o, a) * hR)[rs, f, g] ⊦ ∃ a. (a[r =>_] * hR)[rs, f, g]
Used simplifier rules: sep-com: ⊦ hP0 * hP1 = hP1 * hP0; from specification heap-sep[heap-aux-inst] sep-ass: ⊦ (hP0 * hP1) * hP2 = hP0 * hP1 * hP2; from specification heap-sep[heap-aux-inst] ⊦ (_∃ oaR * hR)[rs, f, g] ↔ (∃ o, a. (oaR(o, a) * hR)[rs, f, g]); (s)
| (r ==>(o, a) * hR)[rs, f, g] ⊦ ∃ a. (a[r =>_] * hR)[rs, f, g] |
(r ==>(o, a) * hR)[rs, f, g], ¬ (a[r =>_] * hR)[rs, f, g] ⊦
Used terms: a
| (r ==>(o, a) * hR)[rs, f, g], ¬ (a[r =>_] * hR)[rs, f, g] ⊦ |
⊦ (hR0 * hR1)[rs, f, g] ↔ (∃ rs0, rs1. rs0 ∪ rs1 = rs ∧ rs0 ∩ rs1 = ∅ ∧ hR0[rs0, f, g] ∧ hR1[rs1, f, g])
¬ (a[r =>_] * hR)[rs, f, g], ∃ rs0, rs1. rs0 ∪ rs1 = rs ∧ rs0 ∩ rs1 = ∅ ∧ r ==>(o, a)[rs0, f, g] ∧ hR[rs1, f, g] ⊦
Used terms: rs, hR, g, r ==>(o, a), f
| ⊦ (hR0 * hR1)[rs, f, g] ↔ (∃ rs0, rs1. rs0 ∪ rs1 = rs ∧ rs0 ∩ rs1 = ∅ ∧ hR0[rs0, f, g] ∧ hR1[rs1, f, g]) |
| ¬ (a[r =>_] * hR)[rs, f, g], ∃ rs0, rs1. rs0 ∪ rs1 = rs ∧ rs0 ∩ rs1 = ∅ ∧ r ==>(o, a)[rs0, f, g] ∧ hR[rs1, f, g] ⊦ |
rs0 ∩ rs1 = ∅, r ==>(o, a)[rs0, f, g], hR[rs1, f, g], ¬ (a[r =>_] * hR)[rs0 ∪ rs1, f, g] ⊦
| rs0 ∩ rs1 = ∅, r ==>(o, a)[rs0, f, g], hR[rs1, f, g], ¬ (a[r =>_] * hR)[rs0 ∪ rs1, f, g] ⊦ |
⊦ hR0[rs0, f, g] ∧ hR1[rs1, f, g] ∧ rs0 ∩ rs1 = ∅ → (hR0 * hR1)[rs0 ∪ rs1, f, g]
rs0 ∩ rs1 = ∅, hR[rs1, f, g], r ==>(o, a)[rs0, f, g], ¬ (a[r =>_] * hR)[rs0 ∪ rs1, f, g] ⊦ a[r =>_][rs0, f, g] ∧ hR[rs1, f, g] ∧ rs0 ∩ rs1 = ∅
Used terms: rs0, hR, g, a[r =>_], f, rs1
| ⊦ hR0[rs0, f, g] ∧ hR1[rs1, f, g] ∧ rs0 ∩ rs1 = ∅ → (hR0 * hR1)[rs0 ∪ rs1, f, g] |
| rs0 ∩ rs1 = ∅, hR[rs1, f, g], r ==>(o, a)[rs0, f, g], ¬ (a[r =>_] * hR)[rs0 ∪ rs1, f, g] ⊦ a[r =>_][rs0, f, g] ∧ hR[rs1, f, g] ∧ rs0 ∩ rs1 = ∅ |
rs0 ∩ rs1 = ∅, r ==>(o, a)[rs0, f, g], hR[rs1, f, g], ¬ (a[r =>_] * hR)[rs0 ∪ rs1, f, g], ¬ a[r =>_][rs0, f, g] ⊦
| rs0 ∩ rs1 = ∅, r ==>(o, a)[rs0, f, g], hR[rs1, f, g], ¬ (a[r =>_] * hR)[rs0 ∪ rs1, f, g], ¬ a[r =>_][rs0, f, g] ⊦ |
⊦ hR[rs, f, g] ↔ hR(mk(rs, f, g))
rs0 ∩ rs1 = ∅, hR[rs1, f, g], r ==>(o, a)[rs0, f, g], ¬ (a[r =>_] * hR)[rs0 ∪ rs1, f, g], ¬ a[r =>_](mk(rs0, f, g)) ⊦
Used terms: g, f, rs0, a[r =>_]
| ⊦ hR[rs, f, g] ↔ hR(mk(rs, f, g)) |
| rs0 ∩ rs1 = ∅, hR[rs1, f, g], r ==>(o, a)[rs0, f, g], ¬ (a[r =>_] * hR)[rs0 ∪ rs1, f, g], ¬ a[r =>_](mk(rs0, f, g)) ⊦ |
⊦ a[hP](mk(rs, f, g)) ↔ hP(mk(rs, f)) ∧ (∀ r. r ∈ rs → g(r) = a)
rs0 ∩ rs1 = ∅, r ==>(o, a)[rs0, f, g], hR[rs1, f, g], ¬ (a[r =>_] * hR)[rs0 ∪ rs1, f, g], ¬ r =>_(mk(rs0, f)) ∨ (∃ r. ¬(r ∈ rs0 → g(r) = a)) ⊦
Used terms: a, r =>_, rs0, g, f
| ⊦ a[hP](mk(rs, f, g)) ↔ hP(mk(rs, f)) ∧ (∀ r. r ∈ rs → g(r) = a) |
| rs0 ∩ rs1 = ∅, r ==>(o, a)[rs0, f, g], hR[rs1, f, g], ¬ (a[r =>_] * hR)[rs0 ∪ rs1, f, g], ¬ r =>_(mk(rs0, f)) ∨ (∃ r. ¬(r ∈ rs0 → g(r) = a)) ⊦ |
rs0 ∩ rs1 = ∅, hR[rs1, f, g], r ==>(o, a)[rs0, f, g], ¬ (a[r =>_] * hR)[rs0 ∪ rs1, f, g], ¬ r =>_(mk(rs0, f)) ∨ ¬(r0 ∈ rs0 → g(r0) = a) ⊦
| rs0 ∩ rs1 = ∅, hR[rs1, f, g], r ==>(o, a)[rs0, f, g], ¬ (a[r =>_] * hR)[rs0 ∪ rs1, f, g], ¬ r =>_(mk(rs0, f)) ∨ ¬(r0 ∈ rs0 → g(r0) = a) ⊦ |
⊦ r =>_ = _∃(λ o. r => o)
rs0 ∩ rs1 = ∅, r ==>(o, a)[rs0, f, g], hR[rs1, f, g], ¬ (a[_∃(λ o. r => o)] * hR)[rs0 ∪ rs1, f, g], ¬ (_∃(λ o. r => o))(mk(rs0, f)) ∨ ¬(r0 ∈ rs0 → g(r0) = a) ⊦
Used terms: r
| ⊦ r =>_ = _∃(λ o. r => o) |
| rs0 ∩ rs1 = ∅, r ==>(o, a)[rs0, f, g], hR[rs1, f, g], ¬ (a[_∃(λ o. r => o)] * hR)[rs0 ∪ rs1, f, g], ¬ (_∃(λ o. r => o))(mk(rs0, f)) ∨ ¬(r0 ∈ rs0 → g(r0) = a) ⊦ |
rs0 ∩ rs1 = ∅, hR[rs1, f, g], r ==>(o, a)[rs0, f, g], ¬(∃ o. ((r => o))(mk(rs0, f))) ∨ ¬(r0 ∈ rs0 → g(r0) = a) ⊦ ∃ o. (a[r => o] * hR)[rs0 ∪ rs1, f, g]
Used simplifier rules: lift-ex-o: ⊦ a[_∃ ohP] = _∃(λ o, a0. a[ohP(o)]); ⊦ (_∃ oP)(h) ↔ (∃ o. oP(o)(h)); (s) sep-com: ⊦ hP0 * hP1 = hP1 * hP0; from specification heap-sep[heap-aux-inst] sep-ass: ⊦ (hP0 * hP1) * hP2 = hP0 * hP1 * hP2; from specification heap-sep[heap-aux-inst] ⊦ (_∃ oaR * hR)[rs, f, g] ↔ (∃ o, a. (oaR(o, a) * hR)[rs, f, g]); (s)
| rs0 ∩ rs1 = ∅, hR[rs1, f, g], r ==>(o, a)[rs0, f, g], ¬(∃ o. ((r => o))(mk(rs0, f))) ∨ ¬(r0 ∈ rs0 → g(r0) = a) ⊦ ∃ o. (a[r => o] * hR)[rs0 ∪ rs1, f, g] |
⊦ hR[rs, f, g] ↔ hR(mk(rs, f, g))
rs0 ∩ rs1 = ∅, r ==>(o, a)(mk(rs0, f, g)), hR[rs1, f, g], ¬(∃ o. ((r => o))(mk(rs0, f))) ∨ ¬(r0 ∈ rs0 → g(r0) = a) ⊦ ∃ o. (a[r => o] * hR)[rs0 ∪ rs1, f, g]
Used terms: g, f, rs0, r ==>(o, a)
| ⊦ hR[rs, f, g] ↔ hR(mk(rs, f, g)) |
| rs0 ∩ rs1 = ∅, r ==>(o, a)(mk(rs0, f, g)), hR[rs1, f, g], ¬(∃ o. ((r => o))(mk(rs0, f))) ∨ ¬(r0 ∈ rs0 → g(r0) = a) ⊦ ∃ o. (a[r => o] * hR)[rs0 ∪ rs1, f, g] |
⊦ r ==>(o, a)(ha) ↔ ha = (∅ ++ r)[r, o, a] ∧ r ≠ null
mk(rs0, f, g) = (∅ ++ r)[r, o, a], rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ¬(∃ o. ((r => o))(mk(rs0, f))) ∨ ¬(r0 ∈ rs0 → g(r0) = a) ⊦ ∃ o. (a[r => o] * hR)[rs0 ∪ rs1, f, g]
Used terms: mk(rs0, f, g), a, o, r
| ⊦ r ==>(o, a)(ha) ↔ ha = (∅ ++ r)[r, o, a] ∧ r ≠ null |
| mk(rs0, f, g) = (∅ ++ r)[r, o, a], rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ¬(∃ o. ((r => o))(mk(rs0, f))) ∨ ¬(r0 ∈ rs0 → g(r0) = a) ⊦ ∃ o. (a[r => o] * hR)[rs0 ∪ rs1, f, g] |
mk(rs0, f, g) = (∅ ++ r)[r, o, a], rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ¬(∃ o. ((r => o))(mk(rs0, f))) ∨ ¬(r0 ∈ rs0 → g(r0) = a) ⊦ ∃ o. (a[r => o] * hR)[rs0 ∪ rs1, f, g]
| mk(rs0, f, g) = (∅ ++ r)[r, o, a], rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ¬(∃ o. ((r => o))(mk(rs0, f))) ∨ ¬(r0 ∈ rs0 → g(r0) = a) ⊦ ∃ o. (a[r => o] * hR)[rs0 ∪ rs1, f, g] |
⊦ ha0 = ha1 ↔ (∀ r. (r ∈ ha0 ↔ r ∈ ha1) ∧ (r ∈ ha0 → ha0[r]o = ha1[r]o ∧ ha0[r]a = ha1[r]a))
rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ∀ r0. (r0 ∈ mk(rs0, f, g) ↔ r0 ∈ (∅ ++ r)[r, o, a]) ∧ (r0 ∈ mk(rs0, f, g) → mk(rs0, f, g)[r0]o = (∅ ++ r)[r, o, a][r0]o ∧ mk(rs0, f, g)[r0]a = (∅ ++ r)[r, o, a][r0]a), ¬(∃ o. ((r => o))(mk(rs0, f))) ∨ ¬(r0 ∈ rs0 → g(r0) = a) ⊦ ∃ o. (a[r => o] * hR)[rs0 ∪ rs1, f, g]
Used terms: mk(rs0, f, g), (∅ ++ r)[r, o, a]
| ⊦ ha0 = ha1 ↔ (∀ r. (r ∈ ha0 ↔ r ∈ ha1) ∧ (r ∈ ha0 → ha0[r]o = ha1[r]o ∧ ha0[r]a = ha1[r]a)) |
| rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ∀ r0. (r0 ∈ mk(rs0, f, g) ↔ r0 ∈ (∅ ++ r)[r, o, a]) ∧ (r0 ∈ mk(rs0, f, g) → mk(rs0, f, g)[r0]o = (∅ ++ r)[r, o, a][r0]o ∧ mk(rs0, f, g)[r0]a = (∅ ++ r)[r, o, a][r0]a), ¬(∃ o. ((r => o))(mk(rs0, f))) ∨ ¬(r0 ∈ rs0 → g(r0) = a) ⊦ ∃ o. (a[r => o] * hR)[rs0 ∪ rs1, f, g] |
rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ∀ r1. (r1 ∈ rs0 ↔ r1 ∈ (∅ ++ r)[r, o, a]) ∧ (r1 ∈ rs0 → f(r1) = (∅ ++ r)[r, o, a][r1]o ∧ g(r1) = (∅ ++ r)[r, o, a][r1]a), ¬(∃ o. ((r => o))(mk(rs0, f))) ∨ ¬(r0 ∈ rs0 → g(r0) = a) ⊦ ∃ o. (a[r => o] * hR)[rs0 ∪ rs1, f, g]
Used simplifier rules: ⊦ r ∈ rs → mk(rs, f, g)[r]a = g(r); (s) ⊦ r ∈ rs → mk(rs, f, g)[r]o = f(r); (s) ⊦ r ∈ mk(rs, f, g) ↔ r ∈ rs; (s)
| rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ∀ r1. (r1 ∈ rs0 ↔ r1 ∈ (∅ ++ r)[r, o, a]) ∧ (r1 ∈ rs0 → f(r1) = (∅ ++ r)[r, o, a][r1]o ∧ g(r1) = (∅ ++ r)[r, o, a][r1]a), ¬(∃ o. ((r => o))(mk(rs0, f))) ∨ ¬(r0 ∈ rs0 → g(r0) = a) ⊦ ∃ o. (a[r => o] * hR)[rs0 ∪ rs1, f, g] |
r ∈ rs0 ↔ r ∈ (∅ ++ r)[r, o, a], rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], r ∈ rs0 → f(r) = (∅ ++ r)[r, o, a][r]o ∧ g(r) = (∅ ++ r)[r, o, a][r]a, ∀ r1. (r1 ∈ rs0 ↔ r1 ∈ (∅ ++ r)[r, o, a]) ∧ (r1 ∈ rs0 → f(r1) = (∅ ++ r)[r, o, a][r1]o ∧ g(r1) = (∅ ++ r)[r, o, a][r1]a), ¬(∃ o. ((r => o))(mk(rs0, f))) ∨ ¬(r0 ∈ rs0 → g(r0) = a) ⊦ ∃ o. (a[r => o] * hR)[rs0 ∪ rs1, f, g]
Used terms: r
| r ∈ rs0 ↔ r ∈ (∅ ++ r)[r, o, a], rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], r ∈ rs0 → f(r) = (∅ ++ r)[r, o, a][r]o ∧ g(r) = (∅ ++ r)[r, o, a][r]a, ∀ r1. (r1 ∈ rs0 ↔ r1 ∈ (∅ ++ r)[r, o, a]) ∧ (r1 ∈ rs0 → f(r1) = (∅ ++ r)[r, o, a][r1]o ∧ g(r1) = (∅ ++ r)[r, o, a][r1]a), ¬(∃ o. ((r => o))(mk(rs0, f))) ∨ ¬(r0 ∈ rs0 → g(r0) = a) ⊦ ∃ o. (a[r => o] * hR)[rs0 ∪ rs1, f, g] |
rs0 ∩ rs1 = ∅, # rs0 ≠ 0, r ≠ null, rs0 ≠ ∅, hR[rs1, f, g], r ∈ rs0, ∀ r1. (r1 ∈ rs0 → r1 = r) ∧ (r1 ∈ rs0 → f(r1) = (r1 = r ⊃ f(r);(∅ ++ r)[r1]o) ∧ g(r1) = (r1 = r ⊃ g(r);(∅ ++ r)[r1]a)), ¬(∃ o. ((r => o))(mk(rs0, f))) ∨ ¬(r0 ∈ rs0 → g(r0) = g(r)) ⊦ ∃ o. (g(r)[r => o] * hR)[rs0 ∪ rs1, f, g]
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic[refset] ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic[refset] r0 ≠ null, ¬ r0 ∈ h ⊦ r ∈ h ++ r0 ↔ r = r0 ∨ r ∈ h; (s) ⊦ ¬ r ∈ ∅; (s) ⊦ ha[r0, o, a][r]a = (r = r0 ∧ r0 ∈ ha ⊃ a;ha[r]a); (s) ⊦ ha[r0, o, a][r]o = (r = r0 ∧ r0 ∈ ha ⊃ o;ha[r]o); (s) ⊦ r ∈ ha[r0, o, a] ↔ r ∈ ha; (s)
| rs0 ∩ rs1 = ∅, # rs0 ≠ 0, r ≠ null, rs0 ≠ ∅, hR[rs1, f, g], r ∈ rs0, ∀ r1. (r1 ∈ rs0 → r1 = r) ∧ (r1 ∈ rs0 → f(r1) = (r1 = r ⊃ f(r);(∅ ++ r)[r1]o) ∧ g(r1) = (r1 = r ⊃ g(r);(∅ ++ r)[r1]a)), ¬(∃ o. ((r => o))(mk(rs0, f))) ∨ ¬(r0 ∈ rs0 → g(r0) = g(r)) ⊦ ∃ o. (g(r)[r => o] * hR)[rs0 ∪ rs1, f, g] |
rs0 ∩ rs1 = ∅, # rs0 ≠ 0, r ≠ null, rs0 ≠ ∅, hR[rs1, f, g], r ∈ rs0, ∀ r1. (r1 ∈ rs0 → r1 = r) ∧ (r1 ∈ rs0 → f(r1) = (r1 = r ⊃ f(r);(∅ ++ r)[r1]o) ∧ g(r1) = (r1 = r ⊃ g(r);(∅ ++ r)[r1]a)) ⊦ ∃ o. (g(r)[r => o] * hR)[rs0 ∪ rs1, f, g], ∃ o. ((r => o))(mk(rs0, f))
rs0 ∩ rs1 = ∅, # rs0 ≠ 0, g(r0) ≠ g(r), r ≠ null, rs0 ≠ ∅, hR[rs1, f, g], r0 ∈ rs0, r ∈ rs0, ∀ r1. (r1 ∈ rs0 → r1 = r) ∧ (r1 ∈ rs0 → f(r1) = (r1 = r ⊃ f(r);(∅ ++ r)[r1]o) ∧ g(r1) = (r1 = r ⊃ g(r);(∅ ++ r)[r1]a)) ⊦ ∃ o. (g(r)[r => o] * hR)[rs0 ∪ rs1, f, g]
| rs0 ∩ rs1 = ∅, # rs0 ≠ 0, r ≠ null, rs0 ≠ ∅, hR[rs1, f, g], r ∈ rs0, ∀ r1. (r1 ∈ rs0 → r1 = r) ∧ (r1 ∈ rs0 → f(r1) = (r1 = r ⊃ f(r);(∅ ++ r)[r1]o) ∧ g(r1) = (r1 = r ⊃ g(r);(∅ ++ r)[r1]a)) ⊦ ∃ o. (g(r)[r => o] * hR)[rs0 ∪ rs1, f, g], ∃ o. ((r => o))(mk(rs0, f)) |
rs0 ∩ rs1 = ∅, # rs0 ≠ 0, r ≠ null, rs0 ≠ ∅, hR[rs1, f, g], r ∈ rs0, ¬ ((r => f(r)))(mk(rs0, f)), ∀ r1. (r1 ∈ rs0 → r1 = r) ∧ (r1 ∈ rs0 → f(r1) = (r1 = r ⊃ f(r);(∅ ++ r)[r1]o) ∧ g(r1) = (r1 = r ⊃ g(r);(∅ ++ r)[r1]a)) ⊦ ∃ o. ((r => o))(mk(rs0, f)), ∃ o. (g(r)[r => o] * hR)[rs0 ∪ rs1, f, g]
Used terms: f(r)
| rs0 ∩ rs1 = ∅, # rs0 ≠ 0, r ≠ null, rs0 ≠ ∅, hR[rs1, f, g], r ∈ rs0, ¬ ((r => f(r)))(mk(rs0, f)), ∀ r1. (r1 ∈ rs0 → r1 = r) ∧ (r1 ∈ rs0 → f(r1) = (r1 = r ⊃ f(r);(∅ ++ r)[r1]o) ∧ g(r1) = (r1 = r ⊃ g(r);(∅ ++ r)[r1]a)) ⊦ ∃ o. ((r => o))(mk(rs0, f)), ∃ o. (g(r)[r => o] * hR)[rs0 ∪ rs1, f, g] |
⊦ ((r => o))(h) ↔ h = (∅ ++ r)[r, o] ∧ r ≠ null
rs0 ∩ rs1 = ∅, # rs0 ≠ 0, r ≠ null, rs0 ≠ ∅, hR[rs1, f, g], r ∈ rs0, ∀ r1. (r1 ∈ rs0 → r1 = r) ∧ (r1 ∈ rs0 → f(r1) = (r1 = r ⊃ f(r);(∅ ++ r)[r1]o) ∧ g(r1) = (r1 = r ⊃ g(r);(∅ ++ r)[r1]a)), mk(rs0, f) ≠ (∅ ++ r)[r, f(r)] ∨ r = null ⊦ ∃ o. (g(r)[r => o] * hR)[rs0 ∪ rs1, f, g], ∃ o. ((r => o))(mk(rs0, f))
Used terms: mk(rs0, f), f(r), r
| ⊦ ((r => o))(h) ↔ h = (∅ ++ r)[r, o] ∧ r ≠ null |
| rs0 ∩ rs1 = ∅, # rs0 ≠ 0, r ≠ null, rs0 ≠ ∅, hR[rs1, f, g], r ∈ rs0, ∀ r1. (r1 ∈ rs0 → r1 = r) ∧ (r1 ∈ rs0 → f(r1) = (r1 = r ⊃ f(r);(∅ ++ r)[r1]o) ∧ g(r1) = (r1 = r ⊃ g(r);(∅ ++ r)[r1]a)), mk(rs0, f) ≠ (∅ ++ r)[r, f(r)] ∨ r = null ⊦ ∃ o. (g(r)[r => o] * hR)[rs0 ∪ rs1, f, g], ∃ o. ((r => o))(mk(rs0, f)) |
rs0 ∩ rs1 = ∅, # rs0 ≠ 0, mk(rs0, f) ≠ (∅ ++ r)[r, f(r)], r ≠ null, rs0 ≠ ∅, hR[rs1, f, g], r ∈ rs0, ∀ r1. (r1 ∈ rs0 → r1 = r) ∧ (r1 ∈ rs0 → f(r1) = (r1 = r ⊃ f(r);(∅ ++ r)[r1]o) ∧ g(r1) = (r1 = r ⊃ g(r);(∅ ++ r)[r1]a)) ⊦ ∃ o. ((r => o))(mk(rs0, f)), ∃ o. (g(r)[r => o] * hR)[rs0 ∪ rs1, f, g]
| rs0 ∩ rs1 = ∅, # rs0 ≠ 0, mk(rs0, f) ≠ (∅ ++ r)[r, f(r)], r ≠ null, rs0 ≠ ∅, hR[rs1, f, g], r ∈ rs0, ∀ r1. (r1 ∈ rs0 → r1 = r) ∧ (r1 ∈ rs0 → f(r1) = (r1 = r ⊃ f(r);(∅ ++ r)[r1]o) ∧ g(r1) = (r1 = r ⊃ g(r);(∅ ++ r)[r1]a)) ⊦ ∃ o. ((r => o))(mk(rs0, f)), ∃ o. (g(r)[r => o] * hR)[rs0 ∪ rs1, f, g] |
⊦ h0 = h1 ↔ (∀ r. (r ∈ h0 ↔ r ∈ h1) ∧ (r ∈ h0 → h0[r] = h1[r]))
rs0 ∩ rs1 = ∅, # rs0 ≠ 0, r ≠ null, rs0 ≠ ∅, hR[rs1, f, g], r ∈ rs0, ∀ r1. (r1 ∈ rs0 → r1 = r) ∧ (r1 ∈ rs0 → f(r1) = (r1 = r ⊃ f(r);(∅ ++ r)[r1]o) ∧ g(r1) = (r1 = r ⊃ g(r);(∅ ++ r)[r1]a)), ∃ r0. ¬((r0 ∈ mk(rs0, f) ↔ r0 ∈ (∅ ++ r)[r, f(r)]) ∧ (r0 ∈ mk(rs0, f) → mk(rs0, f)[r0] = (∅ ++ r)[r, f(r)][r0])) ⊦ ∃ o. (g(r)[r => o] * hR)[rs0 ∪ rs1, f, g], ∃ o. ((r => o))(mk(rs0, f))
Used terms: (∅ ++ r)[r, f(r)], mk(rs0, f)
| ⊦ h0 = h1 ↔ (∀ r. (r ∈ h0 ↔ r ∈ h1) ∧ (r ∈ h0 → h0[r] = h1[r])) |
| rs0 ∩ rs1 = ∅, # rs0 ≠ 0, r ≠ null, rs0 ≠ ∅, hR[rs1, f, g], r ∈ rs0, ∀ r1. (r1 ∈ rs0 → r1 = r) ∧ (r1 ∈ rs0 → f(r1) = (r1 = r ⊃ f(r);(∅ ++ r)[r1]o) ∧ g(r1) = (r1 = r ⊃ g(r);(∅ ++ r)[r1]a)), ∃ r0. ¬((r0 ∈ mk(rs0, f) ↔ r0 ∈ (∅ ++ r)[r, f(r)]) ∧ (r0 ∈ mk(rs0, f) → mk(rs0, f)[r0] = (∅ ++ r)[r, f(r)][r0])) ⊦ ∃ o. (g(r)[r => o] * hR)[rs0 ∪ rs1, f, g], ∃ o. ((r => o))(mk(rs0, f)) |
rs0 ∩ rs1 = ∅, # rs0 ≠ 0, r ≠ null, rs0 ≠ ∅, hR[rs1, f, g], r ∈ rs0, ∀ r1. (r1 ∈ rs0 → r1 = r) ∧ (r1 ∈ rs0 → f(r1) = (r1 = r ⊃ f(r);(∅ ++ r)[r1]o) ∧ g(r1) = (r1 = r ⊃ g(r);(∅ ++ r)[r1]a)) ⊦ ∃ o. ((r => o))(mk(rs0, f)), ∃ o. (g(r)[r => o] * hR)[rs0 ∪ rs1, f, g], (r0 ∈ rs0 → r0 = r) ∧ (r0 ∈ rs0 → f(r0) = (r0 = r ⊃ f(r);(∅ ++ r)[r0]))
Used simplifier rules: r0 ≠ null, ¬ r0 ∈ h ⊦ r ∈ h ++ r0 ↔ r = r0 ∨ r ∈ h; (s) ⊦ ¬ r ∈ ∅; (s) ⊦ h[r0, o][r] = (r = r0 ∧ r0 ∈ h ⊃ o;h[r]); (s) ⊦ r ∈ rs → mk(rs, f)[r] = f(r); (s) ⊦ r ∈ mk(rs, f) ↔ r ∈ rs; (s) ⊦ r ∈ h[r0, o] ↔ r ∈ h; (s)
| rs0 ∩ rs1 = ∅, # rs0 ≠ 0, r ≠ null, rs0 ≠ ∅, hR[rs1, f, g], r ∈ rs0, ∀ r1. (r1 ∈ rs0 → r1 = r) ∧ (r1 ∈ rs0 → f(r1) = (r1 = r ⊃ f(r);(∅ ++ r)[r1]o) ∧ g(r1) = (r1 = r ⊃ g(r);(∅ ++ r)[r1]a)) ⊦ ∃ o. ((r => o))(mk(rs0, f)), ∃ o. (g(r)[r => o] * hR)[rs0 ∪ rs1, f, g], (r0 ∈ rs0 → r0 = r) ∧ (r0 ∈ rs0 → f(r0) = (r0 = r ⊃ f(r);(∅ ++ r)[r0])) |
Used terms: r0
| rs0 ∩ rs1 = ∅, # rs0 ≠ 0, g(r0) ≠ g(r), r ≠ null, rs0 ≠ ∅, hR[rs1, f, g], r0 ∈ rs0, r ∈ rs0, ∀ r1. (r1 ∈ rs0 → r1 = r) ∧ (r1 ∈ rs0 → f(r1) = (r1 = r ⊃ f(r);(∅ ++ r)[r1]o) ∧ g(r1) = (r1 = r ⊃ g(r);(∅ ++ r)[r1]a)) ⊦ ∃ o. (g(r)[r => o] * hR)[rs0 ∪ rs1, f, g] |
rs0 ∩ rs1 = ∅, # rs0 ≠ 0, g(r0) ≠ g(r), r ≠ null, rs0 ≠ ∅, hR[rs1, f, g], r ∈ rs0, r0 ∈ rs0, ∀ r1. (r1 ∈ rs0 → r1 = r) ∧ (r1 ∈ rs0 → f(r1) = (r1 = r ⊃ f(r);(∅ ++ r)[r1]o) ∧ g(r1) = (r1 = r ⊃ g(r);(∅ ++ r)[r1]a)) ⊦ ∃ o. (g(r)[r => o] * hR)[rs0 ∪ rs1, f, g]
| rs0 ∩ rs1 = ∅, # rs0 ≠ 0, g(r0) ≠ g(r), r ≠ null, rs0 ≠ ∅, hR[rs1, f, g], r ∈ rs0, r0 ∈ rs0, ∀ r1. (r1 ∈ rs0 → r1 = r) ∧ (r1 ∈ rs0 → f(r1) = (r1 = r ⊃ f(r);(∅ ++ r)[r1]o) ∧ g(r1) = (r1 = r ⊃ g(r);(∅ ++ r)[r1]a)) ⊦ ∃ o. (g(r)[r => o] * hR)[rs0 ∪ rs1, f, g] |
Used terms: r0
| ¬ (r ==>_ * hR)[rs, f, g], ∃ a. (a[r =>_] * hR)[rs, f, g] ⊦ |
(a[r =>_] * hR)[rs, f, g], ¬ (r ==>_ * hR)[rs, f, g] ⊦
| (a[r =>_] * hR)[rs, f, g], ¬ (r ==>_ * hR)[rs, f, g] ⊦ |
⊦ (hR0 * hR1)[rs, f, g] ↔ (∃ rs0, rs1. rs0 ∪ rs1 = rs ∧ rs0 ∩ rs1 = ∅ ∧ hR0[rs0, f, g] ∧ hR1[rs1, f, g])
¬ (r ==>_ * hR)[rs, f, g], ∃ rs0, rs1. rs0 ∪ rs1 = rs ∧ rs0 ∩ rs1 = ∅ ∧ a[r =>_][rs0, f, g] ∧ hR[rs1, f, g] ⊦
Used terms: rs, hR, g, a[r =>_], f
| ⊦ (hR0 * hR1)[rs, f, g] ↔ (∃ rs0, rs1. rs0 ∪ rs1 = rs ∧ rs0 ∩ rs1 = ∅ ∧ hR0[rs0, f, g] ∧ hR1[rs1, f, g]) |
| ¬ (r ==>_ * hR)[rs, f, g], ∃ rs0, rs1. rs0 ∪ rs1 = rs ∧ rs0 ∩ rs1 = ∅ ∧ a[r =>_][rs0, f, g] ∧ hR[rs1, f, g] ⊦ |
rs0 ∩ rs1 = ∅, a[r =>_][rs0, f, g], hR[rs1, f, g], ¬ (r ==>_ * hR)[rs0 ∪ rs1, f, g] ⊦
| rs0 ∩ rs1 = ∅, a[r =>_][rs0, f, g], hR[rs1, f, g], ¬ (r ==>_ * hR)[rs0 ∪ rs1, f, g] ⊦ |
⊦ hR0[rs0, f, g] ∧ hR1[rs1, f, g] ∧ rs0 ∩ rs1 = ∅ → (hR0 * hR1)[rs0 ∪ rs1, f, g]
rs0 ∩ rs1 = ∅, hR[rs1, f, g], a[r =>_][rs0, f, g], ¬ (r ==>_ * hR)[rs0 ∪ rs1, f, g] ⊦ r ==>_[rs0, f, g] ∧ hR[rs1, f, g] ∧ rs0 ∩ rs1 = ∅
Used terms: rs0, hR, g, r ==>_, f, rs1
| ⊦ hR0[rs0, f, g] ∧ hR1[rs1, f, g] ∧ rs0 ∩ rs1 = ∅ → (hR0 * hR1)[rs0 ∪ rs1, f, g] |
| rs0 ∩ rs1 = ∅, hR[rs1, f, g], a[r =>_][rs0, f, g], ¬ (r ==>_ * hR)[rs0 ∪ rs1, f, g] ⊦ r ==>_[rs0, f, g] ∧ hR[rs1, f, g] ∧ rs0 ∩ rs1 = ∅ |
rs0 ∩ rs1 = ∅, a[r =>_][rs0, f, g], hR[rs1, f, g], ¬ (r ==>_ * hR)[rs0 ∪ rs1, f, g], ¬ r ==>_[rs0, f, g] ⊦
| rs0 ∩ rs1 = ∅, a[r =>_][rs0, f, g], hR[rs1, f, g], ¬ (r ==>_ * hR)[rs0 ∪ rs1, f, g], ¬ r ==>_[rs0, f, g] ⊦ |
⊦ hR[rs, f, g] ↔ hR(mk(rs, f, g))
rs0 ∩ rs1 = ∅, hR[rs1, f, g], a[r =>_](mk(rs0, f, g)), ¬ (r ==>_ * hR)[rs0 ∪ rs1, f, g], ¬ r ==>_[rs0, f, g] ⊦
Used terms: g, f, rs0, a[r =>_]
| ⊦ hR[rs, f, g] ↔ hR(mk(rs, f, g)) |
| rs0 ∩ rs1 = ∅, hR[rs1, f, g], a[r =>_](mk(rs0, f, g)), ¬ (r ==>_ * hR)[rs0 ∪ rs1, f, g], ¬ r ==>_[rs0, f, g] ⊦ |
⊦ a[hP](mk(rs, f, g)) ↔ hP(mk(rs, f)) ∧ (∀ r. r ∈ rs → g(r) = a)
rs0 ∩ rs1 = ∅, r =>_(mk(rs0, f)), hR[rs1, f, g], ¬ (r ==>_ * hR)[rs0 ∪ rs1, f, g], ¬ r ==>_[rs0, f, g], ∀ r. r ∈ rs0 → g(r) = a ⊦
Used terms: a, r =>_, rs0, g, f
| ⊦ a[hP](mk(rs, f, g)) ↔ hP(mk(rs, f)) ∧ (∀ r. r ∈ rs → g(r) = a) |
| rs0 ∩ rs1 = ∅, r =>_(mk(rs0, f)), hR[rs1, f, g], ¬ (r ==>_ * hR)[rs0 ∪ rs1, f, g], ¬ r ==>_[rs0, f, g], ∀ r. r ∈ rs0 → g(r) = a ⊦ |
rs0 ∩ rs1 = ∅, r =>_(mk(rs0, f)), hR[rs1, f, g], ¬ (r ==>_ * hR)[rs0 ∪ rs1, f, g], ¬ r ==>_[rs0, f, g], ∀ r. r ∈ rs0 → g(r) = a ⊦
| rs0 ∩ rs1 = ∅, r =>_(mk(rs0, f)), hR[rs1, f, g], ¬ (r ==>_ * hR)[rs0 ∪ rs1, f, g], ¬ r ==>_[rs0, f, g], ∀ r. r ∈ rs0 → g(r) = a ⊦ |
⊦ r =>_ = _∃(λ o. r => o)
rs0 ∩ rs1 = ∅, hR[rs1, f, g], (_∃(λ o. r => o))(mk(rs0, f)), ¬ (r ==>_ * hR)[rs0 ∪ rs1, f, g], ¬ r ==>_[rs0, f, g], ∀ r. r ∈ rs0 → g(r) = a ⊦
Used terms: r
| ⊦ r =>_ = _∃(λ o. r => o) |
| rs0 ∩ rs1 = ∅, hR[rs1, f, g], (_∃(λ o. r => o))(mk(rs0, f)), ¬ (r ==>_ * hR)[rs0 ∪ rs1, f, g], ¬ r ==>_[rs0, f, g], ∀ r. r ∈ rs0 → g(r) = a ⊦ |
rs0 ∩ rs1 = ∅, ((r => o))(mk(rs0, f)), hR[rs1, f, g], ¬ (r ==>_ * hR)[rs0 ∪ rs1, f, g], ¬ r ==>_[rs0, f, g], ∀ r. r ∈ rs0 → g(r) = a ⊦
Used simplifier rules: ⊦ (_∃ oP)(h) ↔ (∃ o. oP(o)(h)); (s)
| rs0 ∩ rs1 = ∅, ((r => o))(mk(rs0, f)), hR[rs1, f, g], ¬ (r ==>_ * hR)[rs0 ∪ rs1, f, g], ¬ r ==>_[rs0, f, g], ∀ r. r ∈ rs0 → g(r) = a ⊦ |
⊦ ((r => o))(h) ↔ h = (∅ ++ r)[r, o] ∧ r ≠ null
mk(rs0, f) = (∅ ++ r)[r, o], rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ¬ (r ==>_ * hR)[rs0 ∪ rs1, f, g], ¬ r ==>_[rs0, f, g], ∀ r. r ∈ rs0 → g(r) = a ⊦
Used terms: mk(rs0, f), o, r
| ⊦ ((r => o))(h) ↔ h = (∅ ++ r)[r, o] ∧ r ≠ null |
| mk(rs0, f) = (∅ ++ r)[r, o], rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ¬ (r ==>_ * hR)[rs0 ∪ rs1, f, g], ¬ r ==>_[rs0, f, g], ∀ r. r ∈ rs0 → g(r) = a ⊦ |
mk(rs0, f) = (∅ ++ r)[r, o], rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ¬ (r ==>_ * hR)[rs0 ∪ rs1, f, g], ¬ r ==>_[rs0, f, g], ∀ r. r ∈ rs0 → g(r) = a ⊦
| mk(rs0, f) = (∅ ++ r)[r, o], rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ¬ (r ==>_ * hR)[rs0 ∪ rs1, f, g], ¬ r ==>_[rs0, f, g], ∀ r. r ∈ rs0 → g(r) = a ⊦ |
⊦ hR[rs, f, g] ↔ hR(mk(rs, f, g))
mk(rs0, f) = (∅ ++ r)[r, o], rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ¬ r ==>_(mk(rs0, f, g)), ¬ (r ==>_ * hR)[rs0 ∪ rs1, f, g], ∀ r. r ∈ rs0 → g(r) = a ⊦
Used terms: g, f, rs0, r ==>_
| ⊦ hR[rs, f, g] ↔ hR(mk(rs, f, g)) |
| mk(rs0, f) = (∅ ++ r)[r, o], rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ¬ r ==>_(mk(rs0, f, g)), ¬ (r ==>_ * hR)[rs0 ∪ rs1, f, g], ∀ r. r ∈ rs0 → g(r) = a ⊦ |
⊦ r ==>_ = _∃(λ o, a. r ==>(o, a))
mk(rs0, f) = (∅ ++ r)[r, o], rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ¬ (_∃(λ o, a. r ==>(o, a)) * hR)[rs0 ∪ rs1, f, g], ¬ (_∃(λ o, a. r ==>(o, a)))(mk(rs0, f, g)), ∀ r. r ∈ rs0 → g(r) = a ⊦
Used terms: r
| ⊦ r ==>_ = _∃(λ o, a. r ==>(o, a)) |
| mk(rs0, f) = (∅ ++ r)[r, o], rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ¬ (_∃(λ o, a. r ==>(o, a)) * hR)[rs0 ∪ rs1, f, g], ¬ (_∃(λ o, a. r ==>(o, a)))(mk(rs0, f, g)), ∀ r. r ∈ rs0 → g(r) = a ⊦ |
mk(rs0, f) = (∅ ++ r)[r, o], rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ∀ r. r ∈ rs0 → g(r) = a ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g], ∃ o, a. r ==>(o, a)(mk(rs0, f, g))
Used simplifier rules: ⊦ (_∃ oaR)(ha) ↔ (∃ o, a. oaR(o, a)(ha)); (s) sep-com: ⊦ hP0 * hP1 = hP1 * hP0; from specification heap-sep[heap-aux-inst] sep-ass: ⊦ (hP0 * hP1) * hP2 = hP0 * hP1 * hP2; from specification heap-sep[heap-aux-inst] ⊦ (_∃ oaR * hR)[rs, f, g] ↔ (∃ o, a. (oaR(o, a) * hR)[rs, f, g]); (s)
| mk(rs0, f) = (∅ ++ r)[r, o], rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ∀ r. r ∈ rs0 → g(r) = a ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g], ∃ o, a. r ==>(o, a)(mk(rs0, f, g)) |
mk(rs0, f) = (∅ ++ r)[r, o], rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ¬ r ==>(o, a)(mk(rs0, f, g)), ∀ r. r ∈ rs0 → g(r) = a ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g]
Used terms: o, a
| mk(rs0, f) = (∅ ++ r)[r, o], rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ¬ r ==>(o, a)(mk(rs0, f, g)), ∀ r. r ∈ rs0 → g(r) = a ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g] |
⊦ r ==>(o, a)(ha) ↔ ha = (∅ ++ r)[r, o, a] ∧ r ≠ null
mk(rs0, f) = (∅ ++ r)[r, o], rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ∀ r. r ∈ rs0 → g(r) = a, mk(rs0, f, g) ≠ (∅ ++ r)[r, o, a] ∨ r = null ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g]
Used terms: mk(rs0, f, g), a, o, r
| ⊦ r ==>(o, a)(ha) ↔ ha = (∅ ++ r)[r, o, a] ∧ r ≠ null |
| mk(rs0, f) = (∅ ++ r)[r, o], rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ∀ r. r ∈ rs0 → g(r) = a, mk(rs0, f, g) ≠ (∅ ++ r)[r, o, a] ∨ r = null ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g] |
mk(rs0, f) = (∅ ++ r)[r, o], rs0 ∩ rs1 = ∅, mk(rs0, f, g) ≠ (∅ ++ r)[r, o, a], r ≠ null, hR[rs1, f, g], ∀ r. r ∈ rs0 → g(r) = a ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g]
| mk(rs0, f) = (∅ ++ r)[r, o], rs0 ∩ rs1 = ∅, mk(rs0, f, g) ≠ (∅ ++ r)[r, o, a], r ≠ null, hR[rs1, f, g], ∀ r. r ∈ rs0 → g(r) = a ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g] |
⊦ h0 = h1 ↔ (∀ r. (r ∈ h0 ↔ r ∈ h1) ∧ (r ∈ h0 → h0[r] = h1[r]))
rs0 ∩ rs1 = ∅, mk(rs0, f, g) ≠ (∅ ++ r)[r, o, a], r ≠ null, hR[rs1, f, g], ∀ r. r ∈ rs0 → g(r) = a, ∀ r0. (r0 ∈ mk(rs0, f) ↔ r0 ∈ (∅ ++ r)[r, o]) ∧ (r0 ∈ mk(rs0, f) → mk(rs0, f)[r0] = (∅ ++ r)[r, o][r0]) ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g]
Used terms: (∅ ++ r)[r, o], mk(rs0, f)
| ⊦ h0 = h1 ↔ (∀ r. (r ∈ h0 ↔ r ∈ h1) ∧ (r ∈ h0 → h0[r] = h1[r])) |
| rs0 ∩ rs1 = ∅, mk(rs0, f, g) ≠ (∅ ++ r)[r, o, a], r ≠ null, hR[rs1, f, g], ∀ r. r ∈ rs0 → g(r) = a, ∀ r0. (r0 ∈ mk(rs0, f) ↔ r0 ∈ (∅ ++ r)[r, o]) ∧ (r0 ∈ mk(rs0, f) → mk(rs0, f)[r0] = (∅ ++ r)[r, o][r0]) ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g] |
rs0 ∩ rs1 = ∅, mk(rs0, f, g) ≠ (∅ ++ r)[r, o, a], r ≠ null, hR[rs1, f, g], ∀ r. r ∈ rs0 → g(r) = a, ∀ r0. (r0 ∈ rs0 ↔ r0 = r) ∧ (r0 ∈ rs0 → f(r0) = (r0 = r ⊃ o;(∅ ++ r)[r0])) ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g]
Used simplifier rules: r0 ≠ null, ¬ r0 ∈ h ⊦ r ∈ h ++ r0 ↔ r = r0 ∨ r ∈ h; (s) ⊦ ¬ r ∈ ∅; (s) ⊦ h[r0, o][r] = (r = r0 ∧ r0 ∈ h ⊃ o;h[r]); (s) ⊦ r ∈ rs → mk(rs, f)[r] = f(r); (s) ⊦ r ∈ mk(rs, f) ↔ r ∈ rs; (s) ⊦ r ∈ h[r0, o] ↔ r ∈ h; (s)
| rs0 ∩ rs1 = ∅, mk(rs0, f, g) ≠ (∅ ++ r)[r, o, a], r ≠ null, hR[rs1, f, g], ∀ r. r ∈ rs0 → g(r) = a, ∀ r0. (r0 ∈ rs0 ↔ r0 = r) ∧ (r0 ∈ rs0 → f(r0) = (r0 = r ⊃ o;(∅ ++ r)[r0])) ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g] |
⊦ ha0 = ha1 ↔ (∀ r. (r ∈ ha0 ↔ r ∈ ha1) ∧ (r ∈ ha0 → ha0[r]o = ha1[r]o ∧ ha0[r]a = ha1[r]a))
rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ∀ r0. (r0 ∈ rs0 ↔ r0 = r) ∧ (r0 ∈ rs0 → f(r0) = (r0 = r ⊃ o;(∅ ++ r)[r0])), ∀ r. r ∈ rs0 → g(r) = a, ∃ r0. ¬ ( (r0 ∈ mk(rs0, f, g) ↔ r0 ∈ (∅ ++ r)[r, o, a]) ∧ (r0 ∈ mk(rs0, f, g) → mk(rs0, f, g)[r0]o = (∅ ++ r)[r, o, a][r0]o ∧ mk(rs0, f, g)[r0]a = (∅ ++ r)[r, o, a][r0]a)) ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g]
Used terms: mk(rs0, f, g), (∅ ++ r)[r, o, a]
| ⊦ ha0 = ha1 ↔ (∀ r. (r ∈ ha0 ↔ r ∈ ha1) ∧ (r ∈ ha0 → ha0[r]o = ha1[r]o ∧ ha0[r]a = ha1[r]a)) |
| rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ∀ r0. (r0 ∈ rs0 ↔ r0 = r) ∧ (r0 ∈ rs0 → f(r0) = (r0 = r ⊃ o;(∅ ++ r)[r0])), ∀ r. r ∈ rs0 → g(r) = a, ∃ r0. ¬ ( (r0 ∈ mk(rs0, f, g) ↔ r0 ∈ (∅ ++ r)[r, o, a]) ∧ (r0 ∈ mk(rs0, f, g) → mk(rs0, f, g)[r0]o = (∅ ++ r)[r, o, a][r0]o ∧ mk(rs0, f, g)[r0]a = (∅ ++ r)[r, o, a][r0]a)) ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g] |
rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ∀ r. r ∈ rs0 → g(r) = a, ∀ r0. (r0 ∈ rs0 ↔ r0 = r) ∧ (r0 ∈ rs0 → f(r0) = (r0 = r ⊃ o;(∅ ++ r)[r0])) ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g], (r0 ∈ rs0 ↔ r0 = r) ∧ (r0 ∈ rs0 → f(r0) = (r0 = r ⊃ o;(∅ ++ r)[r0]o) ∧ g(r0) = (r0 = r ⊃ a;(∅ ++ r)[r0]a))
Used simplifier rules: r0 ≠ null, ¬ r0 ∈ h ⊦ r ∈ h ++ r0 ↔ r = r0 ∨ r ∈ h; (s) ⊦ ¬ r ∈ ∅; (s) ⊦ ha[r0, o, a][r]a = (r = r0 ∧ r0 ∈ ha ⊃ a;ha[r]a); (s) ⊦ r ∈ rs → mk(rs, f, g)[r]a = g(r); (s) ⊦ ha[r0, o, a][r]o = (r = r0 ∧ r0 ∈ ha ⊃ o;ha[r]o); (s) ⊦ r ∈ rs → mk(rs, f, g)[r]o = f(r); (s) ⊦ r ∈ mk(rs, f, g) ↔ r ∈ rs; (s) ⊦ r ∈ ha[r0, o, a] ↔ r ∈ ha; (s)
| rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ∀ r. r ∈ rs0 → g(r) = a, ∀ r0. (r0 ∈ rs0 ↔ r0 = r) ∧ (r0 ∈ rs0 → f(r0) = (r0 = r ⊃ o;(∅ ++ r)[r0])) ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g], (r0 ∈ rs0 ↔ r0 = r) ∧ (r0 ∈ rs0 → f(r0) = (r0 = r ⊃ o;(∅ ++ r)[r0]o) ∧ g(r0) = (r0 = r ⊃ a;(∅ ++ r)[r0]a)) |
r0 = r, rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ∀ r0. (r0 ∈ rs0 ↔ r0 = r) ∧ (r0 ∈ rs0 → f(r0) = (r0 = r ⊃ o;(∅ ++ r)[r0])), ∀ r. r ∈ rs0 → g(r) = a ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g], (r0 ∈ rs0 ↔ r0 = r) ∧ (r0 ∈ rs0 → f(r0) = (r0 = r ⊃ o;(∅ ++ r)[r0]o) ∧ g(r0) = (r0 = r ⊃ a;(∅ ++ r)[r0]a))
rs0 ∩ rs1 = ∅, r ≠ null, r0 ≠ r, hR[rs1, f, g], ∀ r0. (r0 ∈ rs0 ↔ r0 = r) ∧ (r0 ∈ rs0 → f(r0) = (r0 = r ⊃ o;(∅ ++ r)[r0])), ∀ r. r ∈ rs0 → g(r) = a ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g], (r0 ∈ rs0 ↔ r0 = r) ∧ (r0 ∈ rs0 → f(r0) = (r0 = r ⊃ o;(∅ ++ r)[r0]o) ∧ g(r0) = (r0 = r ⊃ a;(∅ ++ r)[r0]a))
Used formulas: r0 = r
| r0 = r, rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ∀ r0. (r0 ∈ rs0 ↔ r0 = r) ∧ (r0 ∈ rs0 → f(r0) = (r0 = r ⊃ o;(∅ ++ r)[r0])), ∀ r. r ∈ rs0 → g(r) = a ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g], (r0 ∈ rs0 ↔ r0 = r) ∧ (r0 ∈ rs0 → f(r0) = (r0 = r ⊃ o;(∅ ++ r)[r0]o) ∧ g(r0) = (r0 = r ⊃ a;(∅ ++ r)[r0]a)) |
rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ∀ r. r ∈ rs0 → g(r) = a, ∀ r0. (r0 ∈ rs0 ↔ r0 = r) ∧ (r0 ∈ rs0 → f(r0) = (r0 = r ⊃ o;(∅ ++ r)[r0])) ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g], r ∈ rs0 ∧ f(r) = o ∧ g(r) = a
| rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], ∀ r. r ∈ rs0 → g(r) = a, ∀ r0. (r0 ∈ rs0 ↔ r0 = r) ∧ (r0 ∈ rs0 → f(r0) = (r0 = r ⊃ o;(∅ ++ r)[r0])) ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g], r ∈ rs0 ∧ f(r) = o ∧ g(r) = a |
r ∈ rs0 ↔ r = r, rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], r ∈ rs0 → f(r) = (r = r ⊃ o;(∅ ++ r)[r]), ∀ r0. (r0 ∈ rs0 ↔ r0 = r) ∧ (r0 ∈ rs0 → f(r0) = (r0 = r ⊃ o;(∅ ++ r)[r0])), ∀ r. r ∈ rs0 → g(r) = a ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g], r ∈ rs0 ∧ f(r) = o ∧ g(r) = a
Used terms: r
| r ∈ rs0 ↔ r = r, rs0 ∩ rs1 = ∅, r ≠ null, hR[rs1, f, g], r ∈ rs0 → f(r) = (r = r ⊃ o;(∅ ++ r)[r]), ∀ r0. (r0 ∈ rs0 ↔ r0 = r) ∧ (r0 ∈ rs0 → f(r0) = (r0 = r ⊃ o;(∅ ++ r)[r0])), ∀ r. r ∈ rs0 → g(r) = a ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g], r ∈ rs0 ∧ f(r) = o ∧ g(r) = a |
rs0 ∩ rs1 = ∅, g(r) ≠ a, r ≠ null, hR[rs1, f, g], r ∈ rs0, ∀ r. r ∈ rs0 → g(r) = a, ∀ r0. (r0 ∈ rs0 → r0 = r) ∧ (r0 ∈ rs0 → f(r0) = (r0 = r ⊃ f(r);(∅ ++ r)[r0])) ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g]
| rs0 ∩ rs1 = ∅, g(r) ≠ a, r ≠ null, hR[rs1, f, g], r ∈ rs0, ∀ r. r ∈ rs0 → g(r) = a, ∀ r0. (r0 ∈ rs0 → r0 = r) ∧ (r0 ∈ rs0 → f(r0) = (r0 = r ⊃ f(r);(∅ ++ r)[r0])) ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g] |
Used terms: r
| rs0 ∩ rs1 = ∅, r ≠ null, r0 ≠ r, hR[rs1, f, g], ∀ r0. (r0 ∈ rs0 ↔ r0 = r) ∧ (r0 ∈ rs0 → f(r0) = (r0 = r ⊃ o;(∅ ++ r)[r0])), ∀ r. r ∈ rs0 → g(r) = a ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g], (r0 ∈ rs0 ↔ r0 = r) ∧ (r0 ∈ rs0 → f(r0) = (r0 = r ⊃ o;(∅ ++ r)[r0]o) ∧ g(r0) = (r0 = r ⊃ a;(∅ ++ r)[r0]a)) |
rs0 ∩ rs1 = ∅, r ≠ null, r0 ≠ r, hR[rs1, f, g], r0 ∈ rs0, ∀ r. r ∈ rs0 → g(r) = a, ∀ r0. (r0 ∈ rs0 ↔ r0 = r) ∧ (r0 ∈ rs0 → f(r0) = (r0 = r ⊃ o;(∅ ++ r)[r0])) ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g]
| rs0 ∩ rs1 = ∅, r ≠ null, r0 ≠ r, hR[rs1, f, g], r0 ∈ rs0, ∀ r. r ∈ rs0 → g(r) = a, ∀ r0. (r0 ∈ rs0 ↔ r0 = r) ∧ (r0 ∈ rs0 → f(r0) = (r0 = r ⊃ o;(∅ ++ r)[r0])) ⊦ ∃ o, a. (r ==>(o, a) * hR)[rs0 ∪ rs1, f, g] |
Used terms: r0
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.