src/HOL/BNF_Examples/Compat.thy
author blanchet
Mon, 01 Sep 2014 16:17:46 +0200
changeset 58112 8081087096ad
parent 57634 efc00b9b8680
child 58124 c60617a84c1d
permissions -rw-r--r--
renamed modules defining old datatypes, as a step towards having 'datatype_new' take 'datatype's place
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
57634
blanchet
parents: 56488
diff changeset
     1
(*  Title:      HOL/BNF_Examples/Compat.thy
blanchet
parents: 56488
diff changeset
     2
    Author:     Jasmin Blanchette, TU Muenchen
blanchet
parents: 56488
diff changeset
     3
    Copyright   2014
blanchet
parents: 56488
diff changeset
     4
blanchet
parents: 56488
diff changeset
     5
Tests for compatibility with the old datatype package.
blanchet
parents: 56488
diff changeset
     6
*)
blanchet
parents: 56488
diff changeset
     7
blanchet
parents: 56488
diff changeset
     8
header {* Tests for Compatibility with the Old Datatype Package *}
blanchet
parents: 56488
diff changeset
     9
56454
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    10
theory Compat
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    11
imports Main
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    12
begin
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    13
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    14
datatype_new 'a lst = Nl | Cns 'a "'a lst"
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    15
datatype_compat lst
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    16
56456
39281b3e4fac commented out example that triggers a bug
blanchet
parents: 56455
diff changeset
    17
datatype_new 'b w = W | W' "'b w \<times> 'b list"
56454
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    18
(* no support for sums of products
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    19
datatype_compat w
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    20
*)
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    21
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    22
datatype_new ('c, 'b) s = L 'c | R 'b
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    23
datatype_new 'd x = X | X' "('d x lst, 'd list) s"
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    24
datatype_compat s
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    25
datatype_compat x
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    26
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    27
datatype_new 'a tttre = TTTre 'a "'a tttre lst lst lst"
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    28
datatype_compat tttre
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    29
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    30
datatype_new 'a ftre = FEmp | FTre "'a \<Rightarrow> 'a ftre lst"
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    31
datatype_compat ftre
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    32
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    33
datatype_new 'a btre = BTre 'a "'a btre lst" "'a btre lst"
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    34
datatype_compat btre
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    35
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    36
datatype_new 'a foo = Foo | Foo' 'a "'a bar" and 'a bar = Bar | Bar' 'a "'a foo"
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    37
datatype_compat foo bar
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    38
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    39
datatype_new 'a tre = Tre 'a "'a tre lst"
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    40
datatype_compat tre
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    41
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    42
fun f_tre and f_tres where
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    43
  "f_tre (Tre a ts) = {a} \<union> f_tres ts"
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    44
| "f_tres Nl = {}"
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    45
| "f_tres (Cns t ts) = f_tres ts"
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    46
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    47
datatype_new 'a f = F 'a and 'a g = G 'a
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    48
datatype_new h = H "h f" | H'
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    49
datatype_compat f g
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    50
datatype_compat h
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    51
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    52
datatype_new myunit = MyUnity
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    53
datatype_compat myunit
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    54
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    55
datatype_new mylist = MyNil | MyCons nat mylist
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    56
datatype_compat mylist
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    57
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    58
fun f_mylist where
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    59
  "f_mylist MyNil = 0"
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    60
| "f_mylist (MyCons _ xs) = Suc (f_mylist xs)"
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    61
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    62
datatype_new foo' = FooNil | FooCons bar' foo' and bar' = Bar
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    63
datatype_compat bar' foo'
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    64
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    65
fun f_foo and f_bar where
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    66
  "f_foo FooNil = 0"
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    67
| "f_foo (FooCons bar foo) = Suc (f_foo foo) + f_bar bar"
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    68
| "f_bar Bar = Suc 0"
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    69
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    70
locale opt begin
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    71
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    72
datatype_new 'a opt = Non | Som 'a
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    73
datatype_compat opt
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    74
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    75
end
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    76
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    77
datatype funky = Funky "funky tre" | Funky'
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    78
datatype fnky = Fnky "nat tre"
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    79
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    80
datatype_new tree = Tree "tree foo"
56488
535cfc7fc301 reintroduce example (cf. 39281b3e4fac)
traytel
parents: 56456
diff changeset
    81
datatype_compat tree
56454
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    82
58112
8081087096ad renamed modules defining old datatypes, as a step towards having 'datatype_new' take 'datatype's place
blanchet
parents: 57634
diff changeset
    83
ML {* Old_Datatype_Data.get_info @{theory} @{type_name tree} *}
56454
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    84
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    85
end