Theory ZFC_Rudiments

section β€ΉSome rudiments of ZFCβ€Ί

text β€ΉSee also πŸŒβ€Ήhttps://www.isa-afp.org/entries/ZFC_in_HOL.htmlβ€Ί by L.C. Paulson.β€Ί

theory ZFC_Rudiments
  imports Main
begin

typedecl V

axiomatization elts :: "V β‡’ V set"
 where ext [intro?]:    "elts x = elts y ⟹ x=y"
   and down_raw:        "Y βŠ† elts x ⟹ Y ∈ range elts"
   and Union_raw:       "X ∈ range elts ⟹ Union (elts ` X) ∈ range elts"
   and Pow_raw:         "X ∈ range elts ⟹ inv elts ` Pow X ∈ range elts"
   and replacement_raw: "X ∈ range elts ⟹ f ` X ∈ range elts"
   and inf_raw:         "range (g :: nat β‡’ V) ∈ range elts"
   and foundation:      "wf {(x,y). x ∈ elts y}"

definition small :: "'a set β‡’ bool" 
  where "small X ≑ βˆƒV_of :: 'a β‡’ V. inj_on V_of X ∧ V_of ` X ∈ range elts"

definition set :: "V set β‡’ V"
  where "set X ≑ (if small X then inv elts X else inv elts {})"

definition VPow :: "V β‡’ V"
  where "VPow x = set (set ` Pow (elts x))"

definition vpair :: "V β‡’ V β‡’ V"
  where "vpair a b = set {set {a},set {a,b}}"

definition vfst :: "V β‡’ V"
  where "vfst p = (THE x. βˆƒy. p = vpair x y)"

definition vsnd :: "V β‡’ V"
  where "vsnd p = (THE y. βˆƒx. p = vpair x y)"

definition VSigma :: "V β‡’ (V β‡’ V) β‡’ V"
  where "VSigma A B = set(⋃x ∈ elts A. ⋃y ∈ elts (B x). {vpair x y})"

abbreviation vtimes :: "V β‡’ V β‡’ V"
  where "vtimes A B ≑ VSigma A (Ξ»x. B)"

definition pairs :: "V β‡’ (V Γ— V) set"
  where "pairs r = {(x,y). vpair x y ∈ elts r}"

definition VLambda :: "V β‡’ (V β‡’ V) β‡’ V"
  where "VLambda A b = set ((Ξ»x. vpair x (b x)) ` elts A)"

definition app :: "V β‡’ V β‡’ V"
  where "app f x ≑ THE y. vpair x y ∈ elts f"

definition VPi :: "V β‡’ (V β‡’ V) β‡’ V"
  where "VPi A B =
    set {f ∈ elts (VPow (VSigma A B)). elts A βŠ† Domain (pairs f) ∧ single_valued (pairs f)}"

end