From c2ec67b283efa220aef7e8ece429ecdd9cc87dd8 Mon Sep 17 00:00:00 2001
From: Cookiebowser <lucas.doering@live.de>
Date: Thu, 24 Feb 2022 16:23:13 +0100
Subject: [PATCH] fixed and/or not short-circuiting

---
 benchmarks/model_checking/Rust/CAN_BUS_tlc.rs | 152 +++++++--------
 .../Rust/Cruise_finite1_deterministic_MC.rs   | 124 ++++++------
 .../model_checking/Rust/LandingGear_R6.rs     | 180 +++++++++---------
 .../model_checking/Rust/Lift_MC_Large.rs      |  26 +--
 benchmarks/model_checking/Rust/Makefile       |   2 +-
 .../model_checking/Rust/QueensWithEvents_4.rs | 141 ++++++++------
 .../model_checking/Rust/QueensWithEvents_8.rs | 141 ++++++++------
 .../Rust/Train1_Lukas_POR_v3.rs               | 110 +++++------
 ...Train_1_beebook_deterministic_MC_POR_v2.rs | 138 +++++++-------
 benchmarks/model_checking/Rust/nota_v2.rs     |   2 +-
 .../Rust/sort_m2_data1000_MC.rs               |  30 +--
 .../src/main/rust/btypes/src/bboolean.rs      |  21 +-
 .../src/main/rust/btypes/src/bset.rs          |   2 +-
 .../hhu/stups/codegenerator/RustTemplate.stg  |   5 +-
 .../codegenerator/rust/TestMCBenchmarks.java  |   2 +-
 .../Cruise_finite1_deterministic_MC.out       |   2 +-
 .../hhu/stups/codegenerator/Lift_MC_Large.out |   2 +-
 .../codegenerator/QueensWithEvents_8_MC.out   |   3 +
 18 files changed, 579 insertions(+), 504 deletions(-)
 create mode 100644 src/test/resources/de/hhu/stups/codegenerator/QueensWithEvents_8_MC.out

diff --git a/benchmarks/model_checking/Rust/CAN_BUS_tlc.rs b/benchmarks/model_checking/Rust/CAN_BUS_tlc.rs
index c64836524..bde161e53 100644
--- a/benchmarks/model_checking/Rust/CAN_BUS_tlc.rs
+++ b/benchmarks/model_checking/Rust/CAN_BUS_tlc.rs
@@ -24,9 +24,9 @@ pub enum MC_TYPE { BFS, DFS, MIXED }
 
 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub enum T1state {
-    T1_EN, 
-    T1_CALC, 
-    T1_SEND, 
+    T1_EN,
+    T1_CALC,
+    T1_SEND,
     T1_WAIT
 }
 impl T1state {
@@ -39,19 +39,19 @@ impl Default for T1state {
 }
 impl fmt::Display for T1state {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-       match *self {
-           T1state::T1_EN => write!(f, "T1_EN"),
-           T1state::T1_CALC => write!(f, "T1_CALC"),
-           T1state::T1_SEND => write!(f, "T1_SEND"),
-           T1state::T1_WAIT => write!(f, "T1_WAIT"),
-       }
+        match *self {
+            T1state::T1_EN => write!(f, "T1_EN"),
+            T1state::T1_CALC => write!(f, "T1_CALC"),
+            T1state::T1_SEND => write!(f, "T1_SEND"),
+            T1state::T1_WAIT => write!(f, "T1_WAIT"),
+        }
     }
 }
 
 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub enum T2mode {
-    T2MODE_SENSE, 
-    T2MODE_TRANSMIT, 
+    T2MODE_SENSE,
+    T2MODE_TRANSMIT,
     T2MODE_RELEASE
 }
 impl T2mode {
@@ -64,22 +64,22 @@ impl Default for T2mode {
 }
 impl fmt::Display for T2mode {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-       match *self {
-           T2mode::T2MODE_SENSE => write!(f, "T2MODE_SENSE"),
-           T2mode::T2MODE_TRANSMIT => write!(f, "T2MODE_TRANSMIT"),
-           T2mode::T2MODE_RELEASE => write!(f, "T2MODE_RELEASE"),
-       }
+        match *self {
+            T2mode::T2MODE_SENSE => write!(f, "T2MODE_SENSE"),
+            T2mode::T2MODE_TRANSMIT => write!(f, "T2MODE_TRANSMIT"),
+            T2mode::T2MODE_RELEASE => write!(f, "T2MODE_RELEASE"),
+        }
     }
 }
 
 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub enum T2state {
-    T2_EN, 
-    T2_RCV, 
-    T2_PROC, 
-    T2_CALC, 
-    T2_SEND, 
-    T2_WAIT, 
+    T2_EN,
+    T2_RCV,
+    T2_PROC,
+    T2_CALC,
+    T2_SEND,
+    T2_WAIT,
     T2_RELEASE
 }
 impl T2state {
@@ -92,25 +92,25 @@ impl Default for T2state {
 }
 impl fmt::Display for T2state {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-       match *self {
-           T2state::T2_EN => write!(f, "T2_EN"),
-           T2state::T2_RCV => write!(f, "T2_RCV"),
-           T2state::T2_PROC => write!(f, "T2_PROC"),
-           T2state::T2_CALC => write!(f, "T2_CALC"),
-           T2state::T2_SEND => write!(f, "T2_SEND"),
-           T2state::T2_WAIT => write!(f, "T2_WAIT"),
-           T2state::T2_RELEASE => write!(f, "T2_RELEASE"),
-       }
+        match *self {
+            T2state::T2_EN => write!(f, "T2_EN"),
+            T2state::T2_RCV => write!(f, "T2_RCV"),
+            T2state::T2_PROC => write!(f, "T2_PROC"),
+            T2state::T2_CALC => write!(f, "T2_CALC"),
+            T2state::T2_SEND => write!(f, "T2_SEND"),
+            T2state::T2_WAIT => write!(f, "T2_WAIT"),
+            T2state::T2_RELEASE => write!(f, "T2_RELEASE"),
+        }
     }
 }
 
 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub enum T3state {
-    T3_READY, 
-    T3_WRITE, 
-    T3_RELEASE, 
-    T3_READ, 
-    T3_PROC, 
+    T3_READY,
+    T3_WRITE,
+    T3_RELEASE,
+    T3_READ,
+    T3_PROC,
     T3_WAIT
 }
 impl T3state {
@@ -123,14 +123,14 @@ impl Default for T3state {
 }
 impl fmt::Display for T3state {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-       match *self {
-           T3state::T3_READY => write!(f, "T3_READY"),
-           T3state::T3_WRITE => write!(f, "T3_WRITE"),
-           T3state::T3_RELEASE => write!(f, "T3_RELEASE"),
-           T3state::T3_READ => write!(f, "T3_READ"),
-           T3state::T3_PROC => write!(f, "T3_PROC"),
-           T3state::T3_WAIT => write!(f, "T3_WAIT"),
-       }
+        match *self {
+            T3state::T3_READY => write!(f, "T3_READY"),
+            T3state::T3_WRITE => write!(f, "T3_WRITE"),
+            T3state::T3_RELEASE => write!(f, "T3_RELEASE"),
+            T3state::T3_READ => write!(f, "T3_READ"),
+            T3state::T3_PROC => write!(f, "T3_PROC"),
+            T3state::T3_WAIT => write!(f, "T3_WAIT"),
+        }
     }
 }
 
