Symmetric version of REP_ABS_RSP
authorCezary Kaliszyk <kaliszyk@in.tum.de>
Fri, 16 Oct 2009 17:05:52 +0200
changeset 113 e3a963e6418b
parent 112 0d6d37d0589d
child 114 3cdb743b7605
Symmetric version of REP_ABS_RSP
QuotMain.thy
QuotScript.thy
--- a/QuotMain.thy	Fri Oct 16 16:51:01 2009 +0200
+++ b/QuotMain.thy	Fri Oct 16 17:05:52 2009 +0200
@@ -1192,6 +1192,7 @@
 
 prove trm
 apply (atomize(full))
+apply (simp only: id_def[symmetric])
 
 ML_prf {*
   val gc = Subgoal.focus @{context} 1 (Isar.goal ())
@@ -1215,6 +1216,20 @@
   val (_, tc') = Thm.dest_comb tc
   val (_, gc') = Thm.dest_comb gc
  *}
+ML_prf {*
+  fun dest_cbinop t =
+    let
+      val (t2, rhs) = Thm.dest_comb t;
+      val (bop, lhs) = Thm.dest_comb t2;
+    in
+      (bop, (lhs, rhs))
+    end
+*}
+
+ML_prf {* val (op1, (l1, r1)) = dest_cbinop tc' *}
+ML_prf {* val (op2, (l2, r2)) = dest_cbinop gc' *}
+ML_prf {* val mr = Thm.match (r1, r2) *}
+
 
 ML_prf {* val m = Thm.match (tc', gc') *}
 ML_prf {* val t2 = Drule.instantiate m @{thm "REP_ABS_RSP_I" } *}
--- a/QuotScript.thy	Fri Oct 16 16:51:01 2009 +0200
+++ b/QuotScript.thy	Fri Oct 16 17:05:52 2009 +0200
@@ -307,8 +307,14 @@
   assumes q: "QUOTIENT R Abs Rep"
   and     a: "R x1 x2"
   shows "R x1 (Rep (Abs x2))"
-using a
-by (metis QUOTIENT_REL[OF q] QUOTIENT_ABS_REP[OF q] QUOTIENT_REP_REFL[OF q])
+  and   "R (Rep (Abs x1)) x2"
+proof -
+  show "R x1 (Rep (Abs x2))" 
+    using q a by (metis QUOTIENT_REL[OF q] QUOTIENT_ABS_REP[OF q] QUOTIENT_REP_REFL[OF q])
+next
+  show "R (Rep (Abs x1)) x2"
+    using q a by (metis QUOTIENT_REL[OF q] QUOTIENT_ABS_REP[OF q] QUOTIENT_REP_REFL[OF q] QUOTIENT_SYM[of q])
+qed
 
 (* ----------------------------------------------------- *)
 (* Quantifiers: FORALL, EXISTS, EXISTS_UNIQUE,           *)