src/ZF/QPair.thy
author clasohm
Thu, 16 Sep 1993 12:20:38 +0200
changeset 0 a5a9c433f639
child 44 00597b21a6a9
permissions -rw-r--r--
Initial revision
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     1
(*  Title: 	ZF/qpair.thy
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     2
    ID:         $Id$
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     3
    Author: 	Lawrence C Paulson, Cambridge University Computer Laboratory
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
Quine-inspired ordered pairs and disjoint sums, for non-well-founded data
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     7
structures in ZF.  Does not precisely follow Quine's construction.  Thanks
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     8
to Thomas Forster for suggesting this approach!
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
     9
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    10
W. V. Quine, On Ordered Pairs and Relations, in Selected Logic Papers,
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    11
1966.
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    12
*)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    13
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    14
QPair = Sum +
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    15
consts
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    16
  QPair     :: "[i, i] => i"               	("<(_;/ _)>")
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    17
  qsplit    :: "[[i,i] => i, i] => i"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    18
  qfsplit   :: "[[i,i] => o, i] => o"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    19
  qconverse :: "i => i"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    20
  "@QSUM"   :: "[idt, i, i] => i"               ("(3QSUM _:_./ _)" 10)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    21
  " <*>"    :: "[i, i] => i"         		("(_ <*>/ _)" [81, 80] 80)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    22
  QSigma    :: "[i, i => i] => i"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    23
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    24
  "<+>"     :: "[i,i]=>i"      			(infixr 65)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    25
  QInl,QInr :: "i=>i"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    26
  qcase     :: "[i=>i, i=>i, i]=>i"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    27
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    28
translations
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    29
  "QSUM x:A. B"  => "QSigma(A, %x. B)"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    30
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    31
rules
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    32
  QPair_def       "<a;b> == a+b"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    33
  qsplit_def      "qsplit(c,p)  ==  THE y. EX a b. p=<a;b> & y=c(a,b)"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    34
  qfsplit_def     "qfsplit(R,z) == EX x y. z=<x;y> & R(x,y)"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    35
  qconverse_def   "qconverse(r) == {z. w:r, EX x y. w=<x;y> & z=<y;x>}"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    36
  QSigma_def      "QSigma(A,B)  ==  UN x:A. UN y:B(x). {<x;y>}"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    37
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    38
  qsum_def        "A <+> B      == QSigma({0}, %x.A) Un QSigma({1}, %x.B)"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    39
  QInl_def        "QInl(a)      == <0;a>"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    40
  QInr_def        "QInr(b)      == <1;b>"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    41
  qcase_def       "qcase(c,d)   == qsplit(%y z. cond(y, d(z), c(z)))"
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    42
end
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    43
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    44
ML
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    45
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    46
(* 'Dependent' type operators *)
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    47
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    48
val parse_translation =
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    49
  [(" <*>", ndependent_tr "QSigma")];
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    50
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    51
val print_translation =
a5a9c433f639 Initial revision
clasohm
parents:
diff changeset
    52
  [("QSigma", dependent_tr' ("@QSUM", " <*>"))];