Theory: automata

Parents


Type constants


Term constants


Axioms


Definitions

Trace
|- !Q N e.
     Trace (Q,N) e =
     (?s. Q (e 0,s 0) /\ (!t. N (e t,s t) (e (SUC t),s (SUC t))))
Implements
|- !Q1 N1 Q2 N2.
     (Q1,N1) Implements (Q2,N2) = (!e. Trace (Q1,N1) e ==> Trace (Q2,N2) e)
Simulates
|- !Q1 N1 Q2 N2.
     (Q1,N1) Simulates (Q2,N2) =
     (?R.
       (!e s1. Q1 (e,s1) ==> (?s2. Q2 (e,s2) /\ R e s1 s2)) /\
       (!e e' s1 s1' s2.
         R e s1 s2 /\ N1 (e,s1) (e',s1') ==>
         (?s2'. R e' s1' s2' /\ N2 (e,s2) (e',s2'))))
Trace_Inv
|- !Q P N e.
     Trace_Inv (Q,P,N) e =
     (?s.
       Q (e 0,s 0) /\
       (!t. P (e t,s t)) /\
       (!t. N (e t,s t) (e (SUC t),s (SUC t))))
Deterministic
|- !Q N.
     Deterministic (Q,N) =
     (!e s s'. Q (e,s) /\ Q (e,s') ==> (s = s')) /\
     (!e s e' s' s''. N (e,s) (e',s') /\ N (e,s) (e',s'') ==> (s' = s''))
Prefix_Trace
|- !n Q N e.
     Prefix_Trace n (Q,N) e =
     (?s. Q (e 0,s 0) /\ (!t. t < n ==> N (e t,s t) (e (SUC t),s (SUC t))))
Limit_Trace
|- !G e. Limit_Trace G e = (!n. Prefix_Trace n G e)
Reachable
|- !Q N e' s'.
     Reachable (Q,N) (e',s') =
     (?n e s.
       (e n = e') /\
       (s n = s') /\
       Q (e 0,s 0) /\
       (!t. t < n ==> N (e t,s t) (e (SUC t),s (SUC t))))
Finite_State
|- !Q N. Finite_State (Q,N) = Finite (Reachable (Q,N))
Fin_Non_Det
|- !Q N.
     Fin_Non_Det (Q,N) =
     (!e. Finite (\s. Q (e,s))) /\ (!e s e'. Finite (\s'. N (e,s) (e',s')))
No_Dead
|- !Q N.
     No_Dead (Q,N) =
     (!e s. Reachable (Q,N) (e,s) ==> (?e' s'. N (e,s) (e',s')))
Stuttering
|- !Q N. Stuttering (Q,N) = (!e s. Reachable (Q,N) (e,s) ==> N (e,s) (e,s))
Subset
|- !Q N.
     Subset (Q,N) =
     ((\(e,x). (!s. x s = Q (e,s)) /\ (?s. x s)),
      (\(e,x) (e',x').
        (!s'. x' s' = (?s. x s /\ N (e,s) (e',s'))) /\ (?s'. x' s')))
Powerset
|- !Q N.
     Powerset (Q,N) =
     ((\(e,x). (!s. x s ==> Q (e,s)) /\ (?s. x s)),
      (\(e,x) (e',x').
        (!s'. x' s' ==> (?s. x s /\ N (e,s) (e',s'))) /\ (?s'. x' s')))
