| ⊦ traceω(IOAut(start, step, ext))(ef) ↔ (∃ sf, af. ⌜ef⌝ = ext !(⌜af⌝ ) ∧ execω(IOAut(start, step, ext))(sf, af)) |
⊦ traceω(IOAut(start, step, ext))(ef) ↔ (∃ sf, af. ⌜ef⌝ = ext !(⌜af⌝ ) ∧ fragω(IOAut(start, step, ext))(sf, af) ∧ start(sf(0)))
Used simplifier rules: infexec: ⊦ execω(ioa)(sf, af) ↔ fragω(ioa)(sf, af) ∧ ioa.start(sf(0)); ⊦ IOAut(start, step, ext).start = start; (s)
| ⊦ traceω(IOAut(start, step, ext))(ef) ↔ (∃ sf, af. ⌜ef⌝ = ext !(⌜af⌝ ) ∧ fragω(IOAut(start, step, ext))(sf, af) ∧ start(sf(0))) |
⊦ trace(ioa)(⌜ef⌝ ) ↔ traceω(ioa)(ef)
⊦ trace(IOAut(start, step, ext))(⌜ef⌝ ) ↔ (∃ sf, af. ⌜ef⌝ = ext !(⌜af⌝ ) ∧ fragω(IOAut(start, step, ext))(sf, af) ∧ start(sf(0)))
Used terms: IOAut(start, step, ext), ef
| ⊦ trace(ioa)(⌜ef⌝ ) ↔ traceω(ioa)(ef) |
| ⊦ trace(IOAut(start, step, ext))(⌜ef⌝ ) ↔ (∃ sf, af. ⌜ef⌝ = ext !(⌜af⌝ ) ∧ fragω(IOAut(start, step, ext))(sf, af) ∧ start(sf(0))) |
⊦ trace(IOAut(start, step, ext))(β) ↔ (∃ σ, α. β = ext !(α) ∧ exec(IOAut(start, step, ext))(σ, α))
⊦ (∃ σ, α. ⌜ef⌝ = ext !(α) ∧ exec(IOAut(start, step, ext))(σ, α)) ↔ (∃ sf, af. ⌜ef⌝ = ext !(⌜af⌝ ) ∧ fragω(IOAut(start, step, ext))(sf, af) ∧ start(sf(0)))
Used terms: start, step, ext, ⌜ef⌝
| ⊦ trace(IOAut(start, step, ext))(β) ↔ (∃ σ, α. β = ext !(α) ∧ exec(IOAut(start, step, ext))(σ, α)) |
| ⊦ (∃ σ, α. ⌜ef⌝ = ext !(α) ∧ exec(IOAut(start, step, ext))(σ, α)) ↔ (∃ sf, af. ⌜ef⌝ = ext !(⌜af⌝ ) ∧ fragω(IOAut(start, step, ext))(sf, af) ∧ start(sf(0))) |
⊦ (∃ σ, α. ⌜ef⌝ = ext !(α) ∧ frag(IOAut(start, step, ext))(σ, α) ∧ start(σ[0])) ↔ (∃ sf, af. ⌜ef⌝ = ext !(⌜af⌝ ) ∧ fragω(IOAut(start, step, ext))(sf, af) ∧ start(sf(0)))
Used simplifier rules: exec: ⊦ exec(ioa)(σ, α) ↔ frag(ioa)(σ, α) ∧ ioa.start(σ[0]); ⊦ IOAut(start, step, ext).start = start; (s)
| ⊦ (∃ σ, α. ⌜ef⌝ = ext !(α) ∧ frag(IOAut(start, step, ext))(σ, α) ∧ start(σ[0])) ↔ (∃ sf, af. ⌜ef⌝ = ext !(⌜af⌝ ) ∧ fragω(IOAut(start, step, ext))(sf, af) ∧ start(sf(0))) |
∃ σ, α. ⌜ef⌝ = ext !(α) ∧ frag(IOAut(start, step, ext))(σ, α) ∧ start(σ[0]) ⊦ ∃ sf, af. ⌜ef⌝ = ext !(⌜af⌝ ) ∧ fragω(IOAut(start, step, ext))(sf, af) ∧ start(sf(0))
∃ sf, af. ⌜ef⌝ = ext !(⌜af⌝ ) ∧ fragω(IOAut(start, step, ext))(sf, af) ∧ start(sf(0)) ⊦ ∃ σ, α. ⌜ef⌝ = ext !(α) ∧ frag(IOAut(start, step, ext))(σ, α) ∧ start(σ[0])
| ∃ σ, α. ⌜ef⌝ = ext !(α) ∧ frag(IOAut(start, step, ext))(σ, α) ∧ start(σ[0]) ⊦ ∃ sf, af. ⌜ef⌝ = ext !(⌜af⌝ ) ∧ fragω(IOAut(start, step, ext))(sf, af) ∧ start(sf(0)) |
⌜ef⌝ = ext !(α), frag(IOAut(start, step, ext))(σ, α), start(σ[0]) ⊦ ∃ sf, af. ⌜ef⌝ = ext !(⌜af⌝ ) ∧ fragω(IOAut(start, step, ext))(sf, af) ∧ start(sf(0))
| ⌜ef⌝ = ext !(α), frag(IOAut(start, step, ext))(σ, α), start(σ[0]) ⊦ ∃ sf, af. ⌜ef⌝ = ext !(⌜af⌝ ) ∧ fragω(IOAut(start, step, ext))(sf, af) ∧ start(sf(0)) |
α = ⌜af0⌝ , ⌜ef⌝ = ext !(α), frag(IOAut(start, step, ext))(σ, α), start(σ[0]) ⊦ ∃ sf, af. ⌜ef⌝ = ext !(⌜af⌝ ) ∧ fragω(IOAut(start, step, ext))(sf, af) ∧ start(sf(0))
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;; ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s) ⊦ ⌜x⌝ ≠ ⌜nf⌝ ; (s)
| α = ⌜af0⌝ , ⌜ef⌝ = ext !(α), frag(IOAut(start, step, ext))(σ, α), start(σ[0]) ⊦ ∃ sf, af. ⌜ef⌝ = ext !(⌜af⌝ ) ∧ fragω(IOAut(start, step, ext))(sf, af) ∧ start(sf(0)) |
⌜ef⌝ = ext !(⌜af0⌝ ), fragω(IOAut(start, step, ext))(sf, af0), start(sf(0)) ⊦ ∃ sf, af. ⌜ef⌝ = ext !(⌜af⌝ ) ∧ fragω(IOAut(start, step, ext))(sf, af) ∧ start(sf(0))
Used simplifier rules: frag-inf-al: ⊦ frag(ioa)(σ, ⌜af⌝ ) ↔ fragω(ioa)(σ.f, af) ∧ ¬ finp(σ); ⊦ ⌜nf⌝ [n] = nf(n); (s) ⊦ ⌜nf⌝ .f = nf; (s) ⊦ finp(σ) ↔ ¬(∃ nf. ⌜nf⌝ = σ); (ss)
| ⌜ef⌝ = ext !(⌜af0⌝ ), fragω(IOAut(start, step, ext))(sf, af0), start(sf(0)) ⊦ ∃ sf, af. ⌜ef⌝ = ext !(⌜af⌝ ) ∧ fragω(IOAut(start, step, ext))(sf, af) ∧ start(sf(0)) |
Used terms: sf, af0
| ∃ sf, af. ⌜ef⌝ = ext !(⌜af⌝ ) ∧ fragω(IOAut(start, step, ext))(sf, af) ∧ start(sf(0)) ⊦ ∃ σ, α. ⌜ef⌝ = ext !(α) ∧ frag(IOAut(start, step, ext))(σ, α) ∧ start(σ[0]) |
⌜ef⌝ = ext !(⌜af⌝ ), fragω(IOAut(start, step, ext))(sf, af), start(sf(0)) ⊦ ∃ σ, α. ⌜ef⌝ = ext !(α) ∧ frag(IOAut(start, step, ext))(σ, α) ∧ start(σ[0])
| ⌜ef⌝ = ext !(⌜af⌝ ), fragω(IOAut(start, step, ext))(sf, af), start(sf(0)) ⊦ ∃ σ, α. ⌜ef⌝ = ext !(α) ∧ frag(IOAut(start, step, ext))(σ, α) ∧ start(σ[0]) |
Used simplifier rules: fragomega-def: ⊦ frag(ioa)(⌜sf⌝ , ⌜af⌝ ) ↔ fragω(ioa)(sf, af); ⊦ ⌜nf⌝ [n] = nf(n); (s) Used terms: ⌜sf⌝ , ⌜af⌝
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.