diff --git a/tp2/Pystan/config/__pycache__/constant_propagation.cpython-313.pyc b/tp2/Pystan/config/__pycache__/constant_propagation.cpython-313.pyc
index 14878ed97db2b6e13e5dc65d134c108406e75287..a61415a92a179c1a85bc691bebbbb3ca0b0af623 100644
Binary files a/tp2/Pystan/config/__pycache__/constant_propagation.cpython-313.pyc and b/tp2/Pystan/config/__pycache__/constant_propagation.cpython-313.pyc differ
diff --git a/tp2/Pystan/config/constant_propagation.py b/tp2/Pystan/config/constant_propagation.py
index 35561ab91ed45a7e895e1d64aec11c0e28e472d7..32d28f8c6b6eb2d8aba8637ae851ac7a7851794d 100644
--- a/tp2/Pystan/config/constant_propagation.py
+++ b/tp2/Pystan/config/constant_propagation.py
@@ -100,15 +100,16 @@ class Constant_propagation(Transfer[state]):
         if s1 is None: return s2
         elif s2 is None: return s1
         else:
+            s=s1.copy()
             for var in s2:
                 if not(var in s1):
-                    s1[var]=s2[var]
+                    s[var]=s2[var]
                 elif s1[var] == abstract_value(None):
-                    s1[var]=s2[var]
+                    s[var]=s2[var]
                 elif s2[var] == abstract_value(None):
                     pass
                 else:
-                    s1[var]=abstract_value(None)
+                    s[var]=abstract_value(None)
         return s1
                       
         
@@ -124,29 +125,33 @@ class Constant_propagation(Transfer[state]):
             return included
 
     def tr_skip(self,s: state) -> state:
-        return s
+        return s.copy()
     
     def tr_set(self, s: state, v: str, e: ArithExpr) -> state:
-        s[v]=eval_aexp(s, e)
-        return s
+        s1 = s.copy()
+        s1[v]=eval_aexp(s, e)
+        return s1
         
     def tr_test(self,s: state,c: BoolExpr) -> state:
         if eval_bexp(s, c) is False:
-            return {}
+            return None
         else:
-            return s
+            if s:
+                return s.copy()
+            else:
+                return s
         
     def tr_err(self,s: state,e: Expr) -> state:
         if isinstance(e,ArithExpr):
             if eval_aexp(s ,e) is not None:
-                return s
-            else:
                 return None
+            else:
+                return s.copy()
         else:
             if isinstance(e,BoolExpr):
                 if eval_bexp(s ,e) is not None:
-                    return s
-                else:
                     return None
+                else:
+                    return s.copy()
             else: assert False