src/HOLCF/ex/Classlib.thy
author wenzelm
Wed, 15 Oct 1997 15:12:59 +0200
changeset 3872 a5839ecee7b8
parent 3156 73473cb66bcf
permissions -rw-r--r--
tuned; prepare ext;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3156
73473cb66bcf partially adapted to axclass / instance;
wenzelm
parents: 3154
diff changeset
     1
(*  Title:      HOLCF/ex/Classlib.thy
73473cb66bcf partially adapted to axclass / instance;
wenzelm
parents: 3154
diff changeset
     2
    ID:         $Id$
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     3
    Author:     Franz Regensburger
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     4
    Copyright   1995 Technical University Munich
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     5
3156
73473cb66bcf partially adapted to axclass / instance;
wenzelm
parents: 3154
diff changeset
     6
Introduce various type classes.
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     7
3154
6e20bf579edb removed Witness;
wenzelm
parents: 2642
diff changeset
     8
!!! Has to be adapted to axclasses !!!
6e20bf579edb removed Witness;
wenzelm
parents: 2642
diff changeset
     9
--------------------------------------
2642
3c3a84cc85a9 Examples are adopted to the changes from HOLCF.
slotosch
parents: 2570
diff changeset
    10
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    11
3156
73473cb66bcf partially adapted to axclass / instance;
wenzelm
parents: 3154
diff changeset
    12
The class hierarchy is as follows:
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    13
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    14
        pcpo 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    15
         |        
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    16
          ----------------
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    17
         |               | 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    18
         |      --------------------- 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    19
         |      |       |      |    | 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    20
        per   cplus  cminus ctimes cdvi
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    21
         |
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    22
       equiv
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    23
       /  \
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    24
      /    \
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    25
     |     |
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    26
    qpo    eq
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    27
     | 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    28
     |    
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    29
  qlinear
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    30
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    31
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    32
*)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    33
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    34
Classlib = HOLCF +
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    35
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    36
(* -------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    37
(* class cplus with characteristic constant  ++                         *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    38
 
3156
73473cb66bcf partially adapted to axclass / instance;
wenzelm
parents: 3154
diff changeset
    39
axclass cplus < pcpo	
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    40
3156
73473cb66bcf partially adapted to axclass / instance;
wenzelm
parents: 3154
diff changeset
    41
instance lift :: (term)cplus
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    42
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    43
ops curried 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    44
	"++"	:: "'a::cplus -> 'a -> 'a"		(cinfixl 65)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    45
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    46
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    47
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    48
(* -------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    49
(* class cminus with characteristic constant --                         *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    50
 
3156
73473cb66bcf partially adapted to axclass / instance;
wenzelm
parents: 3154
diff changeset
    51
axclass cminus < pcpo
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    52
3156
73473cb66bcf partially adapted to axclass / instance;
wenzelm
parents: 3154
diff changeset
    53
instance lift :: (term)cminus
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    54
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    55
ops curried 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    56
	"--"	:: "'a::cminus -> 'a -> 'a"		(cinfixl 65)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    57
3156
73473cb66bcf partially adapted to axclass / instance;
wenzelm
parents: 3154
diff changeset
    58
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    59
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    60
(* -------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    61
(* class ctimes with characteristic constant **                         *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    62
 
3156
73473cb66bcf partially adapted to axclass / instance;
wenzelm
parents: 3154
diff changeset
    63
axclass ctimes < pcpo
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    64
3156
73473cb66bcf partially adapted to axclass / instance;
wenzelm
parents: 3154
diff changeset
    65
instance lift :: (term)ctimes
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    66
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    67
ops curried 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    68
	"**"	:: "'a::ctimes -> 'a -> 'a"		(cinfixl 70)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    69
3156
73473cb66bcf partially adapted to axclass / instance;
wenzelm
parents: 3154
diff changeset
    70
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    71
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    72
(* -------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    73
(* class cdiv with characteristic constant //                           *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    74
 
3156
73473cb66bcf partially adapted to axclass / instance;
wenzelm
parents: 3154
diff changeset
    75
axclass cdiv < pcpo
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    76
3156
73473cb66bcf partially adapted to axclass / instance;
wenzelm
parents: 3154
diff changeset
    77
instance lift :: (term)cdiv
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    78
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    79
ops curried 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    80
	"//"	:: "'a::cdiv -> 'a -> 'a"		(cinfixl 70)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    81
3156
73473cb66bcf partially adapted to axclass / instance;
wenzelm
parents: 3154
diff changeset
    82
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    83
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    84
(* -------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    85
(* class per with characteristic constant .=                            *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    86
 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    87
classes per < pcpo	
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    88
2642
3c3a84cc85a9 Examples are adopted to the changes from HOLCF.
slotosch
parents: 2570
diff changeset
    89
arities lift :: (term)per
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    90
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    91
ops curried 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    92
	".="	:: "'a::per -> 'a -> tr"	(cinfixl 55)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    93
syntax (symbols)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    94
	"op .=" :: "'a::per => 'a => tr"	(infixl "\\<doteq>" 55)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    95
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    96
rules 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    97
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    98
strict_per	"(UU .= x) = UU & (x .= UU) = UU"
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    99
total_per	"[|x ~= UU; y ~= UU|] ==> (x .= y) ~= UU"
2642
3c3a84cc85a9 Examples are adopted to the changes from HOLCF.
slotosch
parents: 2570
diff changeset
   100
flat_per	"flat (x::'a::per)"
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   101
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   102
sym_per		"(x .= y) = (y .= x)"
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   103
trans_per	"[| (x .= y)=TT; (y .= z)=TT |] ==> (x .= z)=TT"
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   104
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   105
(* -------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   106
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   107
(* -------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   108
(* class equiv is a refinement of of class per                          *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   109
 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   110
classes equiv < per 	
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   111
2642
3c3a84cc85a9 Examples are adopted to the changes from HOLCF.
slotosch
parents: 2570
diff changeset
   112
arities lift :: (term)equiv
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   113
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   114
rules 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   115
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   116
refl_per	"[|(x::'a::equiv) ~= UU|] ==> (x .= x)=TT"
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   117
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   118
(* -------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   119
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   120
(* -------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   121
(* class eq is a refinement of of class equiv                           *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   122
 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   123
classes eq < equiv  	
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   124
2642
3c3a84cc85a9 Examples are adopted to the changes from HOLCF.
slotosch
parents: 2570
diff changeset
   125
arities lift :: (term)eq
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   126
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   127
rules 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   128
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   129
weq	"[| (x::'a::eq) ~= UU; y ~= UU |] ==> 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   130
	 (x = y --> (x .=y) = TT) & (x ~= y --> (x .= y)=FF)"
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   131
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   132
end