| ⊦ el ≠ [] → (ext !(⌜af⌝ ) = ⌜el⌝ + β ↔ (∃ al, af0. ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ ∧ al ≠ [] ∧ ext !(al) = el ∧ Some(el.last) = ext(al.last) ∧ ext !(⌜af0⌝ ) = β)) |
el ≠ [] ⊦ ext !(⌜af⌝ ) = ⌜el⌝ + β ↔ (∃ al, af0. ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ ∧ al ≠ [] ∧ ext !(al) = el ∧ Some(el.last) = ext(al.last) ∧ ext !(⌜af0⌝ ) = β)
| el ≠ [] ⊦ ext !(⌜af⌝ ) = ⌜el⌝ + β ↔ (∃ al, af0. ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ ∧ al ≠ [] ∧ ext !(al) = el ∧ Some(el.last) = ext(al.last) ∧ ext !(⌜af0⌝ ) = β) |
⊦ el ≠ [] → (ext !(α) = ⌜el⌝ + β ↔ (∃ al, α0. α = ⌜al⌝ + α0 ∧ al ≠ [] ∧ ext !(⌜al⌝ ) = ⌜el⌝ ∧ Some(el.last) = ext(al.last) ∧ ext !(α0) = β))
el ≠ [], el ≠ [] → (ext !(⌜af⌝ ) = ⌜el⌝ + β ↔ (∃ al, α0. ⌜af⌝ = ⌜al⌝ + α0 ∧ al ≠ [] ∧ ext !(⌜al⌝ ) = ⌜el⌝ ∧ Some(el.last) = ext(al.last) ∧ ext !(α0) = β)) ⊦ ext !(⌜af⌝ ) = ⌜el⌝ + β ↔ (∃ al, af0. ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ ∧ al ≠ [] ∧ ext !(al) = el ∧ Some(el.last) = ext(al.last) ∧ ext !(⌜af0⌝ ) = β)
Used terms: el, ext, ⌜af⌝ , β
| ⊦ el ≠ [] → (ext !(α) = ⌜el⌝ + β ↔ (∃ al, α0. α = ⌜al⌝ + α0 ∧ al ≠ [] ∧ ext !(⌜al⌝ ) = ⌜el⌝ ∧ Some(el.last) = ext(al.last) ∧ ext !(α0) = β)) |
| el ≠ [], el ≠ [] → (ext !(⌜af⌝ ) = ⌜el⌝ + β ↔ (∃ al, α0. ⌜af⌝ = ⌜al⌝ + α0 ∧ al ≠ [] ∧ ext !(⌜al⌝ ) = ⌜el⌝ ∧ Some(el.last) = ext(al.last) ∧ ext !(α0) = β)) ⊦ ext !(⌜af⌝ ) = ⌜el⌝ + β ↔ (∃ al, af0. ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ ∧ al ≠ [] ∧ ext !(al) = el ∧ Some(el.last) = ext(al.last) ∧ ext !(⌜af0⌝ ) = β) |
el ≠ [], ext !(⌜af⌝ ) = ⌜el⌝ + β ↔ (∃ al, α0. ⌜af⌝ = ⌜al⌝ + α0 ∧ al ≠ [] ∧ ext !(al) = el ∧ Some(ext !(al).last) = ext(al.last) ∧ ext !(α0) = β) ⊦ ext !(⌜af⌝ ) = ⌜el⌝ + β ↔ (∃ al, af0. ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ ∧ al ≠ [] ∧ ext !(al) = el ∧ Some(ext !(al).last) = ext(al.last) ∧ ext !(⌜af0⌝ ) = β)
Used simplifier rules: finremtau-def: ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; ⊦ ⌜x⌝ = ⌜x0⌝ ↔ x = x0; (s)
| el ≠ [], ext !(⌜af⌝ ) = ⌜el⌝ + β ↔ (∃ al, α0. ⌜af⌝ = ⌜al⌝ + α0 ∧ al ≠ [] ∧ ext !(al) = el ∧ Some(ext !(al).last) = ext(al.last) ∧ ext !(α0) = β) ⊦ ext !(⌜af⌝ ) = ⌜el⌝ + β ↔ (∃ al, af0. ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ ∧ al ≠ [] ∧ ext !(al) = el ∧ Some(ext !(al).last) = ext(al.last) ∧ ext !(⌜af0⌝ ) = β) |
ext !(⌜af⌝ ) = ⌜el⌝ + β, el ≠ [], ext !(⌜af⌝ ) = ⌜el⌝ + β ↔ (∃ al, α0. ⌜af⌝ = ⌜al⌝ + α0 ∧ al ≠ [] ∧ ext !(al) = el ∧ Some(ext !(al).last) = ext(al.last) ∧ ext !(α0) = β) ⊦ ∃ al, af0. ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ ∧ al ≠ [] ∧ ext !(al) = el ∧ Some(ext !(al).last) = ext(al.last) ∧ ext !(⌜af0⌝ ) = β
ext !(⌜af⌝ ) ≠ ⌜el⌝ + β, el ≠ [], ext !(⌜af⌝ ) = ⌜el⌝ + β ↔ (∃ al, α0. ⌜af⌝ = ⌜al⌝ + α0 ∧ al ≠ [] ∧ ext !(al) = el ∧ Some(ext !(al).last) = ext(al.last) ∧ ext !(α0) = β), ∃ al, af0. ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ ∧ al ≠ [] ∧ ext !(al) = el ∧ Some(ext !(al).last) = ext(al.last) ∧ ext !(⌜af0⌝ ) = β ⊦
| ext !(⌜af⌝ ) = ⌜el⌝ + β, el ≠ [], ext !(⌜af⌝ ) = ⌜el⌝ + β ↔ (∃ al, α0. ⌜af⌝ = ⌜al⌝ + α0 ∧ al ≠ [] ∧ ext !(al) = el ∧ Some(ext !(al).last) = ext(al.last) ∧ ext !(α0) = β) ⊦ ∃ al, af0. ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ ∧ al ≠ [] ∧ ext !(al) = el ∧ Some(ext !(al).last) = ext(al.last) ∧ ext !(⌜af0⌝ ) = β |
ext !(⌜af⌝ ) = ⌜ext !(al)⌝ + ext !(α0), Some(ext !(al).last) = ext(al.last), ⌜af⌝ = ⌜al⌝ + α0, ext !(al) ≠ [], al ≠ [] ⊦ ∃ al0, af0. ⌜af⌝ = ⌜al0⌝ + ⌜af0⌝ ∧ al0 ≠ [] ∧ ext !(al0) = ext !(al) ∧ Some(ext !(al0).last) = ext(al0.last) ∧ ext !(⌜af0⌝ ) = ext !(α0)
| ext !(⌜af⌝ ) = ⌜ext !(al)⌝ + ext !(α0), Some(ext !(al).last) = ext(al.last), ⌜af⌝ = ⌜al⌝ + α0, ext !(al) ≠ [], al ≠ [] ⊦ ∃ al0, af0. ⌜af⌝ = ⌜al0⌝ + ⌜af0⌝ ∧ al0 ≠ [] ∧ ext !(al0) = ext !(al) ∧ Some(ext !(al0).last) = ext(al0.last) ∧ ext !(⌜af0⌝ ) = ext !(α0) |
ext !(⌜af⌝ ) = ⌜ext !(al)⌝ + ext !(α0), α0 = ⌜af1⌝ , ⌜af⌝ = ⌜al⌝ + α0, Some(ext !(al).last) = ext(al.last), ext !(al) ≠ [], al ≠ [] ⊦ ∃ al0, af0. ⌜af⌝ = ⌜al0⌝ + ⌜af0⌝ ∧ al0 ≠ [] ∧ ext !(al0) = ext !(al) ∧ Some(ext !(al0).last) = ext(al0.last) ∧ ext !(⌜af0⌝ ) = ext !(α0)
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;; ⊦ σ0 + ⌜x⌝ = ⌜nf0⌝ ↔ σ0 = ⌜nf0⌝ ; (s) ⊦ ⌜x⌝ ≠ ⌜nf⌝ ; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream
| ext !(⌜af⌝ ) = ⌜ext !(al)⌝ + ext !(α0), α0 = ⌜af1⌝ , ⌜af⌝ = ⌜al⌝ + α0, Some(ext !(al).last) = ext(al.last), ext !(al) ≠ [], al ≠ [] ⊦ ∃ al0, af0. ⌜af⌝ = ⌜al0⌝ + ⌜af0⌝ ∧ al0 ≠ [] ∧ ext !(al0) = ext !(al) ∧ Some(ext !(al0).last) = ext(al0.last) ∧ ext !(⌜af0⌝ ) = ext !(α0) |
ext !(⌜af⌝ ) = ⌜ext !(al)⌝ + ext !(⌜af1⌝ ), Some(ext !(al).last) = ext(al.last), ⌜af⌝ = ⌜al⌝ + ⌜af1⌝ , ext !(al) ≠ [], al ≠ [] ⊦ ∃ al0, af0. ⌜af⌝ = ⌜al0⌝ + ⌜af0⌝ ∧ al0 ≠ [] ∧ ext !(al0) = ext !(al) ∧ Some(ext !(al0).last) = ext(al0.last) ∧ ext !(⌜af0⌝ ) = ext !(⌜af1⌝ )
| ext !(⌜af⌝ ) = ⌜ext !(al)⌝ + ext !(⌜af1⌝ ), Some(ext !(al).last) = ext(al.last), ⌜af⌝ = ⌜al⌝ + ⌜af1⌝ , ext !(al) ≠ [], al ≠ [] ⊦ ∃ al0, af0. ⌜af⌝ = ⌜al0⌝ + ⌜af0⌝ ∧ al0 ≠ [] ∧ ext !(al0) = ext !(al) ∧ Some(ext !(al0).last) = ext(al0.last) ∧ ext !(⌜af0⌝ ) = ext !(⌜af1⌝ ) |
Used terms: al, af1
| ext !(⌜af⌝ ) ≠ ⌜el⌝ + β, el ≠ [], ext !(⌜af⌝ ) = ⌜el⌝ + β ↔ (∃ al, α0. ⌜af⌝ = ⌜al⌝ + α0 ∧ al ≠ [] ∧ ext !(al) = el ∧ Some(ext !(al).last) = ext(al.last) ∧ ext !(α0) = β), ∃ al, af0. ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ ∧ al ≠ [] ∧ ext !(al) = el ∧ Some(ext !(al).last) = ext(al.last) ∧ ext !(⌜af0⌝ ) = β ⊦ |
⌜af⌝ = ⌜al⌝ + ⌜af0⌝ , Some(ext !(al).last) = ext(al.last), ext !(⌜af⌝ ) ≠ ⌜ext !(al)⌝ + ext !(⌜af0⌝ ), ext !(al) ≠ [], al ≠ [] ⊦ ∃ al0, α0. ⌜af⌝ = ⌜al0⌝ + α0 ∧ al0 ≠ [] ∧ ext !(al0) = ext !(al) ∧ Some(ext !(al0).last) = ext(al0.last) ∧ ext !(α0) = ext !(⌜af0⌝ )
| ⌜af⌝ = ⌜al⌝ + ⌜af0⌝ , Some(ext !(al).last) = ext(al.last), ext !(⌜af⌝ ) ≠ ⌜ext !(al)⌝ + ext !(⌜af0⌝ ), ext !(al) ≠ [], al ≠ [] ⊦ ∃ al0, α0. ⌜af⌝ = ⌜al0⌝ + α0 ∧ al0 ≠ [] ∧ ext !(al0) = ext !(al) ∧ Some(ext !(al0).last) = ext(al0.last) ∧ ext !(α0) = ext !(⌜af0⌝ ) |
Used terms: al, ⌜af0⌝
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.