| ⊦ fragω(IOAut(start, step, ext))(sf, a ' + af) ↔ step(sf(0), a, sf(1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af) |
¬(fragω(IOAut(start, step, ext))(sf, a ' + af) ↔ step(sf(0), a, sf(1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af)) ⊦
| ¬(fragω(IOAut(start, step, ext))(sf, a ' + af) ↔ step(sf(0), a, sf(1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af)) ⊦ |
⊦ fragω(IOAut(start, step, ext))(s ' + sf, a ' + af) ↔ step(s, a, sf(0)) ∧ fragω(IOAut(start, step, ext))(sf, af)
fragω(IOAut(start, step, ext))(sf(0) ' + (λ n. sf(n + 1)), a ' + af) ↔ step(sf(0), a, sf(0 + 1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af), ¬(fragω(IOAut(start, step, ext))(sf, a ' + af) ↔ step(sf(0), a, sf(1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af)) ⊦
Used terms: λ n. sf(n + 1), ext, sf(0), a, step, af, start
| ⊦ fragω(IOAut(start, step, ext))(s ' + sf, a ' + af) ↔ step(s, a, sf(0)) ∧ fragω(IOAut(start, step, ext))(sf, af) |
| fragω(IOAut(start, step, ext))(sf(0) ' + (λ n. sf(n + 1)), a ' + af) ↔ step(sf(0), a, sf(0 + 1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af), ¬(fragω(IOAut(start, step, ext))(sf, a ' + af) ↔ step(sf(0), a, sf(1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af)) ⊦ |
fragω(IOAut(start, step, ext))(sf(0) ' + (λ n. sf(n + 1)), a ' + af) ↔ step(sf(0), a, sf(1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af), ¬(fragω(IOAut(start, step, ext))(sf, a ' + af) ↔ step(sf(0), a, sf(1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af)) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic
| fragω(IOAut(start, step, ext))(sf(0) ' + (λ n. sf(n + 1)), a ' + af) ↔ step(sf(0), a, sf(1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af), ¬(fragω(IOAut(start, step, ext))(sf, a ' + af) ↔ step(sf(0), a, sf(1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af)) ⊦ |
fragω(IOAut(start, step, ext))(sf(0) ' + (λ n. sf(n + 1)), a ' + af) ↔ step(sf(0), a, sf(1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af), sf(0) ' + (λ n. sf(n + 1)) ≠ sf, ¬(fragω(IOAut(start, step, ext))(sf, a ' + af) ↔ step(sf(0), a, sf(1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af)) ⊦
Used formulas: sf(0) ' + (λ n. sf(n + 1)) = sf
| fragω(IOAut(start, step, ext))(sf(0) ' + (λ n. sf(n + 1)), a ' + af) ↔ step(sf(0), a, sf(1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af), sf(0) ' + (λ n. sf(n + 1)) ≠ sf, ¬(fragω(IOAut(start, step, ext))(sf, a ' + af) ↔ step(sf(0), a, sf(1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af)) ⊦ |
⊦ x + nf = (λ n. (n < # x ⊃ x[n];nf(n - # x)))
fragω(IOAut(start, step, ext))(λ n. (n < # sf(0) ' ⊃ sf(0) '[n];sf((n - # sf(0) ') + 1)), a ' + af) ↔ step(sf(0), a, sf(1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af), ¬(fragω(IOAut(start, step, ext))(sf, a ' + af) ↔ step(sf(0), a, sf(1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af)), (λ n. (n < # sf(0) ' ⊃ sf(0) '[n];sf((n - # sf(0) ') + 1))) ≠ sf ⊦
Used terms: sf(0) ', λ n. sf(n + 1)
| ⊦ x + nf = (λ n. (n < # x ⊃ x[n];nf(n - # x))) |
| fragω(IOAut(start, step, ext))(λ n. (n < # sf(0) ' ⊃ sf(0) '[n];sf((n - # sf(0) ') + 1)), a ' + af) ↔ step(sf(0), a, sf(1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af), ¬(fragω(IOAut(start, step, ext))(sf, a ' + af) ↔ step(sf(0), a, sf(1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af)), (λ n. (n < # sf(0) ' ⊃ sf(0) '[n];sf((n - # sf(0) ') + 1))) ≠ sf ⊦ |
fragω(IOAut(start, step, ext))(λ n. (n = 0 ⊃ sf(0);sf((n - 1) + 1)), a ' + af) ↔ step(sf(0), a, sf(1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af), (n = 0 ⊃ sf(0);sf((n - 1) + 1)) ≠ sf(n), ¬(fragω(IOAut(start, step, ext))(sf, a ' + af) ↔ step(sf(0), a, sf(1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af)) ⊦
Used simplifier rules: ⊦ # a ' = 0 +1; (s) ⊦ a '[0] = a; (s) ⊦ m < 1 ↔ m = 0; (s)
| fragω(IOAut(start, step, ext))(λ n. (n = 0 ⊃ sf(0);sf((n - 1) + 1)), a ' + af) ↔ step(sf(0), a, sf(1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af), (n = 0 ⊃ sf(0);sf((n - 1) + 1)) ≠ sf(n), ¬(fragω(IOAut(start, step, ext))(sf, a ' + af) ↔ step(sf(0), a, sf(1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af)) ⊦ |
fragω(IOAut(start, step, ext))(λ n. (n = 0 ⊃ sf(0);sf((n - 1) + 1)), a ' + af) ↔ step(sf(0), a, sf(1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af), ¬(fragω(IOAut(start, step, ext))(sf, a ' + af) ↔ step(sf(0), a, sf(1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af)), n ≠ 0, sf((n - 1) + 1) ≠ sf(n) ⊦
| fragω(IOAut(start, step, ext))(λ n. (n = 0 ⊃ sf(0);sf((n - 1) + 1)), a ' + af) ↔ step(sf(0), a, sf(1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af), ¬(fragω(IOAut(start, step, ext))(sf, a ' + af) ↔ step(sf(0), a, sf(1)) ∧ fragω(IOAut(start, step, ext))(λ n. sf(n + 1), af)), n ≠ 0, sf((n - 1) + 1) ≠ sf(n) ⊦ |
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n, m
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.