src/HOL/Datatype_Examples/Compat.thy
author blanchet
Tue, 02 Jan 2018 16:40:54 +0100
changeset 67320 6afba546f0e5
parent 67317 15ea49331fc7
child 68961 22a3790eecae
permissions -rw-r--r--
updated dependencies + compile
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
58309
a09ec6daaa19 renamed 'BNF_Examples' to 'Datatype_Examples' (cf. 'datatypes.pdf')
blanchet
parents: 58305
diff changeset
     1
(*  Title:      HOL/Datatype_Examples/Compat.thy
57634
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
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
     8
section \<open>Tests for Compatibility with the Old Datatype Package\<close>
57634
blanchet
parents: 56488
diff changeset
     9
56454
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    10
theory Compat
67320
6afba546f0e5 updated dependencies + compile
blanchet
parents: 67317
diff changeset
    11
imports Main
56454
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    12
begin
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    13
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
    14
subsection \<open>Viewing and Registering New-Style Datatypes as Old-Style Ones\<close>
58125
a2ba381607fb more work on compatibility interfaces
blanchet
parents: 58124
diff changeset
    15
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
    16
ML \<open>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    17
fun check_len n xs label =
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    18
  length xs = n orelse error ("Expected length " ^ string_of_int (length xs) ^ " for " ^ label);
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    19
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    20
fun check_lens (n1, n2, n3) (xs1, xs2, xs3) =
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    21
  check_len n1 xs1 "old" andalso check_len n2 xs2 "unfold" andalso check_len n3 xs3 "keep";
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    22
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    23
fun get_descrs thy lens T_name =
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    24
  (these (Option.map #descr (Old_Datatype_Data.get_info thy T_name)),
58354
04ac60da613e support (finite values of) codatatypes in Quickcheck
blanchet
parents: 58310
diff changeset
    25
   these (Option.map #descr (BNF_LFP_Compat.get_info thy [] T_name)),
04ac60da613e support (finite values of) codatatypes in Quickcheck
blanchet
parents: 58310
diff changeset
    26
   these (Option.map #descr (BNF_LFP_Compat.get_info thy [BNF_LFP_Compat.Keep_Nesting] T_name)))
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    27
  |> tap (check_lens lens);
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
    28
\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    29
58310
91ea607a34d8 updated news
blanchet
parents: 58309
diff changeset
    30
datatype 'b w = W | W' "'b w \<times> 'b list"
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    31
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
    32
ML \<open>get_descrs @{theory} (0, 1, 1) @{type_name w}\<close>
58358
cdce4471d590 tweaked compatibility layer
blanchet
parents: 58354
diff changeset
    33
56454
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    34
datatype_compat w
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    35
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
    36
ML \<open>get_descrs @{theory} (2, 2, 1) @{type_name w}\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    37
58310
91ea607a34d8 updated news
blanchet
parents: 58309
diff changeset
    38
datatype ('c, 'b) s = L 'c | R 'b
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    39
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
    40
ML \<open>get_descrs @{theory} (0, 1, 1) @{type_name s}\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    41
67317
15ea49331fc7 don't test 'old_datatype', which is on its way out
blanchet
parents: 66453
diff changeset
    42
datatype 'd x = X | X' "('d x list, 'd list) s"
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    43
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
    44
ML \<open>get_descrs @{theory} (0, 1, 1) @{type_name x}\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    45
56454
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    46
datatype_compat s
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    47
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
    48
ML \<open>get_descrs @{theory} (1, 1, 1) @{type_name s}\<close>
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
    49
ML \<open>get_descrs @{theory} (0, 1, 1) @{type_name x}\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    50
56454
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    51
datatype_compat x
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    52
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
    53
ML \<open>get_descrs @{theory} (3, 3, 1) @{type_name x}\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    54
58216
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
    55
thm x.induct x.rec
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
    56
thm compat_x.induct compat_x.rec
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
    57
67317
15ea49331fc7 don't test 'old_datatype', which is on its way out
blanchet
parents: 66453
diff changeset
    58
datatype 'a tttre = TTTre 'a "'a tttre list list list"
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    59
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
    60
ML \<open>get_descrs @{theory} (0, 1, 1) @{type_name tttre}\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    61
56454
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    62
datatype_compat tttre
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    63
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
    64
ML \<open>get_descrs @{theory} (4, 4, 1) @{type_name tttre}\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    65
58216
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
    66
thm tttre.induct tttre.rec
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
    67
thm compat_tttre.induct compat_tttre.rec
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
    68
67317
15ea49331fc7 don't test 'old_datatype', which is on its way out
blanchet
parents: 66453
diff changeset
    69
datatype 'a ftre = FEmp | FTre "'a \<Rightarrow> 'a ftre list"
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    70
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
    71
ML \<open>get_descrs @{theory} (0, 1, 1) @{type_name ftre}\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    72
56454
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    73
datatype_compat ftre
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    74
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
    75
ML \<open>get_descrs @{theory} (2, 2, 1) @{type_name ftre}\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    76
58216
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
    77
thm ftre.induct ftre.rec
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
    78
thm compat_ftre.induct compat_ftre.rec
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
    79
67317
15ea49331fc7 don't test 'old_datatype', which is on its way out
blanchet
parents: 66453
diff changeset
    80
datatype 'a btre = BTre 'a "'a btre list" "'a btre list"
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    81
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
    82
ML \<open>get_descrs @{theory} (0, 1, 1) @{type_name btre}\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    83
56454
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    84
datatype_compat btre
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    85
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
    86
ML \<open>get_descrs @{theory} (3, 3, 1) @{type_name btre}\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    87
58216
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
    88
thm btre.induct btre.rec
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
    89
thm compat_btre.induct compat_btre.rec
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
    90
58310
91ea607a34d8 updated news
blanchet
parents: 58309
diff changeset
    91
datatype 'a foo = Foo | Foo' 'a "'a bar" and 'a bar = Bar | Bar' 'a "'a foo"
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    92
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
    93
ML \<open>get_descrs @{theory} (0, 2, 2) @{type_name foo}\<close>
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
    94
ML \<open>get_descrs @{theory} (0, 2, 2) @{type_name bar}\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
    95
56454
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    96
datatype_compat foo bar
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
    97
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
    98
ML \<open>get_descrs @{theory} (2, 2, 2) @{type_name foo}\<close>
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
    99
ML \<open>get_descrs @{theory} (2, 2, 2) @{type_name bar}\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
   100
67317
15ea49331fc7 don't test 'old_datatype', which is on its way out
blanchet
parents: 66453
diff changeset
   101
datatype 'a tre = Tre 'a "'a tre list"
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
   102
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   103
ML \<open>get_descrs @{theory} (0, 1, 1) @{type_name tre}\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
   104
56454
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
   105
datatype_compat tre
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
   106
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   107
ML \<open>get_descrs @{theory} (2, 2, 1) @{type_name tre}\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
   108
58216
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
   109
thm tre.induct tre.rec
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
   110
thm compat_tre.induct compat_tre.rec
56454
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
   111
58310
91ea607a34d8 updated news
blanchet
parents: 58309
diff changeset
   112
datatype 'a f = F 'a and 'a g = G 'a
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
   113
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   114
ML \<open>get_descrs @{theory} (0, 2, 2) @{type_name f}\<close>
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   115
ML \<open>get_descrs @{theory} (0, 2, 2) @{type_name g}\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
   116
58310
91ea607a34d8 updated news
blanchet
parents: 58309
diff changeset
   117
datatype h = H "h f" | H'
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
   118
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   119
ML \<open>get_descrs @{theory} (0, 1, 1) @{type_name h}\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
   120
56454
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
   121
datatype_compat f g
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
   122
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   123
ML \<open>get_descrs @{theory} (2, 2, 2) @{type_name f}\<close>
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   124
ML \<open>get_descrs @{theory} (2, 2, 2) @{type_name g}\<close>
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   125
ML \<open>get_descrs @{theory} (0, 1, 1) @{type_name h}\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
   126
56454
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
   127
datatype_compat h
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
   128
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   129
ML \<open>get_descrs @{theory} (3, 3, 1) @{type_name h}\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
   130
58216
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
   131
thm h.induct h.rec
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
   132
thm compat_h.induct compat_h.rec
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
   133
58310
91ea607a34d8 updated news
blanchet
parents: 58309
diff changeset
   134
datatype myunit = MyUnity
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
   135
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   136
ML \<open>get_descrs @{theory} (0, 1, 1) @{type_name myunit}\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
   137
56454
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
   138
datatype_compat myunit
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
   139
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   140
ML \<open>get_descrs @{theory} (1, 1, 1) @{type_name myunit}\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
   141
58310
91ea607a34d8 updated news
blanchet
parents: 58309
diff changeset
   142
datatype mylist = MyNil | MyCons nat mylist
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
   143
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   144
ML \<open>get_descrs @{theory} (0, 1, 1) @{type_name mylist}\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
   145
56454
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
   146
datatype_compat mylist
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
   147
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   148
ML \<open>get_descrs @{theory} (1, 1, 1) @{type_name mylist}\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
   149
58310
91ea607a34d8 updated news
blanchet
parents: 58309
diff changeset
   150
datatype foo' = FooNil | FooCons bar' foo' and bar' = Bar
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
   151
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   152
ML \<open>get_descrs @{theory} (0, 2, 2) @{type_name foo'}\<close>
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   153
ML \<open>get_descrs @{theory} (0, 2, 2) @{type_name bar'}\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
   154
56454
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
   155
datatype_compat bar' foo'
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
   156
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   157
ML \<open>get_descrs @{theory} (2, 2, 2) @{type_name foo'}\<close>
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   158
ML \<open>get_descrs @{theory} (2, 2, 2) @{type_name bar'}\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
   159
58310
91ea607a34d8 updated news
blanchet
parents: 58309
diff changeset
   160
datatype tree = Tree "tree foo"
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
   161
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   162
ML \<open>get_descrs @{theory} (0, 1, 1) @{type_name tree}\<close>
58124
c60617a84c1d added compatibility examples/tests
blanchet
parents: 58112
diff changeset
   163
56488
535cfc7fc301 reintroduce example (cf. 39281b3e4fac)
traytel
parents: 56456
diff changeset
   164
datatype_compat tree
56454
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
   165
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   166
ML \<open>get_descrs @{theory} (3, 3, 1) @{type_name tree}\<close>
58125
a2ba381607fb more work on compatibility interfaces
blanchet
parents: 58124
diff changeset
   167
58216
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
   168
thm tree.induct tree.rec
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
   169
thm compat_tree.induct compat_tree.rec
58125
a2ba381607fb more work on compatibility interfaces
blanchet
parents: 58124
diff changeset
   170
58216
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
   171
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   172
subsection \<open>Creating New-Style Datatypes Using Old-Style Interfaces\<close>
58125
a2ba381607fb more work on compatibility interfaces
blanchet
parents: 58124
diff changeset
   173
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   174
ML \<open>
58125
a2ba381607fb more work on compatibility interfaces
blanchet
parents: 58124
diff changeset
   175
val l_specs =
a2ba381607fb more work on compatibility interfaces
blanchet
parents: 58124
diff changeset
   176
  [((@{binding l}, [("'a", @{sort type})], NoSyn),
a2ba381607fb more work on compatibility interfaces
blanchet
parents: 58124
diff changeset
   177
   [(@{binding N}, [], NoSyn),
58354
04ac60da613e support (finite values of) codatatypes in Quickcheck
blanchet
parents: 58310
diff changeset
   178
    (@{binding C}, [@{typ 'a}, Type (Sign.full_name @{theory} @{binding l}, [@{typ 'a}])],
04ac60da613e support (finite values of) codatatypes in Quickcheck
blanchet
parents: 58310
diff changeset
   179
     NoSyn)])];
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   180
\<close>
58125
a2ba381607fb more work on compatibility interfaces
blanchet
parents: 58124
diff changeset
   181
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   182
setup \<open>snd o BNF_LFP_Compat.add_datatype [] l_specs\<close>
58125
a2ba381607fb more work on compatibility interfaces
blanchet
parents: 58124
diff changeset
   183
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   184
ML \<open>get_descrs @{theory} (1, 1, 1) @{type_name l}\<close>
58125
a2ba381607fb more work on compatibility interfaces
blanchet
parents: 58124
diff changeset
   185
a2ba381607fb more work on compatibility interfaces
blanchet
parents: 58124
diff changeset
   186
thm l.exhaust l.map l.induct l.rec l.size
a2ba381607fb more work on compatibility interfaces
blanchet
parents: 58124
diff changeset
   187
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   188
ML \<open>
58125
a2ba381607fb more work on compatibility interfaces
blanchet
parents: 58124
diff changeset
   189
val t_specs =
a2ba381607fb more work on compatibility interfaces
blanchet
parents: 58124
diff changeset
   190
  [((@{binding t}, [("'b", @{sort type})], NoSyn),
58354
04ac60da613e support (finite values of) codatatypes in Quickcheck
blanchet
parents: 58310
diff changeset
   191
   [(@{binding T}, [@{typ 'b},
04ac60da613e support (finite values of) codatatypes in Quickcheck
blanchet
parents: 58310
diff changeset
   192
       Type (@{type_name l}, [Type (Sign.full_name @{theory} @{binding t}, [@{typ 'b}])])],
04ac60da613e support (finite values of) codatatypes in Quickcheck
blanchet
parents: 58310
diff changeset
   193
     NoSyn)])];
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   194
\<close>
58125
a2ba381607fb more work on compatibility interfaces
blanchet
parents: 58124
diff changeset
   195
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   196
setup \<open>snd o BNF_LFP_Compat.add_datatype [] t_specs\<close>
58125
a2ba381607fb more work on compatibility interfaces
blanchet
parents: 58124
diff changeset
   197
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   198
ML \<open>get_descrs @{theory} (2, 2, 1) @{type_name t}\<close>
58125
a2ba381607fb more work on compatibility interfaces
blanchet
parents: 58124
diff changeset
   199
a2ba381607fb more work on compatibility interfaces
blanchet
parents: 58124
diff changeset
   200
thm t.exhaust t.map t.induct t.rec t.size
58216
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
   201
thm compat_t.induct compat_t.rec
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
   202
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   203
ML \<open>
58216
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
   204
val ft_specs =
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
   205
  [((@{binding ft}, [("'a", @{sort type})], NoSyn),
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
   206
   [(@{binding FT0}, [], NoSyn),
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
   207
    (@{binding FT}, [@{typ 'a} --> Type (Sign.full_name @{theory} @{binding ft}, [@{typ 'a}])],
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
   208
     NoSyn)])];
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   209
\<close>
58216
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
   210
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   211
setup \<open>snd o BNF_LFP_Compat.add_datatype [] ft_specs\<close>
58216
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
   212
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   213
ML \<open>get_descrs @{theory} (1, 1, 1) @{type_name ft}\<close>
58216
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
   214
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
   215
thm ft.exhaust ft.induct ft.rec ft.size
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
   216
thm compat_ft.induct compat_ft.rec
56454
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
   217
e9e82384e5a1 added 'datatype_compat' examples/tests
blanchet
parents:
diff changeset
   218
end