diff --git a/heap_lang/notation.v b/heap_lang/notation.v
index 600cca0a3679c6dfd00b3b5579c168ffe2669c08..88a8d50b9d3f8647a1ff015f1bc1c84a9c9d89c8 100644
--- a/heap_lang/notation.v
+++ b/heap_lang/notation.v
@@ -85,8 +85,11 @@ Notation "e1 ;; e2" := (LamV BAnon e2%E e1%E)
   (at level 100, e2 at level 200, format "e1  ;;  e2") : val_scope.
 
 (* Shortcircuit Boolean connectives *)
-Notation "e1 && e2" := (If e1%E e2%E (Lit (LitBool false))) : expr_scope.
-Notation "e1 || e2" := (If e1%E (Lit (LitBool true)) e2%E) : expr_scope.
+Definition AND (e1 e2 : expr) : expr := if: e1 then e2 else #false.
+Notation "e1 && e2" := (AND e1%E e2%E) : expr_scope.
+
+Definition OR (e1 e2 : expr) : expr := if: e1 then #true else e2.
+Notation "e1 || e2" := (OR e1%E e2%E) : expr_scope.
 
 (** Notations for option *)
 Notation NONE := (InjL #()).