Theory XML_Data

theory XML_Data
imports Drinker
(*  Title:      HOL/Proofs/ex/XML_Data.thy
    Author:     Makarius
    Author:     Stefan Berghofer

XML data representation of proof terms.
*)

theory XML_Data
  imports "HOL-Isar_Examples.Drinker"
begin

subsection ‹Export and re-import of global proof terms›

ML ‹
  fun export_proof ctxt thm =
    Proofterm.encode (Reconstruct.clean_proof_of ctxt true thm);

  fun import_proof thy xml =
    let
      val prf = Proofterm.decode xml;
      val (prf', _) = Proofterm.freeze_thaw_prf prf;
    in Drule.export_without_context (Proof_Checker.thm_of_proof thy prf') end;
›


subsection ‹Examples›

ML ‹val thy1 = @{theory}›

lemma ex: "A ⟶ A" ..

ML_val ‹
  val xml = export_proof @{context} @{thm ex};
  val thm = import_proof thy1 xml;
›

ML_val ‹
  val xml = export_proof @{context} @{thm de_Morgan};
  val thm = import_proof thy1 xml;
›

ML_val ‹
  val xml = export_proof @{context} @{thm Drinker's_Principle};
  val thm = import_proof thy1 xml;
›

text ‹Some fairly large proof:›

ML_val ‹
  val xml = export_proof @{context} @{thm abs_less_iff};
  val thm = import_proof thy1 xml;
  @{assert} (size (YXML.string_of_body xml) > 1000000);
›

end