Added Fred's example on modifying the proof context for parsing.
Isabelle_DOF/Isabelle_DOF/master This commit looks good Details

This commit is contained in:
Burkhart Wolff 2019-10-01 17:57:26 +02:00
parent b863a0178f
commit cc787cb9f1
4 changed files with 46 additions and 3 deletions

View File

@ -602,6 +602,36 @@ fun mk_meta_eq (t, u) = meta_eq_const (fastype_of t) $ t $ u;
\<close>
subsection\<open>Another Approach for Typed Parsing\<close>
text\<open>Another example for influencing @{ML "Syntax.read_term"} by modifying
the @{ML_type "Proof.context"}: \<close>
definition "zz = ()"
ML\<open>@{term zz}\<close> (* So : @(term "zz"} is now a constant*)
ML\<open>val Free ("zz", ty) = Proof_Context.add_fixes
[(@{binding "zz"}, SOME @{typ nat}, NoSyn)] @{context}
|> (fn (S, ctxt) => (writeln (String.concat S);
Syntax.read_term ctxt "zz"));
(* So : @(term "zz"} is here a free variable. *) \<close>
ML\<open>@{term zz}\<close> (* So : @(term "zz"} is now a constant again.*)
locale Z =
fixes zz :: nat
begin
ML\<open>@{term "(zz)"}\<close>
end
lemma True
proof - fix a :: nat
show True
ML_prf \<open>@{term a}\<close>
term a
oops
subsection*[t233::technical]\<open> Theories and the Signature API\<close>
ML\<open>
Sign.tsig_of : theory -> Type.tsig;

View File

@ -42,7 +42,9 @@ doc_class D = B +
doc_class E = D +
x :: "string" <= "''qed''" (* overriding default *)
doc_class F =
properties :: "term list"
r :: "thm list"

View File

@ -30,7 +30,18 @@ val {docobj_tab={tab = docitem_tab, ...},docclass_tab, ISA_transformer_tab, moni
Symtab.dest docitem_tab;
Symtab.dest docclass_tab;
\<close>
ML\<open>
fun fac x = if x = 0 then 1 else x * (fac(x -1));
fac 3;
\<close>
ML\<open>
open Thm;
\<close>
text\<open>A text item containing standard theorem antiquotations and complex meta-information.\<close>
(* crashes in batch mode ...

View File

@ -29,7 +29,7 @@ section*[a::A, x = "3"] \<open> Lorem ipsum dolor sit amet, ... \<close>
text*[c1::C, x = "''beta''"] \<open> ... suspendisse non arcu malesuada mollis, nibh morbi, ... \<close>
text*[d::D, a1 = "X3"] \<open> ... phasellus amet id massa nunc, pede suscipit repellendus,
... @{docitem "c1"} @{thm "refl"} \<close>
... @{C "c1"} @{thm "refl"} \<close>
update_instance*[d::D, a1 := X2]