src/HOL/Datatype_Examples/Compat.thy
author paulson <lp15@cam.ac.uk>
Wed, 05 Aug 2020 19:12:08 +0100
changeset 72095 cfb6c22a5636
parent 69597 ff784d5a5bfb
permissions -rw-r--r--
lemmas about sets and the enumerate operator
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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
    32
ML \<open>get_descrs \<^theory> (0, 1, 1) \<^type_name>\<open>w\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
    36
ML \<open>get_descrs \<^theory> (2, 2, 1) \<^type_name>\<open>w\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
    40
ML \<open>get_descrs \<^theory> (0, 1, 1) \<^type_name>\<open>s\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
    44
ML \<open>get_descrs \<^theory> (0, 1, 1) \<^type_name>\<open>x\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
    48
ML \<open>get_descrs \<^theory> (1, 1, 1) \<^type_name>\<open>s\<close>\<close>
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
    49
ML \<open>get_descrs \<^theory> (0, 1, 1) \<^type_name>\<open>x\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
    53
ML \<open>get_descrs \<^theory> (3, 3, 1) \<^type_name>\<open>x\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
    60
ML \<open>get_descrs \<^theory> (0, 1, 1) \<^type_name>\<open>tttre\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
    64
ML \<open>get_descrs \<^theory> (4, 4, 1) \<^type_name>\<open>tttre\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
    71
ML \<open>get_descrs \<^theory> (0, 1, 1) \<^type_name>\<open>ftre\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
    75
ML \<open>get_descrs \<^theory> (2, 2, 1) \<^type_name>\<open>ftre\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
    82
ML \<open>get_descrs \<^theory> (0, 1, 1) \<^type_name>\<open>btre\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
    86
ML \<open>get_descrs \<^theory> (3, 3, 1) \<^type_name>\<open>btre\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
    93
ML \<open>get_descrs \<^theory> (0, 2, 2) \<^type_name>\<open>foo\<close>\<close>
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
    94
ML \<open>get_descrs \<^theory> (0, 2, 2) \<^type_name>\<open>bar\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
    98
ML \<open>get_descrs \<^theory> (2, 2, 2) \<^type_name>\<open>foo\<close>\<close>
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
    99
ML \<open>get_descrs \<^theory> (2, 2, 2) \<^type_name>\<open>bar\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   103
ML \<open>get_descrs \<^theory> (0, 1, 1) \<^type_name>\<open>tre\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   107
ML \<open>get_descrs \<^theory> (2, 2, 1) \<^type_name>\<open>tre\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   114
ML \<open>get_descrs \<^theory> (0, 2, 2) \<^type_name>\<open>f\<close>\<close>
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   115
ML \<open>get_descrs \<^theory> (0, 2, 2) \<^type_name>\<open>g\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   119
ML \<open>get_descrs \<^theory> (0, 1, 1) \<^type_name>\<open>h\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   123
ML \<open>get_descrs \<^theory> (2, 2, 2) \<^type_name>\<open>f\<close>\<close>
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   124
ML \<open>get_descrs \<^theory> (2, 2, 2) \<^type_name>\<open>g\<close>\<close>
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   125
ML \<open>get_descrs \<^theory> (0, 1, 1) \<^type_name>\<open>h\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   129
ML \<open>get_descrs \<^theory> (3, 3, 1) \<^type_name>\<open>h\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   136
ML \<open>get_descrs \<^theory> (0, 1, 1) \<^type_name>\<open>myunit\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   140
ML \<open>get_descrs \<^theory> (1, 1, 1) \<^type_name>\<open>myunit\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   144
ML \<open>get_descrs \<^theory> (0, 1, 1) \<^type_name>\<open>mylist\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   148
ML \<open>get_descrs \<^theory> (1, 1, 1) \<^type_name>\<open>mylist\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   152
ML \<open>get_descrs \<^theory> (0, 2, 2) \<^type_name>\<open>foo'\<close>\<close>
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   153
ML \<open>get_descrs \<^theory> (0, 2, 2) \<^type_name>\<open>bar'\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   157
ML \<open>get_descrs \<^theory> (2, 2, 2) \<^type_name>\<open>foo'\<close>\<close>
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   158
ML \<open>get_descrs \<^theory> (2, 2, 2) \<^type_name>\<open>bar'\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   162
ML \<open>get_descrs \<^theory> (0, 1, 1) \<^type_name>\<open>tree\<close>\<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
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   166
ML \<open>get_descrs \<^theory> (3, 3, 1) \<^type_name>\<open>tree\<close>\<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 =
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   176
  [((\<^binding>\<open>l\<close>, [("'a", \<^sort>\<open>type\<close>)], NoSyn),
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   177
   [(\<^binding>\<open>N\<close>, [], NoSyn),
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   178
    (\<^binding>\<open>C\<close>, [\<^typ>\<open>'a\<close>, Type (Sign.full_name \<^theory> \<^binding>\<open>l\<close>, [\<^typ>\<open>'a\<close>])],
58354
04ac60da613e support (finite values of) codatatypes in Quickcheck
blanchet
parents: 58310
diff changeset
   179
     NoSyn)])];
