diff --git a/src/kernel_internals/parsing/logic_parser.mly b/src/kernel_internals/parsing/logic_parser.mly
index 3c14abf92a62cb1388f673783a14aa9470f3d836..26096d4d65db1a0dcd1218ffa6ef2a82d2b5b3c0 100644
--- a/src/kernel_internals/parsing/logic_parser.mly
+++ b/src/kernel_internals/parsing/logic_parser.mly
@@ -282,8 +282,8 @@
 %left PIPE
 %left HAT
 %left STARHAT
-%nonassoc IN
 %left AMP
+%nonassoc IN
 %left LT
 %left LTLT GTGT
 %left PLUS MINUS
diff --git a/src/kernel_services/ast_printing/cil_printer.ml b/src/kernel_services/ast_printing/cil_printer.ml
index 75d3f11278f2305417b98d183f93e4a44d68f8e7..e809fda16da1d588c75b7bb2ca31e4bb00dc01b2 100644
--- a/src/kernel_services/ast_printing/cil_printer.ml
+++ b/src/kernel_services/ast_printing/cil_printer.ml
@@ -162,8 +162,8 @@ module Precedence = struct
                                    1 [%right prec_named]
                                    2 [%nonassoc TYPENAME] *)
   let questionLevel = 100 (* Pif, Aquestion:
-                                   4 [%right QUESTION prec_question] *)
-  let binderLevel = 90          (* 3 [%nonassoc prec_forall prec_exists prec_lambda LET] *)
+                                   4 [%right QUESTION prec_question]  ??? *)
+  let binderLevel = 90          (* 3 [%nonassoc prec_forall prec_exists prec_lambda LET]  ??? *)
 
   let iff_level = 89            (* 5 [%left IFF] *)
   let implies_level = 87 (* and +1 for positive side
@@ -174,34 +174,40 @@ module Precedence = struct
   let xor_level = 84            (* 8 [%left HATHAT] *)
   let and_level = 83            (* 9 [%left AND] *)
   let and_or_level = 80         (* 7 [%left OR]
-                                   9 [%left AND]  *)
+                                   9 [%left AND] ???  *)
   let assoc_connector_level x =
     and_level <= x && x <= or_level
 
-  let logic_level = 77 (* Tif:     4 [%right QUESTION prec_question] *)
+  let logic_level = 77 (* Tif:     4 [%right QUESTION prec_question]  ??? *)
 
   let bitwiseLevel = 75        (* 10 [%left BIFF]
                                   11 [%right BIMPLIES]
                                   12 [%left PIPE]
                                   13 [%left HAT]
                                   14 [%left STARHAT] (releted to \repeat)
-                                  15 [%nonassoc IN] ???
-                                  16 [%left AMP] *)
-  let subtypeLevel = 75        (* 22 [%nonassoc LTCOLON COLONGT] *)
+                                  15 [%left AMP] *)
+    
+  let belongLevel = 72         (* 16 [%nonassoc IN] *)
+
+  let subtypeLevel = 75        (* 22 [%nonassoc LTCOLON COLONGT] ??? *)
+
   let comparativeLevel = 70    (* 17 [%left LT] *)
   let additiveLevel = 60       (* 18 [%left LTLT GTGT]
                                   19 [%left PLUS MINUS] *)
   let multiplicativeLevel = 40 (* 20 [%left STAR SLASH PERCENT] *)
-  let belongLevel = 36         (* 15 [%nonassoc IN] ??? *)
+
   let unaryLevel = 30          (* 21 [%right prec_cast TILDE NOT prec_unary_op] *)
   let addrOfLevel = 30         (* 21 [%right prec_cast TILDE NOT prec_unary_op] *)
+
   let coerseLevel = 25         (* -  [%token] *)
+
   let memOffset_level = 20     (* 23 [%left DOT ARROW LSQUARE] *)
   let derefStarLevel = 20      (* 23 [%left DOT ARROW LSQUARE] *)
   let indexLevel = 20          (* 23 [%left DOT ARROW LSQUARE] *)
   let arrowLevel = 20          (* 23 [%left DOT ARROW LSQUARE] *)
   let sizeOfLevel = 20         (* -  [%token] *)
   let alignOfLevel = 20        (* -  [%token] *)
+
   let applicationLevel = 10    (* -  [%token] *)
 
   (* is this predicate the encoding of [\in]? If so, return its arguments. *)
diff --git a/tests/spec/oracle/tsets.res.oracle b/tests/spec/oracle/tsets.res.oracle
index d2c75179fc165c648e9e463a90d3c3f01167f3f8..5537e6dcb63d8ee90ec02cbef67acc0d0d6a0622 100644
--- a/tests/spec/oracle/tsets.res.oracle
+++ b/tests/spec/oracle/tsets.res.oracle
@@ -17,6 +17,12 @@
   set of sets is not yet implemented. Ignoring global annotation
 [kernel:annot-error] tests/spec/tsets.c:57: Warning: 
   set of sets is not yet implemented. Ignoring global annotation
+[kernel:annot-error] tests/spec/tsets.c:71: Warning: 
+  symbol \subset is a predicate, not a function. Ignoring global annotation
+[kernel:annot-error] tests/spec/tsets.c:72: Warning: 
+  symbol \subset is a predicate, not a function. Ignoring global annotation
+[kernel:annot-error] tests/spec/tsets.c:73: Warning: 
+  symbol \subset is a predicate, not a function. Ignoring global annotation
 /* Generated by Frama-C */
 struct foo {
    char bar[4] ;
@@ -103,6 +109,18 @@ int *AA(void);
 /*@ logic set<ℤ>  Sadd_elem_1(set<ℤ>  s, ℤ e) = \union(s, e);
  */
 /*@ logic set<ℤ>  Sadd_elem_2(set<ℤ>  s, ℤ e) = \union(s, {e});
+ */
+/*@ predicate Smember_and(set<ℤ>  s, ℤ v1, ℤ v2) = (v1 & v2) ∈ s;
+ */
+/*@ predicate Smember_or(set<ℤ>  s, ℤ v1, ℤ v2) = (v1 | v2) ∈ s;
+ */
+/*@
+predicate Smember_and_or(set<ℤ>  s, ℤ v1, ℤ v2) =
+  (v1 & v2) ∈ s ∧ (v1 | v2) ∈ s;
+ */
+/*@
+logic set<ℤ>  Scomprehension(set<ℤ>  s, ℤ mask) =
+  { (k | 1) | int k; (k | mask) ∈ s};
 
 */