src/FOL/ex/LocaleTest.thy
author wenzelm
Fri, 31 Aug 2007 18:46:33 +0200
changeset 24499 5a3ee202e0b0
parent 23919 af871d13e320
child 24788 f0dba1cda0b5
permissions -rw-r--r--
do not touch quick_and_dirty;
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
16168
adb83939177f Locales: new element constrains, parameter renaming with syntax,
ballarin
parents: 16102
diff changeset
    15
ML {* set Toplevel.debug *}
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
    16
ML {* set show_hyps *}
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
    17
ML {* set show_sorts *}
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
    18
17139
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
    19
ML {*
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
    20
  fun check_thm name = let
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
    21
    val thy = the_context ();
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
    22
    val thm = get_thm thy (Name name);
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
    23
    val {prop, hyps, ...} = rep_thm thm;
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
    24
    val prems = Logic.strip_imp_prems prop;
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
    25
    val _ = if null hyps then ()
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
    26
        else error ("Theorem " ^ quote name ^ " has meta hyps.\n" ^
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
    27
          "Consistency check of locales package failed.");
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
    28
    val _ = if null prems then ()
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
    29
        else error ("Theorem " ^ quote name ^ " has premises.\n" ^
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
    30
          "Consistency check of locales package failed.");
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
    31
  in () end;
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
    32
*}
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    33
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    34
section {* Context Elements and Locale Expressions *}
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    35
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    36
text {* Naming convention for global objects: prefixes L and l *}
16168
adb83939177f Locales: new element constrains, parameter renaming with syntax,
ballarin
parents: 16102
diff changeset
    37
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    38
subsection {* Renaming with Syntax *}
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    39
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    40
locale (open) LS = var mult +
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    41
  assumes "mult(x, y) = mult(y, x)"
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    42
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    43
print_locale LS
16168
adb83939177f Locales: new element constrains, parameter renaming with syntax,
ballarin
parents: 16102
diff changeset
    44
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    45
locale LS' = LS mult (infixl "**" 60)
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    46
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    47
print_locale LS'
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    48
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    49
locale LT = var mult (infixl "**" 60) +
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    50
  assumes "x ** y = y ** x"
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    51
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    52
locale LU = LT mult (infixl "**" 60) + LT add (infixl "++" 55) + var h +
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    53
  assumes hom: "h(x ** y) = h(x) ++ h(y)"
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    54
19783
82f365a14960 Improved parameter management of locales.
ballarin
parents: 17436
diff changeset
    55
(*
20034
28fcbcf49fe5 Modified comment.
ballarin
parents: 19984
diff changeset
    56
FIXME: graceful handling of type errors?
19783
82f365a14960 Improved parameter management of locales.
ballarin
parents: 17436
diff changeset
    57
locale LY = LT mult (infixl "**" 60) + LT add (binder "++" 55) + var h +
82f365a14960 Improved parameter management of locales.
ballarin
parents: 17436
diff changeset
    58
  assumes "mult(x) == add"
82f365a14960 Improved parameter management of locales.
ballarin
parents: 17436
diff changeset
    59
*)
82f365a14960 Improved parameter management of locales.
ballarin
parents: 17436
diff changeset
    60
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    61
locale LV = LU _ add
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    62
19783
82f365a14960 Improved parameter management of locales.
ballarin
parents: 17436
diff changeset
    63
locale LW = LU _ mult (infixl "**" 60)
82f365a14960 Improved parameter management of locales.
ballarin
parents: 17436
diff changeset
    64
16168
adb83939177f Locales: new element constrains, parameter renaming with syntax,
ballarin
parents: 16102
diff changeset
    65
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    66
subsection {* Constrains *}
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    67
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    68
locale LZ = fixes a (structure)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    69
locale LZ' = LZ +
16168
adb83939177f Locales: new element constrains, parameter renaming with syntax,
ballarin
parents: 16102
diff changeset
    70
  constrains a :: "'a => 'b"
adb83939177f Locales: new element constrains, parameter renaming with syntax,
ballarin
parents: 16102
diff changeset
    71
  assumes "a (x :: 'a) = a (y)"
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    72
print_locale LZ'
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    73
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    74
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
    75
section {* Interpretation *}
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
    76
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    77
text {* Naming convention for global objects: prefixes I and i *}
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    78
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    79
text {* interpretation input syntax *}
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    80
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    81
locale IL
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    82
locale IM = fixes a and b and c
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    83
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    84
interpretation test [simp]: IL + IM a b c [x y z] .
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    85
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    86
print_interps IL    (* output: test *)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    87
print_interps IM    (* output: test *)
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    88
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    89
interpretation test [simp]: IL print_interps IM .
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    90
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    91
interpretation IL .
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    92
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    93
text {* Processing of locale expression *}
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    94
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    95
locale IA = fixes a assumes asm_A: "a = a"
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    96
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    97
locale (open) IB = fixes b assumes asm_B [simp]: "b = b"
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
    98
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
    99
locale IC = IA + IB + assumes asm_C: "c = c"
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
   100
  (* TODO: independent type var in c, prohibit locale declaration *)
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
   101
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   102
locale ID = IA + IB + fixes d defines def_D: "d == (a = b)"
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
   103
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   104
theorem (in IA)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   105
  includes ID
19931
fb32b43e7f80 Restructured locales with predicates: import is now an interpretation.
ballarin
parents: 19783
diff changeset
   106
  shows True
fb32b43e7f80 Restructured locales with predicates: import is now an interpretation.
ballarin
parents: 19783
diff changeset
   107
  print_interps! IA
fb32b43e7f80 Restructured locales with predicates: import is now an interpretation.
ballarin
parents: 19783
diff changeset
   108
  print_interps! ID
fb32b43e7f80 Restructured locales with predicates: import is now an interpretation.
ballarin
parents: 19783
diff changeset
   109
  ..
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   110
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   111
theorem (in ID) True ..
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
   112
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
   113
typedecl i
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
   114
