| ⊦ precise(r =>?) |
¬ precise(r =>?) ⊦
| ¬ precise(r =>?) ⊦ |
¬ precise((r = null ⊃ emp;_∃(λ o. r => o))) ⊦
Used simplifier rules: mapornull: ⊦ r =>? = (r = null ⊃ emp;r =>_); mapex: ⊦ r =>_ = _∃(λ o. r => o);
| ¬ precise((r = null ⊃ emp;_∃(λ o. r => o))) ⊦ |
r ≠ null, ¬ precise(_∃(λ o. r => o)) ⊦
Used simplifier rules: ⊦ precise(emp); (s)
| r ≠ null, ¬ precise(_∃(λ o. r => o)) ⊦ |
⊦ precise(hP) ↔ (∀ h, h0, h1, h2. hP(h) ∧ hP(h0) ∧ h ⊥ h1 ∧ h0 ⊥ h2 ∧ h ∪ h1 = h0 ∪ h2 → h = h0)
r ≠ null, ∃ h, h0, h1, h2. ¬((_∃(λ o. r => o))(h) ∧ (_∃(λ o. r => o))(h0) ∧ h ⊥ h1 ∧ h0 ⊥ h2 ∧ h ∪ h1 = h0 ∪ h2 → h = h0) ⊦
Used terms: _∃(λ o. r => o)
| ⊦ precise(hP) ↔ (∀ h, h0, h1, h2. hP(h) ∧ hP(h0) ∧ h ⊥ h1 ∧ h0 ⊥ h2 ∧ h ∪ h1 = h0 ∪ h2 → h = h0) |
| r ≠ null, ∃ h, h0, h1, h2. ¬((_∃(λ o. r => o))(h) ∧ (_∃(λ o. r => o))(h0) ∧ h ⊥ h1 ∧ h0 ⊥ h2 ∧ h ∪ h1 = h0 ∪ h2 → h = h0) ⊦ |
(∅ ++ r)[r, o] ∪ h1 = (∅ ++ r)[r, o0] ∪ h2, (∅ ++ r)[r, o] ≠ (∅ ++ r)[r, o0], r ≠ null, ¬ r ∈ h2, ¬ r ∈ h1 ⊦
Used simplifier rules: ex3: ⊦ (_∃ oP)(h) ↔ (∃ o. oP(o)(h)); maplet: ⊦ ((r => o))(h) ↔ h = (∅ ++ r)[r, o] ∧ r ≠ null; r ≠ null ⊦ (∅ ++ r)[r, o] ⊥ h ↔ ¬ r ∈ h; (s)
| (∅ ++ r)[r, o] ∪ h1 = (∅ ++ r)[r, o0] ∪ h2, (∅ ++ r)[r, o] ≠ (∅ ++ r)[r, o0], r ≠ null, ¬ r ∈ h2, ¬ r ∈ h1 ⊦ |
⊦ h0 = h1 ↔ (∀ r. (r ∈ h0 ↔ r ∈ h1) ∧ (r ∈ h0 → h0[r] = h1[r]))
(∅ ++ r)[r, o] ≠ (∅ ++ r)[r, o0], r ≠ null, ¬ r ∈ h2, ¬ r ∈ h1, ∀ r0. (r0 ∈ (∅ ++ r)[r, o] ∪ h1 ↔ r0 ∈ (∅ ++ r)[r, o0] ∪ h2) ∧ (r0 ∈ (∅ ++ r)[r, o] ∪ h1 → ((∅ ++ r)[r, o] ∪ h1)[r0] = ((∅ ++ r)[r, o0] ∪ h2)[r0]) ⊦
Used terms: (∅ ++ r)[r, o0] ∪ h2, (∅ ++ r)[r, o] ∪ h1
| ⊦ h0 = h1 ↔ (∀ r. (r ∈ h0 ↔ r ∈ h1) ∧ (r ∈ h0 → h0[r] = h1[r])) |
| (∅ ++ r)[r, o] ≠ (∅ ++ r)[r, o0], r ≠ null, ¬ r ∈ h2, ¬ r ∈ h1, ∀ r0. (r0 ∈ (∅ ++ r)[r, o] ∪ h1 ↔ r0 ∈ (∅ ++ r)[r, o0] ∪ h2) ∧ (r0 ∈ (∅ ++ r)[r, o] ∪ h1 → ((∅ ++ r)[r, o] ∪ h1)[r0] = ((∅ ++ r)[r, o0] ∪ h2)[r0]) ⊦ |
(∅ ++ r)[r, o] ≠ (∅ ++ r)[r, o0], r ≠ null, ¬ r ∈ h2, ¬ r ∈ h1, ∀ r0. (r0 ∈ (∅ ++ r)[r, o] ∪ h1 ↔ r0 ∈ (∅ ++ r)[r, o0] ∪ h2) ∧ (r0 ∈ (∅ ++ r)[r, o] ∪ h1 → ((∅ ++ r)[r, o] ∪ h1)[r0] = ((∅ ++ r)[r, o0] ∪ h2)[r0]) ⊦
| (∅ ++ r)[r, o] ≠ (∅ ++ r)[r, o0], r ≠ null, ¬ r ∈ h2, ¬ r ∈ h1, ∀ r0. (r0 ∈ (∅ ++ r)[r, o] ∪ h1 ↔ r0 ∈ (∅ ++ r)[r, o0] ∪ h2) ∧ (r0 ∈ (∅ ++ r)[r, o] ∪ h1 → ((∅ ++ r)[r, o] ∪ h1)[r0] = ((∅ ++ r)[r, o0] ∪ h2)[r0]) ⊦ |
r ∈ (∅ ++ r)[r, o] ∪ h1 ↔ r ∈ (∅ ++ r)[r, o0] ∪ h2, (∅ ++ r)[r, o] ≠ (∅ ++ r)[r, o0], r ≠ null, ¬ r ∈ h2, ¬ r ∈ h1, r ∈ (∅ ++ r)[r, o] ∪ h1 → ((∅ ++ r)[r, o] ∪ h1)[r] = ((∅ ++ r)[r, o0] ∪ h2)[r] ⊦
Used terms: r
| r ∈ (∅ ++ r)[r, o] ∪ h1 ↔ r ∈ (∅ ++ r)[r, o0] ∪ h2, (∅ ++ r)[r, o] ≠ (∅ ++ r)[r, o0], r ≠ null, ¬ r ∈ h2, ¬ r ∈ h1, r ∈ (∅ ++ r)[r, o] ∪ h1 → ((∅ ++ r)[r, o] ∪ h1)[r] = ((∅ ++ r)[r, o0] ∪ h2)[r] ⊦ |
(∅ ++ r)[r, o] ≠ (∅ ++ r)[r, o0], r ≠ null, ¬ r ∈ h2, ¬ r ∈ h1, ¬ r ∈ (∅ ++ r)[r, o] ∪ h1, ¬ r ∈ (∅ ++ r)[r, o0] ∪ h2 ⊦
Used simplifier rules: r ≠ null, ¬ r ∈ h ⊦ ((∅ ++ r)[r, o] ∪ h)[r] = o; (s)
| (∅ ++ r)[r, o] ≠ (∅ ++ r)[r, o0], r ≠ null, ¬ r ∈ h2, ¬ r ∈ h1, ¬ r ∈ (∅ ++ r)[r, o] ∪ h1, ¬ r ∈ (∅ ++ r)[r, o0] ∪ h2 ⊦ |
⊦ h0 ⊥ h1 → (r ∈ h0 ∪ h1 ↔ r ∈ h0 ∨ r ∈ h1)
Used simplifier rules: r ≠ null ⊦ (∅ ++ r)[r, o] ⊥ h ↔ ¬ r ∈ h; (s) ⊦ r ∈ h[r0, o] ↔ r ∈ h; (s) ⊦ ¬ r ∈ ∅; (s) r0 ≠ null, ¬ r0 ∈ h ⊦ r ∈ h ++ r0 ↔ r = r0 ∨ r ∈ h; (s) Used terms: h1, (∅ ++ r)[r, o], r
| ⊦ h0 ⊥ h1 → (r ∈ h0 ∪ h1 ↔ r ∈ h0 ∨ r ∈ h1) |
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.