| ⊦ isPropFO(n, l, bel) → bel ⊒w bel -p n |
isPropFO(n, l, bel), ¬ bel ⊒w bel -p n ⊦
| isPropFO(n, l, bel), ¬ bel ⊒w bel -p n ⊦ |
isPropFO(n, l, bel), ¬ bel.filter(λ be. be = SF ∨ be.l = l0) ⊒ (bel -p n).filter(λ be. be = SF ∨ be.l = l0) ⊦
Used simplifier rules: B-postfix-weak: ⊦ bel0 ⊒w bel1 ↔ (∀ l. bel0 |SF l ⊒ bel1 |SF l); B-restrict-SF-l: ⊦ bel |SF l = bel.filter(λ be. be = SF ∨ be.l = l);
| isPropFO(n, l, bel), ¬ bel.filter(λ be. be = SF ∨ be.l = l0) ⊒ (bel -p n).filter(λ be. be = SF ∨ be.l = l0) ⊦ |
l = l0, isPropFO(n, l, bel), ¬ bel.filter(λ be. be = SF ∨ be.l = l0) ⊒ (bel -p n).filter(λ be. be = SF ∨ be.l = l0) ⊦
l ≠ l0, isPropFO(n, l, bel), ¬ bel.filter(λ be. be = SF ∨ be.l = l0) ⊒ (bel -p n).filter(λ be. be = SF ∨ be.l = l0) ⊦
Used formulas: l = l0
| l = l0, isPropFO(n, l, bel), ¬ bel.filter(λ be. be = SF ∨ be.l = l0) ⊒ (bel -p n).filter(λ be. be = SF ∨ be.l = l0) ⊦ |
isPropFO(n, l0, bel), ¬ bel.filter(λ be. be = SF ∨ be.l = l0) ⊒ (bel -p n).filter(λ be. be = SF ∨ be.l = l0) ⊦
| isPropFO(n, l0, bel), ¬ bel.filter(λ be. be = SF ∨ be.l = l0) ⊒ (bel -p n).filter(λ be. be = SF ∨ be.l = l0) ⊦ |
⊦ isPropFO(n, l, bel) → bel -p n |SF l = (bel |SF l).tail
isPropFO(n, l0, bel), ¬ bel.filter(λ be. be = SF ∨ be.l = l0) ⊒ (bel -p n).filter(λ be. be = SF ∨ be.l = l0), isPropFO(n, l0, bel) → bel -p n |SF l0 = (bel |SF l0).tail ⊦
Used terms: n, l0, bel
| ⊦ isPropFO(n, l, bel) → bel -p n |SF l = (bel |SF l).tail |
| isPropFO(n, l0, bel), ¬ bel.filter(λ be. be = SF ∨ be.l = l0) ⊒ (bel -p n).filter(λ be. be = SF ∨ be.l = l0), isPropFO(n, l0, bel) → bel -p n |SF l0 = (bel |SF l0).tail ⊦ |
(bel -p n).filter(λ be. be = SF ∨ be.l = l0) = (bel.filter(λ be. be = SF ∨ be.l = l0)).tail, isPropFO(n, l0, bel), ¬ bel.filter(λ be. be = SF ∨ be.l = l0) ⊒ (bel -p n).filter(λ be. be = SF ∨ be.l = l0) ⊦
Used simplifier rules: B-restrict-SF-l: ⊦ bel |SF l = bel.filter(λ be. be = SF ∨ be.l = l);
| (bel -p n).filter(λ be. be = SF ∨ be.l = l0) = (bel.filter(λ be. be = SF ∨ be.l = l0)).tail, isPropFO(n, l0, bel), ¬ bel.filter(λ be. be = SF ∨ be.l = l0) ⊒ (bel -p n).filter(λ be. be = SF ∨ be.l = l0) ⊦ |
(bel -p n).filter(λ be. be = SF ∨ be.l = l0) = bel0, bel.filter(λ be. be = SF ∨ be.l = l0) = be0 + bel0, bel.filter(λ be. be = SF ∨ be.l = l0) ≠ [], isPropFO(n, l0, bel), ¬ bel.filter(λ be. be = SF ∨ be.l = l0) ⊒ (bel -p n).filter(λ be. be = SF ∨ be.l = l0) ⊦
Used simplifier rules: ⊦ x.filter(p) = [] → (x -p n).filter(p) = []; (s) ⊦ x ⊒ []; (s) x ≠ [] ⊦ a = x.head ∧ y = x.tail ↔ x = a + y; (elim) Used terms: bel.filter(λ be. be = SF ∨ be.l = l0), be0, bel0
| (bel -p n).filter(λ be. be = SF ∨ be.l = l0) = bel0, bel.filter(λ be. be = SF ∨ be.l = l0) = be0 + bel0, bel.filter(λ be. be = SF ∨ be.l = l0) ≠ [], isPropFO(n, l0, bel), ¬ bel.filter(λ be. be = SF ∨ be.l = l0) ⊒ (bel -p n).filter(λ be. be = SF ∨ be.l = l0) ⊦ |
bel.filter(λ be. be = SF ∨ be.l = l0) = be0 ' + (bel -p n).filter(λ be. be = SF ∨ be.l = l0), bel.filter(λ be. be = SF ∨ be.l = l0) ≠ [], isPropFO(n, l0, bel), be0 ∈ bel, ¬ bel.filter(λ be. be = SF ∨ be.l = l0) ⊒ (bel -p n).filter(λ be. be = SF ∨ be.l = l0), be0 = SF ∨ be0.l = l0 ⊦
Used simplifier rules: ⊦ a ∈ x.filter(p) ↔ a ∈ x ∧ p(a); (s) a: ⊦ (x + y) + z = x + y + z; from specification list in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ a + x = a ' + x; (s)
| bel.filter(λ be. be = SF ∨ be.l = l0) = be0 ' + (bel -p n).filter(λ be. be = SF ∨ be.l = l0), bel.filter(λ be. be = SF ∨ be.l = l0) ≠ [], isPropFO(n, l0, bel), be0 ∈ bel, ¬ bel.filter(λ be. be = SF ∨ be.l = l0) ⊒ (bel -p n).filter(λ be. be = SF ∨ be.l = l0), be0 = SF ∨ be0.l = l0 ⊦ |
Used simplifier rules: ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a ' ≠ []; (s) ⊦ y + x ⊒ x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list
| l ≠ l0, isPropFO(n, l, bel), ¬ bel.filter(λ be. be = SF ∨ be.l = l0) ⊒ (bel -p n).filter(λ be. be = SF ∨ be.l = l0) ⊦ |
⊦ n < # x ∧ ¬ p(x[n]) → (x -p n).filter(p) = x.filter(p)
l ≠ l0, isPropFO(n, l, bel), ¬ bel.filter(λ be. be = SF ∨ be.l = l0) ⊒ (bel -p n).filter(λ be. be = SF ∨ be.l = l0) ⊦ n < # bel ∧ ¬(bel[n] = SF ∨ bel[n].l = l0)
Used simplifier rules: ⊦ x ⊒ x; (s) Used terms: bel, n, λ be. be = SF ∨ be.l = l0
| ⊦ n < # x ∧ ¬ p(x[n]) → (x -p n).filter(p) = x.filter(p) |
| l ≠ l0, isPropFO(n, l, bel), ¬ bel.filter(λ be. be = SF ∨ be.l = l0) ⊒ (bel -p n).filter(λ be. be = SF ∨ be.l = l0) ⊦ n < # bel ∧ ¬(bel[n] = SF ∨ bel[n].l = l0) |
bel ≠ [], l ≠ l0, n < # bel, isPropFO(n, l, bel), ¬ bel.filter(λ be. be = SF ∨ be.l = l0) ⊒ (bel -p n).filter(λ be. be = SF ∨ be.l = l0) ⊦ bel[n].l ≠ l0 ∧ bel[n] ≠ SF
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ x ⊒ x; (s) ⊦ # x ≤ n → x -p n = x; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss)
| bel ≠ [], l ≠ l0, n < # bel, isPropFO(n, l, bel), ¬ bel.filter(λ be. be = SF ∨ be.l = l0) ⊒ (bel -p n).filter(λ be. be = SF ∨ be.l = l0) ⊦ bel[n].l ≠ l0 ∧ bel[n] ≠ SF |
⊦ isPropFO(n, l, bel) ↔ n < # bel ∧ bel[n] = FO(l) ∧ (∀ m. m < n → bel[m] ≠ SF ∧ (bel[m].W? ∨ bel[m].FO? → bel[m].l ≠ l))
Used simplifier rules: ⊦ FO(l).l = l; (s) ⊦ FO(l) ≠ SF; (s) Used terms: n, l, bel
| ⊦ isPropFO(n, l, bel) ↔ n < # bel ∧ bel[n] = FO(l) ∧ (∀ m. m < n → bel[m] ≠ SF ∧ (bel[m].W? ∨ bel[m].FO? → bel[m].l ≠ l)) |
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.