src/CCL/Type.thy
author wenzelm
Tue, 13 Jun 2006 23:41:39 +0200
changeset 19876 11d447d5d68c
parent 17782 b3846df9d643
child 20140 98acc6d0fab6
permissions -rw-r--r--
tuned;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
     1
(*  Title:      CCL/Type.thy
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     2
    ID:         $Id$
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     3
    Author:     Martin Coen
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     4
    Copyright   1993  University of Cambridge
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     5
*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     6
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
     7
header {* Types in CCL are defined as sets of terms *}
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
     8
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
     9
theory Type
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
    10
imports Term
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
    11
begin
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    12
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    13
consts
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    14
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    15
  Subtype       :: "['a set, 'a => o] => 'a set"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    16
  Bool          :: "i set"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    17
  Unit          :: "i set"
999
9bf3816298d0 Gave tighter priorities to SUM and PROD to reduce ambiguities.
lcp
parents: 22
diff changeset
    18
  "+"           :: "[i set, i set] => i set"         (infixr 55)
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    19
  Pi            :: "[i set, i => i set] => i set"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    20
  Sigma         :: "[i set, i => i set] => i set"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    21
  Nat           :: "i set"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    22
  List          :: "i set => i set"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    23
  Lists         :: "i set => i set"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    24
  ILists        :: "i set => i set"
999
9bf3816298d0 Gave tighter priorities to SUM and PROD to reduce ambiguities.
lcp
parents: 22
diff changeset
    25
  TAll          :: "(i set => i set) => i set"       (binder "TALL " 55)
9bf3816298d0 Gave tighter priorities to SUM and PROD to reduce ambiguities.
lcp
parents: 22
diff changeset
    26
  TEx           :: "(i set => i set) => i set"       (binder "TEX " 55)
9bf3816298d0 Gave tighter priorities to SUM and PROD to reduce ambiguities.
lcp
parents: 22
diff changeset
    27
  Lift          :: "i set => i set"                  ("(3[_])")
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    28
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    29
  SPLIT         :: "[i, [i, i] => i set] => i set"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    30
14765
bafb24c150c1 proper use of 'syntax';
wenzelm
parents: 3837
diff changeset
    31
syntax
999
9bf3816298d0 Gave tighter priorities to SUM and PROD to reduce ambiguities.
lcp
parents: 22
diff changeset
    32
  "@Pi"         :: "[idt, i set, i set] => i set"    ("(3PROD _:_./ _)"
1474
3f7d67927fe2 expanded tabs
clasohm
parents: 999
diff changeset
    33
                                [0,0,60] 60)
999
9bf3816298d0 Gave tighter priorities to SUM and PROD to reduce ambiguities.
lcp
parents: 22
diff changeset
    34
9bf3816298d0 Gave tighter priorities to SUM and PROD to reduce ambiguities.
lcp
parents: 22
diff changeset
    35
  "@Sigma"      :: "[idt, i set, i set] => i set"    ("(3SUM _:_./ _)"
1474
3f7d67927fe2 expanded tabs
clasohm
parents: 999
diff changeset
    36
                                [0,0,60] 60)
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
    37
999
9bf3816298d0 Gave tighter priorities to SUM and PROD to reduce ambiguities.
lcp
parents: 22
diff changeset
    38
  "@->"         :: "[i set, i set] => i set"         ("(_ ->/ _)"  [54, 53] 53)
9bf3816298d0 Gave tighter priorities to SUM and PROD to reduce ambiguities.
lcp
parents: 22
diff changeset
    39
  "@*"          :: "[i set, i set] => i set"         ("(_ */ _)" [56, 55] 55)
9bf3816298d0 Gave tighter priorities to SUM and PROD to reduce ambiguities.
lcp
parents: 22
diff changeset
    40
  "@Subtype"    :: "[idt, 'a set, o] => 'a set"      ("(1{_: _ ./ _})")
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    41
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    42
translations
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    43
  "PROD x:A. B" => "Pi(A, %x. B)"
17782
b3846df9d643 replaced _K by dummy abstraction;
wenzelm
parents: 17456
diff changeset
    44
  "A -> B"      => "Pi(A, %_. B)"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    45
  "SUM x:A. B"  => "Sigma(A, %x. B)"
17782
b3846df9d643 replaced _K by dummy abstraction;
wenzelm
parents: 17456
diff changeset
    46
  "A * B"       => "Sigma(A, %_. B)"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    47
  "{x: A. B}"   == "Subtype(A, %x. B)"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    48
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
    49
print_translation {*
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
    50
  [("Pi", dependent_tr' ("@Pi", "@->")),
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
    51
   ("Sigma", dependent_tr' ("@Sigma", "@*"))] *}
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    52
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
    53
axioms
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
    54
  Subtype_def: "{x:A. P(x)} == {x. x:A & P(x)}"
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
    55
  Unit_def:          "Unit == {x. x=one}"
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
    56
  Bool_def:          "Bool == {x. x=true | x=false}"
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
    57
  Plus_def:           "A+B == {x. (EX a:A. x=inl(a)) | (EX b:B. x=inr(b))}"
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
    58
  Pi_def:         "Pi(A,B) == {x. EX b. x=lam x. b(x) & (ALL x:A. b(x):B(x))}"
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
    59
  Sigma_def:   "Sigma(A,B) == {x. EX a:A. EX b:B(a).x=<a,b>}"
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
    60
  Nat_def:            "Nat == lfp(% X. Unit + X)"
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
    61
  List_def:       "List(A) == lfp(% X. Unit + A*X)"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    62
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
    63
  Lists_def:     "Lists(A) == gfp(% X. Unit + A*X)"
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
    64
  ILists_def:   "ILists(A) == gfp(% X.{} + A*X)"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    65
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
    66
  Tall_def:   "TALL X. B(X) == Inter({X. EX Y. X=B(Y)})"
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
    67
  Tex_def:     "TEX X. B(X) == Union({X. EX Y. X=B(Y)})"
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
    68
  Lift_def:           "[A] == A Un {bot}"
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    69
17456
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
    70
  SPLIT_def:   "SPLIT(p,B) == Union({A. EX x y. p=<x,y> & A=B(x,y)})"
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
    71
bcf7544875b2 converted to Isar theory format;
wenzelm
parents: 14765
diff changeset
    72
ML {* use_legacy_bindings (the_context ()) *}
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    73
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    74
end