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

-- PLEASE DO NOT EDIT THIS CODE --
-- This code was generated using the UMPLE 1.27.0.3728.d139ed893 modeling language! --


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

   -- This part declares state variables for the given NuSMV module --
   VAR
     state : { Status_Planned , Status_OpenNotEnoughStudents , Status_OpenEnoughStudents , Status_Cancelled , Status_Closed };
     event : { ev_cancel , ev_classSizeExceedsMinimum , ev_openRegistration , ev_requestToRegister , ev_classSizeExceedsMaximum , ev_closeRegistration , ev_null };

   -- This part defines macros that summarize the transitions and guards (if any) of the given NuSMV module --
   DEFINE
     status_stable :=  !( event = ev_cancel | event = ev_openRegistration | event = ev_classSizeExceedsMaximum | event = ev_classSizeExceedsMinimum | event = ev_requestToRegister | event = ev_closeRegistration );
     t1 := event = ev_cancel & state = Status_Planned;
     t2 := event = ev_openRegistration & state = Status_Planned;
     t3 := event = ev_requestToRegister & state = Status_OpenNotEnoughStudents;
     t4 := event = ev_closeRegistration & state = Status_OpenNotEnoughStudents;
     t5 := event = ev_cancel & state = Status_OpenNotEnoughStudents;
     t6 := event = ev_classSizeExceedsMinimum & state = Status_OpenNotEnoughStudents;
     t7 := event = ev_requestToRegister & state = Status_OpenEnoughStudents;
     t8 := event = ev_cancel & state = Status_OpenEnoughStudents;
     t9 := event = ev_closeRegistration & state = Status_OpenEnoughStudents;
     t10 := event = ev_classSizeExceedsMaximum & state = Status_OpenEnoughStudents;
     t11 := event = ev_cancel & state = Status_Closed;

   -- This part defines logic for the assignment of values to state variable "state" of this NuSMV module --
   ASSIGN
     init( state ) := Status_Planned;
     next( state ) := case
       t2 | t3 : Status_OpenNotEnoughStudents;
       t6 | t7 : Status_OpenEnoughStudents;
       t4 | t8 | t1 | t5 | t11 : Status_Cancelled;
       t9 | t10 : Status_Closed;
       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
       status_stable : { ev_cancel , ev_classSizeExceedsMinimum , ev_openRegistration , ev_requestToRegister , ev_classSizeExceedsMaximum , ev_closeRegistration };
       TRUE : ev_null;
     esac;

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

   -- This part declares state variables for the given NuSMV module --
   VAR
     courseSectionStatus : CourseSectionStatus;

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

   -- This part declares state variables for the given NuSMV module --
   VAR
     courseSectionStatus_Machine : CourseSectionStatus_Machine;

   -- The following properties are specified to certify that non-symbolic state(s) of this model is (or are) reachable. 
   CTLSPEC   EF( courseSectionStatus_Machine.courseSectionStatus.state = Status_Planned )
   CTLSPEC   EF( courseSectionStatus_Machine.courseSectionStatus.state = Status_OpenNotEnoughStudents )
   CTLSPEC   EF( courseSectionStatus_Machine.courseSectionStatus.state = Status_OpenEnoughStudents )
   CTLSPEC   EF( courseSectionStatus_Machine.courseSectionStatus.state = Status_Cancelled )
   CTLSPEC   EF( courseSectionStatus_Machine.courseSectionStatus.state = Status_Closed )