@@ -917,27 +917,27 @@ impl CAN_BUS_tlc {
         //if caching is enabled globally, this will just prefill those, if caching is
         for trans in to_invalidate.iter() {
             match *trans {
-                "_tr_T1Evaluate" => {self._tr_T1Evaluate(false);}, 
-                "_tr_T1Calculate" => {self._tr_T1Calculate(false);}, 
-                "_tr_T1SendResult" => {self._tr_T1SendResult(false);}, 
-                "_tr_T1Wait" => {self._tr_T1Wait(false);}, 
-                "_tr_T2Evaluate" => {self._tr_T2Evaluate(false);}, 
-                "_tr_T2ReadBus" => {self._tr_T2ReadBus(false);}, 
-                "_tr_T2Reset" => {self._tr_T2Reset(false);}, 
-                "_tr_T2Complete" => {self._tr_T2Complete(false);}, 
-                "_tr_T2ReleaseBus" => {self._tr_T2ReleaseBus(false);}, 
-                "_tr_T2Calculate" => {self._tr_T2Calculate(false);}, 
-                "_tr_T2WriteBus" => {self._tr_T2WriteBus(false);}, 
-                "_tr_T2Wait" => {self._tr_T2Wait(false);}, 
-                "_tr_T3Initiate" => {self._tr_T3Initiate(false);}, 
-                "_tr_T3Evaluate" => {self._tr_T3Evaluate(false);}, 
-                "_tr_T3writebus" => {self._tr_T3writebus(false);}, 
-                "_tr_T3Read" => {self._tr_T3Read(false);}, 
-                "_tr_T3Poll" => {self._tr_T3Poll(false);}, 
-                "_tr_T3ReleaseBus" => {self._tr_T3ReleaseBus(false);}, 
-                "_tr_T3Wait" => {self._tr_T3Wait(false);}, 
-                "_tr_T3ReEnableWait" => {self._tr_T3ReEnableWait(false);}, 
-                "_tr_Update" => {self._tr_Update(false);}, 
+                "_tr_T1Evaluate" => {self._tr_T1Evaluate(false);},
+                "_tr_T1Calculate" => {self._tr_T1Calculate(false);},
+                "_tr_T1SendResult" => {self._tr_T1SendResult(false);},
+                "_tr_T1Wait" => {self._tr_T1Wait(false);},
+                "_tr_T2Evaluate" => {self._tr_T2Evaluate(false);},
+                "_tr_T2ReadBus" => {self._tr_T2ReadBus(false);},
+                "_tr_T2Reset" => {self._tr_T2Reset(false);},
+                "_tr_T2Complete" => {self._tr_T2Complete(false);},
+                "_tr_T2ReleaseBus" => {self._tr_T2ReleaseBus(false);},
+                "_tr_T2Calculate" => {self._tr_T2Calculate(false);},
+                "_tr_T2WriteBus" => {self._tr_T2WriteBus(false);},
+                "_tr_T2Wait" => {self._tr_T2Wait(false);},
+                "_tr_T3Initiate" => {self._tr_T3Initiate(false);},
+                "_tr_T3Evaluate" => {self._tr_T3Evaluate(false);},
+                "_tr_T3writebus" => {self._tr_T3writebus(false);},
+                "_tr_T3Read" => {self._tr_T3Read(false);},
+                "_tr_T3Poll" => {self._tr_T3Poll(false);},
+                "_tr_T3ReleaseBus" => {self._tr_T3ReleaseBus(false);},
+                "_tr_T3Wait" => {self._tr_T3Wait(false);},
+                "_tr_T3ReEnableWait" => {self._tr_T3ReEnableWait(false);},
+                "_tr_Update" => {self._tr_Update(false);},
                 _ => {},
             }
         }
@@ -1923,10 +1923,10 @@ impl CAN_BUS_tlc {
     fn next(collection_m: Arc<Mutex<LinkedList<CAN_BUS_tlc>>>, mc_type: MC_TYPE) -> CAN_BUS_tlc {
         let mut collection = collection_m.lock().unwrap();
         return match mc_type {
-                MC_TYPE::BFS   => collection.pop_front().unwrap(),
-                MC_TYPE::DFS   => collection.pop_back().unwrap(),
-                MC_TYPE::MIXED => if collection.len() % 2 == 0 { collection.pop_front().unwrap() } else { collection.pop_back().unwrap() }
-            };
+            MC_TYPE::BFS   => collection.pop_front().unwrap(),
+            MC_TYPE::DFS   => collection.pop_back().unwrap(),
+            MC_TYPE::MIXED => if collection.len() % 2 == 0 { collection.pop_front().unwrap() } else { collection.pop_back().unwrap() }
+        };
     }
 
     fn model_check_single_threaded(mc_type: MC_TYPE, is_caching: bool) {
@@ -2050,11 +2050,11 @@ impl CAN_BUS_tlc {
 
             let next_states = Self::generateNextStates(&mut state, is_caching, &mut invariantDependency, Arc::clone(&dependent_invariant_m), &mut guardDependency, Arc::clone(&dependent_guard_m), Arc::clone(&guard_cache), Arc::clone(&parents_m), Arc::clone(&transitions));
 
-            next_states.iter().for_each(|next_state| {
-                if !states.contains(next_state) {
+            next_states.iter().cloned().for_each(|next_state| {
+                if !states.contains(&next_state) {
                     let cnum_states = number_states.fetch_add(1, Ordering::AcqRel) + 1;
                     states.insert(next_state.clone());
-                    collection_m.lock().unwrap().push_back(next_state.clone());
+                    collection_m.lock().unwrap().push_back(next_state);
                     if cnum_states % 50000 == 0 {
                         println!("VISITED STATES: {}", cnum_states);
                         println!("EVALUATED TRANSITIONS: {}", transitions.load(Ordering::Acquire));
@@ -2089,7 +2089,7 @@ impl CAN_BUS_tlc {
         let possible_queue_changes_b = Arc::new(AtomicI32::new(0));
 
         if !machine._check_inv_1() || !machine._check_inv_2() || !machine._check_inv_3() || !machine._check_inv_4() || !machine._check_inv_5() || !machine._check_inv_6() || !machine._check_inv_7() || !machine._check_inv_8() || !machine._check_inv_9() || !machine._check_inv_10() || !machine._check_inv_11() || !machine._check_inv_12() || !machine._check_inv_13() || !machine._check_inv_14() || !machine._check_inv_15() || !machine._check_inv_16() || !machine._check_inv_17() || !machine._check_inv_18() || !machine._check_inv_19() || !machine._check_inv_20() {
-                invariant_violated_b.store(true, Ordering::Release);
+            invariant_violated_b.store(true, Ordering::Release);
         }
 
         let states_m = Arc::new(Mutex::new(HashSet::<CAN_BUS_tlc>::new()));
@@ -2225,14 +2225,14 @@ impl CAN_BUS_tlc {
                 let next_states = Self::generateNextStates(&mut state, is_caching, &invariant_dependency, Arc::clone(&dependent_invariant_m2), &guard_dependency, dependent_guard_m2, guard_cache, parents_m2, Arc::clone(&transitions));
 
                 //println!("Thread {:?} executing", thread::current().id());
-                next_states.iter().for_each(|next_state| {
+                next_states.iter().cloned().for_each(|next_state| {
                     {
                         let mut states = states_m2.lock().unwrap();
                         let mut collection = collection_m2.lock().unwrap();
-                        if !states.contains(next_state) {
+                        if !states.contains(&next_state) {
                             let cnum_states = number_states.fetch_add(1, Ordering::AcqRel) + 1;
                             states.insert(next_state.clone());
-                            collection.push_back(next_state.clone());
+                            collection.push_back(next_state);
                             //println!("Thread {:?}: states in collection {}", thread::current().id(), collection.len());
                             if cnum_states % 50000 == 0 {
                                 println!("VISITED STATES: {}", cnum_states);
diff --git a/benchmarks/model_checking/Rust/Cruise_finite1_deterministic_MC.rs b/benchmarks/model_checking/Rust/Cruise_finite1_deterministic_MC.rs
index 3d879f315..7f12bc7b4 100644
--- a/benchmarks/model_checking/Rust/Cruise_finite1_deterministic_MC.rs
+++ b/benchmarks/model_checking/Rust/Cruise_finite1_deterministic_MC.rs
@@ -23,9 +23,9 @@ pub enum MC_TYPE { BFS, DFS, MIXED }
 
 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub enum RSset {
-    RSnone, 
-    RSpos, 
-    RSneg, 
+    RSnone,
+    RSpos,
+    RSneg,
     RSequal
 }
 impl RSset {
@@ -38,19 +38,19 @@ impl Default for RSset {
 }
 impl fmt::Display for RSset {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-       match *self {
-           RSset::RSnone => write!(f, "RSnone"),
-           RSset::RSpos => write!(f, "RSpos"),
-           RSset::RSneg => write!(f, "RSneg"),
-           RSset::RSequal => write!(f, "RSequal"),
-       }
+        match *self {
+            RSset::RSnone => write!(f, "RSnone"),
+            RSset::RSpos => write!(f, "RSpos"),
+            RSset::RSneg => write!(f, "RSneg"),
+            RSset::RSequal => write!(f, "RSequal"),
+        }
     }
 }
 
 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub enum ODset {
-    ODnone, 
-    ODclose, 
+    ODnone,
+    ODclose,
     ODveryclose
 }
 impl ODset {
@@ -63,11 +63,11 @@ impl Default for ODset {
 }
 impl fmt::Display for ODset {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-       match *self {
-           ODset::ODnone => write!(f, "ODnone"),
-           ODset::ODclose => write!(f, "ODclose"),
-           ODset::ODveryclose => write!(f, "ODveryclose"),
-       }
+        match *self {
+            ODset::ODnone => write!(f, "ODnone"),
+            ODset::ODclose => write!(f, "ODclose"),
+            ODset::ODveryclose => write!(f, "ODveryclose"),
+        }
     }
 }
 
@@ -287,7 +287,7 @@ impl Cruise_finite1_deterministic_MC {
         }
         if (_ld_NumberOfSetCruise.less(&BInteger::new(1))).booleanValue() {
             self.NumberOfSetCruise = _ld_NumberOfSetCruise.plus(&BInteger::new(1));
-        } 
+        }
 
     }
 
@@ -387,7 +387,7 @@ impl Cruise_finite1_deterministic_MC {
             self.SpeedAboveMax = BBoolean::new(false);
             if (self.CruiseActive.equal(&BBoolean::new(true)).and(&self.CruiseSpeedAtMax.equal(&BBoolean::new(true)))).booleanValue() {
                 self.VehicleAtCruiseSpeed = BBoolean::new(true);
-            } 
+            }
         } else {
             panic!("ERROR: called SELECT-function with incompatible parameters!");
         }
@@ -408,7 +408,7 @@ impl Cruise_finite1_deterministic_MC {
             self.ObstacleStatusJustChanged = BBoolean::new(true);
             if (self.ObstacleRelativeSpeed.equal(&RSset::RSpos)).booleanValue() {
                 self.VehicleTryKeepTimeGap = BBoolean::new(false);
-            } 
+            }
         } else {
             panic!("ERROR: called SELECT-function with incompatible parameters!");
         }
@@ -429,10 +429,10 @@ impl Cruise_finite1_deterministic_MC {
             self.ObstacleRelativeSpeed = RSset::RSpos;
             if (self.CruiseActive.equal(&BBoolean::new(true))).booleanValue() {
                 self.ObstacleStatusJustChanged = BBoolean::new(true);
-            } 
+            }
             if (self.ObstacleDistance.unequal(&ODset::ODveryclose)).booleanValue() {
                 self.VehicleTryKeepTimeGap = BBoolean::new(false);
-            } 
+            }
         } else {
             panic!("ERROR: called SELECT-function with incompatible parameters!");
         }
@@ -443,7 +443,7 @@ impl Cruise_finite1_deterministic_MC {
             self.ObstacleRelativeSpeed = RSset::RSequal;
             if (self.CruiseActive.equal(&BBoolean::new(true))).booleanValue() {
                 self.ObstacleStatusJustChanged = BBoolean::new(true);
-            } 
+            }
         } else {
             panic!("ERROR: called SELECT-function with incompatible parameters!");
         }
@@ -454,7 +454,7 @@ impl Cruise_finite1_deterministic_MC {
             self.ObstacleRelativeSpeed = RSset::RSneg;
             if (self.CruiseActive.equal(&BBoolean::new(true))).booleanValue() {
                 self.ObstacleStatusJustChanged = BBoolean::new(true);
-            } 
+            }
         } else {
             panic!("ERROR: called SELECT-function with incompatible parameters!");
         }
@@ -465,7 +465,7 @@ impl Cruise_finite1_deterministic_MC {
             self.ObstacleRelativeSpeed = RSset::RSequal;
             if (self.CruiseActive.equal(&BBoolean::new(true))).booleanValue() {
                 self.ObstacleStatusJustChanged = BBoolean::new(true);
-            } 
+            }
         } else {
             panic!("ERROR: called SELECT-function with incompatible parameters!");
         }
@@ -494,7 +494,7 @@ impl Cruise_finite1_deterministic_MC {
             self.ObstacleRelativeSpeed = RSset::RSnone;
             if (self.CruiseActive.equal(&BBoolean::new(true))).booleanValue() {
                 self.ObstacleStatusJustChanged = BBoolean::new(true);
-            } 
+            }
             self.ObstacleDistance = ODset::ODnone;
             self.VehicleTryKeepTimeGap = BBoolean::new(false);
         } else {
@@ -1051,32 +1051,32 @@ impl Cruise_finite1_deterministic_MC {
         //if caching is enabled globally, this will just prefill those, if caching is
         for trans in to_invalidate.iter() {
             match *trans {
-                "_tr_CruiseBecomesNotAllowed" => {self._tr_CruiseBecomesNotAllowed(false);}, 
-                "_tr_CruiseBecomesAllowed" => {self._tr_CruiseBecomesAllowed(false);}, 
-                "_tr_SetCruiseSpeed" => {self._tr_SetCruiseSpeed(false);}, 
-                "_tr_CCInitialisationFinished" => {self._tr_CCInitialisationFinished(false);}, 
-                "_tr_CCInitialisationDelayFinished" => {self._tr_CCInitialisationDelayFinished(false);}, 
-                "_tr_CruiseSpeedChangeFinished" => {self._tr_CruiseSpeedChangeFinished(false);}, 
-                "_tr_CruiseSpeedChangeDelayFinished" => {self._tr_CruiseSpeedChangeDelayFinished(false);}, 
-                "_tr_CruiseOff" => {self._tr_CruiseOff(false);}, 
-                "_tr_ExternalForcesBecomesExtreme" => {self._tr_ExternalForcesBecomesExtreme(false);}, 
-                "_tr_ExternalForcesBecomesNormal" => {self._tr_ExternalForcesBecomesNormal(false);}, 
-                "_tr_VehicleLeavesCruiseSpeed" => {self._tr_VehicleLeavesCruiseSpeed(false);}, 
-                "_tr_VehicleReachesCruiseSpeed" => {self._tr_VehicleReachesCruiseSpeed(false);}, 
-                "_tr_VehicleExceedsMaxCruiseSpeed" => {self._tr_VehicleExceedsMaxCruiseSpeed(false);}, 
-                "_tr_VehicleFallsBelowMaxCruiseSpeed" => {self._tr_VehicleFallsBelowMaxCruiseSpeed(false);}, 
-                "_tr_ObstacleDistanceBecomesVeryClose" => {self._tr_ObstacleDistanceBecomesVeryClose(false);}, 
-                "_tr_ObstacleDistanceBecomesClose" => {self._tr_ObstacleDistanceBecomesClose(false);}, 
-                "_tr_ObstacleDistanceBecomesBig" => {self._tr_ObstacleDistanceBecomesBig(false);}, 
-                "_tr_ObstacleStartsTravelFaster" => {self._tr_ObstacleStartsTravelFaster(false);}, 
-                "_tr_ObstacleStopsTravelFaster" => {self._tr_ObstacleStopsTravelFaster(false);}, 
-                "_tr_ObstacleStartsTravelSlower" => {self._tr_ObstacleStartsTravelSlower(false);}, 
-                "_tr_ObstacleStopsTravelSlower" => {self._tr_ObstacleStopsTravelSlower(false);}, 
-                "_tr_ObstacleAppearsWhenCruiseActive" => {self._tr_ObstacleAppearsWhenCruiseActive(false);}, 
-                "_tr_ObstacleAppearsWhenCruiseInactive" => {self._tr_ObstacleAppearsWhenCruiseInactive(false);}, 
-                "_tr_ObstacleDisappears" => {self._tr_ObstacleDisappears(false);}, 
-                "_tr_VehicleManageObstacle" => {self._tr_VehicleManageObstacle(false);}, 
-                "_tr_ObstacleBecomesOld" => {self._tr_ObstacleBecomesOld(false);}, 
+                "_tr_CruiseBecomesNotAllowed" => {self._tr_CruiseBecomesNotAllowed(false);},
+                "_tr_CruiseBecomesAllowed" => {self._tr_CruiseBecomesAllowed(false);},
+                "_tr_SetCruiseSpeed" => {self._tr_SetCruiseSpeed(false);},
+                "_tr_CCInitialisationFinished" => {self._tr_CCInitialisationFinished(false);},
+                "_tr_CCInitialisationDelayFinished" => {self._tr_CCInitialisationDelayFinished(false);},
+                "_tr_CruiseSpeedChangeFinished" => {self._tr_CruiseSpeedChangeFinished(false);},
+                "_tr_CruiseSpeedChangeDelayFinished" => {self._tr_CruiseSpeedChangeDelayFinished(false);},
+                "_tr_CruiseOff" => {self._tr_CruiseOff(false);},
+                "_tr_ExternalForcesBecomesExtreme" => {self._tr_ExternalForcesBecomesExtreme(false);},
+                "_tr_ExternalForcesBecomesNormal" => {self._tr_ExternalForcesBecomesNormal(false);},
+                "_tr_VehicleLeavesCruiseSpeed" => {self._tr_VehicleLeavesCruiseSpeed(false);},
+                "_tr_VehicleReachesCruiseSpeed" => {self._tr_VehicleReachesCruiseSpeed(false);},
+                "_tr_VehicleExceedsMaxCruiseSpeed" => {self._tr_VehicleExceedsMaxCruiseSpeed(false);},
+                "_tr_VehicleFallsBelowMaxCruiseSpeed" => {self._tr_VehicleFallsBelowMaxCruiseSpeed(false);},
+                "_tr_ObstacleDistanceBecomesVeryClose" => {self._tr_ObstacleDistanceBecomesVeryClose(false);},
+                "_tr_ObstacleDistanceBecomesClose" => {self._tr_ObstacleDistanceBecomesClose(false);},
+                "_tr_ObstacleDistanceBecomesBig" => {self._tr_ObstacleDistanceBecomesBig(false);},
+                "_tr_ObstacleStartsTravelFaster" => {self._tr_ObstacleStartsTravelFaster(false);},
+                "_tr_ObstacleStopsTravelFaster" => {self._tr_ObstacleStopsTravelFaster(false);},
+                "_tr_ObstacleStartsTravelSlower" => {self._tr_ObstacleStartsTravelSlower(false);},
+                "_tr_ObstacleStopsTravelSlower" => {self._tr_ObstacleStopsTravelSlower(false);},
+                "_tr_ObstacleAppearsWhenCruiseActive" => {self._tr_ObstacleAppearsWhenCruiseActive(false);},
+                "_tr_ObstacleAppearsWhenCruiseInactive" => {self._tr_ObstacleAppearsWhenCruiseInactive(false);},
+                "_tr_ObstacleDisappears" => {self._tr_ObstacleDisappears(false);},
+                "_tr_VehicleManageObstacle" => {self._tr_VehicleManageObstacle(false);},
+                "_tr_ObstacleBecomesOld" => {self._tr_ObstacleBecomesOld(false);},
                 _ => {},
             }
         }
@@ -2311,10 +2311,10 @@ impl Cruise_finite1_deterministic_MC {
     fn next(collection_m: Arc<Mutex<LinkedList<Cruise_finite1_deterministic_MC>>>, mc_type: MC_TYPE) -> Cruise_finite1_deterministic_MC {
         let mut collection = collection_m.lock().unwrap();
         return match mc_type {
-                MC_TYPE::BFS   => collection.pop_front().unwrap(),
-                MC_TYPE::DFS   => collection.pop_back().unwrap(),
-                MC_TYPE::MIXED => if collection.len() % 2 == 0 { collection.pop_front().unwrap() } else { collection.pop_back().unwrap() }
-            };
+            MC_TYPE::BFS   => collection.pop_front().unwrap(),
+            MC_TYPE::DFS   => collection.pop_back().unwrap(),
+            MC_TYPE::MIXED => if collection.len() % 2 == 0 { collection.pop_front().unwrap() } else { collection.pop_back().unwrap() }
+        };
     }
 
     fn model_check_single_threaded(mc_type: MC_TYPE, is_caching: bool) {
@@ -2458,11 +2458,11 @@ impl Cruise_finite1_deterministic_MC {
 
             let next_states = Self::generateNextStates(&mut state, is_caching, &mut invariantDependency, Arc::clone(&dependent_invariant_m), &mut guardDependency, Arc::clone(&dependent_guard_m), Arc::clone(&guard_cache), Arc::clone(&parents_m), Arc::clone(&transitions));
 
-            next_states.iter().for_each(|next_state| {
-                if !states.contains(next_state) {
+            next_states.iter().cloned().for_each(|next_state| {
+                if !states.contains(&next_state) {
                     let cnum_states = number_states.fetch_add(1, Ordering::AcqRel) + 1;
                     states.insert(next_state.clone());
-                    collection_m.lock().unwrap().push_back(next_state.clone());
+                    collection_m.lock().unwrap().push_back(next_state);
                     if cnum_states % 50000 == 0 {
                         println!("VISITED STATES: {}", cnum_states);
                         println!("EVALUATED TRANSITIONS: {}", transitions.load(Ordering::Acquire));
@@ -2497,7 +2497,7 @@ impl Cruise_finite1_deterministic_MC {
         let possible_queue_changes_b = Arc::new(AtomicI32::new(0));
 
         if !machine._check_inv_1() || !machine._check_inv_2() || !machine._check_inv_3() || !machine._check_inv_4() || !machine._check_inv_5() || !machine._check_inv_6() || !machine._check_inv_7() || !machine._check_inv_8() || !machine._check_inv_9() || !machine._check_inv_10() || !machine._check_inv_11() || !machine._check_inv_12() || !machine._check_inv_13() || !machine._check_inv_14() || !machine._check_inv_15() || !machine._check_inv_16() || !machine._check_inv_17() || !machine._check_inv_18() || !machine._check_inv_19() || !machine._check_inv_20() || !machine._check_inv_21() || !machine._check_inv_22() || !machine._check_inv_23() || !machine._check_inv_24() || !machine._check_inv_25() || !machine._check_inv_26() || !machine._check_inv_27() || !machine._check_inv_28() || !machine._check_inv_29() || !machine._check_inv_30() || !machine._check_inv_31() || !machine._check_inv_32() || !machine._check_inv_33() || !machine._check_inv_34() || !machine._check_inv_35() || !machine._check_inv_36() || !machine._check_inv_37() || !machine._check_inv_38() || !machine._check_inv_39() {
-                invariant_violated_b.store(true, Ordering::Release);
+            invariant_violated_b.store(true, Ordering::Release);
         }
 
         let states_m = Arc::new(Mutex::new(HashSet::<Cruise_finite1_deterministic_MC>::new()));
@@ -2653,14 +2653,14 @@ impl Cruise_finite1_deterministic_MC {
                 let next_states = Self::generateNextStates(&mut state, is_caching, &invariant_dependency, Arc::clone(&dependent_invariant_m2), &guard_dependency, dependent_guard_m2, guard_cache, parents_m2, Arc::clone(&transitions));
 
                 //println!("Thread {:?} executing", thread::current().id());
-                next_states.iter().for_each(|next_state| {
+                next_states.iter().cloned().for_each(|next_state| {
                     {
                         let mut states = states_m2.lock().unwrap();
                         let mut collection = collection_m2.lock().unwrap();
-                        if !states.contains(next_state) {
+                        if !states.contains(&next_state) {
                             let cnum_states = number_states.fetch_add(1, Ordering::AcqRel) + 1;
                             states.insert(next_state.clone());
-                            collection.push_back(next_state.clone());
+                            collection.push_back(next_state);
                             //println!("Thread {:?}: states in collection {}", thread::current().id(), collection.len());
                             if cnum_states % 50000 == 0 {
                                 println!("VISITED STATES: {}", cnum_states);
diff --git a/benchmarks/model_checking/Rust/LandingGear_R6.rs b/benchmarks/model_checking/Rust/LandingGear_R6.rs
index d511b15fe..c5d829d63 100644
--- a/benchmarks/model_checking/Rust/LandingGear_R6.rs
+++ b/benchmarks/model_checking/Rust/LandingGear_R6.rs
@@ -23,8 +23,8 @@ pub enum MC_TYPE { BFS, DFS, MIXED }
 
 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub enum DOOR_STATE {
-    open, 
-    closed, 
+    open,
+    closed,
     door_moving
 }
 impl DOOR_STATE {
@@ -37,18 +37,18 @@ impl Default for DOOR_STATE {
 }
 impl fmt::Display for DOOR_STATE {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-       match *self {
-           DOOR_STATE::open => write!(f, "open"),
-           DOOR_STATE::closed => write!(f, "closed"),
-           DOOR_STATE::door_moving => write!(f, "door_moving"),
-       }
+        match *self {
+            DOOR_STATE::open => write!(f, "open"),
+            DOOR_STATE::closed => write!(f, "closed"),
+            DOOR_STATE::door_moving => write!(f, "door_moving"),
+        }
     }
 }
 
 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub enum GEAR_STATE {
-    retracted, 
-    extended, 
+    retracted,
+    extended,
     gear_moving
 }
 impl GEAR_STATE {
@@ -61,17 +61,17 @@ impl Default for GEAR_STATE {
 }
 impl fmt::Display for GEAR_STATE {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-       match *self {
-           GEAR_STATE::retracted => write!(f, "retracted"),
-           GEAR_STATE::extended => write!(f, "extended"),
-           GEAR_STATE::gear_moving => write!(f, "gear_moving"),
-       }
+        match *self {
+            GEAR_STATE::retracted => write!(f, "retracted"),
+            GEAR_STATE::extended => write!(f, "extended"),
+            GEAR_STATE::gear_moving => write!(f, "gear_moving"),
+        }
     }
 }
 
 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub enum HANDLE_STATE {
-    up, 
+    up,
     down
 }
 impl HANDLE_STATE {
@@ -84,17 +84,17 @@ impl Default for HANDLE_STATE {
 }
 impl fmt::Display for HANDLE_STATE {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-       match *self {
-           HANDLE_STATE::up => write!(f, "up"),
-           HANDLE_STATE::down => write!(f, "down"),
-       }
+        match *self {
+            HANDLE_STATE::up => write!(f, "up"),
+            HANDLE_STATE::down => write!(f, "down"),
+        }
     }
 }
 
 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub enum POSITION {
-    fr, 
-    lt, 
+    fr,
+    lt,
     rt
 }
 impl POSITION {
@@ -107,17 +107,17 @@ impl Default for POSITION {
 }
 impl fmt::Display for POSITION {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-       match *self {
-           POSITION::fr => write!(f, "fr"),
-           POSITION::lt => write!(f, "lt"),
-           POSITION::rt => write!(f, "rt"),
-       }
+        match *self {
+            POSITION::fr => write!(f, "fr"),
+            POSITION::lt => write!(f, "lt"),
+            POSITION::rt => write!(f, "rt"),
+        }
     }
 }
 
 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub enum SWITCH_STATE {
-    switch_open, 
+    switch_open,
     switch_closed
 }
 impl SWITCH_STATE {
@@ -130,16 +130,16 @@ impl Default for SWITCH_STATE {
 }
 impl fmt::Display for SWITCH_STATE {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-       match *self {
-           SWITCH_STATE::switch_open => write!(f, "switch_open"),
-           SWITCH_STATE::switch_closed => write!(f, "switch_closed"),
-       }
+        match *self {
+            SWITCH_STATE::switch_open => write!(f, "switch_open"),
+            SWITCH_STATE::switch_closed => write!(f, "switch_closed"),
+        }
     }
 }
 
 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub enum PLANE_STATE {
-    ground, 
+    ground,
     flight
 }
 impl PLANE_STATE {
@@ -152,16 +152,16 @@ impl Default for PLANE_STATE {
 }
 impl fmt::Display for PLANE_STATE {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-       match *self {
-           PLANE_STATE::ground => write!(f, "ground"),
-           PLANE_STATE::flight => write!(f, "flight"),
-       }
+        match *self {
+            PLANE_STATE::ground => write!(f, "ground"),
+            PLANE_STATE::flight => write!(f, "flight"),
+        }
     }
 }
 
 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub enum VALVE_STATE {
-    valve_open, 
+    valve_open,
     valve_closed
 }
 impl VALVE_STATE {
@@ -174,10 +174,10 @@ impl Default for VALVE_STATE {
 }
 impl fmt::Display for VALVE_STATE {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-       match *self {
-           VALVE_STATE::valve_open => write!(f, "valve_open"),
-           VALVE_STATE::valve_closed => write!(f, "valve_closed"),
-       }
+        match *self {
+            VALVE_STATE::valve_open => write!(f, "valve_open"),
+            VALVE_STATE::valve_closed => write!(f, "valve_closed"),
+        }
     }
 }
 
@@ -1365,44 +1365,44 @@ impl LandingGear_R6 {
         //if caching is enabled globally, this will just prefill those, if caching is
         for trans in to_invalidate.iter() {
             match *trans {
-                "_tr_begin_flying" => {self._tr_begin_flying(false);}, 
-                "_tr_land_plane" => {self._tr_land_plane(false);}, 
-                "_tr_open_valve_door_open" => {self._tr_open_valve_door_open(false);}, 
-                "_tr_close_valve_door_open" => {self._tr_close_valve_door_open(false);}, 
-                "_tr_open_valve_door_close" => {self._tr_open_valve_door_close(false);}, 
-                "_tr_close_valve_door_close" => {self._tr_close_valve_door_close(false);}, 
-                "_tr_open_valve_retract_gear" => {self._tr_open_valve_retract_gear(false);}, 
-                "_tr_close_valve_retract_gear" => {self._tr_close_valve_retract_gear(false);}, 
-                "_tr_open_valve_extend_gear" => {self._tr_open_valve_extend_gear(false);}, 
-                "_tr_close_valve_extend_gear" => {self._tr_close_valve_extend_gear(false);}, 
-                "_tr_con_stimulate_open_door_valve" => {self._tr_con_stimulate_open_door_valve(false);}, 
-                "_tr_con_stop_stimulate_open_door_valve" => {self._tr_con_stop_stimulate_open_door_valve(false);}, 
-                "_tr_con_stimulate_close_door_valve" => {self._tr_con_stimulate_close_door_valve(false);}, 
-                "_tr_con_stop_stimulate_close_door_valve" => {self._tr_con_stop_stimulate_close_door_valve(false);}, 
-                "_tr_con_stimulate_retract_gear_valve" => {self._tr_con_stimulate_retract_gear_valve(false);}, 
-                "_tr_con_stop_stimulate_retract_gear_valve" => {self._tr_con_stop_stimulate_retract_gear_valve(false);}, 
-                "_tr_con_stimulate_extend_gear_valve" => {self._tr_con_stimulate_extend_gear_valve(false);}, 
-                "_tr_con_stop_stimulate_extend_gear_valve" => {self._tr_con_stop_stimulate_extend_gear_valve(false);}, 
-                "_tr_env_start_retracting_first" => {self._tr_env_start_retracting_first(false);}, 
-                "_tr_env_retract_gear_skip" => {self._tr_env_retract_gear_skip(false);}, 
-                "_tr_env_retract_gear_last" => {self._tr_env_retract_gear_last(false);}, 
-                "_tr_env_start_extending" => {self._tr_env_start_extending(false);}, 
-                "_tr_env_extend_gear_last" => {self._tr_env_extend_gear_last(false);}, 
-                "_tr_env_extend_gear_skip" => {self._tr_env_extend_gear_skip(false);}, 
-                "_tr_env_start_open_door" => {self._tr_env_start_open_door(false);}, 
-                "_tr_env_open_door_last" => {self._tr_env_open_door_last(false);}, 
-                "_tr_env_open_door_skip" => {self._tr_env_open_door_skip(false);}, 
-                "_tr_env_start_close_door" => {self._tr_env_start_close_door(false);}, 
-                "_tr_env_close_door" => {self._tr_env_close_door(false);}, 
-                "_tr_env_close_door_skip" => {self._tr_env_close_door_skip(false);}, 
-                "_tr_toggle_handle_up" => {self._tr_toggle_handle_up(false);}, 
-                "_tr_toggle_handle_down" => {self._tr_toggle_handle_down(false);}, 
-                "_tr_con_stimulate_general_valve" => {self._tr_con_stimulate_general_valve(false);}, 
-                "_tr_con_stop_stimulate_general_valve" => {self._tr_con_stop_stimulate_general_valve(false);}, 
-                "_tr_evn_open_general_valve" => {self._tr_evn_open_general_valve(false);}, 
-                "_tr_evn_close_general_valve" => {self._tr_evn_close_general_valve(false);}, 
-                "_tr_env_close_analogical_switch" => {self._tr_env_close_analogical_switch(false);}, 
-                "_tr_env_open_analogical_switch" => {self._tr_env_open_analogical_switch(false);}, 
+                "_tr_begin_flying" => {self._tr_begin_flying(false);},
+                "_tr_land_plane" => {self._tr_land_plane(false);},
+                "_tr_open_valve_door_open" => {self._tr_open_valve_door_open(false);},
+                "_tr_close_valve_door_open" => {self._tr_close_valve_door_open(false);},
+                "_tr_open_valve_door_close" => {self._tr_open_valve_door_close(false);},
+                "_tr_close_valve_door_close" => {self._tr_close_valve_door_close(false);},
+                "_tr_open_valve_retract_gear" => {self._tr_open_valve_retract_gear(false);},
+                "_tr_close_valve_retract_gear" => {self._tr_close_valve_retract_gear(false);},
+                "_tr_open_valve_extend_gear" => {self._tr_open_valve_extend_gear(false);},
+                "_tr_close_valve_extend_gear" => {self._tr_close_valve_extend_gear(false);},
+                "_tr_con_stimulate_open_door_valve" => {self._tr_con_stimulate_open_door_valve(false);},
+                "_tr_con_stop_stimulate_open_door_valve" => {self._tr_con_stop_stimulate_open_door_valve(false);},
+                "_tr_con_stimulate_close_door_valve" => {self._tr_con_stimulate_close_door_valve(false);},
+                "_tr_con_stop_stimulate_close_door_valve" => {self._tr_con_stop_stimulate_close_door_valve(false);},
+                "_tr_con_stimulate_retract_gear_valve" => {self._tr_con_stimulate_retract_gear_valve(false);},
+                "_tr_con_stop_stimulate_retract_gear_valve" => {self._tr_con_stop_stimulate_retract_gear_valve(false);},
+                "_tr_con_stimulate_extend_gear_valve" => {self._tr_con_stimulate_extend_gear_valve(false);},
+                "_tr_con_stop_stimulate_extend_gear_valve" => {self._tr_con_stop_stimulate_extend_gear_valve(false);},
+                "_tr_env_start_retracting_first" => {self._tr_env_start_retracting_first(false);},
+                "_tr_env_retract_gear_skip" => {self._tr_env_retract_gear_skip(false);},
+                "_tr_env_retract_gear_last" => {self._tr_env_retract_gear_last(false);},
+                "_tr_env_start_extending" => {self._tr_env_start_extending(false);},
+                "_tr_env_extend_gear_last" => {self._tr_env_extend_gear_last(false);},
+                "_tr_env_extend_gear_skip" => {self._tr_env_extend_gear_skip(false);},
+                "_tr_env_start_open_door" => {self._tr_env_start_open_door(false);},
+                "_tr_env_open_door_last" => {self._tr_env_open_door_last(false);},
+                "_tr_env_open_door_skip" => {self._tr_env_open_door_skip(false);},
+                "_tr_env_start_close_door" => {self._tr_env_start_close_door(false);},
+                "_tr_env_close_door" => {self._tr_env_close_door(false);},
+                "_tr_env_close_door_skip" => {self._tr_env_close_door_skip(false);},
+                "_tr_toggle_handle_up" => {self._tr_toggle_handle_up(false);},
+                "_tr_toggle_handle_down" => {self._tr_toggle_handle_down(false);},
+                "_tr_con_stimulate_general_valve" => {self._tr_con_stimulate_general_valve(false);},
+                "_tr_con_stop_stimulate_general_valve" => {self._tr_con_stop_stimulate_general_valve(false);},
+                "_tr_evn_open_general_valve" => {self._tr_evn_open_general_valve(false);},
+                "_tr_evn_close_general_valve" => {self._tr_evn_close_general_valve(false);},
+                "_tr_env_close_analogical_switch" => {self._tr_env_close_analogical_switch(false);},
+                "_tr_env_open_analogical_switch" => {self._tr_env_open_analogical_switch(false);},
                 _ => {},
             }
         }
@@ -2983,10 +2983,10 @@ impl LandingGear_R6 {
     fn next(collection_m: Arc<Mutex<LinkedList<LandingGear_R6>>>, mc_type: MC_TYPE) -> LandingGear_R6 {
         let mut collection = collection_m.lock().unwrap();
         return match mc_type {
-                MC_TYPE::BFS   => collection.pop_front().unwrap(),
-                MC_TYPE::DFS   => collection.pop_back().unwrap(),
-                MC_TYPE::MIXED => if collection.len() % 2 == 0 { collection.pop_front().unwrap() } else { collection.pop_back().unwrap() }
-            };
+            MC_TYPE::BFS   => collection.pop_front().unwrap(),
+            MC_TYPE::DFS   => collection.pop_back().unwrap(),
+            MC_TYPE::MIXED => if collection.len() % 2 == 0 { collection.pop_front().unwrap() } else { collection.pop_back().unwrap() }
+        };
     }
 
     fn model_check_single_threaded(mc_type: MC_TYPE, is_caching: bool) {
@@ -3178,11 +3178,11 @@ impl LandingGear_R6 {
 
             let next_states = Self::generateNextStates(&mut state, is_caching, &mut invariantDependency, Arc::clone(&dependent_invariant_m), &mut guardDependency, Arc::clone(&dependent_guard_m), Arc::clone(&guard_cache), Arc::clone(&parents_m), Arc::clone(&transitions));
 
-            next_states.iter().for_each(|next_state| {
-                if !states.contains(next_state) {
+            next_states.iter().cloned().for_each(|next_state| {
+                if !states.contains(&next_state) {
                     let cnum_states = number_states.fetch_add(1, Ordering::AcqRel) + 1;
                     states.insert(next_state.clone());
-                    collection_m.lock().unwrap().push_back(next_state.clone());
+                    collection_m.lock().unwrap().push_back(next_state);
                     if cnum_states % 50000 == 0 {
                         println!("VISITED STATES: {}", cnum_states);
                         println!("EVALUATED TRANSITIONS: {}", transitions.load(Ordering::Acquire));
@@ -3217,7 +3217,7 @@ impl LandingGear_R6 {
         let possible_queue_changes_b = Arc::new(AtomicI32::new(0));
 
         if !machine._check_inv_1() || !machine._check_inv_2() || !machine._check_inv_3() || !machine._check_inv_4() || !machine._check_inv_5() || !machine._check_inv_6() || !machine._check_inv_7() || !machine._check_inv_8() || !machine._check_inv_9() || !machine._check_inv_10() || !machine._check_inv_11() || !machine._check_inv_12() || !machine._check_inv_13() || !machine._check_inv_14() || !machine._check_inv_15() || !machine._check_inv_16() || !machine._check_inv_17() || !machine._check_inv_18() || !machine._check_inv_19() || !machine._check_inv_20() || !machine._check_inv_21() || !machine._check_inv_22() || !machine._check_inv_23() || !machine._check_inv_24() || !machine._check_inv_25() {
-                invariant_violated_b.store(true, Ordering::Release);
+            invariant_violated_b.store(true, Ordering::Release);
         }
 
         let states_m = Arc::new(Mutex::new(HashSet::<LandingGear_R6>::new()));
@@ -3421,14 +3421,14 @@ impl LandingGear_R6 {
                 let next_states = Self::generateNextStates(&mut state, is_caching, &invariant_dependency, Arc::clone(&dependent_invariant_m2), &guard_dependency, dependent_guard_m2, guard_cache, parents_m2, Arc::clone(&transitions));
 
                 //println!("Thread {:?} executing", thread::current().id());
-                next_states.iter().for_each(|next_state| {
+                next_states.iter().cloned().for_each(|next_state| {
                     {
                         let mut states = states_m2.lock().unwrap();
                         let mut collection = collection_m2.lock().unwrap();
-                        if !states.contains(next_state) {
+                        if !states.contains(&next_state) {
                             let cnum_states = number_states.fetch_add(1, Ordering::AcqRel) + 1;
                             states.insert(next_state.clone());
-                            collection.push_back(next_state.clone());
+                            collection.push_back(next_state);
                             //println!("Thread {:?}: states in collection {}", thread::current().id(), collection.len());
                             if cnum_states % 50000 == 0 {
                                 println!("VISITED STATES: {}", cnum_states);
diff --git a/benchmarks/model_checking/Rust/Lift_MC_Large.rs b/benchmarks/model_checking/Rust/Lift_MC_Large.rs
index 6124243dc..7dd7d1805 100644
--- a/benchmarks/model_checking/Rust/Lift_MC_Large.rs
+++ b/benchmarks/model_checking/Rust/Lift_MC_Large.rs
@@ -94,8 +94,8 @@ impl Lift_MC_Large {
         //if caching is enabled globally, this will just prefill those, if caching is
         for trans in to_invalidate.iter() {
             match *trans {
-                "_tr_inc" => {self._tr_inc(false);}, 
-                "_tr_dec" => {self._tr_dec(false);}, 
+                "_tr_inc" => {self._tr_inc(false);},
+                "_tr_dec" => {self._tr_dec(false);},
                 _ => {},
             }
         }
@@ -230,10 +230,10 @@ impl Lift_MC_Large {
     fn next(collection_m: Arc<Mutex<LinkedList<Lift_MC_Large>>>, mc_type: MC_TYPE) -> Lift_MC_Large {
         let mut collection = collection_m.lock().unwrap();
         return match mc_type {
-                MC_TYPE::BFS   => collection.pop_front().unwrap(),
-                MC_TYPE::DFS   => collection.pop_back().unwrap(),
-                MC_TYPE::MIXED => if collection.len() % 2 == 0 { collection.pop_front().unwrap() } else { collection.pop_back().unwrap() }
-            };
+            MC_TYPE::BFS   => collection.pop_front().unwrap(),
+            MC_TYPE::DFS   => collection.pop_back().unwrap(),
+            MC_TYPE::MIXED => if collection.len() % 2 == 0 { collection.pop_front().unwrap() } else { collection.pop_back().unwrap() }
+        };
     }
 
     fn model_check_single_threaded(mc_type: MC_TYPE, is_caching: bool) {
@@ -281,11 +281,11 @@ impl Lift_MC_Large {
 
             let next_states = Self::generateNextStates(&mut state, is_caching, &mut invariantDependency, Arc::clone(&dependent_invariant_m), &mut guardDependency, Arc::clone(&dependent_guard_m), Arc::clone(&guard_cache), Arc::clone(&parents_m), Arc::clone(&transitions));
 
-            next_states.iter().for_each(|next_state| {
-                if !states.contains(next_state) {
+            next_states.iter().cloned().for_each(|next_state| {
+                if !states.contains(&next_state) {
                     let cnum_states = number_states.fetch_add(1, Ordering::AcqRel) + 1;
                     states.insert(next_state.clone());
-                    collection_m.lock().unwrap().push_back(next_state.clone());
+                    collection_m.lock().unwrap().push_back(next_state);
                     if cnum_states % 50000 == 0 {
                         println!("VISITED STATES: {}", cnum_states);
                         println!("EVALUATED TRANSITIONS: {}", transitions.load(Ordering::Acquire));
@@ -320,7 +320,7 @@ impl Lift_MC_Large {
         let possible_queue_changes_b = Arc::new(AtomicI32::new(0));
 
         if !machine._check_inv_1() || !machine._check_inv_2() {
-                invariant_violated_b.store(true, Ordering::Release);
+            invariant_violated_b.store(true, Ordering::Release);
         }
 
         let states_m = Arc::new(Mutex::new(HashSet::<Lift_MC_Large>::new()));
@@ -380,14 +380,14 @@ impl Lift_MC_Large {
                 let next_states = Self::generateNextStates(&mut state, is_caching, &invariant_dependency, Arc::clone(&dependent_invariant_m2), &guard_dependency, dependent_guard_m2, guard_cache, parents_m2, Arc::clone(&transitions));
 
                 //println!("Thread {:?} executing", thread::current().id());
-                next_states.iter().for_each(|next_state| {
+                next_states.iter().cloned().for_each(|next_state| {
                     {
                         let mut states = states_m2.lock().unwrap();
                         let mut collection = collection_m2.lock().unwrap();
-                        if !states.contains(next_state) {
+                        if !states.contains(&next_state) {
                             let cnum_states = number_states.fetch_add(1, Ordering::AcqRel) + 1;
                             states.insert(next_state.clone());
-                            collection.push_back(next_state.clone());
+                            collection.push_back(next_state);
                             //println!("Thread {:?}: states in collection {}", thread::current().id(), collection.len());
                             if cnum_states % 50000 == 0 {
                                 println!("VISITED STATES: {}", cnum_states);
diff --git a/benchmarks/model_checking/Rust/Makefile b/benchmarks/model_checking/Rust/Makefile
index 9cfaf0b48..16351e5c1 100644
--- a/benchmarks/model_checking/Rust/Makefile
+++ b/benchmarks/model_checking/Rust/Makefile
@@ -2,7 +2,7 @@
 
 .PHONY: all clean
 
-all: CAN_BUS_tlc Cruise_finite1_deterministic_MC LandingGear_R6 Lift_MC_Large nota_v2 QueensWithEvents_4 QueensWithEvents_8 sort_m2_data1000_MC Train1_Lukas_POR_v3 Train_1_beebook_deterministic_MC_POR_v2
+all: CAN_BUS_tlc Cruise_finite1_deterministic_MC LandingGear_R6 Lift_MC_Large sort_m2_data1000_MC QueensWithEvents_4 Train1_Lukas_POR_v3 Train_1_beebook_deterministic_MC_POR_v2 nota_v2 QueensWithEvents_8
 
 OUTPUT ?= runtimes.txt
 
diff --git a/benchmarks/model_checking/Rust/QueensWithEvents_4.rs b/benchmarks/model_checking/Rust/QueensWithEvents_4.rs
index 3efa82b75..3a5756de8 100644
--- a/benchmarks/model_checking/Rust/QueensWithEvents_4.rs
+++ b/benchmarks/model_checking/Rust/QueensWithEvents_4.rs
@@ -64,42 +64,56 @@ impl QueensWithEvents_4 {
     }
 
     pub fn Solve(&mut self, mut solution: BRelation<BInteger, BInteger>) -> () {
+        //quantified_predicate
         let mut _ic_boolean_1 = BBoolean::new(true);
-        for _ic_x_1 in self.interval.clone().iter().cloned() {
-            for _ic_y_1 in self.interval.clone().iter().cloned() {
-                let mut _ic_boolean_0 = BBoolean::new(true);
-                for _ic_z_1 in self.interval.clone().iter().cloned() {
-                    if !(solution.elementOf(&BTuple::from_refs(&_ic_x_1, &_ic_z_1)).implies(&_ic_y_1.equal(&_ic_z_1))).booleanValue() {
-                        _ic_boolean_0 = BBoolean::new(false);
+        if solution.domain().equal(&self.interval).and(&solution.range().equal(&self.interval)).booleanValue() {
+            for _ic_x_1 in self.interval.clone().iter().cloned() {
+                for _ic_y_1 in self.interval.clone().iter().cloned() {
+                    //quantified_predicate
+                    let mut _ic_boolean_0 = BBoolean::new(true);
+                    for _ic_z_1 in self.interval.clone().iter().cloned() {
+                        if !(solution.elementOf(&BTuple::from_refs(&_ic_x_1, &_ic_z_1)).implies(&_ic_y_1.equal(&_ic_z_1))).booleanValue() {
+                            _ic_boolean_0 = BBoolean::new(false);
+                            break;
+                        }
+
+                    }
+
+                    if !(solution.elementOf(&BTuple::from_refs(&_ic_x_1, &_ic_y_1)).implies(&_ic_boolean_0)).booleanValue() {
+                        _ic_boolean_1 = BBoolean::new(false);
                         break;
                     }
 
                 }
-                if !(solution.elementOf(&BTuple::from_refs(&_ic_x_1, &_ic_y_1)).implies(&_ic_boolean_0)).booleanValue() {
-                    _ic_boolean_1 = BBoolean::new(false);
-                    break;
-                }
-
             }
         }
+
+        //quantified_predicate
         let mut _ic_boolean_2 = BBoolean::new(true);
-        for _ic_q1_1 in self.interval.clone().iter().cloned() {
-            for _ic_q2_1 in self.interval.difference(&BSet::new(vec![BInteger::new(1)])).clone().iter().cloned() {
-                if !(_ic_q2_1.greater(&_ic_q1_1).implies(&solution.functionCall(&_ic_q1_1).plus(&_ic_q2_1).minus(&_ic_q1_1).unequal(&solution.functionCall(&_ic_q2_1)).and(&solution.functionCall(&_ic_q1_1).minus(&_ic_q2_1).plus(&_ic_q1_1).unequal(&solution.functionCall(&_ic_q2_1))))).booleanValue() {
-                    _ic_boolean_2 = BBoolean::new(false);
-                    break;
-                }
+        if solution.domain().equal(&self.interval).and(&solution.range().equal(&self.interval)).and(&_ic_boolean_1).booleanValue() {
+            for _ic_q1_1 in self.interval.clone().iter().cloned() {
+                for _ic_q2_1 in self.interval.difference(&BSet::new(vec![BInteger::new(1)])).clone().iter().cloned() {
+                    if !(_ic_q2_1.greater(&_ic_q1_1).implies(&solution.functionCall(&_ic_q1_1).plus(&_ic_q2_1).minus(&_ic_q1_1).unequal(&solution.functionCall(&_ic_q2_1)).and(&solution.functionCall(&_ic_q1_1).minus(&_ic_q2_1).plus(&_ic_q1_1).unequal(&solution.functionCall(&_ic_q2_1))))).booleanValue() {
+                        _ic_boolean_2 = BBoolean::new(false);
+                        break;
+                    }
 
+                }
             }
         }
+
+        //quantified_predicate
         let mut _ic_boolean_3 = BBoolean::new(true);
-        for _ic_x_1 in self.queens.domain().clone().iter().cloned() {
-            if !(solution.functionCall(&_ic_x_1).equal(&self.queens.functionCall(&_ic_x_1))).booleanValue() {
-                _ic_boolean_3 = BBoolean::new(false);
-                break;
-            }
+        if solution.domain().equal(&self.interval).and(&solution.range().equal(&self.interval)).and(&_ic_boolean_1).and(&_ic_boolean_2).booleanValue() {
+            for _ic_x_1 in self.queens.domain().clone().iter().cloned() {
+                if !(solution.functionCall(&_ic_x_1).equal(&self.queens.functionCall(&_ic_x_1))).booleanValue() {
+                    _ic_boolean_3 = BBoolean::new(false);
+                    break;
+                }
 
+            }
         }
+
         if (self.allFields.elementOf(&solution).and(&solution.domain().equal(&self.interval)).and(&solution.range().equal(&self.interval)).and(&_ic_boolean_1).and(&_ic_boolean_2).and(&_ic_boolean_3)).booleanValue() {
             self.queens = solution.clone().clone();
         } else {
@@ -111,41 +125,56 @@ impl QueensWithEvents_4 {
         //transition
         if !is_caching || self._tr_cache_Solve.is_none() {
             let mut _ic_set_4: BSet<BRelation<BInteger, BInteger>> = BSet::new(vec![]);
+            //transition, parameters, no condidtion
             for _ic_solution_1 in self.allFields.clone().iter().cloned() {
+                //quantified_predicate
                 let mut _ic_boolean_5 = BBoolean::new(true);
-                for _ic_x_1 in self.interval.clone().iter().cloned() {
-                    for _ic_y_1 in self.interval.clone().iter().cloned() {
-                        let mut _ic_boolean_4 = BBoolean::new(true);
-                        for _ic_z_1 in self.interval.clone().iter().cloned() {
-                            if !(_ic_solution_1.elementOf(&BTuple::from_refs(&_ic_x_1, &_ic_z_1)).implies(&_ic_y_1.equal(&_ic_z_1))).booleanValue() {
-                                _ic_boolean_4 = BBoolean::new(false);
+                if _ic_solution_1.domain().equal(&self.interval).and(&_ic_solution_1.range().equal(&self.interval)).booleanValue() {
+                    for _ic_x_1 in self.interval.clone().iter().cloned() {
+                        for _ic_y_1 in self.interval.clone().iter().cloned() {
+                            //quantified_predicate
+                            let mut _ic_boolean_4 = BBoolean::new(true);
+                            for _ic_z_1 in self.interval.clone().iter().cloned() {
+                                if !(_ic_solution_1.elementOf(&BTuple::from_refs(&_ic_x_1, &_ic_z_1)).implies(&_ic_y_1.equal(&_ic_z_1))).booleanValue() {
+                                    _ic_boolean_4 = BBoolean::new(false);
+                                    break;
+                                }
+
+                            }
+
+                            if !(_ic_solution_1.elementOf(&BTuple::from_refs(&_ic_x_1, &_ic_y_1)).implies(&_ic_boolean_4)).booleanValue() {
+                                _ic_boolean_5 = BBoolean::new(false);
                                 break;
                             }
 
                         }
-                        if !(_ic_solution_1.elementOf(&BTuple::from_refs(&_ic_x_1, &_ic_y_1)).implies(&_ic_boolean_4)).booleanValue() {
-                            _ic_boolean_5 = BBoolean::new(false);
-                            break;
-                        }
+                    }
+                }
+                //quantified_predicate
+                let mut _ic_boolean_6 = BBoolean::new(true);
+                if _ic_solution_1.domain().equal(&self.interval).and(&_ic_solution_1.range().equal(&self.interval)).and(&_ic_boolean_5).booleanValue() {
+                    for _ic_q1_1 in self.interval.clone().iter().cloned() {
+                        for _ic_q2_1 in self.interval.difference(&BSet::new(vec![BInteger::new(1)])).clone().iter().cloned() {
+                            if !(_ic_q2_1.greater(&_ic_q1_1).implies(&_ic_solution_1.functionCall(&_ic_q1_1).plus(&_ic_q2_1).minus(&_ic_q1_1).unequal(&_ic_solution_1.functionCall(&_ic_q2_1)).and(&_ic_solution_1.functionCall(&_ic_q1_1).minus(&_ic_q2_1).plus(&_ic_q1_1).unequal(&_ic_solution_1.functionCall(&_ic_q2_1))))).booleanValue() {
+                                _ic_boolean_6 = BBoolean::new(false);
+                                break;
+                            }
 
+                        }
                     }
-                }let mut _ic_boolean_6 = BBoolean::new(true);
-                for _ic_q1_1 in self.interval.clone().iter().cloned() {
-                    for _ic_q2_1 in self.interval.difference(&BSet::new(vec![BInteger::new(1)])).clone().iter().cloned() {
-                        if !(_ic_q2_1.greater(&_ic_q1_1).implies(&_ic_solution_1.functionCall(&_ic_q1_1).plus(&_ic_q2_1).minus(&_ic_q1_1).unequal(&_ic_solution_1.functionCall(&_ic_q2_1)).and(&_ic_solution_1.functionCall(&_ic_q1_1).minus(&_ic_q2_1).plus(&_ic_q1_1).unequal(&_ic_solution_1.functionCall(&_ic_q2_1))))).booleanValue() {
-                            _ic_boolean_6 = BBoolean::new(false);
+                }
+                //quantified_predicate
+                let mut _ic_boolean_7 = BBoolean::new(true);
+                if _ic_solution_1.domain().equal(&self.interval).and(&_ic_solution_1.range().equal(&self.interval)).and(&_ic_boolean_5).and(&_ic_boolean_6).booleanValue() {
+                    for _ic_x_1 in self.queens.domain().clone().iter().cloned() {
+                        if !(_ic_solution_1.functionCall(&_ic_x_1).equal(&self.queens.functionCall(&_ic_x_1))).booleanValue() {
+                            _ic_boolean_7 = BBoolean::new(false);
                             break;
                         }
 
                     }
-                }let mut _ic_boolean_7 = BBoolean::new(true);
-                for _ic_x_1 in self.queens.domain().clone().iter().cloned() {
-                    if !(_ic_solution_1.functionCall(&_ic_x_1).equal(&self.queens.functionCall(&_ic_x_1))).booleanValue() {
-                        _ic_boolean_7 = BBoolean::new(false);
-                        break;
-                    }
-
                 }
+
                 if (_ic_solution_1.domain().equal(&self.interval).and(&_ic_solution_1.range().equal(&self.interval)).and(&_ic_boolean_5).and(&_ic_boolean_6).and(&_ic_boolean_7)).booleanValue() {
                     _ic_set_4 = _ic_set_4._union(&BSet::new(vec![_ic_solution_1]));
                 }
@@ -168,7 +197,7 @@ impl QueensWithEvents_4 {
         //if caching is enabled globally, this will just prefill those, if caching is
         for trans in to_invalidate.iter() {
             match *trans {
-                "_tr_Solve" => {self._tr_Solve(false);}, 
+                "_tr_Solve" => {self._tr_Solve(false);},
                 _ => {},
             }
         }
@@ -270,10 +299,10 @@ impl QueensWithEvents_4 {
     fn next(collection_m: Arc<Mutex<LinkedList<QueensWithEvents_4>>>, mc_type: MC_TYPE) -> QueensWithEvents_4 {
         let mut collection = collection_m.lock().unwrap();
         return match mc_type {
-                MC_TYPE::BFS   => collection.pop_front().unwrap(),
-                MC_TYPE::DFS   => collection.pop_back().unwrap(),
-                MC_TYPE::MIXED => if collection.len() % 2 == 0 { collection.pop_front().unwrap() } else { collection.pop_back().unwrap() }
-            };
+            MC_TYPE::BFS   => collection.pop_front().unwrap(),
+            MC_TYPE::DFS   => collection.pop_back().unwrap(),
+            MC_TYPE::MIXED => if collection.len() % 2 == 0 { collection.pop_front().unwrap() } else { collection.pop_back().unwrap() }
+        };
     }
 
     fn model_check_single_threaded(mc_type: MC_TYPE, is_caching: bool) {
@@ -317,11 +346,11 @@ impl QueensWithEvents_4 {
 
             let next_states = Self::generateNextStates(&mut state, is_caching, &mut invariantDependency, Arc::clone(&dependent_invariant_m), &mut guardDependency, Arc::clone(&dependent_guard_m), Arc::clone(&guard_cache), Arc::clone(&parents_m), Arc::clone(&transitions));
 
-            next_states.iter().for_each(|next_state| {
-                if !states.contains(next_state) {
+            next_states.iter().cloned().for_each(|next_state| {
+                if !states.contains(&next_state) {
                     let cnum_states = number_states.fetch_add(1, Ordering::AcqRel) + 1;
                     states.insert(next_state.clone());
-                    collection_m.lock().unwrap().push_back(next_state.clone());
+                    collection_m.lock().unwrap().push_back(next_state);
                     if cnum_states % 50000 == 0 {
                         println!("VISITED STATES: {}", cnum_states);
                         println!("EVALUATED TRANSITIONS: {}", transitions.load(Ordering::Acquire));
@@ -356,7 +385,7 @@ impl QueensWithEvents_4 {
         let possible_queue_changes_b = Arc::new(AtomicI32::new(0));
 
         if !machine._check_inv_1() {
-                invariant_violated_b.store(true, Ordering::Release);
+            invariant_violated_b.store(true, Ordering::Release);
         }
 
         let states_m = Arc::new(Mutex::new(HashSet::<QueensWithEvents_4>::new()));
@@ -412,14 +441,14 @@ impl QueensWithEvents_4 {
                 let next_states = Self::generateNextStates(&mut state, is_caching, &invariant_dependency, Arc::clone(&dependent_invariant_m2), &guard_dependency, dependent_guard_m2, guard_cache, parents_m2, Arc::clone(&transitions));
 
                 //println!("Thread {:?} executing", thread::current().id());
-                next_states.iter().for_each(|next_state| {
+                next_states.iter().cloned().for_each(|next_state| {
                     {
                         let mut states = states_m2.lock().unwrap();
                         let mut collection = collection_m2.lock().unwrap();
-                        if !states.contains(next_state) {
+                        if !states.contains(&next_state) {
                             let cnum_states = number_states.fetch_add(1, Ordering::AcqRel) + 1;
                             states.insert(next_state.clone());
-                            collection.push_back(next_state.clone());
+                            collection.push_back(next_state);
                             //println!("Thread {:?}: states in collection {}", thread::current().id(), collection.len());
                             if cnum_states % 50000 == 0 {
                                 println!("VISITED STATES: {}", cnum_states);
diff --git a/benchmarks/model_checking/Rust/QueensWithEvents_8.rs b/benchmarks/model_checking/Rust/QueensWithEvents_8.rs
index 707064e62..a4855dd4d 100644
--- a/benchmarks/model_checking/Rust/QueensWithEvents_8.rs
+++ b/benchmarks/model_checking/Rust/QueensWithEvents_8.rs
@@ -64,42 +64,56 @@ impl QueensWithEvents_8 {
     }
 
     pub fn Solve(&mut self, mut solution: BRelation<BInteger, BInteger>) -> () {
+        //quantified_predicate
         let mut _ic_boolean_1 = BBoolean::new(true);
-        for _ic_x_1 in self.interval.clone().iter().cloned() {
-            for _ic_y_1 in self.interval.clone().iter().cloned() {
-                let mut _ic_boolean_0 = BBoolean::new(true);
-                for _ic_z_1 in self.interval.clone().iter().cloned() {
-                    if !(solution.elementOf(&BTuple::from_refs(&_ic_x_1, &_ic_z_1)).implies(&_ic_y_1.equal(&_ic_z_1))).booleanValue() {
-                        _ic_boolean_0 = BBoolean::new(false);
+        if solution.domain().equal(&self.interval).and(&solution.range().equal(&self.interval)).booleanValue() {
+            for _ic_x_1 in self.interval.clone().iter().cloned() {
+                for _ic_y_1 in self.interval.clone().iter().cloned() {
+                    //quantified_predicate
+                    let mut _ic_boolean_0 = BBoolean::new(true);
+                    for _ic_z_1 in self.interval.clone().iter().cloned() {
+                        if !(solution.elementOf(&BTuple::from_refs(&_ic_x_1, &_ic_z_1)).implies(&_ic_y_1.equal(&_ic_z_1))).booleanValue() {
+                            _ic_boolean_0 = BBoolean::new(false);
+                            break;
+                        }
+
+                    }
+
+                    if !(solution.elementOf(&BTuple::from_refs(&_ic_x_1, &_ic_y_1)).implies(&_ic_boolean_0)).booleanValue() {
+                        _ic_boolean_1 = BBoolean::new(false);
                         break;
                     }
 
                 }
-                if !(solution.elementOf(&BTuple::from_refs(&_ic_x_1, &_ic_y_1)).implies(&_ic_boolean_0)).booleanValue() {
-                    _ic_boolean_1 = BBoolean::new(false);
-                    break;
-                }
-
             }
         }
+
+        //quantified_predicate
         let mut _ic_boolean_2 = BBoolean::new(true);
-        for _ic_q1_1 in self.interval.clone().iter().cloned() {
-            for _ic_q2_1 in self.interval.difference(&BSet::new(vec![BInteger::new(1)])).clone().iter().cloned() {
-                if !(_ic_q2_1.greater(&_ic_q1_1).implies(&solution.functionCall(&_ic_q1_1).plus(&_ic_q2_1).minus(&_ic_q1_1).unequal(&solution.functionCall(&_ic_q2_1)).and(&solution.functionCall(&_ic_q1_1).minus(&_ic_q2_1).plus(&_ic_q1_1).unequal(&solution.functionCall(&_ic_q2_1))))).booleanValue() {
-                    _ic_boolean_2 = BBoolean::new(false);
-                    break;
-                }
+        if solution.domain().equal(&self.interval).and(&solution.range().equal(&self.interval)).and(&_ic_boolean_1).booleanValue() {
+            for _ic_q1_1 in self.interval.clone().iter().cloned() {
+                for _ic_q2_1 in self.interval.difference(&BSet::new(vec![BInteger::new(1)])).clone().iter().cloned() {
+                    if !(_ic_q2_1.greater(&_ic_q1_1).implies(&solution.functionCall(&_ic_q1_1).plus(&_ic_q2_1).minus(&_ic_q1_1).unequal(&solution.functionCall(&_ic_q2_1)).and(&solution.functionCall(&_ic_q1_1).minus(&_ic_q2_1).plus(&_ic_q1_1).unequal(&solution.functionCall(&_ic_q2_1))))).booleanValue() {
+                        _ic_boolean_2 = BBoolean::new(false);
+                        break;
+                    }
 
+                }
             }
         }
+
+        //quantified_predicate
         let mut _ic_boolean_3 = BBoolean::new(true);
-        for _ic_x_1 in self.queens.domain().clone().iter().cloned() {
-            if !(solution.functionCall(&_ic_x_1).equal(&self.queens.functionCall(&_ic_x_1))).booleanValue() {
-                _ic_boolean_3 = BBoolean::new(false);
-                break;
-            }
+        if solution.domain().equal(&self.interval).and(&solution.range().equal(&self.interval)).and(&_ic_boolean_1).and(&_ic_boolean_2).booleanValue() {
+            for _ic_x_1 in self.queens.domain().clone().iter().cloned() {
+                if !(solution.functionCall(&_ic_x_1).equal(&self.queens.functionCall(&_ic_x_1))).booleanValue() {
+                    _ic_boolean_3 = BBoolean::new(false);
+                    break;
+                }
 
+            }
         }
+
         if (self.allFields.elementOf(&solution).and(&solution.domain().equal(&self.interval)).and(&solution.range().equal(&self.interval)).and(&_ic_boolean_1).and(&_ic_boolean_2).and(&_ic_boolean_3)).booleanValue() {
             self.queens = solution.clone().clone();
         } else {
@@ -111,41 +125,56 @@ impl QueensWithEvents_8 {
         //transition
         if !is_caching || self._tr_cache_Solve.is_none() {
             let mut _ic_set_4: BSet<BRelation<BInteger, BInteger>> = BSet::new(vec![]);
+            //transition, parameters, no condidtion
             for _ic_solution_1 in self.allFields.clone().iter().cloned() {
+                //quantified_predicate
                 let mut _ic_boolean_5 = BBoolean::new(true);
-                for _ic_x_1 in self.interval.clone().iter().cloned() {
-                    for _ic_y_1 in self.interval.clone().iter().cloned() {
-                        let mut _ic_boolean_4 = BBoolean::new(true);
-                        for _ic_z_1 in self.interval.clone().iter().cloned() {
-                            if !(_ic_solution_1.elementOf(&BTuple::from_refs(&_ic_x_1, &_ic_z_1)).implies(&_ic_y_1.equal(&_ic_z_1))).booleanValue() {
-                                _ic_boolean_4 = BBoolean::new(false);
+                if _ic_solution_1.domain().equal(&self.interval).and(&_ic_solution_1.range().equal(&self.interval)).booleanValue() {
+                    for _ic_x_1 in self.interval.clone().iter().cloned() {
+                        for _ic_y_1 in self.interval.clone().iter().cloned() {
+                            //quantified_predicate
+                            let mut _ic_boolean_4 = BBoolean::new(true);
+                            for _ic_z_1 in self.interval.clone().iter().cloned() {
+                                if !(_ic_solution_1.elementOf(&BTuple::from_refs(&_ic_x_1, &_ic_z_1)).implies(&_ic_y_1.equal(&_ic_z_1))).booleanValue() {
+                                    _ic_boolean_4 = BBoolean::new(false);
+                                    break;
+                                }
+
+                            }
+
+                            if !(_ic_solution_1.elementOf(&BTuple::from_refs(&_ic_x_1, &_ic_y_1)).implies(&_ic_boolean_4)).booleanValue() {
+                                _ic_boolean_5 = BBoolean::new(false);
                                 break;
                             }
 
                         }
-                        if !(_ic_solution_1.elementOf(&BTuple::from_refs(&_ic_x_1, &_ic_y_1)).implies(&_ic_boolean_4)).booleanValue() {
-                            _ic_boolean_5 = BBoolean::new(false);
-                            break;
-                        }
+                    }
+                }
+                //quantified_predicate
+                let mut _ic_boolean_6 = BBoolean::new(true);
+                if _ic_solution_1.domain().equal(&self.interval).and(&_ic_solution_1.range().equal(&self.interval)).and(&_ic_boolean_5).booleanValue() {
+                    for _ic_q1_1 in self.interval.clone().iter().cloned() {
+                        for _ic_q2_1 in self.interval.difference(&BSet::new(vec![BInteger::new(1)])).clone().iter().cloned() {
+                            if !(_ic_q2_1.greater(&_ic_q1_1).implies(&_ic_solution_1.functionCall(&_ic_q1_1).plus(&_ic_q2_1).minus(&_ic_q1_1).unequal(&_ic_solution_1.functionCall(&_ic_q2_1)).and(&_ic_solution_1.functionCall(&_ic_q1_1).minus(&_ic_q2_1).plus(&_ic_q1_1).unequal(&_ic_solution_1.functionCall(&_ic_q2_1))))).booleanValue() {
+                                _ic_boolean_6 = BBoolean::new(false);
+                                break;
+                            }
 
+                        }
                     }
-                }let mut _ic_boolean_6 = BBoolean::new(true);
-                for _ic_q1_1 in self.interval.clone().iter().cloned() {
-                    for _ic_q2_1 in self.interval.difference(&BSet::new(vec![BInteger::new(1)])).clone().iter().cloned() {
-                        if !(_ic_q2_1.greater(&_ic_q1_1).implies(&_ic_solution_1.functionCall(&_ic_q1_1).plus(&_ic_q2_1).minus(&_ic_q1_1).unequal(&_ic_solution_1.functionCall(&_ic_q2_1)).and(&_ic_solution_1.functionCall(&_ic_q1_1).minus(&_ic_q2_1).plus(&_ic_q1_1).unequal(&_ic_solution_1.functionCall(&_ic_q2_1))))).booleanValue() {
-                            _ic_boolean_6 = BBoolean::new(false);
+                }
+                //quantified_predicate
+                let mut _ic_boolean_7 = BBoolean::new(true);
+                if _ic_solution_1.domain().equal(&self.interval).and(&_ic_solution_1.range().equal(&self.interval)).and(&_ic_boolean_5).and(&_ic_boolean_6).booleanValue() {
+                    for _ic_x_1 in self.queens.domain().clone().iter().cloned() {
+                        if !(_ic_solution_1.functionCall(&_ic_x_1).equal(&self.queens.functionCall(&_ic_x_1))).booleanValue() {
+                            _ic_boolean_7 = BBoolean::new(false);
                             break;
                         }
 
                     }
-                }let mut _ic_boolean_7 = BBoolean::new(true);
-                for _ic_x_1 in self.queens.domain().clone().iter().cloned() {
-                    if !(_ic_solution_1.functionCall(&_ic_x_1).equal(&self.queens.functionCall(&_ic_x_1))).booleanValue() {
-                        _ic_boolean_7 = BBoolean::new(false);
-                        break;
-                    }
-
                 }
+
                 if (_ic_solution_1.domain().equal(&self.interval).and(&_ic_solution_1.range().equal(&self.interval)).and(&_ic_boolean_5).and(&_ic_boolean_6).and(&_ic_boolean_7)).booleanValue() {
                     _ic_set_4 = _ic_set_4._union(&BSet::new(vec![_ic_solution_1]));
                 }
@@ -168,7 +197,7 @@ impl QueensWithEvents_8 {
         //if caching is enabled globally, this will just prefill those, if caching is
         for trans in to_invalidate.iter() {
             match *trans {
-                "_tr_Solve" => {self._tr_Solve(false);}, 
+                "_tr_Solve" => {self._tr_Solve(false);},
                 _ => {},
             }
         }
@@ -270,10 +299,10 @@ impl QueensWithEvents_8 {
     fn next(collection_m: Arc<Mutex<LinkedList<QueensWithEvents_8>>>, mc_type: MC_TYPE) -> QueensWithEvents_8 {
         let mut collection = collection_m.lock().unwrap();
         return match mc_type {
-                MC_TYPE::BFS   => collection.pop_front().unwrap(),
-                MC_TYPE::DFS   => collection.pop_back().unwrap(),
-                MC_TYPE::MIXED => if collection.len() % 2 == 0 { collection.pop_front().unwrap() } else { collection.pop_back().unwrap() }
-            };
+            MC_TYPE::BFS   => collection.pop_front().unwrap(),
+            MC_TYPE::DFS   => collection.pop_back().unwrap(),
+            MC_TYPE::MIXED => if collection.len() % 2 == 0 { collection.pop_front().unwrap() } else { collection.pop_back().unwrap() }
+        };
     }
 
     fn model_check_single_threaded(mc_type: MC_TYPE, is_caching: bool) {
@@ -317,11 +346,11 @@ impl QueensWithEvents_8 {
 
             let next_states = Self::generateNextStates(&mut state, is_caching, &mut invariantDependency, Arc::clone(&dependent_invariant_m), &mut guardDependency, Arc::clone(&dependent_guard_m), Arc::clone(&guard_cache), Arc::clone(&parents_m), Arc::clone(&transitions));
 
-            next_states.iter().for_each(|next_state| {
-                if !states.contains(next_state) {
+            next_states.iter().cloned().for_each(|next_state| {
+                if !states.contains(&next_state) {
                     let cnum_states = number_states.fetch_add(1, Ordering::AcqRel) + 1;
                     states.insert(next_state.clone());
-                    collection_m.lock().unwrap().push_back(next_state.clone());
+                    collection_m.lock().unwrap().push_back(next_state);
                     if cnum_states % 50000 == 0 {
                         println!("VISITED STATES: {}", cnum_states);
                         println!("EVALUATED TRANSITIONS: {}", transitions.load(Ordering::Acquire));
@@ -356,7 +385,7 @@ impl QueensWithEvents_8 {
         let possible_queue_changes_b = Arc::new(AtomicI32::new(0));
 
         if !machine._check_inv_1() {
-                invariant_violated_b.store(true, Ordering::Release);
+            invariant_violated_b.store(true, Ordering::Release);
         }
 
         let states_m = Arc::new(Mutex::new(HashSet::<QueensWithEvents_8>::new()));
@@ -412,14 +441,14 @@ impl QueensWithEvents_8 {
                 let next_states = Self::generateNextStates(&mut state, is_caching, &invariant_dependency, Arc::clone(&dependent_invariant_m2), &guard_dependency, dependent_guard_m2, guard_cache, parents_m2, Arc::clone(&transitions));
 
                 //println!("Thread {:?} executing", thread::current().id());
-                next_states.iter().for_each(|next_state| {
+                next_states.iter().cloned().for_each(|next_state| {
                     {
                         let mut states = states_m2.lock().unwrap();
                         let mut collection = collection_m2.lock().unwrap();
-                        if !states.contains(next_state) {
+                        if !states.contains(&next_state) {
                             let cnum_states = number_states.fetch_add(1, Ordering::AcqRel) + 1;
                             states.insert(next_state.clone());
-                            collection.push_back(next_state.clone());
+                            collection.push_back(next_state);
                             //println!("Thread {:?}: states in collection {}", thread::current().id(), collection.len());
                             if cnum_states % 50000 == 0 {
                                 println!("VISITED STATES: {}", cnum_states);
diff --git a/benchmarks/model_checking/Rust/Train1_Lukas_POR_v3.rs b/benchmarks/model_checking/Rust/Train1_Lukas_POR_v3.rs
index 6d25a7a9c..f0674fe69 100644
--- a/benchmarks/model_checking/Rust/Train1_Lukas_POR_v3.rs
+++ b/benchmarks/model_checking/Rust/Train1_Lukas_POR_v3.rs
@@ -23,14 +23,14 @@ pub enum MC_TYPE { BFS, DFS, MIXED }
 
 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub enum BLOCKS {
-    A, 
-    B, 
-    C, 
-    D, 
-    E, 
-    F, 
-    G, 
-    H, 
+    A,
+    B,
+    C,
+    D,
+    E,
+    F,
+    G,
+    H,
     I
 }
 impl BLOCKS {
@@ -43,29 +43,29 @@ impl Default for BLOCKS {
 }
 impl fmt::Display for BLOCKS {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-       match *self {
-           BLOCKS::A => write!(f, "A"),
-           BLOCKS::B => write!(f, "B"),
-           BLOCKS::C => write!(f, "C"),
-           BLOCKS::D => write!(f, "D"),
-           BLOCKS::E => write!(f, "E"),
-           BLOCKS::F => write!(f, "F"),
-           BLOCKS::G => write!(f, "G"),
-           BLOCKS::H => write!(f, "H"),
-           BLOCKS::I => write!(f, "I"),
-       }
+        match *self {
+            BLOCKS::A => write!(f, "A"),
+            BLOCKS::B => write!(f, "B"),
+            BLOCKS::C => write!(f, "C"),
+            BLOCKS::D => write!(f, "D"),
+            BLOCKS::E => write!(f, "E"),
+            BLOCKS::F => write!(f, "F"),
+            BLOCKS::G => write!(f, "G"),
+            BLOCKS::H => write!(f, "H"),
+            BLOCKS::I => write!(f, "I"),
+        }
     }
 }
 
 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub enum ROUTES {
-    R1, 
-    R2, 
-    R3, 
-    R4, 
-    R5, 
-    R6, 
-    R7, 
+    R1,
+    R2,
+    R3,
+    R4,
+    R5,
+    R6,
+    R7,
     R8
 }
 impl ROUTES {
@@ -78,16 +78,16 @@ impl Default for ROUTES {
 }
 impl fmt::Display for ROUTES {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-       match *self {
-           ROUTES::R1 => write!(f, "R1"),
-           ROUTES::R2 => write!(f, "R2"),
-           ROUTES::R3 => write!(f, "R3"),
-           ROUTES::R4 => write!(f, "R4"),
-           ROUTES::R5 => write!(f, "R5"),
-           ROUTES::R6 => write!(f, "R6"),
-           ROUTES::R7 => write!(f, "R7"),
-           ROUTES::R8 => write!(f, "R8"),
-       }
+        match *self {
+            ROUTES::R1 => write!(f, "R1"),
+            ROUTES::R2 => write!(f, "R2"),
+            ROUTES::R3 => write!(f, "R3"),
+            ROUTES::R4 => write!(f, "R4"),
+            ROUTES::R5 => write!(f, "R5"),
+            ROUTES::R6 => write!(f, "R6"),
+            ROUTES::R7 => write!(f, "R7"),
+            ROUTES::R8 => write!(f, "R8"),
+        }
     }
 }
 
@@ -545,14 +545,14 @@ impl Train1_Lukas_POR_v3 {
         //if caching is enabled globally, this will just prefill those, if caching is
         for trans in to_invalidate.iter() {
             match *trans {
-                "_tr_route_reservation" => {self._tr_route_reservation(false);}, 
-                "_tr_route_freeing" => {self._tr_route_freeing(false);}, 
-                "_tr_FRONT_MOVE_1" => {self._tr_FRONT_MOVE_1(false);}, 
-                "_tr_FRONT_MOVE_2" => {self._tr_FRONT_MOVE_2(false);}, 
-                "_tr_BACK_MOVE_1" => {self._tr_BACK_MOVE_1(false);}, 
-                "_tr_BACK_MOVE_2" => {self._tr_BACK_MOVE_2(false);}, 
-                "_tr_point_positionning" => {self._tr_point_positionning(false);}, 
-                "_tr_route_formation" => {self._tr_route_formation(false);}, 
+                "_tr_route_reservation" => {self._tr_route_reservation(false);},
+                "_tr_route_freeing" => {self._tr_route_freeing(false);},
+                "_tr_FRONT_MOVE_1" => {self._tr_FRONT_MOVE_1(false);},
+                "_tr_FRONT_MOVE_2" => {self._tr_FRONT_MOVE_2(false);},
+                "_tr_BACK_MOVE_1" => {self._tr_BACK_MOVE_1(false);},
+                "_tr_BACK_MOVE_2" => {self._tr_BACK_MOVE_2(false);},
+                "_tr_point_positionning" => {self._tr_point_positionning(false);},
+                "_tr_route_formation" => {self._tr_route_formation(false);},
                 _ => {},
             }
         }
@@ -1007,10 +1007,10 @@ impl Train1_Lukas_POR_v3 {
     fn next(collection_m: Arc<Mutex<LinkedList<Train1_Lukas_POR_v3>>>, mc_type: MC_TYPE) -> Train1_Lukas_POR_v3 {
         let mut collection = collection_m.lock().unwrap();
         return match mc_type {
-                MC_TYPE::BFS   => collection.pop_front().unwrap(),
-                MC_TYPE::DFS   => collection.pop_back().unwrap(),
-                MC_TYPE::MIXED => if collection.len() % 2 == 0 { collection.pop_front().unwrap() } else { collection.pop_back().unwrap() }
-            };
+            MC_TYPE::BFS   => collection.pop_front().unwrap(),
+            MC_TYPE::DFS   => collection.pop_back().unwrap(),
+            MC_TYPE::MIXED => if collection.len() % 2 == 0 { collection.pop_front().unwrap() } else { collection.pop_back().unwrap() }
+        };
     }
 
     fn model_check_single_threaded(mc_type: MC_TYPE, is_caching: bool) {
@@ -1082,11 +1082,11 @@ impl Train1_Lukas_POR_v3 {
 
             let next_states = Self::generateNextStates(&mut state, is_caching, &mut invariantDependency, Arc::clone(&dependent_invariant_m), &mut guardDependency, Arc::clone(&dependent_guard_m), Arc::clone(&guard_cache), Arc::clone(&parents_m), Arc::clone(&transitions));
 
-            next_states.iter().for_each(|next_state| {
-                if !states.contains(next_state) {
+            next_states.iter().cloned().for_each(|next_state| {
+                if !states.contains(&next_state) {
                     let cnum_states = number_states.fetch_add(1, Ordering::AcqRel) + 1;
                     states.insert(next_state.clone());
-                    collection_m.lock().unwrap().push_back(next_state.clone());
+                    collection_m.lock().unwrap().push_back(next_state);
                     if cnum_states % 50000 == 0 {
                         println!("VISITED STATES: {}", cnum_states);
                         println!("EVALUATED TRANSITIONS: {}", transitions.load(Ordering::Acquire));
@@ -1121,7 +1121,7 @@ impl Train1_Lukas_POR_v3 {
         let possible_queue_changes_b = Arc::new(AtomicI32::new(0));
 
         if !machine._check_inv_1() || !machine._check_inv_2() || !machine._check_inv_3() || !machine._check_inv_4() || !machine._check_inv_5() || !machine._check_inv_6() || !machine._check_inv_7() || !machine._check_inv_8() || !machine._check_inv_9() || !machine._check_inv_10() || !machine._check_inv_11() || !machine._check_inv_12() {
-                invariant_violated_b.store(true, Ordering::Release);
+            invariant_violated_b.store(true, Ordering::Release);
         }
 
         let states_m = Arc::new(Mutex::new(HashSet::<Train1_Lukas_POR_v3>::new()));
@@ -1205,14 +1205,14 @@ impl Train1_Lukas_POR_v3 {
                 let next_states = Self::generateNextStates(&mut state, is_caching, &invariant_dependency, Arc::clone(&dependent_invariant_m2), &guard_dependency, dependent_guard_m2, guard_cache, parents_m2, Arc::clone(&transitions));
 
                 //println!("Thread {:?} executing", thread::current().id());
-                next_states.iter().for_each(|next_state| {
+                next_states.iter().cloned().for_each(|next_state| {
                     {
                         let mut states = states_m2.lock().unwrap();
                         let mut collection = collection_m2.lock().unwrap();
-                        if !states.contains(next_state) {
+                        if !states.contains(&next_state) {
                             let cnum_states = number_states.fetch_add(1, Ordering::AcqRel) + 1;
                             states.insert(next_state.clone());
-                            collection.push_back(next_state.clone());
+                            collection.push_back(next_state);
                             //println!("Thread {:?}: states in collection {}", thread::current().id(), collection.len());
                             if cnum_states % 50000 == 0 {
                                 println!("VISITED STATES: {}", cnum_states);
diff --git a/benchmarks/model_checking/Rust/Train_1_beebook_deterministic_MC_POR_v2.rs b/benchmarks/model_checking/Rust/Train_1_beebook_deterministic_MC_POR_v2.rs
index a1556c8b6..9460794f2 100644
--- a/benchmarks/model_checking/Rust/Train_1_beebook_deterministic_MC_POR_v2.rs
+++ b/benchmarks/model_checking/Rust/Train_1_beebook_deterministic_MC_POR_v2.rs
@@ -23,19 +23,19 @@ pub enum MC_TYPE { BFS, DFS, MIXED }
 
 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub enum BLOCKS {
-    A, 
-    B, 
-    C, 
-    D, 
-    E, 
-    F, 
-    G, 
-    H, 
-    I, 
-    J, 
-    K, 
-    L, 
-    M, 
+    A,
+    B,
+    C,
+    D,
+    E,
+    F,
+    G,
+    H,
+    I,
+    J,
+    K,
+    L,
+    M,
     N
 }
 impl BLOCKS {
@@ -48,36 +48,36 @@ impl Default for BLOCKS {
 }
 impl fmt::Display for BLOCKS {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-       match *self {
-           BLOCKS::A => write!(f, "A"),
-           BLOCKS::B => write!(f, "B"),
-           BLOCKS::C => write!(f, "C"),
-           BLOCKS::D => write!(f, "D"),
-           BLOCKS::E => write!(f, "E"),
-           BLOCKS::F => write!(f, "F"),
-           BLOCKS::G => write!(f, "G"),
-           BLOCKS::H => write!(f, "H"),
-           BLOCKS::I => write!(f, "I"),
-           BLOCKS::J => write!(f, "J"),
-           BLOCKS::K => write!(f, "K"),
-           BLOCKS::L => write!(f, "L"),
-           BLOCKS::M => write!(f, "M"),
-           BLOCKS::N => write!(f, "N"),
-       }
+        match *self {
+            BLOCKS::A => write!(f, "A"),
+            BLOCKS::B => write!(f, "B"),
+            BLOCKS::C => write!(f, "C"),
+            BLOCKS::D => write!(f, "D"),
+            BLOCKS::E => write!(f, "E"),
+            BLOCKS::F => write!(f, "F"),
+            BLOCKS::G => write!(f, "G"),
+            BLOCKS::H => write!(f, "H"),
+            BLOCKS::I => write!(f, "I"),
+            BLOCKS::J => write!(f, "J"),
+            BLOCKS::K => write!(f, "K"),
+            BLOCKS::L => write!(f, "L"),
+            BLOCKS::M => write!(f, "M"),
+            BLOCKS::N => write!(f, "N"),
+        }
     }
 }
 
 #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub enum ROUTES {
-    R1, 
-    R2, 
-    R3, 
-    R4, 
-    R5, 
-    R6, 
-    R7, 
-    R8, 
-    R9, 
+    R1,
+    R2,
+    R3,
+    R4,
+    R5,
+    R6,
+    R7,
+    R8,
+    R9,
     R10
 }
 impl ROUTES {
@@ -90,18 +90,18 @@ impl Default for ROUTES {
 }
 impl fmt::Display for ROUTES {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-       match *self {
-           ROUTES::R1 => write!(f, "R1"),
-           ROUTES::R2 => write!(f, "R2"),
-           ROUTES::R3 => write!(f, "R3"),
-           ROUTES::R4 => write!(f, "R4"),
-           ROUTES::R5 => write!(f, "R5"),
-           ROUTES::R6 => write!(f, "R6"),
-           ROUTES::R7 => write!(f, "R7"),
-           ROUTES::R8 => write!(f, "R8"),
-           ROUTES::R9 => write!(f, "R9"),
-           ROUTES::R10 => write!(f, "R10"),
-       }
+        match *self {
+            ROUTES::R1 => write!(f, "R1"),
+            ROUTES::R2 => write!(f, "R2"),
+            ROUTES::R3 => write!(f, "R3"),
+            ROUTES::R4 => write!(f, "R4"),
+            ROUTES::R5 => write!(f, "R5"),
+            ROUTES::R6 => write!(f, "R6"),
+            ROUTES::R7 => write!(f, "R7"),
+            ROUTES::R8 => write!(f, "R8"),
+            ROUTES::R9 => write!(f, "R9"),
+            ROUTES::R10 => write!(f, "R10"),
+        }
     }
 }
 
@@ -568,14 +568,14 @@ impl Train_1_beebook_deterministic_MC_POR_v2 {
         //if caching is enabled globally, this will just prefill those, if caching is
         for trans in to_invalidate.iter() {
             match *trans {
-                "_tr_route_reservation" => {self._tr_route_reservation(false);}, 
-                "_tr_route_freeing" => {self._tr_route_freeing(false);}, 
-                "_tr_FRONT_MOVE_1" => {self._tr_FRONT_MOVE_1(false);}, 
-                "_tr_FRONT_MOVE_2" => {self._tr_FRONT_MOVE_2(false);}, 
-                "_tr_BACK_MOVE_1" => {self._tr_BACK_MOVE_1(false);}, 
-                "_tr_BACK_MOVE_2" => {self._tr_BACK_MOVE_2(false);}, 
-                "_tr_point_positionning" => {self._tr_point_positionning(false);}, 
-                "_tr_route_formation" => {self._tr_route_formation(false);}, 
+                "_tr_route_reservation" => {self._tr_route_reservation(false);},
+                "_tr_route_freeing" => {self._tr_route_freeing(false);},
+                "_tr_FRONT_MOVE_1" => {self._tr_FRONT_MOVE_1(false);},
+                "_tr_FRONT_MOVE_2" => {self._tr_FRONT_MOVE_2(false);},
+                "_tr_BACK_MOVE_1" => {self._tr_BACK_MOVE_1(false);},
+                "_tr_BACK_MOVE_2" => {self._tr_BACK_MOVE_2(false);},
+                "_tr_point_positionning" => {self._tr_point_positionning(false);},
+                "_tr_route_formation" => {self._tr_route_formation(false);},
                 _ => {},
             }
         }
@@ -1030,10 +1030,10 @@ impl Train_1_beebook_deterministic_MC_POR_v2 {
     fn next(collection_m: Arc<Mutex<LinkedList<Train_1_beebook_deterministic_MC_POR_v2>>>, mc_type: MC_TYPE) -> Train_1_beebook_deterministic_MC_POR_v2 {
         let mut collection = collection_m.lock().unwrap();
         return match mc_type {
-                MC_TYPE::BFS   => collection.pop_front().unwrap(),
-                MC_TYPE::DFS   => collection.pop_back().unwrap(),
-                MC_TYPE::MIXED => if collection.len() % 2 == 0 { collection.pop_front().unwrap() } else { collection.pop_back().unwrap() }
-            };
+            MC_TYPE::BFS   => collection.pop_front().unwrap(),
+            MC_TYPE::DFS   => collection.pop_back().unwrap(),
+            MC_TYPE::MIXED => if collection.len() % 2 == 0 { collection.pop_front().unwrap() } else { collection.pop_back().unwrap() }
+        };
     }
 
     fn model_check_single_threaded(mc_type: MC_TYPE, is_caching: bool) {
@@ -1105,11 +1105,11 @@ impl Train_1_beebook_deterministic_MC_POR_v2 {
 
             let next_states = Self::generateNextStates(&mut state, is_caching, &mut invariantDependency, Arc::clone(&dependent_invariant_m), &mut guardDependency, Arc::clone(&dependent_guard_m), Arc::clone(&guard_cache), Arc::clone(&parents_m), Arc::clone(&transitions));
 
-            next_states.iter().for_each(|next_state| {
-                if !states.contains(next_state) {
+            next_states.iter().cloned().for_each(|next_state| {
+                if !states.contains(&next_state) {
                     let cnum_states = number_states.fetch_add(1, Ordering::AcqRel) + 1;
                     states.insert(next_state.clone());
-                    collection_m.lock().unwrap().push_back(next_state.clone());
+                    collection_m.lock().unwrap().push_back(next_state);
                     if cnum_states % 50000 == 0 {
                         println!("VISITED STATES: {}", cnum_states);
                         println!("EVALUATED TRANSITIONS: {}", transitions.load(Ordering::Acquire));
@@ -1144,7 +1144,7 @@ impl Train_1_beebook_deterministic_MC_POR_v2 {
         let possible_queue_changes_b = Arc::new(AtomicI32::new(0));
 
         if !machine._check_inv_1() || !machine._check_inv_2() || !machine._check_inv_3() || !machine._check_inv_4() || !machine._check_inv_5() || !machine._check_inv_6() || !machine._check_inv_7() || !machine._check_inv_8() || !machine._check_inv_9() || !machine._check_inv_10() || !machine._check_inv_11() || !machine._check_inv_12() {
-                invariant_violated_b.store(true, Ordering::Release);
+            invariant_violated_b.store(true, Ordering::Release);
         }
 
         let states_m = Arc::new(Mutex::new(HashSet::<Train_1_beebook_deterministic_MC_POR_v2>::new()));
@@ -1228,14 +1228,14 @@ impl Train_1_beebook_deterministic_MC_POR_v2 {
                 let next_states = Self::generateNextStates(&mut state, is_caching, &invariant_dependency, Arc::clone(&dependent_invariant_m2), &guard_dependency, dependent_guard_m2, guard_cache, parents_m2, Arc::clone(&transitions));
 
                 //println!("Thread {:?} executing", thread::current().id());
-                next_states.iter().for_each(|next_state| {
+                next_states.iter().cloned().for_each(|next_state| {
                     {
                         let mut states = states_m2.lock().unwrap();
                         let mut collection = collection_m2.lock().unwrap();
-                        if !states.contains(next_state) {
+                        if !states.contains(&next_state) {
                             let cnum_states = number_states.fetch_add(1, Ordering::AcqRel) + 1;
                             states.insert(next_state.clone());
-                            collection.push_back(next_state.clone());
+                            collection.push_back(next_state);
                             //println!("Thread {:?}: states in collection {}", thread::current().id(), collection.len());
                             if cnum_states % 50000 == 0 {
                                 println!("VISITED STATES: {}", cnum_states);
diff --git a/benchmarks/model_checking/Rust/nota_v2.rs b/benchmarks/model_checking/Rust/nota_v2.rs
index 77355571f..326000b96 100644
--- a/benchmarks/model_checking/Rust/nota_v2.rs
+++ b/benchmarks/model_checking/Rust/nota_v2.rs
@@ -1,4 +1,4 @@
-#![ allow( dead_code, unused_imports, unused_mut, non_snake_case, non_camel_case_types, unused_assignments ) ]
+#![ allow( dead_code, unused_imports, unused_mut, non_snake_case, non_camel_case_types, unused_assignments, unused ) ]
 use std::env;
 use std::sync::atomic::{AtomicI32, AtomicI64, AtomicBool, Ordering};
 use std::sync::{Arc, Mutex};
diff --git a/benchmarks/model_checking/Rust/sort_m2_data1000_MC.rs b/benchmarks/model_checking/Rust/sort_m2_data1000_MC.rs
index 9d56d0a11..0b8c31bc2 100644
--- a/benchmarks/model_checking/Rust/sort_m2_data1000_MC.rs
+++ b/benchmarks/model_checking/Rust/sort_m2_data1000_MC.rs
@@ -207,10 +207,10 @@ impl sort_m2_data1000_MC {
         //if caching is enabled globally, this will just prefill those, if caching is
         for trans in to_invalidate.iter() {
             match *trans {
-                "_tr_progress" => {self._tr_progress(false);}, 
-                "_tr_prog1" => {self._tr_prog1(false);}, 
-                "_tr_prog2" => {self._tr_prog2(false);}, 
-                "_tr_final_evt" => {self._tr_final_evt(false);}, 
+                "_tr_progress" => {self._tr_progress(false);},
+                "_tr_prog1" => {self._tr_prog1(false);},
+                "_tr_prog2" => {self._tr_prog2(false);},
+                "_tr_final_evt" => {self._tr_final_evt(false);},
                 _ => {},
             }
         }
@@ -437,10 +437,10 @@ impl sort_m2_data1000_MC {
     fn next(collection_m: Arc<Mutex<LinkedList<sort_m2_data1000_MC>>>, mc_type: MC_TYPE) -> sort_m2_data1000_MC {
         let mut collection = collection_m.lock().unwrap();
         return match mc_type {
-                MC_TYPE::BFS   => collection.pop_front().unwrap(),
-                MC_TYPE::DFS   => collection.pop_back().unwrap(),
-                MC_TYPE::MIXED => if collection.len() % 2 == 0 { collection.pop_front().unwrap() } else { collection.pop_back().unwrap() }
-            };
+            MC_TYPE::BFS   => collection.pop_front().unwrap(),
+            MC_TYPE::DFS   => collection.pop_back().unwrap(),
+            MC_TYPE::MIXED => if collection.len() % 2 == 0 { collection.pop_front().unwrap() } else { collection.pop_back().unwrap() }
+        };
     }
 
     fn model_check_single_threaded(mc_type: MC_TYPE, is_caching: bool) {
@@ -496,11 +496,11 @@ impl sort_m2_data1000_MC {
 
             let next_states = Self::generateNextStates(&mut state, is_caching, &mut invariantDependency, Arc::clone(&dependent_invariant_m), &mut guardDependency, Arc::clone(&dependent_guard_m), Arc::clone(&guard_cache), Arc::clone(&parents_m), Arc::clone(&transitions));
 
-            next_states.iter().for_each(|next_state| {
-                if !states.contains(next_state) {
+            next_states.iter().cloned().for_each(|next_state| {
+                if !states.contains(&next_state) {
                     let cnum_states = number_states.fetch_add(1, Ordering::AcqRel) + 1;
                     states.insert(next_state.clone());
-                    collection_m.lock().unwrap().push_back(next_state.clone());
+                    collection_m.lock().unwrap().push_back(next_state);
                     if cnum_states % 50000 == 0 {
                         println!("VISITED STATES: {}", cnum_states);
                         println!("EVALUATED TRANSITIONS: {}", transitions.load(Ordering::Acquire));
@@ -535,7 +535,7 @@ impl sort_m2_data1000_MC {
         let possible_queue_changes_b = Arc::new(AtomicI32::new(0));
 
         if !machine._check_inv_1() || !machine._check_inv_2() || !machine._check_inv_3() || !machine._check_inv_4() || !machine._check_inv_5() || !machine._check_inv_6() {
-                invariant_violated_b.store(true, Ordering::Release);
+            invariant_violated_b.store(true, Ordering::Release);
         }
 
         let states_m = Arc::new(Mutex::new(HashSet::<sort_m2_data1000_MC>::new()));
@@ -603,14 +603,14 @@ impl sort_m2_data1000_MC {
                 let next_states = Self::generateNextStates(&mut state, is_caching, &invariant_dependency, Arc::clone(&dependent_invariant_m2), &guard_dependency, dependent_guard_m2, guard_cache, parents_m2, Arc::clone(&transitions));
 
                 //println!("Thread {:?} executing", thread::current().id());
-                next_states.iter().for_each(|next_state| {
+                next_states.iter().cloned().for_each(|next_state| {
                     {
                         let mut states = states_m2.lock().unwrap();
                         let mut collection = collection_m2.lock().unwrap();
-                        if !states.contains(next_state) {
+                        if !states.contains(&next_state) {
                             let cnum_states = number_states.fetch_add(1, Ordering::AcqRel) + 1;
                             states.insert(next_state.clone());
-                            collection.push_back(next_state.clone());
+                            collection.push_back(next_state);
                             //println!("Thread {:?}: states in collection {}", thread::current().id(), collection.len());
                             if cnum_states % 50000 == 0 {
                                 println!("VISITED STATES: {}", cnum_states);
diff --git a/btypes_primitives/src/main/rust/btypes/src/bboolean.rs b/btypes_primitives/src/main/rust/btypes/src/bboolean.rs
index 3601f95c1..c38368610 100644
--- a/btypes_primitives/src/main/rust/btypes/src/bboolean.rs
+++ b/btypes_primitives/src/main/rust/btypes/src/bboolean.rs
@@ -2,6 +2,17 @@ use std::hash::Hash;
 use crate::bobject::BObject;
 use std::fmt;
 
+pub trait IntoBool {
+    #![allow(non_snake_case)]
+    fn booleanValue(&self) -> bool;
+}
+
+impl IntoBool for bool {
+    fn booleanValue(&self) -> bool {
+        return *self;
+    }
+}
+
 #[derive(Default, Debug, Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
 pub struct BBoolean {
     val: bool,
@@ -15,6 +26,12 @@ impl fmt::Display for BBoolean {
 
 impl BObject for BBoolean {}
 
+impl IntoBool for BBoolean {
+    fn booleanValue(&self) -> bool {
+        return self.val;
+    }
+}
+
 impl BBoolean {
     #![allow(non_snake_case, dead_code)]
 
@@ -24,10 +41,6 @@ impl BBoolean {
         }
     }
 
-    pub fn booleanValue(&self) -> bool {
-        return self.val;
-    }
-
     pub fn or(&self, other: &BBoolean) -> BBoolean {
         return BBoolean::new(self.val || other.val);
     }
diff --git a/btypes_primitives/src/main/rust/btypes/src/bset.rs b/btypes_primitives/src/main/rust/btypes/src/bset.rs
index b84f2270f..042bf72d7 100644
--- a/btypes_primitives/src/main/rust/btypes/src/bset.rs
+++ b/btypes_primitives/src/main/rust/btypes/src/bset.rs
@@ -1,6 +1,6 @@
 #![ allow( dead_code, non_snake_case) ]
 
-use crate::bboolean::BBoolean;
+use crate::bboolean::{IntoBool, BBoolean};
 use crate::binteger::{BInt, BInteger};
 use crate::bstring::BString;
 use crate::bobject::BObject;
diff --git a/src/main/resources/de/hhu/stups/codegenerator/RustTemplate.stg b/src/main/resources/de/hhu/stups/codegenerator/RustTemplate.stg
index 5b709897e..9f6a0f91b 100644
--- a/src/main/resources/de/hhu/stups/codegenerator/RustTemplate.stg
+++ b/src/main/resources/de/hhu/stups/codegenerator/RustTemplate.stg
@@ -19,6 +19,7 @@ use derivative::Derivative;
 use std::fmt;
 use rand::{thread_rng, Rng};
 use btypes::butils;
+use btypes::bboolean::IntoBool;
 <imports; separator="\n">
 <includedMachines; separator="\n">
 
@@ -533,11 +534,11 @@ binary(arg1,operator,arg2) ::= <<
 >>
 
 or(arg1, arg2) ::= <<
-<arg1>.or(&<arg2>)
+<arg1>.booleanValue() || <arg2>.booleanValue()
 >>
 
 and(arg1, arg2) ::= <<
-<arg1>.and(&<arg2>)
+<arg1>.booleanValue() && <arg2>.booleanValue()
 >>
 
 implies(arg1, arg2) ::= <<
diff --git a/src/test/java/de/hhu/stups/codegenerator/rust/TestMCBenchmarks.java b/src/test/java/de/hhu/stups/codegenerator/rust/TestMCBenchmarks.java
index c823f401a..c9191f8df 100644
--- a/src/test/java/de/hhu/stups/codegenerator/rust/TestMCBenchmarks.java
+++ b/src/test/java/de/hhu/stups/codegenerator/rust/TestMCBenchmarks.java
@@ -36,7 +36,7 @@ public class TestMCBenchmarks extends TestRS {
 
     @Test
     public void testQueens8_MC() throws Exception {
-        testRSMC("QueensWithEvents_8");
+        testRSMC("QueensWithEvents_8", false);
     }
 
     @Test
diff --git a/src/test/resources/de/hhu/stups/codegenerator/Cruise_finite1_deterministic_MC.out b/src/test/resources/de/hhu/stups/codegenerator/Cruise_finite1_deterministic_MC.out
index db32d6ca1..929e4a6ff 100644
--- a/src/test/resources/de/hhu/stups/codegenerator/Cruise_finite1_deterministic_MC.out
+++ b/src/test/resources/de/hhu/stups/codegenerator/Cruise_finite1_deterministic_MC.out
@@ -1,3 +1,3 @@
 MODEL CHECKING SUCCESSFUL
 Number of States: 1360
-Number of Transitions: 26149
\ No newline at end of file
+Number of Transitions: 26148
\ No newline at end of file
diff --git a/src/test/resources/de/hhu/stups/codegenerator/Lift_MC_Large.out b/src/test/resources/de/hhu/stups/codegenerator/Lift_MC_Large.out
index 1c06af5a7..efe827164 100644
--- a/src/test/resources/de/hhu/stups/codegenerator/Lift_MC_Large.out
+++ b/src/test/resources/de/hhu/stups/codegenerator/Lift_MC_Large.out
@@ -1,3 +1,3 @@
 MODEL CHECKING SUCCESSFUL
 Number of States: 1000001
-Number of Transitions: 2000001
\ No newline at end of file
+Number of Transitions: 2000000
\ No newline at end of file
diff --git a/src/test/resources/de/hhu/stups/codegenerator/QueensWithEvents_8_MC.out b/src/test/resources/de/hhu/stups/codegenerator/QueensWithEvents_8_MC.out
new file mode 100644
index 000000000..5c1ec216a
--- /dev/null
+++ b/src/test/resources/de/hhu/stups/codegenerator/QueensWithEvents_8_MC.out
@@ -0,0 +1,3 @@
+MODEL CHECKING SUCCESSFUL
+Number of States: 4
+Number of Transitions: 6
\ No newline at end of file
-- 
GitLab