src/FOL/ex/LocaleTest.thy
author ballarin
Wed, 01 Jun 2005 12:30:49 +0200
changeset 16168 adb83939177f
parent 16102 c5f6726d9bb1
child 16325 a6431098a929
permissions -rw-r--r--
Locales: new element constrains, parameter renaming with syntax, experimental command instantiate withdrawn.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
     1
(*  Title:      FOL/ex/LocaleTest.thy
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
     2
    ID:         $Id$
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
     3
    Author:     Clemens Ballarin
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
     4
    Copyright (c) 2005 by Clemens Ballarin
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
     5
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
     6
Collection of regression tests for locales.
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
     7
*)
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
     8
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
     9
header {* Test of Locale Interpretation *}
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    10
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    11
theory LocaleTest
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    12
imports FOL
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    13
begin
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    14
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
    15
ML {* set quick_and_dirty *}    (* allow for thm command in batch mode *)
16168
adb83939177f Locales: new element constrains, parameter renaming with syntax,
ballarin
parents: 16102
diff changeset
    16
ML {* set Toplevel.debug *}
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
    17
ML {* set show_hyps *}
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
    18
ML {* set show_sorts *}
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
    19
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    20
section {* Renaming with Syntax *}
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    21
16168
adb83939177f Locales: new element constrains, parameter renaming with syntax,
ballarin
parents: 16102
diff changeset
    22
adb83939177f Locales: new element constrains, parameter renaming with syntax,
ballarin
parents: 16102
diff changeset
    23
locale (open) S = var mult +
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    24
  assumes "mult(x, y) = mult(y, x)"
16168
adb83939177f Locales: new element constrains, parameter renaming with syntax,
ballarin
parents: 16102
diff changeset
    25
(* Making this declaration (open) reveals a problem when mixing open and
adb83939177f Locales: new element constrains, parameter renaming with syntax,
ballarin
parents: 16102
diff changeset
    26
   closed locales. *)
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    27
16168
adb83939177f Locales: new element constrains, parameter renaming with syntax,
ballarin
parents: 16102
diff changeset
    28
print_locale S
adb83939177f Locales: new element constrains, parameter renaming with syntax,
ballarin
parents: 16102
diff changeset
    29
adb83939177f Locales: new element constrains, parameter renaming with syntax,
ballarin
parents: 16102
diff changeset
    30
locale (open) S' = S mult (infixl "**" 60)
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    31
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    32
print_locale S'
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    33
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    34
locale T = var mult (infixl "**" 60) +
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    35
  assumes "x ** y = y ** x"
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    36
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    37
locale U = T mult (infixl "**" 60) + T add (infixl "++" 55) + var h +
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    38
  assumes hom: "h(x ** y) = h(x) ++ h(y)"
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    39
16168
adb83939177f Locales: new element constrains, parameter renaming with syntax,
ballarin
parents: 16102
diff changeset
    40
locale V = U _ add
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    41
16168
adb83939177f Locales: new element constrains, parameter renaming with syntax,
ballarin
parents: 16102
diff changeset
    42
adb83939177f Locales: new element constrains, parameter renaming with syntax,
ballarin
parents: 16102
diff changeset
    43
section {* Constrains *}
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    44
16168
adb83939177f Locales: new element constrains, parameter renaming with syntax,
ballarin
parents: 16102
diff changeset
    45
locale Z = fixes a (structure)
adb83939177f Locales: new element constrains, parameter renaming with syntax,
ballarin
parents: 16102
diff changeset
    46
locale Z' = Z +
adb83939177f Locales: new element constrains, parameter renaming with syntax,
ballarin
parents: 16102
diff changeset
    47
  constrains a :: "'a => 'b"
adb83939177f Locales: new element constrains, parameter renaming with syntax,
ballarin
parents: 16102
diff changeset
    48
  assumes "a (x :: 'a) = a (y)"
adb83939177f Locales: new element constrains, parameter renaming with syntax,
ballarin
parents: 16102
diff changeset
    49
print_locale Z'
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    50
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    51
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    52
section {* Interpretation *}
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
    53
15598
4ab52355bb53 Registrations of global locale interpretations: improved, better naming.
ballarin
parents: 15596
diff changeset
    54
