Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/Isabelle/HOL/Library/   (Isabelle Prover Version 2025-1©)  Datei vom 16.11.2025 mit Größe 5 kB image not shown  

Quelle  Code_Test.thy

  Sprache: Isabelle
 

(*  Title:      HOL/Library/Code_Test.thy
    Author:     Andreas Lochbihler, ETH Zürich

Test infrastructure for the code generator.
*)


section Test infrastructure for the code generator

theory Code_Test
imports Main
keywords "test_code" :: diag
begin

subsection YXML encoding for typCode_Evaluation.term

datatype (plugins del: code size "quickcheck") yxml_of_term = YXML

lemma yot_anything: "x = (y :: yxml_of_term)"
by(cases x y rule: yxml_of_term.exhaust[case_product yxml_of_term.exhaust])(simp)

definition yot_empty :: yxml_of_term where [code del]: "yot_empty = YXML"
definition yot_literal :: "String.literal yxml_of_term"
  where [code del]: "yot_literal _ = YXML"
definition yot_append :: "yxml_of_term yxml_of_term yxml_of_term"
  where [code del]: "yot_append _ _ = YXML"
definition yot_concat :: "yxml_of_term list yxml_of_term"
  where [code del]: "yot_concat _ = YXML"

text Serialise typyxml_of_term to native string of target language

code_printing type_constructor yxml_of_term
    (SML) "string"
  and (OCaml) "string"
  and (Haskell) "String"
  and (Scala) "String"
| constant yot_empty
    (SML) "\"\""
  and (OCaml) "\"\""
  and (Haskell) "\"\""
  and (Scala) "\"\""
| constant yot_literal
    (SML) "_"
  and (OCaml) "_"
  and (Haskell) "_"
  and (Scala) "_"
| constant yot_append
   (SML) "String.concat [(_), (_)]"
  and (OCaml) "String.concat \"\" [(_); (_)]"
  and (Haskell) infixr 5 "++"
  and (Scala) infixl 5 "+"
| constant yot_concat
   (SML) "String.concat"
  and (OCaml) "String.concat \"\""
  and (Haskell) "Prelude.concat"
  and (Scala) "_.mkString(\"\")"

text 
 Stripped-down implementations of Isabelle's XML tree with YXML encoding as
 defined in 🚫~~/src/Pure/PIDE/xml.ML, 🚫~~/src/Pure/PIDE/yxml.ML
 sufficient to encode typCode_Evaluation.term as in
 🚫~~/src/Pure/term_xml.ML.
 


datatype (plugins del: code size "quickcheck") xml_tree = XML_Tree

lemma xml_tree_anything: "x = (y :: xml_tree)"
by(cases x y rule: xml_tree.exhaust[case_product xml_tree.exhaust])(simp)

context begin
local_setup Local_Theory.map_background_naming (Name_Space.mandatory_path "xml")

type_synonym attributes = "(String.literal × String.literal) list"
type_synonym body = "xml_tree list"

definition Elem :: "String.literal attributes xml_tree list xml_tree"
where [code del]: "Elem _ _ _ = XML_Tree"

definition Text :: "String.literal xml_tree"
where [code del]: "Text _ = XML_Tree"

definition node :: "xml_tree list xml_tree"
where "node ts = Elem (STR '':'') [] ts"

definition tagged :: "String.literal String.literal option xml_tree list xml_tree"
where "tagged tag x ts = Elem tag (case x of None [] | Some x' [(STR ''0'', x')]) ts"

definition list where "list f xs = map (node f) xs"

definition X :: yxml_of_term where "X = yot_literal (STR 0x05)"
definition Y :: yxml_of_term where "Y = yot_literal (STR 0x06)"
definition XY :: yxml_of_term where "XY = yot_append X Y"
definition XYX :: yxml_of_term where "XYX = yot_append XY X"

end

code_datatype xml.Elem xml.Text

definition yxml_string_of_xml_tree :: "xml_tree yxml_of_term yxml_of_term"
where [code del]: "yxml_string_of_xml_tree _ _ = YXML"

lemma yxml_string_of_xml_tree_code [code]:
  "yxml_string_of_xml_tree (xml.Elem name atts ts) rest =
   yot_append xml.XY (
   yot_append (yot_literal name) (
   foldr (λ(a, x) rest.
     yot_append xml.Y (
     yot_append (yot_literal a) (
     yot_append (yot_literal (STR ''='')) (
     yot_append (yot_literal x) rest)))) atts (
   foldr yxml_string_of_xml_tree ts (
   yot_append xml.XYX rest))))"
  "yxml_string_of_xml_tree (xml.Text s) rest = yot_append (yot_literal s) rest"
by(rule yot_anything)+

definition yxml_string_of_body :: "xml.body yxml_of_term"
where "yxml_string_of_body ts = foldr yxml_string_of_xml_tree ts yot_empty"

text 
 Encoding typCode_Evaluation.term into XML trees as defined in
 🚫~~/src/Pure/term_xml.ML.
 


definition xml_of_typ :: "Typerep.typerep xml.body"
where [code del]: "xml_of_typ _ = [XML_Tree]"

definition xml_of_term :: "Code_Evaluation.term xml.body"
where [code del]: "xml_of_term _ = [XML_Tree]"

lemma xml_of_typ_code [code]:
  "xml_of_typ (typerep.Typerep t args) = [xml.tagged (STR ''0'') (Some t) (xml.list xml_of_typ args)]"
by(simp add: xml_of_typ_def xml_tree_anything)

lemma xml_of_term_code [code]:
  "xml_of_term (Code_Evaluation.Const x ty) = [xml.tagged (STR ''0'') (Some x) (xml_of_typ ty)]"
  "xml_of_term (Code_Evaluation.App t1 t2) = [xml.tagged (STR ''5'') None [xml.node (xml_of_term t1), xml.node (xml_of_term t2)]]"
  "xml_of_term (Code_Evaluation.Abs x ty t) = [xml.tagged (STR ''4'') (Some x) [xml.node (xml_of_typ ty), xml.node (xml_of_term t)]]"
   FIXME: constCode_Evaluation.Free is used only in 🚫HOL.Quickcheck_Narrowing to represent
 uninstantiated parameters in constructors. Here, we always translate them to 🚫Free variables.

  "xml_of_term (Code_Evaluation.Free x ty) = [xml.tagged (STR ''1'') (Some x) (xml_of_typ ty)]"
by(simp_all add: xml_of_term_def xml_tree_anything)

definition yxml_string_of_term :: "Code_Evaluation.term yxml_of_term"
where "yxml_string_of_term = yxml_string_of_body xml_of_term"

subsection Test engine and drivers

ML_file code_test.ML

end

Messung V0.5 in Prozent
C=80 H=72 G=75

¤ Dauer der Verarbeitung: 0.11 Sekunden  (vorverarbeitet am  2026-06-29) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

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 und die Messung sind noch experimentell.