diff --git a/src/printer/isabelle.ml b/src/printer/isabelle.ml
index 90751bb6556e08c597a0eedef8f77a5ce4d59c6d..d98441c6921e94f42717a9542cd6cda85074608e 100644
--- a/src/printer/isabelle.ml
+++ b/src/printer/isabelle.ml
@@ -158,6 +158,18 @@ let print_abs info pr fmt (v, t) =
 
 let p_type p = p.pat_ty
 
+let rec split_por p = match p.pat_node with
+  | Pwild -> [pat_wild p.pat_ty]
+  | Pvar v -> [pat_var v]
+  | Pas _ -> assert false
+  | Por (p1, p2) -> split_por p1 @ split_por p2
+  | Papp (cs, pl) ->
+      List.map (fun zs -> pat_app cs zs p.pat_ty)
+        (List.fold_right
+           (fun xs xss -> List.concat
+              (List.map (fun x -> List.map (fun ys -> x :: ys) xss) xs))
+           (List.map split_por pl) [[]])
+
 let rec print_pat info fmt p = match p.pat_node with
   | Pwild -> print_const fmt "Pure.dummy_pattern"
   | Pvar v -> print_var info fmt v
@@ -258,8 +270,9 @@ and print_quant info defs s fmt (vl, f) = match vl with
       (print_abs info (print_quant info defs s))) fmt (s, (v, (vl', f)))
 
 and print_branch info defs fmt br =
-  let p, _ as q = t_open_branch br in
-  elem' "pat" (pair (print_pat info) (print_term info defs)) fmt q;
+  let p, t = t_open_branch br in
+  print_list nothing (elem' "pat" (pair (print_pat info) (print_term info defs)))
+    fmt (List.map (fun q -> (q, t)) (split_por p));
   Svs.iter forget_var p.pat_vars
 
 let rec dest_conj t = match t.t_node with