(* interpretation input syntax *)
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    55
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    56
locale L
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    57
locale M = fixes a and b and c
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    58
15598
4ab52355bb53 Registrations of global locale interpretations: improved, better naming.
ballarin
parents: 15596
diff changeset
    59
interpretation test [simp]: L + M a b c [x y z] .
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    60
15837
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
    61
print_interps L    (* output: test *)
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
    62
print_interps M    (* output: test *)
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    63
15624
484178635bd8 Further work on interpretation commands. New command `interpret' for
ballarin
parents: 15598
diff changeset
    64
interpretation test [simp]: L print_interps M .
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    65
15598
4ab52355bb53 Registrations of global locale interpretations: improved, better naming.
ballarin
parents: 15596
diff changeset
    66
interpretation L .
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    67
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    68
(* processing of locale expression *)
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    69
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    70
locale A = fixes a assumes asm_A: "a = a"
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    71
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    72
locale (open) B = fixes b assumes asm_B [simp]: "b = b"
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    73
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    74
locale C = A + B + assumes asm_C: "c = c"
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    75
  (* TODO: independent type var in c, prohibit locale declaration *)
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    76
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    77
locale D = A + B + fixes d defines def_D: "d == (a = b)"
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    78
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
    79
theorem (in A)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
    80
  includes D
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
    81
  shows True ..
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
    82
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
    83
theorem (in D) True ..
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    84
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    85
typedecl i
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    86
arities i :: "term"
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    87
15598
4ab52355bb53 Registrations of global locale interpretations: improved, better naming.
ballarin
parents: 15596
diff changeset
    88
15837
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
    89
interpretation p1: C ["X::i" "Y::i"] by (auto intro: A.intro C_axioms.intro)
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    90
15837
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
    91
print_interps A  (* output: p1 *)
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    92
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
    93
(* possible accesses *)
15624
484178635bd8 Further work on interpretation commands. New command `interpret' for
ballarin
parents: 15598
diff changeset
    94
thm p1.a.asm_A thm LocaleTest.p1.a.asm_A
15763
b901a127ac73 Interpretation supports statically scoped attributes; documentation.
ballarin
parents: 15696
diff changeset
    95
thm p1.asm_A thm LocaleTest.p1.asm_A
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
    96
15624
484178635bd8 Further work on interpretation commands. New command `interpret' for
ballarin
parents: 15598
diff changeset
    97
484178635bd8 Further work on interpretation commands. New command `interpret' for
ballarin
parents: 15598
diff changeset
    98
(* without prefix *)
484178635bd8 Further work on interpretation commands. New command `interpret' for
ballarin
parents: 15598
diff changeset
    99
15837
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   100
interpretation C ["W::i" "Z::i"] .  (* subsumed by p1: C *)
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   101
interpretation C ["W::'a" "Z::i"] by (auto intro: A.intro C_axioms.intro)
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   102
  (* subsumes p1: A and p1: C *)
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   103
15598
4ab52355bb53 Registrations of global locale interpretations: improved, better naming.
ballarin
parents: 15596
diff changeset
   104
15837
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   105
print_interps A  (* output: <no prefix>, p1 *)
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
   106
15837
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   107
(* possible accesses *)
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   108
thm asm_C thm a_b.asm_C thm LocaleTest.a_b.asm_C thm LocaleTest.a_b.asm_C
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   109
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
   110
15837
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   111
interpretation p2: D [X "Y::i" "Y = X"] by (simp add: eq_commute)
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   112
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   113
print_interps A  (* output: <no prefix>, p1 *)
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   114
print_interps D  (* output: p2 *)
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   115
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   116
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   117
interpretation p3: D [X "Y::i"] .
15598
4ab52355bb53 Registrations of global locale interpretations: improved, better naming.
ballarin
parents: 15596
diff changeset
   118
4ab52355bb53 Registrations of global locale interpretations: improved, better naming.
ballarin
parents: 15596
diff changeset
   119
(* duplicate: not registered *)
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   120
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   121
(* thm p3.a.asm_A *)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   122
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
   123
15837
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   124
print_interps A  (* output: <no prefix>, p1 *)
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   125
print_interps B  (* output: p1 *)
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   126
print_interps C  (* output: <no name>, p1 *)
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   127
print_interps D  (* output: p2, p3 *)
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
   128
15837
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   129
(* schematic vars in instantiation not permitted *)
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   130
(*
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   131
interpretation p4: A ["?x::?'a1"] apply (rule A.intro) apply rule done
15598
4ab52355bb53 Registrations of global locale interpretations: improved, better naming.
ballarin
parents: 15596
diff changeset
   132
print_interps A
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   133
*)
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
   134
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
   135
interpretation p10: D + D a' b' d' [X "Y::i" _ u "v::i" _] .
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   136
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   137
corollary (in D) th_x: True ..
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   138
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   139
(* possible accesses: for each registration *)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   140
15837
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   141
thm p2.th_x thm p3.th_x
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   142
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   143
lemma (in D) th_y: "d == (a = b)" .
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   144
15837
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   145
thm p2.th_y thm p3.th_y
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   146
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   147
lemmas (in D) th_z = th_y
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   148
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   149
thm p2.th_z
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   150
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   151
section {* Interpretation in proof contexts *}
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
   152
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
   153
locale F = fixes f assumes asm_F: "f & f --> f"
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
   154
15624
484178635bd8 Further work on interpretation commands. New command `interpret' for
ballarin
parents: 15598
diff changeset
   155