68961
22a3790eecae proper binding positions within the defining command transaction;
wenzelm
parents: 67320
diff changeset
   180
22a3790eecae proper binding positions within the defining command transaction;
wenzelm
parents: 67320
diff changeset
   181
Theory.setup (snd o BNF_LFP_Compat.add_datatype [] l_specs);
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   182
\<close>
58125
a2ba381607fb more work on compatibility interfaces
blanchet
parents: 58124
diff changeset
   183
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   184
ML \<open>get_descrs \<^theory> (1, 1, 1) \<^type_name>\<open>l\<close>\<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 =
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   190
  [((\<^binding>\<open>t\<close>, [("'b", \<^sort>\<open>type\<close>)], NoSyn),
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   191
   [(\<^binding>\<open>T\<close>, [\<^typ>\<open>'b\<close>,
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   192
       Type (\<^type_name>\<open>l\<close>, [Type (Sign.full_name \<^theory> \<^binding>\<open>t\<close>, [\<^typ>\<open>'b\<close>])])],
58354
04ac60da613e support (finite values of) codatatypes in Quickcheck
blanchet
parents: 58310
diff changeset
   193
     NoSyn)])];
68961
22a3790eecae proper binding positions within the defining command transaction;
wenzelm
parents: 67320
diff changeset
   194
22a3790eecae proper binding positions within the defining command transaction;
wenzelm
parents: 67320
diff changeset
   195
Theory.setup (snd o BNF_LFP_Compat.add_datatype [] t_specs);
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   196
\<close>
58125
a2ba381607fb more work on compatibility interfaces
blanchet
parents: 58124
diff changeset
   197
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   198
ML \<open>get_descrs \<^theory> (2, 2, 1) \<^type_name>\<open>t\<close>\<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 =
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   205
  [((\<^binding>\<open>ft\<close>, [("'a", \<^sort>\<open>type\<close>)], NoSyn),
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   206
   [(\<^binding>\<open>FT0\<close>, [], NoSyn),
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   207
    (\<^binding>\<open>FT\<close>, [\<^typ>\<open>'a\<close> --> Type (Sign.full_name \<^theory> \<^binding>\<open>ft\<close>, [\<^typ>\<open>'a\<close>])],
58216
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
   208
     NoSyn)])];
68961
22a3790eecae proper binding positions within the defining command transaction;
wenzelm
parents: 67320
diff changeset
   209
22a3790eecae proper binding positions within the defining command transaction;
wenzelm
parents: 67320
diff changeset
   210
Theory.setup (snd o BNF_LFP_Compat.add_datatype [] ft_specs);
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 58889
diff changeset
   211
\<close>
58216
e02d867dfbc6 more examples/tests
blanchet
parents: 58150
diff changeset
   212
69597
ff784d5a5bfb isabelle update -u control_cartouches;
wenzelm
parents: 68961
diff changeset
   213
ML \<open>get_descrs \<^theory> (1, 1, 1) \<^type_name>\<open>ft\<close>\<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