
header {* Principia Metaphysica *}

theory PM
imports CPure

begin

classes type
classes trm < type
classes frm < type
defaultsort frm

global

typedecl bool
typedecl obj

arities
 bool  :: frm
 obj   :: trm
 "fun" :: (trm, frm) frm

judgment
 Trueprop :: "bool => prop"                             ("(_)" 5)

consts
 Equ   :: "[bool, bool] => bool"                        (infixr "<->" 25)
 All   :: "(('a :: type) => bool) => bool"              (binder "ALL " 10)
 Box   :: "bool => bool"                                ("[]_" [50] 50)
 Enc   :: "[obj, obj => bool] => bool"                  ("_$_" [99,99] 50)
 EqE  :: "[obj, obj] => bool"                           (infix " =E " 50)
 Eq   :: "[('a :: type), 'a] => bool"                   (infix "=" 50)

local

defs (overloaded)
 Eq_frm0_def:  "(p :: bool) = q  ==  (%y :: obj. p) = (%y. q)"
 Eq_frm1_def:  "F = G  ==  [] (ALL x. x$F <-> x$G)"
(* this last definition is the source of the error *)
 EqX_frmN_def: "(F :: obj => obj => ('a :: frm)) = G  ==
                  ALL x. (%y. F y x) = (%y. G y x)"

end