theorem True
484178635bd8 Further work on interpretation commands. New command `interpret' for
ballarin
parents: 15598
diff changeset
   156
proof -
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
   157
  fix alpha::i and beta::'a and gamma::o
15837
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   158
  (* FIXME: omitting type of beta leads to error later at interpret p6 *)
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   159
  have alpha_A: "A(alpha)" by (auto intro: A.intro)
15837
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   160
  interpret p5: A [alpha] .  (* subsumed *)
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   161
  print_interps A  (* output: <no prefix>, p1 *)
15624
484178635bd8 Further work on interpretation commands. New command `interpret' for
ballarin
parents: 15598
diff changeset
   162
  interpret p6: C [alpha beta] by (auto intro: C_axioms.intro)
15837
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   163
  print_interps A   (* output: <no prefix>, p1 *)
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   164
  print_interps C   (* output: <no prefix>, p1, p6 *)
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
   165
  interpret p11: F [gamma] by (fast intro: F.intro)
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
   166
  thm p11.asm_F      (* gamma is a Free *)
15624
484178635bd8 Further work on interpretation commands. New command `interpret' for
ballarin
parents: 15598
diff changeset
   167
qed rule
484178635bd8 Further work on interpretation commands. New command `interpret' for
ballarin
parents: 15598
diff changeset
   168
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   169
theorem (in A) True
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   170
proof -
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   171
  print_interps A
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   172
  fix beta and gamma
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   173
  interpret p9: D [a beta _]
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   174
    (* no proof obligation for A !!! *)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   175
    apply - apply (rule refl) apply assumption done
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   176
qed rule
15624
484178635bd8 Further work on interpretation commands. New command `interpret' for
ballarin
parents: 15598
diff changeset
   177
484178635bd8 Further work on interpretation commands. New command `interpret' for
ballarin
parents: 15598
diff changeset
   178
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   179
(* Definition involving free variable *)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   180
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   181
ML {* reset show_sorts *}
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   182
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   183
locale E = fixes e defines e_def: "e(x) == x & x"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   184
  notes e_def2 = e_def
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   185
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   186
lemma (in E) True thm e_def by fast
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   187
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   188
interpretation p7: E ["(%x. x)"] by simp
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   189
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   190
(* TODO: goal mustn't be beta-reduced here, is doesn't match meta-hyp *)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   191
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   192
thm p7.e_def2
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   193
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   194
locale E' = fixes e defines e_def: "e == (%x. x & x)"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   195
  notes e_def2 = e_def
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   196
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   197
interpretation p7': E' ["(%x. x)"] by simp
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   198
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   199
thm p7'.e_def2
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   200
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   201
(* Definition involving free variable in assm *)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   202
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
   203
locale (open) G = fixes g assumes asm_G: "g --> x"
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
   204
  notes asm_G2 = asm_G
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   205
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
   206
interpretation p8: G ["False"] by fast
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   207
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
   208
