src/HOL/Quot/PER0.thy
author slotosch
Fri, 04 Apr 1997 16:01:14 +0200
changeset 2904 fc10751254aa
child 3058 9d6526cacc3c
permissions -rw-r--r--
(partial) equivalecne relations. classes er<per
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2904
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
     1
(*  Title:      HOL/Quot/PER0.thy
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
     2
    ID:         $Id$
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
     3
    Author:     Oscar Slotosch
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
     4
    Copyright   1997 Technische Universitaet Muenchen
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
     5
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
     6
Definition of classes per and er for (partial) equivalence classes
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
     7
The polymorphic constant eqv is only for the definition of PERs
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
     8
The characteristic constant === (sim) is available on the class per
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
     9
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    10
*)
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    11
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    12
PER0 = Set + (* partial equivalence relations *)
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    13
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    14
consts  (* polymorphic constant for (partial) equivalence relations *)
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    15
        eqv    :: "'a::term => 'a => bool" 
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    16
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    17
axclass per < term
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    18
	(* axioms for partial equivalence relations *)
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    19
        ax_per_sym      "eqv x y ==> eqv y x"
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    20
        ax_per_trans    "[|eqv x y; eqv y z|] ==> eqv x z"
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    21
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    22
axclass er < per
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    23
	ax_er_refl	"eqv x x"
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    24
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    25
consts  (* characteristic constant and Domain for per *)
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    26
        "==="     :: "'a::per => 'a => bool" (infixl 55)
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    27
        D         :: "'a::per set"
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    28
defs
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    29
        per_def         "(op ===) == eqv"
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    30
        Domain          "D=={x.x===x}"
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    31
(* define ==== on and function type => *)
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    32
        fun_per_def     "eqv f g == !x y.x:D & y:D & x===y --> f x === g y"
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    33
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    34
syntax (symbols)
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    35
  "op ==="   :: "['a,'a::per] => bool"        (infixl "\\<sim>" 50)
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    36
fc10751254aa (partial) equivalecne relations. classes er<per
slotosch
parents:
diff changeset
    37
end