fun funs raw_key {isolate_conv = icv, whatis = wi, simpset = ss} phi context =
context |> Data.map (fn data => let val key = Morphism.thm phi raw_key; val _ = AList.defined eq_key data key orelse raise THM ("No data entry for structure key", 0, [key]); val fns =
{isolate_conv = icv phi, whatis = wi phi, simpset = ss phi (Context.proof_of context)}; in AList.map_entry eq_key key (apsnd (K fns)) data end);
funmatch ctxt tm = let fun match_inst ({minf, pinf, nmi, npi, ld, qe, atoms}, fns) pat = let fun h instT = let val substT = Thm.instantiate (instT, Vars.empty); val substT_cterm = Drule.cterm_rule substT;
val minf' = map substT minf val pinf' = map substT pinf val nmi' = map substT nmi val npi' = map substT npi val ld' = map substT ld val qe' = substT qe val atoms' = map substT_cterm atoms val result = ({minf = minf', pinf = pinf', nmi = nmi', npi = npi',
ld = ld', qe = qe', atoms = atoms'}, fns) in SOME result end in (casetry Thm.match (pat, tm) of
NONE => NONE
| SOME (instT, _) => h instT) end;
fun match_struct (_,
entry as ({atoms = atoms, ...}, _): entry) =
get_first (match_inst entry) atoms; in get_first match_struct (get ctxt) end;
(* concrete syntax *)
local val minfN = "minf"; val pinfN = "pinf"; val nmiN = "nmi"; val npiN = "npi"; val lin_denseN = "lindense"; val qeN = "qe" val atomsN = "atoms" val simpsN = "simps" fun keyword k = Scan.lift (Args.$$$ k -- Args.colon) >> K (); val any_keyword =
keyword minfN || keyword pinfN || keyword nmiN
|| keyword npiN || keyword lin_denseN || keyword qeN
|| keyword atomsN || keyword simpsN;
val thms = Scan.repeats (Scan.unless any_keyword Attrib.multi_thm); val terms = thms >> map Drule.dest_term; in
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.