src/Tools/SML/Examples.thy
author wenzelm
Mon, 25 Mar 2019 17:21:26 +0100
changeset 69981 3dced198b9ec
parent 69605 a96320074298
child 71934 914baafb3da4
permissions -rw-r--r--
more strict AFP properties;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
56276
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
     1
(*  Title:      Tools/SML/Examples.thy
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
     3
*)
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
     4
58889
5b7a9633cfa8 modernized header uniformly as section;
wenzelm
parents: 58616
diff changeset
     5
section \<open>Standard ML within the Isabelle environment\<close>
56276
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
     6
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
     7
theory Examples
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
     8
imports Pure
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
     9
begin
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    10
58616
4257a7f2bf39 more cartouches;
wenzelm
parents: 56618
diff changeset
    11
text \<open>
61757
wenzelm
parents: 58889
diff changeset
    12
  Isabelle/ML is a somewhat augmented version of Standard ML, with various
wenzelm
parents: 58889
diff changeset
    13
  add-ons that are indispensable for Isabelle development, but may cause
wenzelm
parents: 58889
diff changeset
    14
  conflicts with independent projects in plain Standard ML.
56276
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    15
61757
wenzelm
parents: 58889
diff changeset
    16
  The Isabelle/Isar command \<^theory_text>\<open>SML_file\<close> supports official Standard ML within
wenzelm
parents: 58889
diff changeset
    17
  the Isabelle environment, with full support in the Prover IDE
56276
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    18
  (Isabelle/jEdit).
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    19
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    20
  Here is a very basic example that defines the factorial function and
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    21
  evaluates it for some arguments.
58616
4257a7f2bf39 more cartouches;
wenzelm
parents: 56618
diff changeset
    22
\<close>
56276
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    23
69605
a96320074298 isabelle update -u path_cartouches;
wenzelm
parents: 61757
diff changeset
    24
SML_file \<open>factorial.sml\<close>
56276
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    25
58616
4257a7f2bf39 more cartouches;
wenzelm
parents: 56618
diff changeset
    26
text \<open>
61757
wenzelm
parents: 58889
diff changeset
    27
  The subsequent example illustrates the use of multiple \<^theory_text>\<open>SML_file\<close> commands
wenzelm
parents: 58889
diff changeset
    28
  to build larger Standard ML projects. The toplevel SML environment is
wenzelm
parents: 58889
diff changeset
    29
  enriched cumulatively within the theory context of Isabelle ---
wenzelm
parents: 58889
diff changeset
    30
  independently of the Isabelle/ML environment.
58616
4257a7f2bf39 more cartouches;
wenzelm
parents: 56618
diff changeset
    31
\<close>
56276
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    32
69605
a96320074298 isabelle update -u path_cartouches;
wenzelm
parents: 61757
diff changeset
    33
SML_file \<open>Example.sig\<close>
a96320074298 isabelle update -u path_cartouches;
wenzelm
parents: 61757
diff changeset
    34
SML_file \<open>Example.sml\<close>
56276
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    35
56618
874bdedb2313 added command 'SML_export' and 'SML_import' for exchange of toplevel bindings;
wenzelm
parents: 56276
diff changeset
    36
58616
4257a7f2bf39 more cartouches;
wenzelm
parents: 56618
diff changeset
    37
text \<open>
56618
874bdedb2313 added command 'SML_export' and 'SML_import' for exchange of toplevel bindings;
wenzelm
parents: 56276
diff changeset
    38
  Isabelle/ML and SML share a common run-time system, but the static
61757
wenzelm
parents: 58889
diff changeset
    39
  environments are separate. It is possible to exchange toplevel bindings via
wenzelm
parents: 58889
diff changeset
    40
  separate commands like this.
58616
4257a7f2bf39 more cartouches;
wenzelm
parents: 56618
diff changeset
    41
\<close>
56618
874bdedb2313 added command 'SML_export' and 'SML_import' for exchange of toplevel bindings;
wenzelm
parents: 56276
diff changeset
    42
61757
wenzelm
parents: 58889
diff changeset
    43
SML_export \<open>val f = factorial\<close>  \<comment> \<open>re-use factorial from SML environment\<close>
58616
4257a7f2bf39 more cartouches;
wenzelm
parents: 56618
diff changeset
    44
ML \<open>f 42\<close>
56618
874bdedb2313 added command 'SML_export' and 'SML_import' for exchange of toplevel bindings;
wenzelm
parents: 56276
diff changeset
    45
58616
4257a7f2bf39 more cartouches;
wenzelm
parents: 56618
diff changeset
    46
SML_import \<open>val println = Output.writeln\<close>
61757
wenzelm
parents: 58889
diff changeset
    47
  \<comment> \<open>re-use Isabelle/ML channel for SML\<close>
56618
874bdedb2313 added command 'SML_export' and 'SML_import' for exchange of toplevel bindings;
wenzelm
parents: 56276
diff changeset
    48
58616
4257a7f2bf39 more cartouches;
wenzelm
parents: 56618
diff changeset
    49
SML_import \<open>val par_map = Par_List.map\<close>
61757
wenzelm
parents: 58889
diff changeset
    50
  \<comment> \<open>re-use Isabelle/ML parallel list combinator for SML\<close>
56618
874bdedb2313 added command 'SML_export' and 'SML_import' for exchange of toplevel bindings;
wenzelm
parents: 56276
diff changeset
    51
56276
9e2d5e3debd3 some SML examples;
wenzelm
parents:
diff changeset
    52
end