From 1ba5430f27d3f617f36cb45d3ba11f77c792f0ba Mon Sep 17 00:00:00 2001
From: Yassine Ettayeb <yassine.ettayeb@student-cs.fr>
Date: Fri, 28 Mar 2025 09:44:20 +0100
Subject: [PATCH] =?UTF-8?q?TP3:=20R=C3=A9duction=20d'un=20=C3=A9tat?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Pystan/config/sign_analysis.py | 30 ++++++++++++++++++++++++++----
 1 file changed, 26 insertions(+), 4 deletions(-)

diff --git a/Pystan/config/sign_analysis.py b/Pystan/config/sign_analysis.py
index 043f5b1..38b4e9e 100644
--- a/Pystan/config/sign_analysis.py
+++ b/Pystan/config/sign_analysis.py
@@ -344,11 +344,33 @@ def reduce_strict_lower_bound(s: state, x: str, expr: ArithExpr) -> state:
     if res is None: return None
     return s | { x: res }
 
-def reduce_state(s: state,c: BoolExpr) -> state:
-    if s is None: return s
+def reduce_state(s: state, c: BoolExpr) -> state:
+    if s is None:
+        return s
+
     match c:
-        # To be completed (see course's slides)
-        case _: return s
+        case BEEq(AEVar(x), expr):
+            return reduce_eq_sign(s, x, expr)
+        case BEEq(expr, AEVar(x)):
+            return reduce_eq_sign(s, x, expr)
+
+        case BELeq(AEVar(x), expr):
+            return reduce_upper_bound(s, x, expr)
+        case BELeq(expr, AEVar(x)):
+            return reduce_lower_bound(s, x, expr)
+
+        case BENeg(BEEq(AEVar(x), expr)):
+            return reduce_neq_sign(s, x, expr)
+        case BENeg(BEEq(expr, AEVar(x))):
+            return reduce_neq_sign(s, x, expr)
+
+        case BENeg(BELeq(AEVar(x), expr)):
+            return reduce_strict_lower_bound(s, x, expr)
+        case BENeg(BELeq(expr, AEVar(x))):
+            return reduce_strict_upper_bound(s, x, expr)
+
+        case _:
+            return s
 
 class Sign_interp(Transfer[state]):
     variables: frozenset[str]
-- 
GitLab