(* Title: Pure/Isar/auto_bind.ML ID: $Id: auto_bind.ML,v 1.22 2005/09/13 20:19:33 wenzelm Exp $ Author: Markus Wenzel, TU Muenchen Automatic bindings of Isar text elements. *) signature AUTO_BIND = sig val rule_contextN: string val thesisN: string val thisN: string val goal: theory -> term list -> (indexname * term option) list val cases: theory -> term list -> (string * RuleCases.T option) list val facts: theory -> term list -> (indexname * term option) list end; structure AutoBind: AUTO_BIND = struct (** bindings **) val rule_contextN = "rule_context"; val thesisN = "thesis"; val thisN = "this"; fun strip_judgment thy = ObjectLogic.drop_judgment thy o Logic.strip_assums_concl; fun statement_binds thy name prop = [((name, 0), SOME (Term.list_abs (Logic.strip_params prop, strip_judgment thy prop)))]; (* goal *) fun goal thy [prop] = statement_binds thy thesisN prop | goal _ _ = [((thesisN, 0), NONE)]; fun cases thy [prop] = [RuleCases.simple true (thy, prop) rule_contextN] | cases _ _ = [(rule_contextN, NONE)]; (* facts *) fun get_arg thy prop = (case strip_judgment thy prop of _ $ t => SOME (Term.list_abs (Logic.strip_params prop, t)) | _ => NONE); fun facts _ [] = [] | facts thy props = let val prop = Library.last_elem props in [(Syntax.dddot_indexname, get_arg thy prop)] @ statement_binds thy thisN prop end; end;