arities i :: "term"
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
   115
15598
4ab52355bb53 Registrations of global locale interpretations: improved, better naming.
ballarin
parents: 15596
diff changeset
   116
19984
29bb4659f80a Method intro_locales replaced by intro_locales and unfold_locales.
ballarin
parents: 19931
diff changeset
   117
interpretation i1: IC ["X::i" "Y::i"] by unfold_locales auto
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
   118
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   119
print_interps IA  (* output: i1 *)
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
   120
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   121
(* possible accesses *)
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   122
thm i1.a.asm_A thm LocaleTest.i1.a.asm_A
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   123
thm i1.asm_A thm LocaleTest.i1.asm_A
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   124
17139
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   125
ML {* check_thm "i1.a.asm_A" *}
15624
484178635bd8 Further work on interpretation commands. New command `interpret' for
ballarin
parents: 15598
diff changeset
   126
484178635bd8 Further work on interpretation commands. New command `interpret' for
ballarin
parents: 15598
diff changeset
   127
(* without prefix *)
484178635bd8 Further work on interpretation commands. New command `interpret' for
ballarin
parents: 15598
diff changeset
   128
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   129
interpretation IC ["W::i" "Z::i"] .  (* subsumed by i1: IC *)
19984
29bb4659f80a Method intro_locales replaced by intro_locales and unfold_locales.
ballarin
parents: 19931
diff changeset
   130
interpretation IC ["W::'a" "Z::i"] by unfold_locales auto
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   131
  (* subsumes i1: IA and i1: IC *)
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   132
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   133
print_interps IA  (* output: <no prefix>, i1 *)
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
   134
15837
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   135
(* possible accesses *)
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   136
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
   137
17139
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   138
ML {* check_thm "asm_C" *}
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
   139
19931
fb32b43e7f80 Restructured locales with predicates: import is now an interpretation.
ballarin
parents: 19783
diff changeset
   140
interpretation i2: ID [X "Y::i" "Y = X"]
19984
29bb4659f80a Method intro_locales replaced by intro_locales and unfold_locales.
ballarin
parents: 19931
diff changeset
   141
  by (simp add: eq_commute) unfold_locales
15837
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   142
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   143
print_interps IA  (* output: <no prefix>, i1 *)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   144
print_interps ID  (* output: i2 *)
15837
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   145
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   146
19984
29bb4659f80a Method intro_locales replaced by intro_locales and unfold_locales.
ballarin
parents: 19931
diff changeset
   147
interpretation i3: ID [X "Y::i"] by simp unfold_locales
15598
4ab52355bb53 Registrations of global locale interpretations: improved, better naming.
ballarin
parents: 15596
diff changeset
   148
17436
ballarin
parents: 17228
diff changeset
   149
(* duplicate: thm not added *)
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   150
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   151
(* thm i3.a.asm_A *)
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   152
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
   153
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   154
print_interps IA  (* output: <no prefix>, i1 *)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   155
print_interps IB  (* output: i1 *)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   156
print_interps IC  (* output: <no prefix, i1 *)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   157
print_interps ID  (* output: i2, i3 *)
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
   158
15837
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   159
(* schematic vars in instantiation not permitted *)
7a567dcd4cda Subsumption of locale interpretations.
ballarin
parents: 15763
diff changeset
   160
(*
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   161
interpretation i4: IA ["?x::?'a1"] apply (rule IA.intro) apply rule done
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   162
print_interps IA
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   163
*)
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
   164
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   165
interpretation i10: ID + ID a' b' d' [X "Y::i" _ u "v::i" _] .
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   166
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   167
corollary (in ID) th_x: True ..
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   168
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   169
(* possible accesses: for each registration *)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   170
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   171
thm i2.th_x thm i3.th_x
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   172
17139
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   173
ML {* check_thm "i2.th_x"; check_thm "i3.th_x" *}
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   174
22931
11cc1ccad58e tuned proofs;
wenzelm
parents: 22757
diff changeset
   175
lemma (in ID) th_y: "d == (a = b)" by fact
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   176
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   177
thm i2.th_y thm i3.th_y
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   178
17139
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   179
ML {* check_thm "i2.th_y"; check_thm "i3.th_y" *}
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   180
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   181
lemmas (in ID) th_z = th_y
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   182
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   183
thm i2.th_z
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   184
17139
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   185
ML {* check_thm "i2.th_z" *}
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   186
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
   187
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   188
subsection {* Interpretation in Proof Contexts *}
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   189
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   190
locale IF = fixes f assumes asm_F: "f & f --> f"
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
   191
15624
484178635bd8 Further work on interpretation commands. New command `interpret' for
ballarin
parents: 15598
diff changeset
   192
theorem True
484178635bd8 Further work on interpretation commands. New command `interpret' for
ballarin
parents: 15598
diff changeset
   193
proof -
22757
d3298d63b7b6 Interpretation equations applied to attributes
ballarin
parents: 22659
diff changeset
   194
  fix alpha::i and beta and gamma::o
19984
29bb4659f80a Method intro_locales replaced by intro_locales and unfold_locales.
ballarin
parents: 19931
diff changeset
   195
  have alpha_A: "IA(alpha)" by unfold_locales simp
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   196
  interpret i5: IA [alpha] .  (* subsumed *)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   197
  print_interps IA  (* output: <no prefix>, i1 *)
19984
29bb4659f80a Method intro_locales replaced by intro_locales and unfold_locales.
ballarin
parents: 19931
diff changeset
   198
  interpret i6: IC [alpha beta] by unfold_locales auto
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   199
  print_interps IA   (* output: <no prefix>, i1 *)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   200
  print_interps IC   (* output: <no prefix>, i1, i6 *)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   201
  interpret i11: IF [gamma] by (fast intro: IF.intro)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   202
  thm i11.asm_F      (* gamma is a Free *)
15624
484178635bd8 Further work on interpretation commands. New command `interpret' for
ballarin
parents: 15598
diff changeset
   203
