(def-language state-machine-language (base-types state action) (constants (tr (state action state prop)) (initial (state prop)) (accepting (state prop))))
(def-theory state-machines (language state-machine-language) (component-theories h-o-real-arithmetic))
(def-constant history Remark: This entry is multiply defined. See: [1] [2] "lambda(s_seq:[nn,state], a_seq:[nn,action], (#(s_seq(0)) implies initial(s_seq(0))) and forall(i:nn, #(s_seq(i+1)) implies tr(s_seq(i),a_seq(i),s_seq(i+1))))" (theory state-machines) (usages transportable-macete))
(def-constant state%history Remark: This entry is multiply defined. See: [1] [2] "lambda(s_seq:[nn,state], forsome(a_seq:[nn,action], history(s_seq, a_seq)))" (theory state-machines) (usages transportable-macete))
(def-constant action%history "lambda(a_seq:[nn,action], forsome(s_seq:[nn,state], history(s_seq, a_seq)))" (theory state-machines) (usages transportable-macete))
(def-constant accessible Remark: This entry is multiply defined. See: [1] [2] "lambda(s:state, forsome(s_seq:[nn,state], a_seq:[nn,action], i:nn, history(s_seq, a_seq) and s_seq(i)=s))" (theory state-machines) (usages transportable-macete))
(def-constant in%language "lambda(a_seq:[nn,action], forsome(s_seq:[nn,state], history(s_seq, a_seq) and accepting(s_seq(length(s_seq)-1))))" (theory state-machines) (usages transportable-macete)) (theory-import-transportable-rewrite-rules (name->theory 'state-machines) (list sequences))
(def-theorem histories-defined-on-state-segment "forall(s_seq:[nn,state], a_seq:[nn,action], i,j:zz, history(s_seq, a_seq) and #(s_seq(j)) and i<=j and 0<=i implies #(s_seq(i)))" (theory state-machines) (usages tranportable-macete) (proof "$theories/state-machines/proofs/histories-defined-on-state-segment.t"))
(def-theorem histories-defined-on-action-segment "forall(s_seq:[nn,state], a_seq:[nn,action], i,j:zz, history(s_seq, a_seq) and #(s_seq(j+1)) and i<=j and 0<=i implies #(a_seq(i)))" (theory state-machines) (usages tranportable-macete) (proof "$theories/state-machines/proofs/histories-defined-on-action-segment.t"))
(def-theorem histories-defined-at-0 "forall(s_seq:[nn,state], a_seq:[nn,action], j:zz, history(s_seq, a_seq) and #(s_seq(j)) implies #(s_seq(0)))" (theory state-machines) (usages ) (proof "$theories/state-machines/proofs/histories-defined-at-0.t"))
(def-theorem fundamental-sm-thm "forall(p:[state,prop], (forall(s:state, initial(s) implies p(s)) and forall(s_1, s_2:state, a:action, (p(s_1) and tr(s_1, a, s_2)) implies p(s_2))) implies forall(s:state, accessible(s) implies p(s)))" (theory state-machines) (usages ) (proof "$theories/state-machines/proofs/fundamental-sm-thm.t"))
(def-theorem initial-implies-accessible "forall(s:state, initial(s) implies accessible(s))" (theory state-machines) (usages transportable-macete) (proof "$theories/state-machines/proofs/initial-implies-accessible.t"))
(def-theorem tr-preserves-accessible "forall(s_1,s_2:state, a:action, accessible(s_1) and tr(s_1,a,s_2) implies accessible(s_2))" (theory state-machines) (usages transportable-macete) (proof "$theories/state-machines/proofs/tr-preserves-accessible.t"))
(def-theorem converse-sm-induction "forall(p:[state,prop], forall(s:state, accessible(s) implies p(s)) implies forall(s:state, initial(s) implies p(s)) and forall(s_1,s_2:state,a:action, accessible(s_1) and p(s_1) and tr(s_1,a,s_2) implies p(s_2)))" (theory state-machines) (usages ) (proof "$theories/state-machines/proofs/converse-sm-induction.t"))
(def-theorem sm-induction "forall(p:[state,prop], forall(s:state, initial(s) implies p(s)) and forall(s_1,s_2:state,a:action, accessible(s_1) and p(s_1) and tr(s_1,a,s_2) implies p(s_2)) implies forall(s:state, accessible(s) implies p(s)))" (theory state-machines) (usages ) (proof "$theories/state-machines/proofs/sm-induction.t"))
(def-theorem sm-induction-biconditional "forall(p:[state,prop], (forall(s:state, initial(s) implies p(s)) and forall(s_1, s_2:state, a:action, (accessible(s_1) and p(s_1) and tr(s_1, a, s_2)) implies p(s_2))) iff forall(s:state, accessible(s) implies p(s)))" (theory state-machines) (usages ) (proof "$theories/state-machines/proofs/sm-induction-biconditional.t"))
(def-theorem sm-induction-biconditional-conv "forall(p:[state,prop], forall(s:state, accessible(s) implies p(s)) iff (forall(s:state, initial(s) implies p(s)) and forall(s_1, s_2:state, a:action, (accessible(s_1) and p(s_1) and tr(s_1, a, s_2)) implies p(s_2))))" (theory state-machines) (usages ) (proof "$theories/state-machines/proofs/sm-induction-biconditional-conv.t"))
(def-inductor sm-induct sm-induction-biconditional-conv (theory state-machines) (base-case-hook eliminate-nonrecursive-definitions-and-simplify))
(def-theory-ensemble state-machines) (pop-current-theory)