-- This file is generated from NestedMachine.ump --

-- PLEASE DO NOT EDIT THIS CODE --
-- This code was generated using the UMPLE @UMPLE_VERSION@ modeling language! --


-- This defines a NuSMV module for ASm --
MODULE ASm ( _smS2 )

   -- This part declares state variables for the given NuSMV module --
   VAR
     state : { Sm_s1 , Sm_s2 , Sm_s3 , Sm_s4 };
     event : { ev_e1 , ev_e2 , ev_e3 , ev_e4 , ev_null };

   -- This part defines macros that summarize the transitions and guards (if any) of the given NuSMV module --
   DEFINE
     sm_stable :=  !( event = ev_e1 | event = ev_e3 | event = ev_e2 | event = ev_e4 );
     t1 := event = ev_e1 & state = Sm_s1;
     t2 := event = ev_e2 & state = Sm_s1;
     t3 := event = ev_e3 & state = Sm_s1;
     t4 := event = ev_e1 & state = Sm_s2;
     t5 := event = ev_e3 & _smS2.state = SmS2_s2a;
     t6 := event = ev_e3 & _smS2.state = SmS2_s2b;
     t7 := event = ev_e4 & _smS2.state = SmS2_s2b;
     t8 := event = ev_e2 & _smS2.state = SmS2_s2b;

   -- This part defines logic for the assignment of values to state variable "state" of this NuSMV module --
   ASSIGN
     init( state ) := Sm_s1;
     next( state ) := case
       t4 : Sm_s1;
       t6 | t5 | t1 | t2 | t8 : Sm_s2;
       t7 : Sm_s3;
       t3 : Sm_s4;
       TRUE : state;
     esac;

   -- This part defines logic for the assignment of values to state variable "event" of this NuSMV module --
   ASSIGN
     init( event ) := ev_null;
     next( event ) := case
       sm_stable : { ev_e1 , ev_e2 , ev_e3 , ev_e4 };
       TRUE : ev_null;
     esac;

-- This defines a NuSMV module for ASmS2 --
MODULE ASmS2 ( _sm )

   -- This part declares state variables for the given NuSMV module --
   VAR
     state : { SmS2_s2a , SmS2_s2b , SmS2_s2c , null };

   -- This part defines logic for the assignment of values to state variable "state" of this NuSMV module --
   ASSIGN
     init( state ) := null;
     next( state ) := case
       _sm.t1 | _sm.t4 | _sm.t3 | _sm.t7 : null;
       _sm.t6 : SmS2_s2a;
       _sm.t2 | _sm.t5 : SmS2_s2b;
       _sm.t8 : SmS2_s2c;
       _sm.state = Sm_s2 & state = null : SmS2_s2a;
       TRUE : state;
     esac;

-- This defines a NuSMV module for ASm_Machine --
MODULE ASm_Machine

   -- This part declares state variables for the given NuSMV module --
   VAR
     aSm : ASm( aSmS2 );
     aSmS2 : ASmS2( aSm );

-- This defines a NuSMV module for main --
MODULE main

   -- This part declares state variables for the given NuSMV module --
   VAR
     aSm_Machine : ASm_Machine;

   -- The following properties are specified to certify that non-symbolic state(s) of this model is (or are) reachable. 
   CTLSPEC   EF( aSm_Machine.aSm.state = Sm_s1 )
   CTLSPEC   EF( aSm_Machine.aSm.state = Sm_s2 )
   CTLSPEC   EF( aSm_Machine.aSm.state = Sm_s3 )
   CTLSPEC   EF( aSm_Machine.aSm.state = Sm_s4 )
   CTLSPEC   EF( aSm_Machine.aSmS2.state = SmS2_s2a )
   CTLSPEC   EF( aSm_Machine.aSmS2.state = SmS2_s2b )
   CTLSPEC   EF( aSm_Machine.aSmS2.state = SmS2_s2c )