src/HOL/ex/Serbian.thy
author krauss
Tue, 28 Sep 2010 09:54:07 +0200
changeset 39754 150f831ce4a3
parent 30179 c703c9368c12
child 40967 5eb59b62e7de
permissions -rw-r--r--
no longer declare .psimps rules as [simp]. This regularly caused confusion (e.g., they show up in simp traces when the regular simp rules are disabled). In the few places where the rules are used, explicitly mentioning them actually clarifies the proof text.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
30179
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
     1
(* -*- coding: utf-8 -*- :encoding=utf-8:  
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
     2
    Author:     Filip Maric
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
     3
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
     4
Example theory involving Unicode characters (UTF-8 encoding) -- 
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
     5
Conversion between Serbian cyrillic and latin letters (српска ћирилица и латиница)
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
     6
*)
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
     7
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
     8
header {* A Serbian theory *}
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
     9
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    10
theory Serbian
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    11
imports Main
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    12
begin
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    13
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    14
text{* Serbian cyrillic letters *}
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    15
datatype azbuka =
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    16
  azbA   ("А")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    17
| azbB   ("Б")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    18
| azbV   ("В")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    19
| azbG   ("Г")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    20
| azbD   ("Д")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    21
| azbDj  ("Ђ")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    22
| azbE   ("Е")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    23
| azbZv  ("Ж")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    24
| azbZ   ("З")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    25
| azbI   ("И")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    26
| azbJ   ("Ј")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    27
| azbK   ("К")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    28
| azbL   ("Л")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    29
| azbLj  ("Љ")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    30
| azbM   ("М")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    31
| azbN   ("Н")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    32
| azbNj  ("Њ")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    33
| azbO   ("О")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    34
| azbP   ("П")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    35
| azbR   ("Р")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    36
| azbS   ("С")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    37
| azbT   ("Т")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    38
| azbC'  ("Ћ")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    39
| azbU   ("У")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    40
| azbF   ("Ф")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    41
| azbH   ("Х")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    42
| azbC   ("Ц")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    43
| azbCv  ("Ч")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    44
| azbDzv ("Џ")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    45
| azbSv  ("Ш")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    46
| azbSpc
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    47
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    48
thm azbuka.induct
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    49
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    50
text{* Serbian latin letters *}
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    51
datatype abeceda =
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    52
  abcA   ("A")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    53
| abcB   ("B")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    54
| abcC   ("C")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    55
| abcCv  ("Č")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    56
| abcC'  ("Ć")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    57
| abcD   ("D")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    58
| abcE   ("E")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    59
| abcF   ("F")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    60
| abcG   ("G")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    61
| abcH   ("H")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    62
| abcI   ("I")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    63
| abcJ   ("J")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    64
| abcK   ("K")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    65
| abcL   ("L")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    66
| abcM   ("M")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    67
| abcN   ("N")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    68
| abcO   ("O")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    69
| abcP   ("P")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    70
| abcR   ("R")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    71
| abcS   ("S")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    72
| abcSv  ("Š")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    73
| abcT   ("T")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    74
| abcU   ("U")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    75
| abcV   ("V")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    76
| abcZ   ("Z")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    77
| abcvZ  ("Ž")
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    78
| abcSpc
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    79
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    80
thm abeceda.induct
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    81
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    82
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    83
text{* Conversion from cyrillic to latin - 
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    84
       this conversion is valid in all cases *}
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    85
primrec azb2abc_aux :: "azbuka \<Rightarrow> abeceda list"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    86
where
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    87
  "azb2abc_aux А = [A]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    88
| "azb2abc_aux Б = [B]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    89
| "azb2abc_aux В = [V]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    90
| "azb2abc_aux Г = [G]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    91
| "azb2abc_aux Д = [D]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    92
| "azb2abc_aux Ђ = [D, J]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    93
| "azb2abc_aux Е = [E]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    94
| "azb2abc_aux Ж = [Ž]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    95
| "azb2abc_aux З = [Z]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    96
| "azb2abc_aux И = [I]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    97
| "azb2abc_aux Ј = [J]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    98
| "azb2abc_aux К = [K]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
    99
| "azb2abc_aux Л = [L]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   100
| "azb2abc_aux Љ = [L, J]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   101
| "azb2abc_aux М = [M]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   102
| "azb2abc_aux Н = [N]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   103
| "azb2abc_aux Њ = [N, J]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   104
| "azb2abc_aux О = [O]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   105
| "azb2abc_aux П = [P]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   106
| "azb2abc_aux Р = [R]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   107
| "azb2abc_aux С = [S]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   108
| "azb2abc_aux Т = [T]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   109
| "azb2abc_aux Ћ = [Ć]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   110
| "azb2abc_aux У = [U]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   111
| "azb2abc_aux Ф = [F]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   112
| "azb2abc_aux Х = [H]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   113
| "azb2abc_aux Ц = [C]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   114
| "azb2abc_aux Ч = [Č]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   115
| "azb2abc_aux Џ = [D, Ž]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   116
| "azb2abc_aux Ш = [Š]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   117
| "azb2abc_aux azbSpc = [abcSpc]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   118
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   119
primrec azb2abc :: "azbuka list \<Rightarrow> abeceda list"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   120
where
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   121
  "azb2abc [] = []"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   122
