Library Continuum.Axioms

Require Export Definability.

ZF Model


Class ZF_Operations (S : ZF_Structure) :=
  build_zf_operations {
      empty_set : S;
      unordered_pair : S → S → S;
      power_set : S → S;
      big_union : S → S;
      infinite_set : S;
      relation_replacement:
        ∀ R : S → S → Prop,
          Is_Definable R →
          Is_Functional R →
          S →
          S
    }.

Notation "∅" := empty_set.
Notation "`{ u , v }" :=
  (unordered_pair u v)
    (at level 9, u at level 69, v at level 69, format "`{ u , v }").
Notation 𝒫 := power_set.
Notation "`{ u }" := (`{u, u})
                       (at level 9, u at level 69, format "`{ u }").
Notation "A ∪ B" := (big_union `{A, B}) (at level 50).

Class ZF_Model :=
  build_zf_model {

      zf_structure :> ZF_Structure;
      zf_operations :> ZF_Operations zf_structure;


      extensionality : ∀ A B : zf_structure, (∀ x, x ∈ A ↔ x ∈ B) → A = B;

      
This might be stronger than the common first-order formulation.
      foundation : Is_Well_Founded element_relation_on_sets;

      not_in_empty_set :
        ∀ x, x ∉ ∅;

      in_unordered_pair_iff :
        ∀ x y z, z ∈ `{x, y} ↔ z = x ∨ z = y;

      in_power_set_iff :
        ∀ A x, x ∈ 𝒫 A ↔ x ⊆ A;

      in_big_union_iff :
        ∀ A x, x ∈ big_union A ↔ ∃ B : A, x ∈ B;

      infinite_set_property :
        ∅ ∈ infinite_set ∧
        ∀ x : infinite_set, x ∪ `{x} ∈ infinite_set;

      in_relation_replacement_iff :
        ∀ R definable functional A y,
          y ∈ relation_replacement R definable functional A ↔ ∃ x : A, R x y

    }.

Coercion zf_structure : ZF_Model >-> ZF_Structure.