src/HOL/GroupTheory/Bij.ML
author paulson
Mon, 23 Jul 2001 17:47:49 +0200
changeset 11448 aa519e0cc050
child 12459 6978ab7cac64
permissions -rw-r--r--
Final version of Florian Kammueller's examples
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11448
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
     1
(*  Title:      HOL/GroupTheory/Bij
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
     2
    ID:         $Id$
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
     3
    Author:     Florian Kammueller, with new proofs by L C Paulson
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
     4
    Copyright   1998-2001  University of Cambridge
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
     5
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
     6
Bijections of a set and the group of bijections
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
     7
	Sigma version with locales
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
     8
*)
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
     9
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    10
Addsimps [Id_compose, compose_Id];
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    11
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    12
(*Inv_f_f should suffice, only here A=B=S so the equality remains.*)
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    13
Goalw [Inv_def]
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    14
     "[|  f`A = B;  x : B |] ==> Inv A f x : A";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    15
by (Clarify_tac 1); 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    16
by (fast_tac (claset() addIs [restrict_in_funcset, someI2]) 1);
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    17
qed "Inv_mem";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    18
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    19
Open_locale "bij";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    20
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    21
val B_def = thm "B_def";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    22
val o'_def = thm "o'_def";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    23
val inv'_def = thm "inv'_def";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    24
val e'_def = thm "e'_def";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    25
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    26
Addsimps [B_def, o'_def, inv'_def];
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    27
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    28
Goal "f \\<in> B ==> f \\<in> S \\<rightarrow> S";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    29
by (afs [Bij_def] 1);
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    30
qed "BijE1";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    31
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    32
Goal "f \\<in> B ==> f ` S = S";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    33
by (afs [Bij_def] 1);
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    34
qed "BijE2";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    35
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    36
Goal "f \\<in> B ==> inj_on f S";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    37
by (afs [Bij_def] 1);
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    38
qed "BijE3";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    39
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    40
Goal "[| f \\<in> S \\<rightarrow> S; f ` S = S; inj_on f S |] ==> f \\<in> B";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    41
by (afs [Bij_def] 1);
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    42
qed "BijI";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    43
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    44
Delsimps [B_def];
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    45
Addsimps [BijE1,BijE2,BijE3];
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    46
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    47
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    48
(* restrict (Inv S f) S  *)
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    49
Goal "f \\<in> B ==> (lam x: S. (inv' f) x) \\<in> B";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    50
by (rtac BijI 1);
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    51
(* 1. (lam x: S. (inv' f) x): S \\<rightarrow> S *)
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    52
by (afs [Inv_funcset] 1);
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    53
(* 2. (lam x: S. (inv' f) x) ` S = S *)
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    54
by (asm_full_simp_tac (simpset() addsimps [inv_def]) 1); 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    55
by (rtac equalityI 1);
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    56
(* 2. <= *)
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    57
by (Clarify_tac 1); 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    58
by (afs [Inv_mem, BijE2] 1);
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    59
(* 2. => *)
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    60
by (rtac subsetI 1);
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    61
by (res_inst_tac [("x","f x")] image_eqI 1);
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    62
by (asm_simp_tac (simpset() addsimps [Inv_f_f, BijE1 RS funcset_mem]) 1); 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    63
by (asm_simp_tac (simpset() addsimps [BijE1 RS funcset_mem]) 1); 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    64
(* 3. *)
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    65
by (rtac inj_onI 1);
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    66
by (auto_tac (claset() addEs [Inv_injective], simpset())); 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    67
qed "restrict_Inv_Bij";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    68
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    69
Addsimps [e'_def];
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    70
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    71
Goal "e'\\<in>B ";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    72
by (rtac BijI 1);
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    73
by (auto_tac (claset(), simpset() addsimps [funcsetI, inj_on_def])); 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    74
qed "restrict_id_Bij";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    75
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    76
Goal "f \\<in> B ==> (lam g: B. lam x: S. (inv' g) x) f = (lam x: S. (inv' f) x)";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    77
by (Asm_full_simp_tac 1); 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    78
qed "eval_restrict_Inv";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    79
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    80
Goal "[| x \\<in> B; y \\<in> B|] ==> x o' y \\<in> B";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    81
by (simp_tac (simpset() addsimps [o'_def]) 1);
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    82
by (rtac BijI 1);
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    83
by (blast_tac (claset() addIs [funcset_compose] addDs [BijE1,BijE2,BijE3]) 1); 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    84
by (blast_tac (claset() delrules [equalityI]
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    85
			addIs [surj_compose] addDs [BijE1,BijE2,BijE3]) 1); 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    86
by (blast_tac (claset() addIs [inj_on_compose] addDs [BijE1,BijE2,BijE3]) 1); 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    87
qed "compose_Bij";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    88
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    89
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    90
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    91
(**** Bijections form a group ****)
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    92
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    93
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    94
Open_locale "bijgroup";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    95
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    96
val BG_def = thm "BG_def";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    97
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    98
Goal "[| x\\<in>B; y\\<in>B |] ==> (lam g: B. lam f: B. g o' f) x y = x o' y";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
    99
by (Asm_full_simp_tac 1); 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   100
qed "eval_restrict_comp2";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   101
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   102
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   103
Addsimps [BG_def, B_def, o'_def, inv'_def,e'_def];
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   104
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   105
Goal "carrier BG == B";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   106
by (afs [BijGroup_def] 1);
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   107
qed "BG_carrier";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   108
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   109
Goal "bin_op BG == lam g: B. lam f: B. g o' f";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   110
by (afs [BijGroup_def] 1);
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   111
qed "BG_bin_op";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   112
               
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   113
Goal "inverse BG == lam f: B. lam x: S. (inv' f) x";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   114
by (afs [BijGroup_def] 1);
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   115
qed "BG_inverse"; 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   116
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   117
Goal "unit BG   == e'";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   118
by (afs [BijGroup_def] 1);
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   119
qed "BG_unit";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   120
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   121
Goal "BG = (| carrier = BG.<cr>, bin_op = BG.<f>,\
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   122
\             inverse = BG.<inv>, unit = BG.<e> |)";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   123
by (afs [BijGroup_def,BG_carrier, BG_bin_op, BG_inverse, BG_unit] 1);
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   124
qed "BG_defI";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   125
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   126
Delsimps [B_def, BG_def, o'_def, inv'_def, e'_def];
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   127
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   128
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   129
Goal "(lam g: B. lam f: B. g o' f) \\<in> B \\<rightarrow> B \\<rightarrow> B";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   130
by (simp_tac (simpset() addsimps [funcsetI, compose_Bij]) 1); 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   131
qed "restrict_compose_Bij";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   132
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   133
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   134
Goal "BG \\<in> Group";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   135
by (stac BG_defI 1);
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   136
by (rtac GroupI 1);
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   137
(* 1. (BG .<f>)\\<in>(BG .<cr>) \\<rightarrow> (BG .<cr>) \\<rightarrow> (BG .<cr>) *)
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   138
by (afs [BG_bin_op, BG_carrier, restrict_compose_Bij] 1);
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   139
(*  2: (BG .<inv>)\\<in>(BG .<cr>) \\<rightarrow> (BG .<cr>) *)
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   140
by (simp_tac (simpset() addsimps [BG_inverse, BG_carrier, restrict_Inv_Bij, 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   141
                                  funcsetI]) 1); 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   142
by (afs [BG_inverse, BG_carrier,eval_restrict_Inv, restrict_Inv_Bij] 1);
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   143
(* 3.  *)
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   144
by (afs [BG_carrier, BG_unit, restrict_id_Bij] 1);
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   145
(* Now the equalities *)
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   146
(* 4. ! x:BG .<cr>. (BG .<f>) ((BG .<inv>) x) x = (BG .<e>) *)
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   147
by (simp_tac
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   148
    (simpset() addsimps [BG_carrier, BG_unit, BG_inverse, BG_bin_op,
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   149
            e'_def, compose_Inv_id, inv'_def, o'_def]) 1); 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   150
by (simp_tac
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   151
    (simpset() addsimps [symmetric (inv'_def), restrict_Inv_Bij]) 1); 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   152
(* 5: ! x:BG .<cr>. (BG .<f>) (BG .<e>) x = x *)
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   153
by (simp_tac
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   154
    (simpset() addsimps [BG_carrier, BG_unit, BG_bin_op,
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   155
            e'_def, o'_def]) 1); 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   156
by (simp_tac
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   157
    (simpset() addsimps [symmetric (e'_def), restrict_id_Bij]) 1); 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   158
(* 6. ! x:BG .<cr>.
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   159
       ! y:BG .<cr>.
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   160
          ! z:BG .<cr>.
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   161
             (BG .<f>) ((BG .<f>) x y) z = (BG .<f>) x ((BG .<f>) y z) *)
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   162
by (simp_tac
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   163
    (simpset() addsimps [BG_carrier, BG_unit, BG_inverse, BG_bin_op,
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   164
                         compose_Bij]) 1); 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   165
by (simp_tac (simpset() addsimps [o'_def]) 1);
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   166
by (blast_tac (claset() addIs [compose_assoc RS sym, BijE1]) 1); 
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   167
qed "Bij_are_Group";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   168
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   169
Close_locale "bijgroup";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   170
Close_locale "bij";
aa519e0cc050 Final version of Florian Kammueller's examples
paulson
parents:
diff changeset
   171