thm p8.asm_G2
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   209
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   210
subsection {* Locale without assumptions *}
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   211
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   212
locale L1 = notes rev_conjI [intro] = conjI [THEN iffD1 [OF conj_commute]]
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   213
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   214
lemma "[| P; Q |] ==> P & Q"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   215
proof -
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   216
  interpret my: L1 .           txt {* No chained fact required. *}
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   217
  assume Q and P               txt {* order reversed *}
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   218
  then show "P & Q" ..         txt {* Applies @{thm my.rev_conjI}. *}
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   219
qed
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   220
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   221
locale L11 = notes rev_conjI = conjI [THEN iffD1 [OF conj_commute]]
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   222
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   223
lemma "[| P; Q |] ==> P & Q"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   224
proof -
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   225
  interpret [intro]: L11 .     txt {* Attribute supplied at instantiation. *}
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   226
  assume Q and P
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   227
  then show "P & Q" ..
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   228
qed
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   229
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   230
subsection {* Simple locale with assumptions *}
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   231
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   232
consts bin :: "[i, i] => i" (infixl "#" 60)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   233
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   234
axioms i_assoc: "(x # y) # z = x # (y # z)"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   235
  i_comm: "x # y = y # x"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   236
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   237
locale L2 =
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   238
  fixes OP (infixl "+" 60)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   239
  assumes assoc: "(x + y) + z = x + (y + z)"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   240
    and comm: "x + y = y + x"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   241
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   242
lemma (in L2) lcomm: "x + (y + z) = y + (x + z)"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   243
proof -
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   244
  have "x + (y + z) = (x + y) + z" by (simp add: assoc)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   245
  also have "... = (y + x) + z" by (simp add: comm)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   246
  also have "... = y + (x + z)" by (simp add: assoc)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   247
  finally show ?thesis .
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   248
qed
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   249
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   250
lemmas (in L2) AC = comm assoc lcomm
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   251
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   252
lemma "(x::i) # y # z # w = y # x # w # z"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   253
proof -
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   254
  interpret my: L2 ["op #"] by (rule L2.intro [of "op #", OF i_assoc i_comm])
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   255
    txt {* Chained fact required to discharge assumptions of @{text L2}
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   256
      and instantiate parameters. *}
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   257
  show ?thesis by (simp only: my.OP.AC)  (* or simply AC *)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   258
qed
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   259
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   260
subsection {* Nested locale with assumptions *}
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   261
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   262
locale L3 =
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   263
  fixes OP (infixl "+" 60)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   264
  assumes assoc: "(x + y) + z = x + (y + z)"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   265
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   266
locale L4 = L3 +
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   267
  assumes comm: "x + y = y + x"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   268
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   269
lemma (in L4) lcomm: "x + (y + z) = y + (x + z)"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   270
proof -
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   271
  have "x + (y + z) = (x + y) + z" by (simp add: assoc)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   272
  also have "... = (y + x) + z" by (simp add: comm)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   273
  also have "... = y + (x + z)" by (simp add: assoc)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   274
  finally show ?thesis .
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   275
qed
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   276
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   277
lemmas (in L4) AC = comm assoc lcomm
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   278
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   279
lemma "(x::i) # y # z # w = y # x # w # z"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   280
proof -
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   281
  interpret my: L4 ["op #"]
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   282
    by (auto intro: L3.intro L4_axioms.intro i_assoc i_comm)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   283
  show ?thesis by (simp only: my.OP.AC)  (* or simply AC *)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   284
qed
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   285
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   286
subsection {* Locale with definition *}
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   287
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   288
text {* This example is admittedly not very creative :-) *}
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   289
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   290
locale L5 = L4 + var A +
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   291
  defines A_def: "A == True"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   292
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   293
lemma (in L5) lem: A
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   294
  by (unfold A_def) rule
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   295
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   296
lemma "L5(op #) ==> True"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   297
proof -
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   298
  assume "L5(op #)"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   299
  then interpret L5 ["op #"] by (auto intro: L5.axioms)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   300
  show ?thesis by (rule lem)  (* lem instantiated to True *)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   301
qed
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   302
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   303
subsection {* Instantiation in a context with target *}
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   304
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   305
lemma (in L4)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   306
  fixes A (infixl "$" 60)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   307
  assumes A: "L4(A)"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   308
  shows "(x::i) $ y $ z $ w = y $ x $ w $ z"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   309
proof -
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   310
  from A interpret A: L4 ["A"] by (auto intro: L4.axioms)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   311
  show ?thesis by (simp only: A.OP.AC)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   312
qed
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   313
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
   314
end