The instantiated version is the same modulo beta
authorCezary Kaliszyk <kaliszyk@in.tum.de>
Sat, 17 Oct 2009 10:40:54 +0200
changeset 117 28f7dbd99314
parent 116 2c378008a7da
child 118 1c30d48bfc15
child 119 13575d73e435
The instantiated version is the same modulo beta
QuotMain.thy
--- a/QuotMain.thy	Sat Oct 17 10:07:52 2009 +0200
+++ b/QuotMain.thy	Sat Oct 17 10:40:54 2009 +0200
@@ -1275,16 +1275,40 @@
   val man_inst =
     Drule.instantiate' [SOME @{ctyp 'a}, SOME @{ctyp bool}] 
       [
-       SOME @{cterm "\<lambda>(x\<Colon>'a list \<Rightarrow> bool) (y\<Colon>'a list \<Rightarrow> bool). y"},
-       SOME @{cterm "\<lambda>(x\<Colon>'a list \<Rightarrow> bool) (y\<Colon>'a list \<Rightarrow> bool). (ABS_fset ---> id) ((REP_fset ---> id) x)"},
+       SOME @{cterm "\<lambda>(x\<Colon>'a list \<Rightarrow> bool) (y\<Colon>'a list \<Rightarrow> bool). x"},
+       SOME @{cterm "\<lambda>(x\<Colon>'a list \<Rightarrow> bool) (y\<Colon>'a list \<Rightarrow> bool). (ABS_fset ---> id) ((REP_fset ---> id) y)"},
        SOME @{cterm "\<lambda>(x\<Colon>'a list \<Rightarrow> bool) (y\<Colon>'a list \<Rightarrow> bool). ([]::'a list)"},
        SOME @{cterm "\<lambda>(x\<Colon>'a list \<Rightarrow> bool) (y\<Colon>'a list \<Rightarrow> bool). (REP_fset (ABS_fset ([]::'a list)))"}
       ] t
 *}
+ML_prf {*
+  val (tc') = (Logic.strip_assums_concl (prop_of man_inst));
+  val ps = Logic.strip_params (prop_of man_inst)
+  val tt = Term.list_abs (ps, tc')
+  val ct = cterm_of @{theory} tt
+*}
+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
+*}
 
-apply (tactic {* rtac man_inst 1 *})
 
-thm APPLY_RSP
+ML_prf {* val (a, b) = (snd (Thm.dest_abs NONE ct), (snd (Thm.dest_abs NONE goal'))) *}
+ML_prf {* val (a, b) = (snd (Thm.dest_abs NONE a), (snd (Thm.dest_abs NONE b))) *}
+ML_prf {* val (a, b) = (snd (Thm.dest_comb a), snd (Thm.dest_comb b)) *}
+ML_prf {* val (a, b) = ((fst o snd) (dest_cbinop a), (fst o snd) (dest_cbinop b)) *}
+ML_prf {* (term_of a, term_of b) *}
+ML_prf {* (Envir.beta_norm (term_of a), term_of b) *}
+ML_prf {* Thm.beta_conv *}
+ML_prf man_inst
+thm APPLY_RSP_I2
+apply (tactic {* compose_tac (false,man_inst,0) 1 *})
+
 sorry
 
 thm list.recs(2)