progtut/Tactical.thy
author Xingyuan Zhang <xingyuanzhang@126.com>
Sat, 13 Sep 2014 10:07:14 +0800
changeset 25 a5f5b9336007
permissions -rw-r--r--
thys2 added

theory Tactical
imports Advanced
begin

ML {*
fun my_print_tac ctxt thm =
let
   val _ = tracing (Pretty.string_of (pretty_thm_no_vars ctxt thm))
in
   Seq.single thm
end
*}

ML {*
let
   val ctxt = @{context}
   val goal = @{prop "P \<or> Q \<Longrightarrow> Q \<or> P"}
in
   Goal.prove ctxt ["x", "y", "u", "v", "P", "Q"] [@{prop "x = y"}, @{prop "u = v"}] goal
    (fn {prems = pms, context = ctxt} =>  
              (my_print_tac ctxt)
              THEN etac @{thm disjE} 1 THEN
               (my_print_tac ctxt) 
              THEN rtac @{thm disjI2} 1
              THEN  (my_print_tac ctxt) 
              THEN atac 1
              THEN rtac @{thm disjI1} 1
              THEN atac 1)
end
*}

ML {*
  Goal.prove
*}

ML {*
fun pretty_cterms ctxt ctrms =
  Pretty.block (Pretty.commas (map (pretty_cterm ctxt) ctrms))
*}

ML {*
fun foc_tac {prems, params, asms, concl, context, schematics} =
let
  fun assgn1 f1 f2 xs =
    let
       val out = map (fn (x, y) => Pretty.enum ":=" "" "" [f1 x, f2 y]) xs
    in
       Pretty.list "" "" out
    end
  fun assgn2 f xs = assgn1 f f xs
  val pps = map (fn (s, pp) => Pretty.block [Pretty.str s, pp])
    [("params: ", assgn1 Pretty.str (pretty_cterm context) params),
     ("assumptions: ", pretty_cterms context asms),
     ("conclusion: ", pretty_cterm context concl),
     ("premises: ", pretty_thms_no_vars context prems),
     ("schematics: ", assgn2 (pretty_cterm context) (snd schematics))]
in
  tracing (Pretty.string_of (Pretty.chunks pps)); all_tac
end
*}

notation (output) "prop"   ("#_" [1000] 1000)

end