src/HOL/ex/Join_Theory.thy
author wenzelm
Tue, 13 Aug 2019 20:54:08 +0200
changeset 70525 1615b6808192
child 77895 655bd3b0671b
permissions -rw-r--r--
NEWS and example for Theory.join_theory;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
70525
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
     1
(*  Title:      HOL/ex/Join_Theory.thy
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
     3
*)
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
     4
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
     5
section \<open>Join theory content from independent (parallel) specifications\<close>
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
     6
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
     7
theory Join_Theory
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
     8
  imports Main
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
     9
begin
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    10
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    11
subsection \<open>Example template\<close>
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    12
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    13
definition "test = True"
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    14
lemma test: "test" by (simp add: test_def)
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    15
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    16
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    17
subsection \<open>Specification as Isabelle/ML function\<close>
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    18
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    19
ML \<open>
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    20
  fun spec i lthy =
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    21
    let
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    22
      val b = Binding.name ("test" ^ string_of_int i)
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    23
      val ((t, (_, def)), lthy') = lthy
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    24
        |> Local_Theory.define ((b, NoSyn), ((Binding.empty, []), \<^term>\<open>True\<close>));
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    25
      val th =
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    26
        Goal.prove lthy' [] [] (HOLogic.mk_Trueprop t)
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    27
          (fn {context = goal_ctxt, ...} => asm_full_simp_tac (goal_ctxt addsimps [def]) 1);
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    28
      val (_, lthy'') = lthy' |> Local_Theory.note ((b, []), [th]);
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    29
    in lthy'' end;
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    30
\<close>
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    31
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    32
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    33
subsection \<open>Example application\<close>
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    34
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    35
setup \<open>
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    36
  fn thy =>
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    37
    let val forked_thys = Par_List.map (fn i => Named_Target.theory_map (spec i) thy) (1 upto 10)
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    38
    in Theory.join_theory forked_thys end
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    39
\<close>
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    40
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    41
term test1
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    42
thm test1
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    43
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    44
term test10
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    45
thm test10
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    46
1615b6808192 NEWS and example for Theory.join_theory;
wenzelm
parents:
diff changeset
    47
end