
diff -r d641c32855f0 -r d707839bd917 QuotMain.thy
--- a/QuotMain.thy	Sat Dec 05 21:50:31 2009 +0100
+++ b/QuotMain.thy	Sat Dec 05 22:02:32 2009 +0100
@@ -741,30 +741,23 @@
         then result
         else mk_repabs lthy (rty, qty) result
       end
-  | _ =>
-      let
-        val (qhead, qargs) = strip_comb qtrm
-        val (rhead, rargs) = strip_combn (length qargs) rtrm
-        val rargs' = map (inj_repabs_trm lthy) (rargs ~~ qargs)
-      in
-        case (rhead, qhead) of
-          (Const (s, T), Const (s', T')) =>
-             if T = T'                    
-             then list_comb (rhead, rargs') 
-             else list_comb (mk_repabs lthy (T, T') rhead, rargs') 
-        | (Free (x, T), Free (x', T')) => 
-             if T = T' 
-             then list_comb (rhead, rargs')
-             else list_comb (mk_repabs lthy (T, T') rhead, rargs')
-        | (Abs _, Abs _) =>
-             list_comb (inj_repabs_trm lthy (rhead, qhead), rargs') 
- 
-        (* FIXME: when there is an (op =), then lhs might have been a term *) 
-        | (_, Const (@{const_name "op ="}, T)) =>
-             list_comb (rhead, rargs')
-        | _ => raise (LIFT_MATCH ("injection: rhead: " ^ (Syntax.string_of_term lthy rhead) 
-                                          ^ " qhead: " ^ (Syntax.string_of_term lthy qhead)))
-      end
+
+  | (t $ s, t' $ s') =>  
+       (inj_repabs_trm lthy (t, t')) $ (inj_repabs_trm lthy (s, s'))
+
+  | (Free (x, T), Free (x', T')) => 
+        if T = T' 
+        then rtrm 
+        else mk_repabs lthy (T, T') rtrm
+
+  | (Const (s, T), Const (s', T')) =>
+        if T = T'                    
+        then rtrm
+        else mk_repabs lthy (T, T') rtrm
+  
+  | (_, Const (@{const_name "op ="}, _)) => rtrm
+  
+  | _ => raise (LIFT_MATCH "injection")
 end
 *}
 