Finite_Powerset
|- !Q N.
     Finite_Powerset (Q,N) =
     ((\(e,x). (!s. x s ==> Q (e,s)) /\ (?s. x s) /\ Finite x),
      (\(e,x) (e',x').
        (!s'. x' s' ==> (?s. x s /\ N (e,s) (e',s'))) /\
        (?s'. x' s') /\
        Finite x'))

Theorems

Naive_Lemma
|- !P. ?Q N. P = Trace (Q,N)
Sim_imp_Imp
|- !Q1 Q2 N1 N2.
     (Q1,N1) Simulates (Q2,N2) ==> (!e. Trace (Q1,N1) e ==> Trace (Q2,N2) e)
Sim_Trans
|- !Q1 N1 Q2 N2 Q3 N3.
     (Q1,N1) Simulates (Q2,N2) /\ (Q2,N2) Simulates (Q3,N3) ==>
     (Q1,N1) Simulates (Q3,N3)
Trace_Inv_Trace
|- !e Q P N. Trace_Inv (Q,P,N) e = Trace (Q,(\s s'. P s /\ N s s')) e
Trace_Inv_Trace'
|- !e Q P N. Trace_Inv (Q,P,N) e = Trace (Q,(\s s'. P s /\ P s' /\ N s s')) e
Trace_imp_Trace_Inv
|- !Q P N.
     (?P'.
       (!e s. Q (e,s) ==> P (e,s) /\ P' (e,s)) /\
       (!e s e' s'.
         N (e,s) (e',s') /\ P (e,s) /\ P' (e,s) ==>
         P (e',s') /\ P' (e',s'))) ==>
     (!e. Trace (Q,N) e ==> Trace_Inv (Q,P,N) e)
Trace_Inv_imp_Trace
|- !Q P N e. Trace_Inv (Q,P,N) e ==> Trace (Q,N) e
Trace_eq_Trace_Inv'
|- !N P Q.
     (?P'.
       (!e s. Q (e,s) ==> P (e,s) /\ P' (e,s)) /\
       (!e s e' s'.
         N (e,s) (e',s') /\ P (e,s) /\ P' (e,s) ==>
         P (e',s') /\ P' (e',s'))) ==>
     (!e. Trace (Q,N) e = Trace_Inv (Q,P,N) e)
Trace_eq_Trace_Inv
|- !Q P N.
     (!e s. Q (e,s) ==> P (e,s)) /\
     (!e s e' s'. N (e,s) (e',s') /\ P (e,s) ==> P (e',s')) ==>
     (!e. Trace (Q,N) e = Trace_Inv (Q,P,N) e)
Trace_imp_Limit
|- !Q N e. Trace (Q,N) e ==> Limit_Trace (Q,N) e
Deterministic_Limit_imp_Trace
|- !Q N. Deterministic (Q,N) ==> (!e. Limit_Trace (Q,N) e ==> Trace (Q,N) e)
Deterministic_Limit_eq_Trace
|- !Q N. Deterministic (Q,N) ==> (!e. Trace (Q,N) e = Limit_Trace (Q,N) e)
Prefix_Trace_imp_Prefix_Trace
|- !Q1 Q2 N1 N2.
     (?R.
       (!e s1. Q1 (e,s1) ==> (?s2. Q2 (e,s2) /\ R e s1 s2)) /\
       (!e e' s1 s1' s2.
         R e s1 s2 /\ N1 (e,s1) (e',s1') ==>
         (?s2'. R e' s1' s2' /\ N2 (e,s2) (e',s2')))) ==>
     (!e n. Prefix_Trace n (Q1,N1) e ==> Prefix_Trace n (Q2,N2) e)
Deterministic_Subset
|- !Q N. Deterministic (Subset (Q,N))
Prefix_imp_Prefix_Subset
|- !Q N e n. Prefix_Trace n (Q,N) e ==> Prefix_Trace n (Subset (Q,N)) e
Prefix_Powerset_imp_Prefix
|- !Q N e n. Prefix_Trace n (Powerset (Q,N)) e ==> Prefix_Trace n (Q,N) e
Prefix_Subset_imp_Prefix_Powerset
|- !Q N e n.
     Prefix_Trace n (Subset (Q,N)) e ==> Prefix_Trace n (Powerset (Q,N)) e
Limit_imp_Limit_Subset
|- !Q N e. Limit_Trace (Q,N) e ==> Limit_Trace (Subset (Q,N)) e
Limit_Subset_imp_Trace_Subset
|- !N Q e. Limit_Trace (Subset (Q,N)) e ==> Trace (Subset (Q,N)) e
Trace_Subset_imp_Trace_Powerset
|- !Q N e. Trace (Subset (Q,N)) e ==> Trace (Powerset (Q,N)) e
Trace_Powerset_imp_Limit_Powerset
|- !N Q e. Trace (Powerset (Q,N)) e ==> Limit_Trace (Powerset (Q,N)) e
Limit_Powerset_imp_Limit
|- !Q N e. Limit_Trace (Powerset (Q,N)) e ==> Limit_Trace (Q,N) e
Trace_Finite_Powerset_eq_Trace
|- !Q N e. Trace (Finite_Powerset (Q,N)) e = Trace (Q,N) e
Sim_imp_Imp'
|- !N2 Q2 N1 Q1.
     (Q1,N1) Simulates Finite_Powerset (Q2,N2) ==>
     (!e. Trace (Q1,N1) e ==> Trace (Q2,N2) e)
No_Dead_THM
|- No_Dead (Q,N) =
   (!e' s'.
     Reachable (Q,N) (e',s') ==>
     (?e s.
       (e 0 = e') /\ (s 0 = s') /\ (!t. N (e t,s t) (e (SUC t),s (SUC t)))))
Stutter_No_Dead
|- !Q N. Stuttering (Q,N) ==> No_Dead (Q,N)
Complete_Deterministic
|- !Q1 Q2 N1 N2.
     No_Dead (Q1,N1) /\ Deterministic (Q2,N2) ==>
     (!e. Trace (Q1,N1) e ==> Trace (Q2,N2) e) ==>
     (Q1,N1) Simulates (Q2,N2)
Simulates_Subset_Powerset
|- !Q1 N1 Q2 N2.
     (Q1,N1) Simulates Subset (Q2,N2) ==> (Q1,N1) Simulates Powerset (Q2,N2)
Subset_sim_Powerset
|- !Q N. Subset (Q,N) Simulates Powerset (Q,N)
Trace_Infinite_Path
|- !Q N.
     Trace (Q,N) e =
     Infinite_Path (0,x)
       (\(t,s) (t',s').
         (t' = SUC t) /\
         ((t = 0) => (Q (e 0,s')) | (N (e (PRE t),s) (e t,s'))))
Limit_Unbounded
|- !Q N.
     Limit_Trace (Q,N) e =
     Unbounded_Path (0,x)
       (\(t,s) (t',s').
         (t' = SUC t) /\
         ((t = 0) => (Q (e 0,s')) | (N (e (PRE t),s) (e t,s'))))
Fin_Non_Det_Powerset_Trace
|- !Q N.
     Fin_Non_Det (Q,N) ==> (!e. Trace (Powerset (Q,N)) e ==> Trace (Q,N) e)
Fin_Sim_Powerset_imp_Imp
|- !Q1 N1 Q2 N2.
     Fin_Non_Det (Q2,N2) ==>
     (Q1,N1) Simulates Powerset (Q2,N2) ==>
     (!e. Trace (Q1,N1) e ==> Trace (Q2,N2) e)
Complete_No_Dead
|- !Q1 N1 Q2 N2.
     No_Dead (Q1,N1) /\ (!e. Trace (Q1,N1) e ==> Trace (Q2,N2) e) ==>
     (Q1,N1) Simulates Powerset (Q2,N2)
Subset_Simulates_Finite_Powerset
|- !Q N. Fin_Non_Det (Q,N) ==> Subset (Q,N) Simulates Finite_Powerset (Q,N)