| "azb2abc (x # xs) = azb2abc_aux x @ azb2abc xs"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   123
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   124
value "azb2abc [Д, О, Б, А, Р, azbSpc, Д, А, Н, azbSpc, С, В, И, М, А]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   125
value "azb2abc [Љ, У, Б, И, Ч, И, Ц, А, azbSpc, Н, А, azbSpc, П, О, Љ, У]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   126
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   127
text{* The conversion from latin to cyrillic - 
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   128
       this conversion is valid in most cases but there are some exceptions *}
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   129
primrec abc2azb_aux :: "abeceda \<Rightarrow> azbuka"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   130
where
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   131
   "abc2azb_aux A = А"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   132
|  "abc2azb_aux B = Б"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   133
|  "abc2azb_aux C = Ц"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   134
|  "abc2azb_aux Č = Ч"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   135
|  "abc2azb_aux Ć = Ћ"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   136
|  "abc2azb_aux D = Д"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   137
|  "abc2azb_aux E = Е"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   138
|  "abc2azb_aux F = Ф"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   139
|  "abc2azb_aux G = Г"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   140
|  "abc2azb_aux H = Х"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   141
|  "abc2azb_aux I = И"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   142
|  "abc2azb_aux J = Ј"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   143
|  "abc2azb_aux K = К"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   144
|  "abc2azb_aux L = Л"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   145
|  "abc2azb_aux M = М"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   146
|  "abc2azb_aux N = Н"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   147
|  "abc2azb_aux O = О"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   148
|  "abc2azb_aux P = П"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   149
|  "abc2azb_aux R = Р"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   150
|  "abc2azb_aux S = С"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   151
|  "abc2azb_aux Š = Ш"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   152
|  "abc2azb_aux T = Т"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   153
|  "abc2azb_aux U = У"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   154
|  "abc2azb_aux V = В"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   155
|  "abc2azb_aux Z = З"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   156
|  "abc2azb_aux Ž = Ж"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   157
|  "abc2azb_aux abcSpc = azbSpc"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   158
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   159
fun abc2azb :: "abeceda list \<Rightarrow> azbuka list"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   160
where
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   161
  "abc2azb [] = []"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   162
| "abc2azb [x] = [abc2azb_aux x]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   163
| "abc2azb (x1 # x2 # xs) = 
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   164
       (if x1 = D \<and> x2 = J then
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   165
           Ђ # abc2azb xs
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   166
        else if x1 = L \<and> x2 = J then
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   167
           Љ # abc2azb xs
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   168
        else if x1 = N \<and> x2 = J then
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   169
           Њ # abc2azb xs
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   170
        else if x1 = D \<and> x2 = Ž then
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   171
           Џ # abc2azb xs
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   172
        else
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   173
           abc2azb_aux x1 # abc2azb (x2 # xs)
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   174
       )"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   175
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   176
value "abc2azb [D, O, B, A, R, abcSpc, D, A, N, abcSpc, S, V, I, M, A]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   177
value "abc2azb [L, J, U, B, I, Č, I, C, A, abcSpc, N, A, abcSpc, P, O, L, J, U]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   178
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   179
text{* Here are some invalid conversions *}
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   180
lemma "abc2azb [N, A, D, Ž, I, V, E, T, I] = [Н, А, Џ, И, В, Е, Т, И]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   181
  by simp
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   182
text{* but it should be: НАДЖИВЕТИ *}
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   183
lemma "abc2azb [I, N, J, E, K, C, I, J, A] = [И, Њ, Е, К, Ц, И, Ј, А]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   184
  by simp
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   185
text{* but it should be: ИНЈЕКЦИЈА *}
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   186
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   187
text{* The conversion fails for all cyrrilic words that contain НЈ ЛЈ ДЈ ДЖ *}
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   188
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   189
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   190
text{* Idempotency in one direction *}
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   191
lemma [simp]: "azb2abc_aux (abc2azb_aux x) = [x]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   192
  by (cases x) auto
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   193
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   194
lemma [simp]: "abc2azb (Ž # xs) = Ж # abc2azb xs"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   195
  by (cases xs) auto
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   196
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   197
lemma [simp]: "abc2azb (J # xs) = Ј # abc2azb xs"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   198
  by (cases xs) auto
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   199
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   200
theorem "azb2abc (abc2azb x) = x"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   201
proof (induct x)
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   202
  case (Cons x1 xs)
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   203
  thus ?case
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   204
  proof (cases xs)
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   205
    case (Cons x2 xss)
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   206
    thus ?thesis
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   207
      using `azb2abc (abc2azb xs) = xs`
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   208
      by auto
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   209
  qed simp
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   210
qed simp
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   211
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   212
text{* Idempotency in the other direction does not hold *}
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   213
lemma "abc2azb (azb2abc [И, Н, Ј, Е, К, Ц, И, Ј, А]) \<noteq> [И, Н, Ј, Е, К, Ц, И, Ј, А]"
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   214
  by simp
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   215
text{* It fails for all cyrrilic words that contain НЈ ЛЈ ДЈ ДЖ *}
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   216
c703c9368c12 A Serbian theory, by Filip Maric.
wenzelm
parents:
diff changeset
   217
end