QuotMain.thy
changeset 474 5e1f4c8ab3de
parent 473 4ce64524ce13
child 475 1eeacabe5ffe
equal deleted inserted replaced
473:4ce64524ce13 474:5e1f4c8ab3de
   903 lemma QUOT_TRUE_imp: "QUOT_TRUE a \<Longrightarrow> QUOT_TRUE b"
   903 lemma QUOT_TRUE_imp: "QUOT_TRUE a \<Longrightarrow> QUOT_TRUE b"
   904 by (simp add: QUOT_TRUE_def)
   904 by (simp add: QUOT_TRUE_def)
   905 
   905 
   906 ML {*
   906 ML {*
   907 fun quot_true_tac ctxt fnctn =
   907 fun quot_true_tac ctxt fnctn =
   908   SUBGOAL (fn (gl, _) =>
   908   SUBGOAL (fn (gl, i) =>
   909   let
   909   let
   910     val thy = ProofContext.theory_of ctxt;
   910     val thy = ProofContext.theory_of ctxt;
   911     fun find_fun trm =
   911     fun find_fun trm =
   912       case trm of
   912       case trm of
   913         (Const(@{const_name Trueprop}, _) $ (Const (@{const_name QUOT_TRUE}, _) $ _)) => true
   913         (Const(@{const_name Trueprop}, _) $ (Const (@{const_name QUOT_TRUE}, _) $ _)) => true
   921           val cty1 = ctyp_of thy (fastype_of x);
   921           val cty1 = ctyp_of thy (fastype_of x);
   922           val ctrm2 = cterm_of thy fx;
   922           val ctrm2 = cterm_of thy fx;
   923           val cty2 = ctyp_of thy (fastype_of fx);
   923           val cty2 = ctyp_of thy (fastype_of fx);
   924           val thm = Drule.instantiate' [SOME cty1, SOME cty2] [SOME ctrm1, SOME ctrm2] @{thm QUOT_TRUE_imp}
   924           val thm = Drule.instantiate' [SOME cty1, SOME cty2] [SOME ctrm1, SOME ctrm2] @{thm QUOT_TRUE_imp}
   925         in
   925         in
   926           dtac thm 1
   926           dtac thm i
   927         end
   927         end
   928     | NONE => error "quot_true_tac!"
   928     | NONE => error "quot_true_tac!"
   929     | _ => error "quot_true_tac!!"
   929     | _ => error "quot_true_tac!!"
   930   end)
   930   end)
   931 *}
   931 *}