qed rule
484178635bd8 Further work on interpretation commands. New command `interpret' for
ballarin
parents: 15598
diff changeset
   204
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   205
theorem (in IA) True
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   206
proof -
19931
fb32b43e7f80 Restructured locales with predicates: import is now an interpretation.
ballarin
parents: 19783
diff changeset
   207
  print_interps! IA
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   208
  fix beta and gamma
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   209
  interpret i9: ID [a beta _]
19931
fb32b43e7f80 Restructured locales with predicates: import is now an interpretation.
ballarin
parents: 19783
diff changeset
   210
    apply - apply assumption
19984
29bb4659f80a Method intro_locales replaced by intro_locales and unfold_locales.
ballarin
parents: 19931
diff changeset
   211
    apply unfold_locales
19931
fb32b43e7f80 Restructured locales with predicates: import is now an interpretation.
ballarin
parents: 19783
diff changeset
   212
    apply (rule refl) done
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   213
qed rule
15624
484178635bd8 Further work on interpretation commands. New command `interpret' for
ballarin
parents: 15598
diff changeset
   214
484178635bd8 Further work on interpretation commands. New command `interpret' for
ballarin
parents: 15598
diff changeset
   215
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   216
(* Definition involving free variable *)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   217
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   218
ML {* reset show_sorts *}
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   219
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   220
locale IE = fixes e defines e_def: "e(x) == x & x"
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   221
  notes e_def2 = e_def
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   222
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   223
lemma (in IE) True thm e_def by fast
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   224
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   225
interpretation i7: IE ["%x. x"] by simp
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   226
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   227
thm i7.e_def2 (* has no premise *)
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   228
17139
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   229
ML {* check_thm "i7.e_def2" *}
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   230
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   231
locale IE' = fixes e defines e_def: "e == (%x. x & x)"
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   232
  notes e_def2 = e_def
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   233
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   234
interpretation i7': IE' ["(%x. x)"] by simp
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   235
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   236
thm i7'.e_def2
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   237
17139
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   238
ML {* check_thm "i7'.e_def2" *}
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   239
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   240
(* Definition involving free variable in assm *)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   241
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   242
locale (open) IG = fixes g assumes asm_G: "g --> x"
16102
c5f6726d9bb1 Locale expressions: rename with optional mixfix syntax.
ballarin
parents: 15837
diff changeset
   243
  notes asm_G2 = asm_G
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   244
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   245
interpretation i8: IG ["False"] by fast
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   246
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   247
thm i8.asm_G2
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   248
17139
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   249
ML {* check_thm "i8.asm_G2" *}
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   250
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   251
text {* Locale without assumptions *}
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   252
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   253
locale IL1 = notes rev_conjI [intro] = conjI [THEN iffD1 [OF conj_commute]]
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   254
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   255
lemma "[| P; Q |] ==> P & Q"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   256
proof -
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   257
  interpret my: IL1 .          txt {* No chained fact required. *}
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   258
  assume Q and P               txt {* order reversed *}
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   259
  then show "P & Q" ..         txt {* Applies @{thm my.rev_conjI}. *}
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   260
qed
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   261
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   262
locale IL11 = notes rev_conjI = conjI [THEN iffD1 [OF conj_commute]]
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   263
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   264
lemma "[| P; Q |] ==> P & Q"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   265
proof -
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   266
  interpret [intro]: IL11 .     txt {* Attribute supplied at instantiation. *}
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   267
  assume Q and P
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   268
  then show "P & Q" ..
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   269
qed
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   270
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   271
subsection {* Simple locale with assumptions *}
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   272
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   273
consts ibin :: "[i, i] => i" (infixl "#" 60)
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   274
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   275
axioms i_assoc: "(x # y) # z = x # (y # z)"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   276
  i_comm: "x # y = y # x"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   277
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   278
locale IL2 =
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   279
  fixes OP (infixl "+" 60)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   280
  assumes assoc: "(x + y) + z = x + (y + z)"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   281
    and comm: "x + y = y + x"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   282
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   283
lemma (in IL2) lcomm: "x + (y + z) = y + (x + z)"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   284
proof -
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   285
  have "x + (y + z) = (x + y) + z" by (simp add: assoc)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   286
  also have "... = (y + x) + z" by (simp add: comm)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   287
  also have "... = y + (x + z)" by (simp add: assoc)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   288
  finally show ?thesis .
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   289
qed
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   290
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   291
lemmas (in IL2) AC = comm assoc lcomm
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   292
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   293
lemma "(x::i) # y # z # w = y # x # w # z"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   294
proof -
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   295
  interpret my: IL2 ["op #"] by (rule IL2.intro [of "op #", OF i_assoc i_comm])
17033
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   296
  show ?thesis by (simp only: my.OP.AC)  (* or my.AC *)
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   297
qed
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   298
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   299
subsection {* Nested locale with assumptions *}
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   300
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   301
locale IL3 =
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   302
  fixes OP (infixl "+" 60)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   303
  assumes assoc: "(x + y) + z = x + (y + z)"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   304
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   305
locale IL4 = IL3 +
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   306
  assumes comm: "x + y = y + x"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   307
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   308
lemma (in IL4) lcomm: "x + (y + z) = y + (x + z)"
15696
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
  have "x + (y + z) = (x + y) + z" by (simp add: assoc)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   311
  also have "... = (y + x) + z" by (simp add: comm)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   312
  also have "... = y + (x + z)" by (simp add: assoc)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   313
  finally show ?thesis .
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   314
qed
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   315
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   316
lemmas (in IL4) AC = comm assoc lcomm
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   317
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   318
lemma "(x::i) # y # z # w = y # x # w # z"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   319
proof -
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   320
  interpret my: IL4 ["op #"]
19931
fb32b43e7f80 Restructured locales with predicates: import is now an interpretation.
ballarin
parents: 19783
diff changeset
   321
    by (auto intro: IL4.intro IL3.intro IL4_axioms.intro i_assoc i_comm)
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   322
  show ?thesis by (simp only: my.OP.AC)  (* or simply AC *)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   323
qed
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   324
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   325
text {* Locale with definition *}
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   326
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   327
text {* This example is admittedly not very creative :-) *}
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   328
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   329
locale IL5 = IL4 + var A +
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   330
  defines A_def: "A == True"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   331
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   332
lemma (in IL5) lem: A
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   333
  by (unfold A_def) rule
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   334
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   335
lemma "IL5(op #) ==> True"
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   336
proof -
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   337
  assume "IL5(op #)"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   338
  then interpret IL5 ["op #"] by (auto intro: IL5.axioms)
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   339
  show ?thesis by (rule lem)  (* lem instantiated to True *)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   340
qed
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   341
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   342
text {* Interpretation in a context with target *}
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   343
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   344
lemma (in IL4)
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   345
  fixes A (infixl "$" 60)
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   346
  assumes A: "IL4(A)"
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   347
  shows "(x::i) $ y $ z $ w = y $ x $ w $ z"
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   348
proof -
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   349
  from A interpret A: IL4 ["A"] by (auto intro: IL4.axioms)
15696
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   350
  show ?thesis by (simp only: A.OP.AC)
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   351
qed
1da4ce092c0b First release of interpretation commands.
ballarin
parents: 15624
diff changeset
   352
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   353
16736
1e792b32abef Preparations for interpretation of locales in locales.
ballarin
parents: 16620
diff changeset
   354
section {* Interpretation in Locales *}
1e792b32abef Preparations for interpretation of locales in locales.
ballarin
parents: 16620
diff changeset
   355
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   356
text {* Naming convention for global objects: prefixes R and r *}
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   357
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   358
locale (open) Rsemi = var prod (infixl "**" 65) +
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   359
  assumes assoc: "(x ** y) ** z = x ** (y ** z)"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   360
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   361
locale (open) Rlgrp = Rsemi + var one + var inv +
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   362
  assumes lone: "one ** x = x"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   363
    and linv: "inv(x) ** x = one"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   364
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   365
lemma (in Rlgrp) lcancel:
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   366
  "x ** y = x ** z <-> y = z"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   367
proof
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   368
  assume "x ** y = x ** z"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   369
  then have "inv(x) ** x ** y = inv(x) ** x ** z" by (simp add: assoc)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   370
  then show "y = z" by (simp add: lone linv)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   371
qed simp
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   372
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   373
locale (open) Rrgrp = Rsemi + var one + var inv +
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   374
  assumes rone: "x ** one = x"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   375
    and rinv: "x ** inv(x) = one"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   376
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   377
lemma (in Rrgrp) rcancel:
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   378
  "y ** x = z ** x <-> y = z"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   379
proof
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   380
  assume "y ** x = z ** x"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   381
  then have "y ** (x ** inv(x)) = z ** (x ** inv(x))"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   382
    by (simp add: assoc [symmetric])
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   383
  then show "y = z" by (simp add: rone rinv)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   384
qed simp
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   385
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   386
interpretation Rlgrp < Rrgrp
17033
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   387
  proof -
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   388
    {
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   389
      fix x
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   390
      have "inv(x) ** x ** one = inv(x) ** x" by (simp add: linv lone)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   391
      then show "x ** one = x" by (simp add: assoc lcancel)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   392
    }
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   393
    note rone = this
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   394
    {
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   395
      fix x
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   396
      have "inv(x) ** x ** inv(x) = inv(x) ** one"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   397
	by (simp add: linv lone rone)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   398
      then show "x ** inv(x) = one" by (simp add: assoc lcancel)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   399
    }
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   400
  qed
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   401
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   402
(* effect on printed locale *)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   403
19931
fb32b43e7f80 Restructured locales with predicates: import is now an interpretation.
ballarin
parents: 19783
diff changeset
   404
print_locale! Rlgrp
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   405
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   406
(* use of derived theorem *)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   407
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   408
lemma (in Rlgrp)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   409
  "y ** x = z ** x <-> y = z"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   410
  apply (rule rcancel)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   411
  print_interps Rrgrp thm lcancel rcancel
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   412
  done
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   413
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   414
(* circular interpretation *)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   415
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   416
interpretation Rrgrp < Rlgrp
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   417
  proof -
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   418
    {
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   419
      fix x
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   420
      have "one ** (x ** inv(x)) = x ** inv(x)" by (simp add: rinv rone)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   421
      then show "one ** x = x" by (simp add: assoc [symmetric] rcancel)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   422
    }
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   423
    note lone = this
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   424
    {
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   425
      fix x
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   426
      have "inv(x) ** (x ** inv(x)) = one ** inv(x)"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   427
	by (simp add: rinv lone rone)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   428
      then show "inv(x) ** x = one" by (simp add: assoc [symmetric] rcancel)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   429
    }
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   430
  qed
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   431
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   432
(* effect on printed locale *)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   433
17228
19b460b39dad print_locale omits facts by default
ballarin
parents: 17139
diff changeset
   434
print_locale! Rrgrp
19b460b39dad print_locale omits facts by default
ballarin
parents: 17139
diff changeset
   435
print_locale! Rlgrp
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   436
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   437
(* locale with many parameters ---
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   438
   interpretations generate alternating group A5 *)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   439
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   440
locale RA5 = var A + var B + var C + var D + var E +
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   441
  assumes eq: "A <-> B <-> C <-> D <-> E"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   442
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   443
interpretation RA5 < RA5 _ _ D E C
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   444
print_facts
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   445
print_interps RA5
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   446
  using A_B_C_D_E.eq apply (blast intro: RA5.intro) done
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   447
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   448
interpretation RA5 < RA5 C _ E _ A
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   449
print_facts
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   450
print_interps RA5
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   451
  using A_B_C_D_E.eq apply (blast intro: RA5.intro) done
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   452
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   453
interpretation RA5 < RA5 B C A _ _
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   454
print_facts
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   455
print_interps RA5
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   456
  using A_B_C_D_E.eq apply (blast intro: RA5.intro) done
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   457
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   458
interpretation RA5 < RA5 _ C D B _ .
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   459
  (* Any even permutation of parameters is subsumed by the above. *)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   460
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   461
(* circle of three locales, forward direction *)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   462
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   463
locale (open) RA1 = var A + var B + assumes p: "A <-> B"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   464
locale (open) RA2 = var A + var B + assumes q: "A & B | ~ A & ~ B"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   465
locale (open) RA3 = var A + var B + assumes r: "(A --> B) & (B --> A)"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   466
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   467
interpretation RA1 < RA2
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   468
  print_facts
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   469
  using p apply fast done
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   470
interpretation RA2 < RA3
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   471
  print_facts
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   472
  using q apply fast done
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   473
interpretation RA3 < RA1
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   474
  print_facts
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   475
  using r apply fast done
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   476
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   477
(* circle of three locales, backward direction *)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   478
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   479
locale (open) RB1 = var A + var B + assumes p: "A <-> B"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   480
locale (open) RB2 = var A + var B + assumes q: "A & B | ~ A & ~ B"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   481
locale (open) RB3 = var A + var B + assumes r: "(A --> B) & (B --> A)"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   482
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   483
interpretation RB1 < RB2
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   484
  print_facts
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   485
  using p apply fast done
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   486
interpretation RB3 < RB1
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   487
  print_facts
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   488
  using r apply fast done
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   489
interpretation RB2 < RB3
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   490
  print_facts
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   491
  using q apply fast done
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   492
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   493
lemma (in RB1) True
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   494
  print_facts
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   495
  ..
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   496
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   497
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   498
(* Group example revisited, with predicates *)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   499
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   500
locale Rpsemi = var prod (infixl "**" 65) +
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   501
  assumes assoc: "(x ** y) ** z = x ** (y ** z)"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   502
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   503
locale Rplgrp = Rpsemi + var one + var inv +
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   504
  assumes lone: "one ** x = x"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   505
    and linv: "inv(x) ** x = one"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   506
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   507
lemma (in Rplgrp) lcancel:
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   508
  "x ** y = x ** z <-> y = z"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   509
proof
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   510
  assume "x ** y = x ** z"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   511
  then have "inv(x) ** x ** y = inv(x) ** x ** z" by (simp add: assoc)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   512
  then show "y = z" by (simp add: lone linv)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   513
qed simp
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   514
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   515
locale Rprgrp = Rpsemi + var one + var inv +
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   516
  assumes rone: "x ** one = x"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   517
    and rinv: "x ** inv(x) = one"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   518
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   519
lemma (in Rprgrp) rcancel:
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   520
  "y ** x = z ** x <-> y = z"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   521
proof
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   522
  assume "y ** x = z ** x"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   523
  then have "y ** (x ** inv(x)) = z ** (x ** inv(x))"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   524
    by (simp add: assoc [symmetric])
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   525
  then show "y = z" by (simp add: rone rinv)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   526
qed simp
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   527
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   528
interpretation Rplgrp < Rprgrp
19984
29bb4659f80a Method intro_locales replaced by intro_locales and unfold_locales.
ballarin
parents: 19931
diff changeset
   529
  proof unfold_locales
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   530
    {
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   531
      fix x
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   532
      have "inv(x) ** x ** one = inv(x) ** x" by (simp add: linv lone)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   533
      then show "x ** one = x" by (simp add: assoc lcancel)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   534
    }
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   535
    note rone = this
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   536
    {
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   537
      fix x
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   538
      have "inv(x) ** x ** inv(x) = inv(x) ** one"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   539
	by (simp add: linv lone rone)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   540
      then show "x ** inv(x) = one" by (simp add: assoc lcancel)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   541
    }
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   542
  qed
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   543
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   544
(* effect on printed locale *)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   545
19931
fb32b43e7f80 Restructured locales with predicates: import is now an interpretation.
ballarin
parents: 19783
diff changeset
   546
print_locale! Rplgrp
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   547
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   548
(* use of derived theorem *)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   549
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   550
lemma (in Rplgrp)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   551
  "y ** x = z ** x <-> y = z"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   552
  apply (rule rcancel)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   553
  print_interps Rprgrp thm lcancel rcancel
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   554
  done
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   555
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   556
(* circular interpretation *)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   557
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   558
interpretation Rprgrp < Rplgrp
19984
29bb4659f80a Method intro_locales replaced by intro_locales and unfold_locales.
ballarin
parents: 19931
diff changeset
   559
  proof unfold_locales
17000
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   560
    {
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   561
      fix x
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   562
      have "one ** (x ** inv(x)) = x ** inv(x)" by (simp add: rinv rone)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   563
      then show "one ** x = x" by (simp add: assoc [symmetric] rcancel)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   564
    }
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   565
    note lone = this
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   566
    {
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   567
      fix x
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   568
      have "inv(x) ** (x ** inv(x)) = one ** inv(x)"
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   569
	by (simp add: rinv lone rone)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   570
      then show "inv(x) ** x = one" by (simp add: assoc [symmetric] rcancel)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   571
    }
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   572
  qed
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   573
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   574
(* effect on printed locale *)
552df70f52c2 First version of interpretation in locales. Not yet fully functional.
ballarin
parents: 16736
diff changeset
   575
19931
fb32b43e7f80 Restructured locales with predicates: import is now an interpretation.
ballarin
parents: 19783
diff changeset
   576
print_locale! Rprgrp
fb32b43e7f80 Restructured locales with predicates: import is now an interpretation.
ballarin
parents: 19783
diff changeset
   577
print_locale! Rplgrp
16736
1e792b32abef Preparations for interpretation of locales in locales.
ballarin
parents: 16620
diff changeset
   578
17033
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   579
subsection {* Interaction of Interpretation in Theories and Locales:
17096
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   580
  in Locale, then in Theory *}
17033
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   581
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   582
consts
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   583
  rone :: i
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   584
  rinv :: "i => i"
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   585
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   586
axioms
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   587
  r_one : "rone # x = x"
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   588
  r_inv : "rinv(x) # x = rone"
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   589
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   590
interpretation Rbool: Rlgrp ["op #" "rone" "rinv"]
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   591
proof -
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   592
  fix x y z
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   593
  {
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   594
    show "(x # y) # z = x # (y # z)" by (rule i_assoc)
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   595
  next
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   596
    show "rone # x = x" by (rule r_one)
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   597
  next
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   598
    show "rinv(x) # x = rone" by (rule r_inv)
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   599
  }
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   600
qed
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   601
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   602
(* derived elements *)
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   603
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   604
print_interps Rrgrp
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   605
print_interps Rlgrp
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   606
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   607
lemma "y # x = z # x <-> y = z" by (rule Rbool.rcancel)
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   608
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   609
(* adding lemma to derived element *)
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   610
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   611
lemma (in Rrgrp) new_cancel:
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   612
  "b ** a = c ** a <-> b = c"
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   613
  by (rule rcancel)
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   614
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   615
thm Rbool.new_cancel (* additional prems discharged!! *)
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   616
17139
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   617
ML {* check_thm "Rbool.new_cancel" *}
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   618
17033
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   619
lemma "b # a = c # a <-> b = c" by (rule Rbool.new_cancel)
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   620
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   621
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   622
subsection {* Interaction of Interpretation in Theories and Locales:
17096
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   623
  in Theory, then in Locale *}
17033
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   624
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   625
(* Another copy of the group example *)
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   626
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   627
locale Rqsemi = var prod (infixl "**" 65) +
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   628
  assumes assoc: "(x ** y) ** z = x ** (y ** z)"
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   629
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   630
locale Rqlgrp = Rqsemi + var one + var inv +
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   631
  assumes lone: "one ** x = x"
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   632
    and linv: "inv(x) ** x = one"
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   633
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   634
lemma (in Rqlgrp) lcancel:
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   635
  "x ** y = x ** z <-> y = z"
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   636
proof
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   637
  assume "x ** y = x ** z"
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   638
  then have "inv(x) ** x ** y = inv(x) ** x ** z" by (simp add: assoc)
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   639
  then show "y = z" by (simp add: lone linv)
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   640
qed simp
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   641
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   642
locale Rqrgrp = Rqsemi + var one + var inv +
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   643
  assumes rone: "x ** one = x"
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   644
    and rinv: "x ** inv(x) = one"
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   645
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   646
lemma (in Rqrgrp) rcancel:
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   647
  "y ** x = z ** x <-> y = z"
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   648
proof
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   649
  assume "y ** x = z ** x"
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   650
  then have "y ** (x ** inv(x)) = z ** (x ** inv(x))"
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   651
    by (simp add: assoc [symmetric])
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   652
  then show "y = z" by (simp add: rone rinv)
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   653
qed simp
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   654
17139
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   655
interpretation Rqrgrp < Rprgrp
19984
29bb4659f80a Method intro_locales replaced by intro_locales and unfold_locales.
ballarin
parents: 19931
diff changeset
   656
  apply unfold_locales
19931
fb32b43e7f80 Restructured locales with predicates: import is now an interpretation.
ballarin
parents: 19783
diff changeset
   657
  apply (rule assoc)
fb32b43e7f80 Restructured locales with predicates: import is now an interpretation.
ballarin
parents: 19783
diff changeset
   658
  apply (rule rone)
fb32b43e7f80 Restructured locales with predicates: import is now an interpretation.
ballarin
parents: 19783
diff changeset
   659
  apply (rule rinv)
fb32b43e7f80 Restructured locales with predicates: import is now an interpretation.
ballarin
parents: 19783
diff changeset
   660
  done
17139
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   661
17033
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   662
interpretation R2: Rqlgrp ["op #" "rone" "rinv"] 
19984
29bb4659f80a Method intro_locales replaced by intro_locales and unfold_locales.
ballarin
parents: 19931
diff changeset
   663
  apply unfold_locales  (* FIXME: unfold_locales is too eager and shouldn't
19931
fb32b43e7f80 Restructured locales with predicates: import is now an interpretation.
ballarin
parents: 19783
diff changeset
   664
                          solve this. *)
fb32b43e7f80 Restructured locales with predicates: import is now an interpretation.
ballarin
parents: 19783
diff changeset
   665
  done
17033
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   666
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   667
print_interps Rqsemi
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   668
print_interps Rqlgrp
17139
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   669
print_interps Rplgrp  (* no interpretations yet *)
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   670
17033
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   671
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   672
interpretation Rqlgrp < Rqrgrp
19984
29bb4659f80a Method intro_locales replaced by intro_locales and unfold_locales.
ballarin
parents: 19931
diff changeset
   673
  proof unfold_locales
17033
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   674
    {
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   675
      fix x
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   676
      have "inv(x) ** x ** one = inv(x) ** x" by (simp add: linv lone)
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   677
      then show "x ** one = x" by (simp add: assoc lcancel)
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   678
    }
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   679
    note rone = this
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   680
    {
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   681
      fix x
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   682
      have "inv(x) ** x ** inv(x) = inv(x) ** one"
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   683
	by (simp add: linv lone rone)
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   684
      then show "x ** inv(x) = one" by (simp add: assoc lcancel)
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   685
    }
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   686
  qed
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   687
17139
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   688
print_interps! Rqrgrp
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   689
print_interps! Rpsemi  (* witness must not have meta hyps *)
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   690
print_interps! Rprgrp  (* witness must not have meta hyps *)
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   691
print_interps! Rplgrp  (* witness must not have meta hyps *)
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   692
thm R2.rcancel
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   693
thm R2.lcancel
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   694
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   695
ML {* check_thm "R2.rcancel"; check_thm "R2.lcancel" *}
165c97f9bb63 Printing of interpretations: option to show witness theorems;
ballarin
parents: 17096
diff changeset
   696
17096
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   697
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   698
subsection {* Generation of Witness Theorems for Transitive Interpretations *}
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   699
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   700
locale Rtriv = var x +
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   701
  assumes x: "x = x"
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   702
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   703
locale Rtriv2 = var x + var y +
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   704
  assumes x: "x = x" and y: "y = y"
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   705
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   706
interpretation Rtriv2 < Rtriv x
19984
29bb4659f80a Method intro_locales replaced by intro_locales and unfold_locales.
ballarin
parents: 19931
diff changeset
   707
  apply unfold_locales
17096
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   708
  apply (rule x)
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   709
  done
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   710
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   711
interpretation Rtriv2 < Rtriv y
19984
29bb4659f80a Method intro_locales replaced by intro_locales and unfold_locales.
ballarin
parents: 19931
diff changeset
   712
  apply unfold_locales
17096
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   713
  apply (rule y)
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   714
  done
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   715
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   716
print_locale Rtriv2
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   717
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   718
locale Rtriv3 = var x + var y + var z +
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   719
  assumes x: "x = x" and y: "y = y" and z: "z = z"
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   720
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   721
interpretation Rtriv3 < Rtriv2 x y
19984
29bb4659f80a Method intro_locales replaced by intro_locales and unfold_locales.
ballarin
parents: 19931
diff changeset
   722
  apply unfold_locales
17096
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   723
  apply (rule x)
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   724
  apply (rule y)
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   725
  done
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   726
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   727
print_locale Rtriv3
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   728
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   729
interpretation Rtriv3 < Rtriv2 x z
19984
29bb4659f80a Method intro_locales replaced by intro_locales and unfold_locales.
ballarin
parents: 19931
diff changeset
   730
  apply unfold_locales
17096
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   731
  apply (rule x_y_z.x)
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   732
  apply (rule z)
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   733
  done
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   734
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   735
ML {* set show_types *}
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   736
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   737
print_locale Rtriv3
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   738
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   739
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   740
subsection {* Normalisation Replaces Assumed Element by Derived Element *}
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   741
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   742
typedecl ('a, 'b) pair
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   743
arities pair :: ("term", "term") "term"
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   744
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   745
consts
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   746
  pair :: "['a, 'b] => ('a, 'b) pair"
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   747
  fst :: "('a, 'b) pair => 'a"
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   748
  snd :: "('a, 'b) pair => 'b"
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   749
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   750
axioms
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   751
  fst [simp]: "fst(pair(x, y)) = x"
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   752
  snd [simp]: "snd(pair(x, y)) = y"
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   753
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   754
locale Rpair = var prod (infixl "**" 65) + var prodP (infixl "***" 65) +
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   755
  defines P_def: "x *** y == pair(fst(x) ** fst(y), snd(x) ** snd(y))"
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   756
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   757
locale Rpair_semi = Rpair + Rpsemi
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   758
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   759
interpretation Rpair_semi < Rpsemi prodP (infixl "***" 65)
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   760
proof (rule Rpsemi.intro)
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   761
  fix x y z
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   762
  show "(x *** y) *** z = x *** (y *** z)"
19931
fb32b43e7f80 Restructured locales with predicates: import is now an interpretation.
ballarin
parents: 19783
diff changeset
   763
    apply (simp only: P_def) apply (simp add: assoc) (* FIXME: unfold P_def fails *)
fb32b43e7f80 Restructured locales with predicates: import is now an interpretation.
ballarin
parents: 19783
diff changeset
   764
    done
17096
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   765
qed
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   766
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   767
locale Rsemi_rev = Rpsemi + var rprod (infixl "++" 65) +
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   768
  defines r_def: "x ++ y == y ** x"
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   769
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   770
lemma (in Rsemi_rev) r_assoc:
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   771
  "(x ++ y) ++ z = x ++ (y ++ z)"
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   772
  by (simp add: r_def assoc)
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   773
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   774
lemma (in Rpair_semi)
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   775
  includes Rsemi_rev prodP (infixl "***" 65) rprodP (infixl "+++" 65)
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   776
  constrains prod :: "['a, 'a] => 'a"
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   777
    and rprodP :: "[('a, 'a) pair, ('a, 'a) pair] => ('a, 'a) pair"
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   778
  shows "(x +++ y) +++ z = x +++ (y +++ z)"
8327b71282ce Improved generation of witnesses in interpretation.
ballarin
parents: 17033
diff changeset
   779
  apply (rule r_assoc) done
17033
f4c1ce91aa3c Release of interpretation in locale.
ballarin
parents: 17000
diff changeset
   780
20469
bb75c1cdf913 More locale test code.
ballarin
parents: 20034
diff changeset
   781
bb75c1cdf913 More locale test code.
ballarin
parents: 20034
diff changeset
   782
subsection {* Import of Locales with Predicates as Interpretation *}
bb75c1cdf913 More locale test code.
ballarin
parents: 20034
diff changeset
   783
bb75c1cdf913 More locale test code.
ballarin
parents: 20034
diff changeset
   784
locale Ra =
bb75c1cdf913 More locale test code.
ballarin
parents: 20034
diff changeset
   785
  assumes Ra: "True"
bb75c1cdf913 More locale test code.
ballarin
parents: 20034
diff changeset
   786
bb75c1cdf913 More locale test code.
ballarin
parents: 20034
diff changeset
   787
locale Rb = Ra +
bb75c1cdf913 More locale test code.
ballarin
parents: 20034
diff changeset
   788
  assumes Rb: "True"
bb75c1cdf913 More locale test code.
ballarin
parents: 20034
diff changeset
   789
bb75c1cdf913 More locale test code.
ballarin
parents: 20034
diff changeset
   790
locale Rc = Rb +
bb75c1cdf913 More locale test code.
ballarin
parents: 20034
diff changeset
   791
  assumes Rc: "True"
bb75c1cdf913 More locale test code.
ballarin
parents: 20034
diff changeset
   792
bb75c1cdf913 More locale test code.
ballarin
parents: 20034
diff changeset
   793
print_locale! Rc
bb75c1cdf913 More locale test code.
ballarin
parents: 20034
diff changeset
   794
22659
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   795
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   796
section {* Interpretation of Defined Concepts *}
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   797
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   798
text {* Naming convention for global objects: prefixes D and d *}
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   799
23919
af871d13e320 interpretation: equations are propositions not pairs of terms;
ballarin
parents: 22931
diff changeset
   800
af871d13e320 interpretation: equations are propositions not pairs of terms;
ballarin
parents: 22931
diff changeset
   801
subsection {* Simple examples *}
af871d13e320 interpretation: equations are propositions not pairs of terms;
ballarin
parents: 22931
diff changeset
   802
22659
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   803
locale Da = fixes a :: o
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   804
  assumes true: a
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   805
22757
d3298d63b7b6 Interpretation equations applied to attributes
ballarin
parents: 22659
diff changeset
   806
text {* In the following examples, @{term "~ a"} is the defined concept. *}
d3298d63b7b6 Interpretation equations applied to attributes
ballarin
parents: 22659
diff changeset
   807
22659
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   808
lemma (in Da) not_false: "~ a <-> False"
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   809
  apply simp apply (rule true) done
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   810
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   811
interpretation D1: Da ["True"]
23919
af871d13e320 interpretation: equations are propositions not pairs of terms;
ballarin
parents: 22931
diff changeset
   812
  where "~ True == False"
22659
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   813
  apply -
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   814
  apply unfold_locales [1] apply rule
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   815
  by simp
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   816
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   817
thm D1.not_false
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   818
lemma "False <-> False" apply (rule D1.not_false) done
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   819
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   820
interpretation D2: Da ["x | ~ x"]
23919
af871d13e320 interpretation: equations are propositions not pairs of terms;
ballarin
parents: 22931
diff changeset
   821
  where "~ (x | ~ x) <-> ~ x & x"
22659
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   822
  apply -
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   823
  apply unfold_locales [1] apply fast
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   824
  by simp
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   825
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   826
thm D2.not_false
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   827
lemma "~ x & x <-> False" apply (rule D2.not_false) done
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   828
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   829
print_interps! Da
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   830
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   831
(* Subscriptions of interpretations *)
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   832
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   833
lemma (in Da) not_false2: "~a <-> False"
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   834
  apply simp apply (rule true) done
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   835
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   836
thm D1.not_false2 D2.not_false2
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   837
lemma "False <-> False" apply (rule D1.not_false2) done
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   838
lemma "~x & x <-> False" apply (rule D2.not_false2) done
f792579b6e59 Experimental code for the interpretation of definitions.
ballarin
parents: 20469
diff changeset
   839
22757
d3298d63b7b6 Interpretation equations applied to attributes
ballarin
parents: 22659
diff changeset
   840
(* Unfolding in attributes *)
d3298d63b7b6 Interpretation equations applied to attributes
ballarin
parents: 22659
diff changeset
   841
d3298d63b7b6 Interpretation equations applied to attributes
ballarin
parents: 22659
diff changeset
   842
locale Db = Da +
d3298d63b7b6 Interpretation equations applied to attributes
ballarin
parents: 22659
diff changeset
   843
  fixes b :: o
d3298d63b7b6 Interpretation equations applied to attributes
ballarin
parents: 22659
diff changeset
   844
  assumes a_iff_b: "~a <-> b"
d3298d63b7b6 Interpretation equations applied to attributes
ballarin
parents: 22659
diff changeset
   845
d3298d63b7b6 Interpretation equations applied to attributes
ballarin
parents: 22659
diff changeset
   846
lemmas (in Db) not_false_b = not_false [unfolded a_iff_b]
d3298d63b7b6 Interpretation equations applied to attributes
ballarin
parents: 22659
diff changeset
   847
d3298d63b7b6 Interpretation equations applied to attributes
ballarin
parents: 22659
diff changeset
   848
interpretation D2: Db ["x | ~ x" "~ (x <-> x)"]
d3298d63b7b6 Interpretation equations applied to attributes
ballarin
parents: 22659
diff changeset
   849
  apply unfold_locales apply fast done
d3298d63b7b6 Interpretation equations applied to attributes
ballarin
parents: 22659
diff changeset
   850
d3298d63b7b6 Interpretation equations applied to attributes
ballarin
parents: 22659
diff changeset
   851
thm D2.not_false_b
d3298d63b7b6 Interpretation equations applied to attributes
ballarin
parents: 22659
diff changeset
   852
lemma "~(x <-> x) <-> False" apply (rule D2.not_false_b) done
d3298d63b7b6 Interpretation equations applied to attributes
ballarin
parents: 22659
diff changeset
   853
d3298d63b7b6 Interpretation equations applied to attributes
ballarin
parents: 22659
diff changeset
   854
(* Subscription and attributes *)
d3298d63b7b6 Interpretation equations applied to attributes
ballarin
parents: 22659
diff changeset
   855
d3298d63b7b6 Interpretation equations applied to attributes
ballarin
parents: 22659
diff changeset
   856
lemmas (in Db) not_false_b2 = not_false [unfolded a_iff_b]
d3298d63b7b6 Interpretation equations applied to attributes
ballarin
parents: 22659
diff changeset
   857
d3298d63b7b6 Interpretation equations applied to attributes
ballarin
parents: 22659
diff changeset
   858
thm D2.not_false_b2
d3298d63b7b6 Interpretation equations applied to attributes
ballarin
parents: 22659
diff changeset
   859
lemma "~(x <-> x) <-> False" apply (rule D2.not_false_b2) done
d3298d63b7b6 Interpretation equations applied to attributes
ballarin
parents: 22659
diff changeset
   860
15596
8665d08085df First version of global registration command.
ballarin
parents:
diff changeset
   861
end