| ⊦ isPropFO(n, l, bel) → FO(t) ' + (bel.FOWs(t, l)).tail = bel.FOWs(t, l) |
FO(t) ' + (bel.FOWs(t, l)).tail ≠ bel.FOWs(t, l), isPropFO(n, l, bel) ⊦
| FO(t) ' + (bel.FOWs(t, l)).tail ≠ bel.FOWs(t, l), isPropFO(n, l, bel) ⊦ |
FO(t) ' + ((be + bel0).FOWs(t, l)).tail ≠ (be + bel0).FOWs(t, l), isPropFO(n, l, be + bel0), ∀ t, l, n. ¬(FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l) ∧ isPropFO(n, l, bel0)) ⊦
Used simplifier rules: FOWs-base: ⊦ [].FOWs(t, l) = []; isPropFO-empty: ⊦ ¬ isPropFO(n, l, []); List('a) freely generated by [], +;; ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a ' ≠ []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list
| FO(t) ' + ((be + bel0).FOWs(t, l)).tail ≠ (be + bel0).FOWs(t, l), isPropFO(n, l, be + bel0), ∀ t, l, n. ¬(FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l) ∧ isPropFO(n, l, bel0)) ⊦ |
FO(t) ' + (be '.FOWs(t, l) + bel0.FOWs(t, l)).tail ≠ be '.FOWs(t, l) + bel0.FOWs(t, l), isPropFO(n, l, be ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦
Used simplifier rules: FOWs-append: ⊦ (bel0 + bel1).FOWs(t, l) = bel0.FOWs(t, l) + bel1.FOWs(t, l); ⊦ a + x = a ' + x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list
| FO(t) ' + (be '.FOWs(t, l) + bel0.FOWs(t, l)).tail ≠ be '.FOWs(t, l) + bel0.FOWs(t, l), isPropFO(n, l, be ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦ |
be = W(l1, v), FO(t) ' + (be '.FOWs(t, l) + bel0.FOWs(t, l)).tail ≠ be '.FOWs(t, l) + bel0.FOWs(t, l), isPropFO(n, l, be ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦
be = FO(l1), FO(t) ' + (be '.FOWs(t, l) + bel0.FOWs(t, l)).tail ≠ be '.FOWs(t, l) + bel0.FOWs(t, l), isPropFO(n, l, be ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦
Used simplifier rules: FOWs-one-SF: ⊦ SF '.FOWs(t, l) = []; isPropFO-leading-SF: ⊦ ¬ isPropFO(n, l, SF ' + bel); Bevent freely generated by SF, W, FO;; ⊦ [] + x = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list
| be = W(l1, v), FO(t) ' + (be '.FOWs(t, l) + bel0.FOWs(t, l)).tail ≠ be '.FOWs(t, l) + bel0.FOWs(t, l), isPropFO(n, l, be ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦ |
FO(t) ' + ((l = l1 ⊃ W(v, t) ';[]) + bel0.FOWs(t, l)).tail ≠ (l = l1 ⊃ W(v, t) ';[]) + bel0.FOWs(t, l), isPropFO(n, l, W(l1, v) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦
Used simplifier rules: FOWs-one-W: ⊦ W(l0, v) '.FOWs(t, l) = (l = l0 ⊃ W(v, t) ';[]);
| FO(t) ' + ((l = l1 ⊃ W(v, t) ';[]) + bel0.FOWs(t, l)).tail ≠ (l = l1 ⊃ W(v, t) ';[]) + bel0.FOWs(t, l), isPropFO(n, l, W(l1, v) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦ |
FO(t) ' + ([] + bel0.FOWs(t, l)).tail ≠ (l = l1 ⊃ W(v, t) ';[]) + bel0.FOWs(t, l), l ≠ l1, isPropFO(n, l, W(l1, v) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦
Used simplifier rules: isPropFO-not-leading-W: ⊦ ¬ isPropFO(n, l, W(l, v) ' + bel); ⊦ (a ' + x).tail = x; (s) ⊦ # y = # y0 → (x + y = z + y0 ↔ x = z ∧ y = y0); (ws) ⊦ a ' = a0 ' ↔ a = a0; (s) ⊦ FO(tid) ≠ W(v, tid0); (s) a: ⊦ (x + y) + z = x + y + z; from specification list
| FO(t) ' + ([] + bel0.FOWs(t, l)).tail ≠ (l = l1 ⊃ W(v, t) ';[]) + bel0.FOWs(t, l), l ≠ l1, isPropFO(n, l, W(l1, v) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦ |
FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), l ≠ l1, isPropFO(n, l, W(l1, v) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s)
| FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), l ≠ l1, isPropFO(n, l, W(l1, v) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦ |
n = 0, FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), l ≠ l1, isPropFO(n, l, W(l1, v) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦
n = n1 +1, FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), l ≠ l1, isPropFO(n, l, W(l1, v) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦
Used simplifier rules: Nat freely generated by 0, +1;;
| n = 0, FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), l ≠ l1, isPropFO(n, l, W(l1, v) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦ |
FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), l ≠ l1, isPropFO(0, l, W(l1, v) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦
| FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), l ≠ l1, isPropFO(0, l, W(l1, v) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦ |
⊦ 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: ⊦ (a ' + x)[0] = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ W(l, v) ≠ FO(l0); (s) Used terms: 0, l, W(l1, v) ' + bel0
| ⊦ 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)) |
| n = n1 +1, FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), l ≠ l1, isPropFO(n, l, W(l1, v) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦ |
FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), l ≠ l1, isPropFO(n1 + 1, l, W(l1, v) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦
Used simplifier rules: ⊦ m +1 = m + 1; (s)
| FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), l ≠ l1, isPropFO(n1 + 1, l, W(l1, v) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦ |
⊦ be.l ≠ l ∧ be ≠ SF → (isPropFO(n + 1, l, be ' + bel) ↔ isPropFO(n, l, bel))
FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), W(l1, v).l ≠ l, W(l1, v) ≠ SF, l ≠ l1, isPropFO(n1, l, bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦
Used simplifier rules: ⊦ W(l, v).l = l; (s) ⊦ W(l, v) ≠ SF; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: l, n1, W(l1, v), bel0
| ⊦ be.l ≠ l ∧ be ≠ SF → (isPropFO(n + 1, l, be ' + bel) ↔ isPropFO(n, l, bel)) |
| FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), W(l1, v).l ≠ l, W(l1, v) ≠ SF, l ≠ l1, isPropFO(n1, l, bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦ |
FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), l1 ≠ l, isPropFO(n1, l, bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦
Used simplifier rules: ⊦ W(l, v) ≠ SF; (s) ⊦ W(l, v).l = l; (s)
| FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), l1 ≠ l, isPropFO(n1, l, bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦ |
Used terms: t, l, n1
| be = FO(l1), FO(t) ' + (be '.FOWs(t, l) + bel0.FOWs(t, l)).tail ≠ be '.FOWs(t, l) + bel0.FOWs(t, l), isPropFO(n, l, be ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦ |
FO(t) ' + ((l = l1 ⊃ FO(t) ';[]) + bel0.FOWs(t, l)).tail ≠ (l = l1 ⊃ FO(t) ';[]) + bel0.FOWs(t, l), isPropFO(n, l, FO(l1) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦
Used simplifier rules: FOWs-one-FO: ⊦ FO(l0) '.FOWs(t, l) = (l = l0 ⊃ FO(t) ';[]);
| FO(t) ' + ((l = l1 ⊃ FO(t) ';[]) + bel0.FOWs(t, l)).tail ≠ (l = l1 ⊃ FO(t) ';[]) + bel0.FOWs(t, l), isPropFO(n, l, FO(l1) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦ |
FO(t) ' + ((l = l1 ⊃ FO(t) ';[]) + bel0.FOWs(t, l)).tail ≠ (l = l1 ⊃ FO(t) ';[]) + bel0.FOWs(t, l), l ≠ l1, isPropFO(n, l, FO(l1) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦
Used simplifier rules: ⊦ (a ' + x).tail = x; (s) ⊦ # x = # z → (x + y = z + y0 ↔ x = z ∧ y = y0); (ws) a: ⊦ (x + y) + z = x + y + z; from specification list Used formulas: l = l1
| FO(t) ' + ((l = l1 ⊃ FO(t) ';[]) + bel0.FOWs(t, l)).tail ≠ (l = l1 ⊃ FO(t) ';[]) + bel0.FOWs(t, l), l ≠ l1, isPropFO(n, l, FO(l1) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦ |
FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), l ≠ l1, isPropFO(n, l, FO(l1) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s)
| FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), l ≠ l1, isPropFO(n, l, FO(l1) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦ |
n = 0, FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), l ≠ l1, isPropFO(n, l, FO(l1) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦
n = n1 +1, FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), l ≠ l1, isPropFO(n, l, FO(l1) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦
Used simplifier rules: Nat freely generated by 0, +1;;
| n = 0, FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), l ≠ l1, isPropFO(n, l, FO(l1) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦ |
FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), l ≠ l1, isPropFO(0, l, FO(l1) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦
| FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), l ≠ l1, isPropFO(0, l, FO(l1) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦ |
⊦ 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: ⊦ (a ' + x)[0] = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ FO(l) = FO(l0) ↔ l = l0; (s) Used terms: 0, l, FO(l1) ' + bel0
| ⊦ 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)) |
| n = n1 +1, FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), l ≠ l1, isPropFO(n, l, FO(l1) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦ |
FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), l ≠ l1, isPropFO(n1 + 1, l, FO(l1) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦
Used simplifier rules: ⊦ m +1 = m + 1; (s)
| FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), l ≠ l1, isPropFO(n1 + 1, l, FO(l1) ' + bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦ |
⊦ be.l ≠ l ∧ be ≠ SF → (isPropFO(n + 1, l, be ' + bel) ↔ isPropFO(n, l, bel))
FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), FO(l1).l ≠ l, FO(l1) ≠ SF, l ≠ l1, isPropFO(n1, l, bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦
Used simplifier rules: ⊦ FO(l).l = l; (s) ⊦ FO(l) ≠ SF; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: l, n1, FO(l1), bel0
| ⊦ be.l ≠ l ∧ be ≠ SF → (isPropFO(n + 1, l, be ' + bel) ↔ isPropFO(n, l, bel)) |
| FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), FO(l1).l ≠ l, FO(l1) ≠ SF, l ≠ l1, isPropFO(n1, l, bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦ |
FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), l1 ≠ l, isPropFO(n1, l, bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦
Used simplifier rules: ⊦ FO(l) ≠ SF; (s) ⊦ FO(l).l = l; (s)
| FO(t) ' + (bel0.FOWs(t, l)).tail ≠ bel0.FOWs(t, l), l1 ≠ l, isPropFO(n1, l, bel0), ∀ t0, l0, n0. FO(t0) ' + (bel0.FOWs(t0, l0)).tail = bel0.FOWs(t0, l0) ∨ ¬ isPropFO(n0, l0, bel0) ⊦ |
Used terms: t, l, n1
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.