src/HOLCF/ex/Classlib.thy
author slotosch
Mon, 17 Feb 1997 11:04:00 +0100
changeset 2642 3c3a84cc85a9
parent 2570 24d7e8fb8261
child 3154 6e20bf579edb
permissions -rw-r--r--
Examples are adopted to the changes from HOLCF. Classlib is reduced. Classlib still uses arities, Classlib will change completely to new classes of ADTs
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     1
(*  Title:      FOCUS/Classlib.thy
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     2
    ID:         $ $
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
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     6
Introduce various type classes
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     7
2642
3c3a84cc85a9 Examples are adopted to the changes from HOLCF.
slotosch
parents: 2570
diff changeset
     8
The type void of HOLCF/One.thy is a witness for all the introduced classes.
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
     9
Inspect theory Witness.thy for all the proofs. 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    10
2642
3c3a84cc85a9 Examples are adopted to the changes from HOLCF.
slotosch
parents: 2570
diff changeset
    11
!!! Witness and Claslib have to be adapted to axclasses !!!
3c3a84cc85a9 Examples are adopted to the changes from HOLCF.
slotosch
parents: 2570
diff changeset
    12
------------------------------------------------------------
3c3a84cc85a9 Examples are adopted to the changes from HOLCF.
slotosch
parents: 2570
diff changeset
    13
3c3a84cc85a9 Examples are adopted to the changes from HOLCF.
slotosch
parents: 2570
diff changeset
    14
the trivial instance for ++ -- ** // is circ
3c3a84cc85a9 Examples are adopted to the changes from HOLCF.
slotosch
parents: 2570
diff changeset
    15
the trivial instance for .= and .<=  is bullet
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    16
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    17
the class hierarchy is as follows
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    18
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    19
        pcpo 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    20
         |        
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    21
          ----------------
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    22
         |               | 
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
        per   cplus  cminus ctimes cdvi
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    26
         |
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    27
       equiv
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    28
       /  \
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    29
      /    \
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    30
     |     |
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    31
    qpo    eq
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
  qlinear
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
*)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    38
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    39
Classlib = HOLCF +
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    40
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    41
(* -------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    42
(* class cplus with characteristic constant  ++                         *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    43
 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    44
classes cplus < pcpo	
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    45
2642
3c3a84cc85a9 Examples are adopted to the changes from HOLCF.
slotosch
parents: 2570
diff changeset
    46
arities lift :: (term)cplus
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    47
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    48
ops curried 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    49
	"++"	:: "'a::cplus -> 'a -> 'a"		(cinfixl 65)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    50
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    51
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    52
(* class cplus has no characteristic axioms                             *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    53
(* -------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    54
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    55
(* -------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    56
(* class cminus with characteristic constant --                         *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    57
 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    58
classes cminus < pcpo	
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    59
2642
3c3a84cc85a9 Examples are adopted to the changes from HOLCF.
slotosch
parents: 2570
diff changeset
    60
arities lift :: (term)cminus
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    61
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    62
ops curried 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    63
	"--"	:: "'a::cminus -> 'a -> 'a"		(cinfixl 65)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    64
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    65
(* class cminus has no characteristic axioms                            *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    66
(* -------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    67
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    68
(* -------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    69
(* class ctimes with characteristic constant **                         *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    70
 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    71
classes ctimes < pcpo	
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    72
2642
3c3a84cc85a9 Examples are adopted to the changes from HOLCF.
slotosch
parents: 2570
diff changeset
    73
arities lift :: (term)ctimes
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    74
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    75
ops curried 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    76
	"**"	:: "'a::ctimes -> 'a -> 'a"		(cinfixl 70)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    77
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    78
(* class ctimes has no characteristic axioms                            *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    79
(* -------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    80
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    81
(* -------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    82
(* class cdiv with characteristic constant //                           *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    83
 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    84
classes cdiv < pcpo	
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    85
2642
3c3a84cc85a9 Examples are adopted to the changes from HOLCF.
slotosch
parents: 2570
diff changeset
    86
arities lift :: (term)cdiv
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    87
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    88
ops curried 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    89
	"//"	:: "'a::cdiv -> 'a -> 'a"		(cinfixl 70)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    90
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    91
(* class cdiv has no characteristic axioms                              *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    92
(* -------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    93
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    94
(* -------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    95
(* class per with characteristic constant .=                            *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    96
 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    97
classes per < pcpo	
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
    98
2642
3c3a84cc85a9 Examples are adopted to the changes from HOLCF.
slotosch
parents: 2570
diff changeset
    99
arities lift :: (term)per
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   100
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   101
ops curried 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   102
	".="	:: "'a::per -> 'a -> tr"	(cinfixl 55)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   103
syntax (symbols)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   104
	"op .=" :: "'a::per => 'a => tr"	(infixl "\\<doteq>" 55)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   105
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   106
rules 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   107
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   108
strict_per	"(UU .= x) = UU & (x .= UU) = UU"
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   109
total_per	"[|x ~= UU; y ~= UU|] ==> (x .= y) ~= UU"
2642
3c3a84cc85a9 Examples are adopted to the changes from HOLCF.
slotosch
parents: 2570
diff changeset
   110
flat_per	"flat (x::'a::per)"
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   111
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   112
sym_per		"(x .= y) = (y .= x)"
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   113
trans_per	"[| (x .= y)=TT; (y .= z)=TT |] ==> (x .= z)=TT"
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   114
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   115
(* -------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   116
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   117
(* -------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   118
(* class equiv is a refinement of of class per                          *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   119
 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   120
classes equiv < per 	
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   121
2642
3c3a84cc85a9 Examples are adopted to the changes from HOLCF.
slotosch
parents: 2570
diff changeset
   122
arities lift :: (term)equiv
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   123
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   124
rules 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   125
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   126
refl_per	"[|(x::'a::equiv) ~= UU|] ==> (x .= x)=TT"
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   127
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   128
(* -------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   129
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   130
(* -------------------------------------------------------------------- *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   131
(* class eq is a refinement of of class equiv                           *)
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   132
 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   133
classes eq < equiv  	
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   134
2642
3c3a84cc85a9 Examples are adopted to the changes from HOLCF.
slotosch
parents: 2570
diff changeset
   135
arities lift :: (term)eq
2570
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   136
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   137
rules 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   138
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   139
weq	"[| (x::'a::eq) ~= UU; y ~= UU |] ==> 
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   140
	 (x = y --> (x .=y) = TT) & (x ~= y --> (x .= y)=FF)"
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   141
24d7e8fb8261 added Classlib.* and Witness.*,
oheimb
parents:
diff changeset
   142
end