Documentation

LeanPool.ZFLean.Functions

LeanPool.ZFLean.Functions #

Imported Lean Pool material for LeanPool.ZFLean.Functions.

def ZFSet.inv (R : ZFSet.{u_1}) {A B : ZFSet.{u_1}} (_isRel : R ⊆ A.prod B := by zrel) :

Inverse of a (binary) relation. A proof that R is a relation is needed and tried to be automatically inferred.

Equations
Instances For

    Imported ZFLean declaration.

    Equations
    Instances For
      theorem ZFSet.mem_inv {x y R A B : ZFSet.{u_1}} (hR : R ⊆ A.prod B) :
      y.pair x ∈ R⁻¹ hR ↔ x.pair y ∈ R
      theorem ZFSet.subset_prod_inv {R A B : ZFSet.{u_1}} (hR : R ⊆ A.prod B) :
      R⁻¹ hR ⊆ B.prod A
      theorem ZFSet.inv_involutive {R A B : ZFSet.{u_1}} (hR : R ⊆ A.prod B) :
      (R⁻¹ hR)⁻¹ ⋯ = R
      @[reducible, inline]
      abbrev ZFSet.Dom (f : ZFSet.{u_1}) {A B : ZFSet.{u_1}} (_hf : f ⊆ A.prod B := by zrel) :

      Domain of a (binary) relation. A proof that f is a relation is needed and tried to be automatically inferred.

      Equations
      Instances For
        @[reducible, inline]
        abbrev ZFSet.Range (f : ZFSet.{u_1}) {A B : ZFSet.{u_1}} (hf : f ⊆ A.prod B := by zrel) :

        Imported ZFLean declaration.

        Equations
        Instances For
          theorem ZFSet.funs.nonempty {A B : ZFSet.{u_1}} (hB : B ≠ ∅) :

          IsPFunc f A B is the assertion that f is a partial function from A to B, i.e. that if pair x y ∈ f and pair x z ∈ f then y = z.

          Equations
          Instances For
            theorem ZFSet.is_rel_of_is_pfunc {f A B : ZFSet.{u_1}} (hf : f.IsPFunc A B) :
            f ⊆ A.prod B
            theorem ZFSet.pfunc_weaken {f A B C D : ZFSet.{u_1}} (hf : f.IsPFunc C D) (hAB : C ⊆ A) (hCD : D ⊆ B) :
            f.IsPFunc A B
            theorem ZFSet.is_func_is_pfunc {f A B : ZFSet.{u_1}} (hf : A.IsFunc B f) :
            f.IsPFunc A B
            theorem ZFSet.is_rel_of_is_func {f A B : ZFSet.{u_1}} (hf : A.IsFunc B f) :
            f ⊆ A.prod B
            theorem ZFSet.is_func_extend_range {f D E : ZFSet.{u_1}} (hf : D.IsFunc E f) {F : ZFSet.{u_1}} (sub_E_F : E ⊆ F) :
            D.IsFunc F f
            theorem ZFSet.is_pfunc_func_exists {f A B : ZFSet.{u_1}} :
            f.IsPFunc A B → ∃ (A' : ZFSet.{u_1}) (B' : ZFSet.{u_1}), A'.IsFunc B' f ∧ A' ⊆ A ∧ B' ⊆ B
            theorem ZFSet.pfun_dom_subset (f : ZFSet.{u_1}) {A B : ZFSet.{u_1}} (hf : f.IsPFunc A B) :
            f.Dom ⋯ ⊆ A
            theorem ZFSet.mem_dom {f A B : ZFSet.{u_1}} (hf : f.IsPFunc A B) {x y : ZFSet.{u_1}} :
            x.pair y ∈ f → x ∈ f.Dom ⋯
            theorem ZFSet.is_func_dom_range (f : ZFSet.{u_1}) {A B : ZFSet.{u_1}} (hf : f.IsPFunc A B) :
            (f.Dom ⋯).IsFunc (f.Range ⋯) f
            theorem ZFSet.is_func_of_pfunc (f : ZFSet.{u_1}) {A B : ZFSet.{u_1}} (hf : f.IsPFunc A B) :
            (f.Dom ⋯).IsFunc B f
            def ZFSet.IsInjective (f : ZFSet.{u_1}) {A B : ZFSet.{u_1}} (_hf : A.IsFunc B f := by zfun) :

            Imported ZFLean declaration.

            Equations
            Instances For
              def ZFSet.IsSurjective (f : ZFSet.{u_1}) {A B : ZFSet.{u_1}} (_hf : A.IsFunc B f := by zfun) :

              Imported ZFLean declaration.

              Equations
              Instances For
                def ZFSet.IsBijective (f : ZFSet.{u_1}) {A B : ZFSet.{u_1}} (hf : A.IsFunc B f := by zfun) :

                A function is bijective when it is injective and surjective.

                Equations
                Instances For
                  theorem ZFSet.IsInjective.ofBijective {f A B C : ZFSet.{u_1}} {hf : A.IsFunc B f} (f_bij : f.IsBijective hf) (B_sub_C : B ⊆ C) :
                  theorem ZFSet.bijective_exists1_iff {f A B : ZFSet.{u_1}} (hf : A.IsFunc B f) :
                  f.IsBijective hf ↔ ∀ y ∈ B, ∃! x : ZFSet.{u_1}, x ∈ A ∧ x.pair y ∈ f
                  def ZFSet.IsMono {f A B : ZFSet.{u_1}} [LTA : Preorder ↥A] [LTB : Preorder ↥B] (hf : A.IsFunc B f) :

                  Imported ZFLean declaration.

                  Equations
                  • One or more equations did not get rendered due to their size.
                  Instances For
                    def ZFSet.IsStrictMono {f A B : ZFSet.{u_1}} [LTA : Preorder ↥A] [LTB : Preorder ↥B] (hf : A.IsFunc B f) :

                    Imported ZFLean declaration.

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For

                      Imported ZFLean declaration.

                      Equations
                      Instances For

                        Notation for the identity function on a ZF set.

                        Equations
                        Instances For
                          theorem ZFSet.pair_mem_Id_iff {A x y : ZFSet.{u_1}} (hx : x ∈ A) :
                          x.pair y ∈ 𝟙A ↔ x = y
                          theorem ZFSet.mem_Id_iff {A z : ZFSet.{u_1}} :
                          z ∈ 𝟙A ↔ ∃ x ∈ A, z = x.pair x
                          theorem ZFSet.pair_self_mem_Id {A x : ZFSet.{u_1}} (hx : x ∈ A) :
                          @[simp]
                          theorem ZFSet.range_Id {A : ZFSet.{u_1}} :
                          (𝟙A).Range ⋯ = A

                          Imported ZFLean declaration.

                          Equations
                          Instances For

                            The set of permutations of a ZF set.

                            Equations
                            Instances For

                              If f : A → B and g : B → C are functions, then composition g f is the function from A to C defined by composition g f (x, z) = (x, y) where y is such that (x, y) ∈ f and (y, z) ∈ g.

                              Equations
                              Instances For
                                theorem ZFSet.mem_composition (g f : ZFSet.{u_1}) {A B C z : ZFSet.{u_1}} :
                                z ∈ g.composition f A B C ↔ ∃ (x : ZFSet.{u_1}) (w : ZFSet.{u_1}) (y : ZFSet.{u_1}), z = x.pair y ∧ x ∈ A ∧ y ∈ C ∧ w ∈ B ∧ x.pair w ∈ f ∧ w.pair y ∈ g
                                theorem ZFSet.Id.composition_left {f A B : ZFSet.{u_1}} (hf : f ⊆ A.prod B) :
                                (𝟙B).composition f A B B = f
                                theorem ZFSet.Id.composition_right {f A B : ZFSet.{u_1}} (hf : f ⊆ A.prod B) :
                                f.composition (𝟙A) A A B = f
                                theorem ZFSet.IsPFunc_of_composition_IsPFunc {f g A B C : ZFSet.{u_1}} (hf : f.IsPFunc A B) (hg : g.IsPFunc B C) :
                                (g.composition f A B C).IsPFunc A C
                                theorem ZFSet.IsFunc_of_composition_IsFunc {g f A B C : ZFSet.{u_1}} (hg : B.IsFunc C g) (hf : A.IsFunc B f) :
                                A.IsFunc C (g.composition f A B C)
                                @[reducible, inline]
                                abbrev ZFSet.fcomp (g f : ZFSet.{u_1}) {A B C : ZFSet.{u_1}} (_hg : B.IsFunc C g := by zfun) (_hf : A.IsFunc B f := by zfun) :

                                Imported ZFLean declaration.

                                Equations
                                Instances For

                                  Notation for composition of ZF functions.

                                  Equations
                                  Instances For
                                    @[simp]
                                    theorem ZFSet.pair_mem_composition (g f : ZFSet.{u_1}) {A B C x y : ZFSet.{u_1}} (hg : B.IsFunc C g) (hf : A.IsFunc B f) :
                                    x.pair y ∈ (g ∘ᶻ f) hg hf ↔ ∃ w ∈ B, x.pair w ∈ f ∧ w.pair y ∈ g
                                    theorem ZFSet.IsInjective.composition_of_injective {f g A B C : ZFSet.{u_1}} {hf : A.IsFunc B f} {hg : B.IsFunc C g} (finj : f.IsInjective hf) (ginj : g.IsInjective hg) :
                                    ((g ∘ᶻ f) hg hf).IsInjective ⋯
                                    theorem ZFSet.IsSurjective.composition_of_surjective {f g A B C : ZFSet.{u_1}} {hf : A.IsFunc B f} {hg : B.IsFunc C g} (fsurj : f.IsSurjective hf) (gsurj : g.IsSurjective hg) :
                                    ((g ∘ᶻ f) hg hf).IsSurjective ⋯
                                    theorem ZFSet.IsBijective.composition_of_bijective {f g A B C : ZFSet.{u_1}} {hf : A.IsFunc B f} {hg : B.IsFunc C g} (fbij : f.IsBijective hf) (gbij : g.IsBijective hg) :
                                    ((g ∘ᶻ f) hg hf).IsBijective ⋯
                                    @[simp]
                                    theorem ZFSet.composition_assoc {A B C D f g h : ZFSet.{u_1}} :
                                    h.composition (g.composition f A B C) A C D = (h.composition g B C D).composition f A B D
                                    theorem ZFSet.fcomp_assoc {A B C D f g h : ZFSet.{u_1}} (hf : A.IsFunc B f) (hg : B.IsFunc C g) (hh : C.IsFunc D h) :
                                    (h ∘ᶻ (g ∘ᶻ f) hg hf) hh ⋯ = ((h ∘ᶻ g) hh hg ∘ᶻ f) ⋯ hf
                                    noncomputable def ZFSet.fapply (f : ZFSet.{u_1}) {A B : ZFSet.{u_1}} (hf : f.IsPFunc A B := by zpfun) :
                                    ↥(f.Dom ⋯) → ↥B

                                    Imported ZFLean declaration.

                                    Equations
                                    Instances For

                                      Notation for applying a ZF partial function.

                                      Equations
                                      Instances For
                                        @[simp]
                                        theorem ZFSet.is_func_dom_eq {f A B : ZFSet.{u_1}} (hf : A.IsFunc B f := by zfun) :
                                        f.Dom ⋯ = A
                                        theorem ZFSet.fapply_Id {A x : ZFSet.{u_1}} (hx : x ∈ A) :
                                        @ᶻ𝟙A ⋯ ⟨x, ⋯⟩ = ⟨x, hx⟩
                                        theorem ZFSet.fapply_mem_range {f A B : ZFSet.{u_1}} (hf : f.IsPFunc A B) {x : ZFSet.{u_1}} (hx : x ∈ f.Dom ⋯) :
                                        ↑(@ᶻf hf ⟨x, hx⟩) ∈ B
                                        theorem ZFSet.fapply.def {f A B : ZFSet.{u_1}} (hf : f.IsPFunc A B) {x : ZFSet.{u_1}} (hx : x ∈ f.Dom ⋯) :
                                        x.pair ↑(@ᶻf hf ⟨x, hx⟩) ∈ f
                                        theorem ZFSet.IsInjective.apply_inj {f A B : ZFSet.{u_1}} (hf : A.IsFunc B f) (inj : f.IsInjective hf) :
                                        theorem ZFSet.IsPFunc.exists_unique_of_mem_dom {f A B : ZFSet.{u_1}} (hf : f.IsPFunc A B) {x : ZFSet.{u_1}} (hx : x ∈ f.Dom ⋯) :
                                        theorem ZFSet.fapply.of_pair {f A B : ZFSet.{u_1}} (hf : f.IsPFunc A B) {x y : ZFSet.{u_1}} (hxy : x.pair y ∈ f) :
                                        @ᶻf hf ⟨x, ⋯⟩ = ⟨y, ⋯⟩
                                        theorem ZFSet.IsPFunc.supset_of_range {f A B : ZFSet.{u_1}} (hf : f.IsPFunc A B) :
                                        f.Range ⋯ ⊆ B
                                        theorem ZFSet.IsPFunc.mem_range_of_mem {f A B : ZFSet.{u_1}} (hf : f.IsPFunc A B) {x y : ZFSet.{u_1}} (hxy : x.pair y ∈ f) :
                                        y ∈ f.Range ⋯
                                        theorem ZFSet.IsPFunc.nonempty_range_of_nonempty_dom {f A B x y : ZFSet.{u_1}} (hf : f.IsPFunc A B) (hxy : x.pair y ∈ f) :
                                        f.Range ⋯ ≠ ∅
                                        theorem ZFSet.IsInjective.apply_surj {f A B : ZFSet.{u_1}} (hf : A.IsFunc B f) (surj : f.IsSurjective hf) :
                                        theorem ZFSet.prod_sep_is_pfunc_mem {A B C D : ZFSet.{u_1}} (subAC : A ⊆ C) (subBD : B ⊆ D) :

                                        Imported ZFLean declaration.

                                        Equations
                                        Instances For

                                          Imported ZFLean declaration.

                                          Equations
                                          • One or more equations did not get rendered due to their size.
                                          Instances For

                                            Imported ZFLean declaration.

                                            Equations
                                            • One or more equations did not get rendered due to their size.
                                            Instances For

                                              Parser for the domain, codomain, binder, and body of ZF function notation.

                                              Equations
                                              • One or more equations did not get rendered due to their size.
                                              Instances For

                                                Parser for ZF lambda notation.

                                                Equations
                                                • One or more equations did not get rendered due to their size.
                                                Instances For
                                                  theorem ZFSet.lambda_spec {dom ran : ZFSet.{u_1}} {exp : ZFSet.{u_1} → ZFSet.{u_1}} {x y : ZFSet.{u_1}} :
                                                  (x.pair y ∈ dom.lambda ran fun (z : ZFSet.{u_1}) => exp z) ↔ x ∈ dom ∧ y ∈ ran ∧ y = exp x
                                                  theorem ZFSet.mem_lambda {dom ran : ZFSet.{u_1}} {exp : ZFSet.{u_1} → ZFSet.{u_1}} {z : ZFSet.{u_1}} :
                                                  (z ∈ dom.lambda ran fun (x : ZFSet.{u_1}) => exp x) ↔ ∃ (x : ZFSet.{u_1}) (y : ZFSet.{u_1}), z = x.pair y ∧ x ∈ dom ∧ y ∈ ran ∧ y = exp x
                                                  theorem ZFSet.lambda_ext_iff {d r : ZFSet.{u_1}} {f₁ f₂ : ZFSet.{u_1} → ZFSet.{u_1}} (hf₁ : ∀ {x : ZFSet.{u_1}}, x ∈ d → f₁ x ∈ r) :
                                                  ((d.lambda r fun (x : ZFSet.{u_1}) => f₁ x) = d.lambda r fun (x : ZFSet.{u_1}) => f₂ x) ↔ ∀ z ∈ d, f₁ z = f₂ z
                                                  theorem ZFSet.lambda_ext_iff' {d₁ d₂ r₁ r₂ : ZFSet.{u_1}} {f₁ f₂ : ZFSet.{u_1} → ZFSet.{u_1}} (hf₁ : ∀ {x : ZFSet.{u_1}}, x ∈ d₁ → f₁ x ∈ r₁) (hf₂ : ∀ {x : ZFSet.{u_1}}, x ∈ d₂ → f₂ x ∈ r₂) :
                                                  ((d₁.lambda r₁ fun (x : ZFSet.{u_1}) => f₁ x) = d₂.lambda r₂ fun (x : ZFSet.{u_1}) => f₂ x) ↔ d₁ = d₂ ∧ ∀ z ∈ d₁, f₁ z = f₂ z
                                                  theorem ZFSet.lambda_eta {A B f : ZFSet.{u_1}} (hf : A.IsFunc B f) :
                                                  f = A.lambda B fun (x : ZFSet.{u_1}) => if hx : x ∈ A then ↑(@ᶻf ⋯ ⟨x, ⋯⟩) else ∅
                                                  theorem ZFSet.is_func_ext_iff {A B f g : ZFSet.{u_1}} (hf : A.IsFunc B f) (hg : A.IsFunc B g) :
                                                  f = g ↔ ∀ (x : ZFSet.{u_1}) (hx : x ∈ A), @ᶻf ⋯ ⟨x, ⋯⟩ = @ᶻg ⋯ ⟨x, ⋯⟩
                                                  theorem ZFSet.lambda_subset {A B : ZFSet.{u_1}} {exp : ZFSet.{u_1} → ZFSet.{u_1}} :
                                                  A.lambda B exp ⊆ A.prod B
                                                  theorem ZFSet.lambda_isFunc {A B : ZFSet.{u_1}} {f : ZFSet.{u_1} → ZFSet.{u_1}} (hf : ∀ {x : ZFSet.{u_1}}, x ∈ A → f x ∈ B) :
                                                  A.IsFunc B (A.lambda B f)
                                                  theorem ZFSet.mem_funs_of_lambda {A B : ZFSet.{u_1}} {f : ZFSet.{u_1} → ZFSet.{u_1}} (hf : ∀ {x : ZFSet.{u_1}}, x ∈ A → f x ∈ B) :
                                                  A.lambda B f ∈ A.funs B
                                                  theorem ZFSet.fapply_lambda {A B : ZFSet.{u_1}} {f : ZFSet.{u_1} → ZFSet.{u_1}} (hf : ∀ {x : ZFSet.{u_1}}, x ∈ A → f x ∈ B) {a : ZFSet.{u_1}} (ha : a ∈ A) :
                                                  ↑(@ᶻ(A.lambda B fun (x : ZFSet.{u_1}) => f x) ⋯ ⟨a, ⋯⟩) = f a
                                                  theorem ZFSet.inv_is_func_of_injective {f A B : ZFSet.{u_1}} {f_is_func : A.IsFunc B f} (hf : f.IsInjective f_is_func) :
                                                  (f.Range ⋯).IsFunc A (f⁻¹ ⋯)

                                                  The inverse of an injection is a function.

                                                  theorem ZFSet.inv_is_func_of_bijective {f A B : ZFSet.{u_1}} {f_is_func : A.IsFunc B f} (hf : f.IsBijective f_is_func) :
                                                  B.IsFunc A (f⁻¹ ⋯)

                                                  The inverse of a bijection is a function.

                                                  theorem ZFSet.inv_bijective_of_bijective {f A B : ZFSet.{u_1}} {f_is_func : A.IsFunc B f} (hf : f.IsBijective f_is_func) :
                                                  (f⁻¹ ⋯).IsBijective ⋯

                                                  The inverse of a bijection is a bijection.

                                                  theorem ZFSet.composition_self_inv_of_bijective {f A B : ZFSet.{u_1}} {f_is_func : A.IsFunc B f} (hf : f.IsBijective f_is_func) :
                                                  (f⁻¹ ⋯ ∘ᶻ f) ⋯ f_is_func = 𝟙A
                                                  theorem ZFSet.composition_inv_self_of_bijective {f A B : ZFSet.{u_1}} {f_is_func : A.IsFunc B f} (hf : f.IsBijective f_is_func) :
                                                  (f ∘ᶻ f⁻¹ ⋯) f_is_func ⋯ = 𝟙B
                                                  theorem ZFSet.inv_fcomp_iff {A B C f g : ZFSet.{u_1}} {hf : A.IsFunc B f} (fbij : f.IsBijective hf) {hg : B.IsFunc C g} (gbij : g.IsBijective hg) :
                                                  ((g ∘ᶻ f) hg hf)⁻¹ ⋯ = (f⁻¹ ⋯ ∘ᶻ g⁻¹ ⋯) ⋯ ⋯
                                                  theorem ZFSet.fcomp_bij_fcomp_inv_right {A B C f g h : ZFSet.{u_1}} {hf : A.IsFunc B f} (hbij : f.IsBijective hf) (hg : B.IsFunc C g) (hh : A.IsFunc C h) :
                                                  (g ∘ᶻ f) hg hf = h ↔ g = (h ∘ᶻ f⁻¹ ⋯) hh ⋯
                                                  theorem ZFSet.fcomp_bij_fcomp_inv_left {A B C f g h : ZFSet.{u_1}} {hf : B.IsFunc C f} (hbij : f.IsBijective hf) (hg : A.IsFunc B g) (hh : A.IsFunc C h) :
                                                  (f ∘ᶻ g) hf hg = h ↔ g = (f⁻¹ ⋯ ∘ᶻ h) ⋯ hh
                                                  @[simp]
                                                  theorem ZFSet.fcomp_bij_right_cancel_iff {A B C f : ZFSet.{u_1}} {hf : A.IsFunc B f} (hbij : f.IsBijective hf) {g₁ g₂ : ZFSet.{u_1}} (hg₁ : B.IsFunc C g₁) (hg₂ : B.IsFunc C g₂) :
                                                  (g₁ ∘ᶻ f) hg₁ hf = (g₂ ∘ᶻ f) hg₂ hf ↔ g₁ = g₂
                                                  @[simp]
                                                  theorem ZFSet.fcomp_bij_left_cancel_iff {A B C f : ZFSet.{u_1}} {hf : B.IsFunc C f} (hbij : f.IsBijective hf) {g₁ g₂ : ZFSet.{u_1}} (hg₁ : A.IsFunc B g₁) (hg₂ : A.IsFunc B g₂) :
                                                  (f ∘ᶻ g₁) hf hg₁ = (f ∘ᶻ g₂) hf hg₂ ↔ g₁ = g₂
                                                  def ZFSet.Image (R : ZFSet.{u_1}) {A B : ZFSet.{u_1}} (X : ZFSet.{u_1}) (_hR : R ⊆ A.prod B := by zrel) :

                                                  The image of a set under a relation.

                                                  Equations
                                                  Instances For

                                                    Notation for the image of a set under a ZF relation.

                                                    Equations
                                                    • One or more equations did not get rendered due to their size.
                                                    Instances For
                                                      theorem ZFSet.mem_Image {R A B X y : ZFSet.{u_1}} (hR : R ⊆ A.prod B) :
                                                      y ∈ (R[X]) hR ↔ y ∈ B ∧ ∃ x ∈ X, x.pair y ∈ R
                                                      @[simp]
                                                      theorem ZFSet.Image_empty {R A B : ZFSet.{u_1}} (hR : R ⊆ A.prod B) :
                                                      (R[∅]) hR = ∅
                                                      theorem ZFSet.Image_of_singleton_pair_mem_iff {A B f : ZFSet.{u_1}} (hf : A.IsFunc B f) {a b : ZFSet.{u_1}} :
                                                      a.pair b ∈ f ↔ (f[{a}]) ⋯ = {b}
                                                      theorem ZFSet.eq_singleton_of_bijective_inv_Image_of_singleton {A B f : ZFSet.{u_1}} {hf : A.IsFunc B f} (hbij : f.IsBijective hf) {b : ZFSet.{u_1}} (hb : b ∈ B) :
                                                      ∃ a ∈ A, ((f⁻¹ ⋯)[{b}]) ⋯ = {a}
                                                      theorem ZFSet.Image_singleton_eq_fapply {A B f : ZFSet.{u_1}} (hf : A.IsFunc B f) {a : ZFSet.{u_1}} (ha : a ∈ A) :
                                                      (f[{a}]) ⋯ = {↑(@ᶻf ⋯ ⟨a, ⋯⟩)}
                                                      theorem ZFSet.fapply_eq_Image_singleton {A B f : ZFSet.{u_1}} (hf : A.IsFunc B f) {a : ZFSet.{u_1}} (ha : a ∈ A) :
                                                      ↑(@ᶻf ⋯ ⟨a, ⋯⟩) = ((f[{a}]) ⋯).sInter
                                                      theorem ZFSet.fapply_composition {g f A B C : ZFSet.{u_1}} (hg : B.IsFunc C g) (hf : A.IsFunc B f) {x : ZFSet.{u_1}} (xA : x ∈ A) :
                                                      @ᶻ((g ∘ᶻ f) hg hf) ⋯ ⟨x, ⋯⟩ = @ᶻg ⋯ ⟨↑(@ᶻf ⋯ ⟨x, ⋯⟩), ⋯⟩
                                                      @[simp]
                                                      theorem ZFSet.Image_of_composition_inv_self_of_bijective {f A B : ZFSet.{u_1}} {f_is_func : A.IsFunc B f} (hf : f.IsBijective f_is_func) {X : ZFSet.{u_1}} (hX : X ⊆ A) :
                                                      ((f⁻¹ ⋯)[(f[X]) ⋯]) ⋯ = X
                                                      @[simp]
                                                      theorem ZFSet.Image_of_composition_self_inv_of_bijective {f A B : ZFSet.{u_1}} {f_is_func : A.IsFunc B f} (hf : f.IsBijective f_is_func) {X : ZFSet.{u_1}} (hX : X ⊆ B) :
                                                      (f[((f⁻¹ ⋯)[X]) ⋯]) ⋯ = X
                                                      theorem ZFSet.fapply_inv_of_bijective {A B f : ZFSet.{u_1}} {hf : A.IsFunc B f} (f_bij : f.IsBijective hf) {x y : ZFSet.{u_1}} (hx : x ∈ A) (hy : y ∈ B) :
                                                      ↑(@ᶻf ⋯ ⟨x, ⋯⟩) = y → ↑(@ᶻ(f⁻¹ ⋯) ⋯ ⟨y, ⋯⟩) = x
                                                      theorem ZFSet.fapply_inv_of_bijective_iff {A B f : ZFSet.{u_1}} {hf : A.IsFunc B f} (f_bij : f.IsBijective hf) {x y : ZFSet.{u_1}} (hx : x ∈ A) (hy : y ∈ B) :
                                                      ↑(@ᶻf ⋯ ⟨x, ⋯⟩) = y ↔ ↑(@ᶻ(f⁻¹ ⋯) ⋯ ⟨y, ⋯⟩) = x

                                                      A set is finite if it is equinumerous to a (ZF) natural number, i.e. if there is a bijection between the set and a natural number.

                                                      Equations
                                                      Instances For
                                                        @[reducible, inline]
                                                        abbrev ZFSet.ZFFinSet :
                                                        Type (u_1 + 1)

                                                        Imported ZFLean declaration.

                                                        Equations
                                                        Instances For
                                                          noncomputable def ZFSet.Max (S : ZFSet.{u_1}) [linord : LinearOrder ↥S] :

                                                          A chosen maximum of a linearly ordered ZF set.

                                                          Equations
                                                          • One or more equations did not get rendered due to their size.
                                                          Instances For
                                                            noncomputable def ZFSet.Min (S : ZFSet.{u_1}) [linord : LinearOrder ↥S] :

                                                            A chosen minimum of a linearly ordered ZF set.

                                                            Equations
                                                            • One or more equations did not get rendered due to their size.
                                                            Instances For
                                                              @[reducible]
                                                              def ZFSet.LinearOrder.ofSubset {S T : ZFSet.{u_1}} (S_T : S ⊆ T) [linordT : LinearOrder ↥T] :

                                                              Pulls a linear order back along a subset inclusion.

                                                              Equations
                                                              Instances For
                                                                noncomputable def ZFSet.get (x : ZFSet.{u_1}) (n : ℕ) (i : Fin n) :

                                                                Projects the ith component from a nested ZF tuple encoding.

                                                                Equations
                                                                Instances For

                                                                  Predicate asserting that a ZF set has the nested tuple arity n.

                                                                  Equations
                                                                  Instances For
                                                                    theorem ZFSet.IsFunc.sep_on_eq {A B : ZFSet.{u_1}} {f : ZFSet.{u_1} → ZFSet.{u_1}} (hf : ∀ x ∈ A, f x ∈ B) :
                                                                    A.IsFunc B (ZFSet.sep (fun (z : ZFSet.{u_1}) => ∃ (x : ZFSet.{u_1}) (y : ZFSet.{u_1}), z = x.pair y ∧ y = f z.π₁) (A.prod B))
                                                                    theorem ZFSet.IsFunc.is_func_on_range {f A B : ZFSet.{u_1}} (hf : A.IsFunc B f) :
                                                                    A.IsFunc (f.Range ⋯) f
                                                                    theorem ZFSet.IsPFunc.empty_dom {f A B : ZFSet.{u_1}} (hf : f.IsPFunc A B) (dom_emp : f.Dom ⋯ = ∅) :
                                                                    f = ∅
                                                                    theorem ZFSet.IsPFunc.empty_range_of_empty_dom {f A B : ZFSet.{u_1}} (hf : f.IsPFunc A B) (dom_emp : f.Dom ⋯ = ∅) :
                                                                    f.Range ⋯ = ∅
                                                                    theorem ZFSet.IsPFunc.exists_dom_of_mem_range {f A B : ZFSet.{u_1}} (hf : f.IsPFunc A B) {y : ZFSet.{u_1}} (hy : y ∈ f.Range ⋯) :
                                                                    ∃ x ∈ A, x.pair y ∈ f
                                                                    theorem ZFSet.IsFunc.surj_on_range {f A B : ZFSet.{u_1}} (hf : A.IsFunc B f) :
                                                                    theorem ZFSet.bijective_of_injective {f A B : ZFSet.{u_1}} (hf : A.IsFunc B f) (inj : f.IsInjective hf) :
                                                                    theorem ZFSet.IsFunc.range_eq_of_surjective {f A B : ZFSet.{u_1}} (hf : A.IsFunc B f) (surj : f.IsSurjective hf) :
                                                                    f.Range ⋯ = B
                                                                    @[reducible]

                                                                    The inherited preorder on the elements of a finite von Neumann ordinal.

                                                                    Equations
                                                                    • One or more equations did not get rendered due to their size.
                                                                    Instances For
                                                                      theorem ZFSet.IsFinite.subset {A B : ZFSet.{u_1}} (finB : B.IsFinite) (subAB : A ⊆ B) :
                                                                      theorem ZFSet.IsFinite.disjoint_union {A B : ZFSet.{u_1}} (finA : A.IsFinite) (finB : B.IsFinite) (disjoint : A ∩ B = ∅) :
                                                                      theorem ZFSet.IsFinite.union {A B : ZFSet.{u_1}} (finA : A.IsFinite) (finB : B.IsFinite) :
                                                                      theorem ZFSet.IsFinite.diff {A B : ZFSet.{u_1}} (finA : A.IsFinite) :
                                                                      (A \ B).IsFinite
                                                                      theorem ZFSet.ZFFinSet.inductionOn {P : ZFFinSet → Prop} (empty : P ⟨∅, IsFinite.empty⟩) (insert : ∀ (S : ZFFinSet) (x : ZFSet.{u_1}), P S → x ∉ ↑S → P ⟨insert x ↑S, ⋯⟩) (S : ZFFinSet) :
                                                                      P S
                                                                      theorem ZFSet.IsFinite.prod {A B : ZFSet.{u_1}} (finA : A.IsFinite) (finB : B.IsFinite) :
                                                                      theorem ZFSet.IsFinite.exists_bij {A : ZFSet.{u_1}} (finA : A.IsFinite) :
                                                                      ∃ (n : ZFSet.{u_1}) (f : ZFSet.{u_1}) (_ : n ∈ Nat) (hf : f ∈ A.funs n), f.IsBijective ⋯
                                                                      noncomputable def ZFSet.Card :

                                                                      Imported ZFLean declaration.

                                                                      Equations
                                                                      Instances For
                                                                        @[simp]
                                                                        theorem ZFSet.image_of_lambda_subset_range {A B φ : ZFSet.{u_1}} {hφ : A.IsFunc B φ} {S : ZFSet.{u_1}} :
                                                                        (φ[S]) ⋯ ⊆ B
                                                                        noncomputable def ZFSet.fprod {A B A' B' : ZFSet.{u_1}} (f g : ZFSet.{u_1}) (hf : A.IsFunc A' f := by zfun) (hg : B.IsFunc B' g := by zfun) :

                                                                        Imported ZFLean declaration.

                                                                        Equations
                                                                        • One or more equations did not get rendered due to their size.
                                                                        Instances For
                                                                          theorem ZFSet.fprod_is_func {A B A' B' φ ψ : ZFSet.{u_1}} (hφ : A.IsFunc A' φ) (hψ : B.IsFunc B' ψ) :
                                                                          (A.prod B).IsFunc (A'.prod B') (fprod φ ψ hφ hψ)
                                                                          theorem ZFSet.mem_fprod {A B C D f g x : ZFSet.{u_1}} {hf : A.IsFunc C f} {hg : B.IsFunc D g} :
                                                                          x ∈ fprod f g hf hg ↔ ∃ (a : ZFSet.{u_1}) (b : ZFSet.{u_1}) (ha : a ∈ A) (hb : b ∈ B), have fa := ↑(@ᶻf ⋯ ⟨a, ⋯⟩); have gb := ↑(@ᶻg ⋯ ⟨b, ⋯⟩); x = (a.pair b).pair (fa.pair gb)
                                                                          theorem ZFSet.pair_mem_fprod {A B C D f g x y : ZFSet.{u_1}} {hf : A.IsFunc C f} {hg : B.IsFunc D g} :
                                                                          x.pair y ∈ fprod f g hf hg ↔ ∃ (a : ZFSet.{u_1}) (b : ZFSet.{u_1}) (ha : a ∈ A) (hb : b ∈ B), have fa := ↑(@ᶻf ⋯ ⟨a, ⋯⟩); have gb := ↑(@ᶻg ⋯ ⟨b, ⋯⟩); x = a.pair b ∧ y = fa.pair gb
                                                                          theorem ZFSet.fprod_injective_of_injective {A B A' B' φ ψ : ZFSet.{u_1}} {hφ : A.IsFunc A' φ} {hψ : B.IsFunc B' ψ} (φ_inj : φ.IsInjective hφ) (ψ_inj : ψ.IsInjective hψ) :
                                                                          (fprod φ ψ hφ hψ).IsInjective ⋯
                                                                          theorem ZFSet.fprod_bijective_of_bijective {A B A' B' φ ψ : ZFSet.{u_1}} {hφ : A.IsFunc A' φ} {hψ : B.IsFunc B' ψ} (φ_bij : φ.IsBijective hφ) (ψ_bij : ψ.IsBijective hψ) :
                                                                          (fprod φ ψ hφ hψ).IsBijective ⋯
                                                                          @[simp]
                                                                          theorem ZFSet.fapply_fprod {A B C D f g a b : ZFSet.{u_1}} (hf : A.IsFunc C f) (hg : B.IsFunc D g) (ha : a ∈ A) (hb : b ∈ B) :
                                                                          ↑(@ᶻ(fprod f g hf hg) ⋯ ⟨a.pair b, ⋯⟩) = have fa := ↑(@ᶻf ⋯ ⟨a, ⋯⟩); have gb := ↑(@ᶻg ⋯ ⟨b, ⋯⟩); fa.pair gb
                                                                          theorem ZFSet.composition_fprod_Image_bijective {A B A' B' φ ψ : ZFSet.{u_1}} {hφ : A.IsFunc A' φ} {hψ : B.IsFunc B' ψ} (φ_bij : φ.IsBijective hφ) (ψ_bij : ψ.IsBijective hψ) :
                                                                          let φ_ψ := fprod φ ψ hφ hψ; have φ_ψ_bij := ⋯; have Φ := (A.prod B).powerset.lambda (A'.prod B').powerset fun (S : ZFSet.{u_1}) => (φ_ψ[S]) ⋯; ∃ (hΦ : (A.prod B).powerset.IsFunc (A'.prod B').powerset Φ), Φ.IsBijective hΦ