Russell's paradox

Analysis I, Section 3.2: Russell's paradox

I have attempted to make the translation as faithful a paraphrasing as possible of the original text. When there is a choice between a more idiomatic Lean solution and a more faithful translation, I have generally chosen the latter. In particular, there will be places where the Lean code could be "golfed" to be more elegant and idiomatic, but I have consciously avoided doing so.

This section is mostly optional, though it does make explicit the axiom of foundation which is used in a minor role in an exercise in Section 3.5.

Main constructions and results of this section:

  • Russell's paradox (ruling out the axiom of universal specification).

  • The axiom of regularity (foundation) - an axiom designed to avoid Russell's paradox.

Tips from past users

Users of the companion who have completed the exercises in this section are welcome to send their tips for future users in this section as PRs.

  • (Add tip here)

namespace Chapter3export SetTheory (Set Object)variable [SetTheory]

Axiom 3.8 (Universal specification)

abbrev axiom_of_universal_specification : Prop := P : Object Prop, A : Set, x : Object, x A P x
theorem Russells_paradox : ¬ axiom_of_universal_specification := inst✝:SetTheory¬axiom_of_universal_specification -- This proof is written to follow the structure of the original text. inst✝:SetTheoryh:axiom_of_universal_specificationFalse inst✝:SetTheoryh:axiom_of_universal_specificationP:Chapter3.Object Prop := fun x => X, x = @DFunLike.coe (Chapter3.Set Chapter3.Object) Chapter3.Set (fun x => Chapter3.Object) Function.instFunLikeEmbedding Chapter3.SetTheory.set_to_object X x XFalse inst✝:SetTheoryh:axiom_of_universal_specificationP:Chapter3.Object Prop := fun x => X, x = @DFunLike.coe (Chapter3.Set Chapter3.Object) Chapter3.Set (fun x => Chapter3.Object) Function.instFunLikeEmbedding Chapter3.SetTheory.set_to_object X x XΩ:Set: (x : Object), x Ω P xFalse inst✝:SetTheoryh✝:axiom_of_universal_specificationP:Chapter3.Object Prop := fun x => X, x = @DFunLike.coe (Chapter3.Set Chapter3.Object) Chapter3.Set (fun x => Chapter3.Object) Function.instFunLikeEmbedding Chapter3.SetTheory.set_to_object X x XΩ:Set: (x : Object), x Ω P xh:SetTheory.set_to_object Ω ΩFalseinst✝:SetTheoryh✝:axiom_of_universal_specificationP:Chapter3.Object Prop := fun x => X, x = @DFunLike.coe (Chapter3.Set Chapter3.Object) Chapter3.Set (fun x => Chapter3.Object) Function.instFunLikeEmbedding Chapter3.SetTheory.set_to_object X x XΩ:Set: (x : Object), x Ω P xh:SetTheory.set_to_object Ω ΩFalse inst✝:SetTheoryh✝:axiom_of_universal_specificationP:Chapter3.Object Prop := fun x => X, x = @DFunLike.coe (Chapter3.Set Chapter3.Object) Chapter3.Set (fun x => Chapter3.Object) Function.instFunLikeEmbedding Chapter3.SetTheory.set_to_object X x XΩ:Set: (x : Object), x Ω P xh:SetTheory.set_to_object Ω ΩFalse inst✝:SetTheoryh✝:axiom_of_universal_specificationP:Chapter3.Object Prop := fun x => X, x = @DFunLike.coe (Chapter3.Set Chapter3.Object) Chapter3.Set (fun x => Chapter3.Object) Function.instFunLikeEmbedding Chapter3.SetTheory.set_to_object X x XΩ:Set: (x : Object), x Ω P xh:SetTheory.set_to_object Ω Ωthis:@_fvar.270 (@DFunLike.coe (Chapter3.Set Chapter3.Object) Chapter3.Set (fun x => Chapter3.Object) Function.instFunLikeEmbedding Chapter3.SetTheory.set_to_object _fvar.327) := failed to pretty print expression (use 'set_option pp.rawOnError true' for raw representation)False inst✝:SetTheoryh✝:axiom_of_universal_specificationP:Chapter3.Object Prop := fun x => X, x = @DFunLike.coe (Chapter3.Set Chapter3.Object) Chapter3.Set (fun x => Chapter3.Object) Function.instFunLikeEmbedding Chapter3.SetTheory.set_to_object X x XΩ:Set: (x : Object), x Ω P xh:SetTheory.set_to_object Ω ΩΩ':SethΩ1:SetTheory.set_to_object Ω = SetTheory.set_to_object Ω'hΩ2:SetTheory.set_to_object Ω Ω'False inst✝:SetTheoryh✝:axiom_of_universal_specificationP:Chapter3.Object Prop := fun x => X, x = @DFunLike.coe (Chapter3.Set Chapter3.Object) Chapter3.Set (fun x => Chapter3.Object) Function.instFunLikeEmbedding Chapter3.SetTheory.set_to_object X x XΩ:Set: (x : Object), x Ω P xh:SetTheory.set_to_object Ω ΩΩ':SethΩ2:SetTheory.set_to_object Ω Ω'hΩ1:Ω = Ω'False inst✝:SetTheoryh✝:axiom_of_universal_specificationP:Chapter3.Object Prop := fun x => X, x = @DFunLike.coe (Chapter3.Set Chapter3.Object) Chapter3.Set (fun x => Chapter3.Object) Function.instFunLikeEmbedding Chapter3.SetTheory.set_to_object X x XΩ:Set: (x : Object), x Ω P xh:SetTheory.set_to_object Ω ΩΩ':SethΩ2:SetTheory.set_to_object Ω ΩhΩ1:Ω = Ω'False All goals completed! 🐙 have : P (Ω:Object) := inst✝:SetTheory¬axiom_of_universal_specification All goals completed! 🐙 inst✝:SetTheoryh✝:axiom_of_universal_specificationP:Chapter3.Object Prop := fun x => X, x = @DFunLike.coe (Chapter3.Set Chapter3.Object) Chapter3.Set (fun x => Chapter3.Object) Function.instFunLikeEmbedding Chapter3.SetTheory.set_to_object X x XΩ:Set: (x : Object), x Ω P xh:SetTheory.set_to_object Ω Ωthis:SetTheory.set_to_object Ω ΩFalse All goals completed! 🐙

Axiom 3.9 (Regularity)

theorem SetTheory.Set.axiom_of_regularity {A:Set} (h: A ) : x:A, S:Set, x.val = S Disjoint S A := inst✝:SetTheoryA:Seth:A x, (S : Set), x = set_to_object S Disjoint S A inst✝:SetTheoryA:Seth✝:A x:Objecth:mem x Ah': (S : Set), x = set_to_object S ¬ y, mem y A mem y S x, (S : Set), x = set_to_object S Disjoint S A inst✝:SetTheoryA:Seth✝:A x:Objecth:mem x Ah': (S : Set), x = set_to_object S ¬ y, mem y A mem y S (S : Set), x, h = set_to_object S Disjoint S A inst✝:SetTheoryA:Seth✝:A x:Objecth:mem x Ah': (S : Set), x = set_to_object S ¬ y, mem y A mem y SS:SethS:x, h = set_to_object SDisjoint S A; inst✝:SetTheoryA:Seth✝:A x:Objecth:mem x AS:SethS:x, h = set_to_object Sh':¬ y, mem y A mem y SDisjoint S A inst✝:SetTheoryA:Seth✝:A x:Objecth:mem x AS:SethS:x, h = set_to_object Sh':¬ y, mem y A mem y S (x : Object), x S A inst✝:SetTheoryA:Seth✝:A x:Objecth:mem x AS:SethS:x, h = set_to_object Sh': x, x S A y, mem y A mem y S; inst✝:SetTheoryA:Seth✝:A x:Objecth:mem x AS:SethS:x, h = set_to_object Sh': x S, x A y, mem y A mem y S All goals completed! 🐙

Exercise 3.2.1. The spirit of the exercise is to establish these results without using either Russell's paradox, or the empty set.

theorem declaration uses 'sorry'SetTheory.Set.emptyset_exists (h: axiom_of_universal_specification): (X:Set), x, x X := inst✝:SetTheoryh:axiom_of_universal_specification X, (x : Object), x X All goals completed! 🐙

Exercise 3.2.1. The spirit of the exercise is to establish these results without using either Russell's paradox, or the singleton set.

theorem declaration uses 'sorry'SetTheory.Set.singleton_exists (h: axiom_of_universal_specification) (x:Object): (X:Set), y, y X y = x := inst✝:SetTheoryh:axiom_of_universal_specificationx:Object X, (y : Object), y X y = x All goals completed! 🐙

Exercise 3.2.1. The spirit of the exercise is to establish these results without using either Russell's paradox, or the pair set.

theorem declaration uses 'sorry'SetTheory.Set.pair_exists (h: axiom_of_universal_specification) (x₁ x₂:Object): (X:Set), y, y X y = x₁ y = x₂ := inst✝:SetTheoryh:axiom_of_universal_specificationx₁:Objectx₂:Object X, (y : Object), y X y = x₁ y = x₂ All goals completed! 🐙

Exercise 3.2.1. The spirit of the exercise is to establish these results without using either Russell's paradox, or the union operation.

theorem declaration uses 'sorry'SetTheory.Set.union_exists (h: axiom_of_universal_specification) (A B:Set): (Z:Set), z, z Z z A z B := inst✝:SetTheoryh:axiom_of_universal_specificationA:SetB:Set Z, (z : Object), z Z z A z B All goals completed! 🐙

Exercise 3.2.1. The spirit of the exercise is to establish these results without using either Russell's paradox, or the specify operation.

theorem declaration uses 'sorry'SetTheory.Set.specify_exists (h: axiom_of_universal_specification) (A:Set) (P: A Prop): (Z:Set), z, z Z h : z A, P z, h := inst✝:SetTheoryh:axiom_of_universal_specificationA:SetP:A.toSubtype Prop Z, (z : Object), z Z (h : z A), P z, h All goals completed! 🐙

Exercise 3.2.1. The spirit of the exercise is to establish these results without using either Russell's paradox, or the replace operation.

theorem declaration uses 'sorry'SetTheory.Set.replace_exists (h: axiom_of_universal_specification) (A:Set) (P: A Object Prop) (hP: x y y', P x y P x y' y = y') : (Z:Set), y, y Z a : A, P a y := inst✝:SetTheoryh:axiom_of_universal_specificationA:SetP:A.toSubtype Object ProphP: (x : A.toSubtype) (y y' : Object), P x y P x y' y = y' Z, (y : Object), y Z a, P a y All goals completed! 🐙

Exercise 3.2.2

theorem declaration uses 'sorry'SetTheory.Set.not_mem_self (A:Set) : (A:Object) A := inst✝:SetTheoryA:Setset_to_object A A All goals completed! 🐙

Exercise 3.2.2

theorem declaration uses 'sorry'SetTheory.Set.not_mem_mem (A B:Set) : (A:Object) B (B:Object) A := inst✝:SetTheoryA:SetB:Setset_to_object A B set_to_object B A All goals completed! 🐙

Exercise 3.2.3

theorem declaration uses 'sorry'SetTheory.Set.univ_iff : axiom_of_universal_specification (U:Set), x, x U := inst✝:SetTheoryaxiom_of_universal_specification U, (x : Object), x U All goals completed! 🐙

Exercise 3.2.3

theorem declaration uses 'sorry'SetTheory.Set.no_univ : ¬ (U:Set), (x:Object), x U := inst✝:SetTheory¬ U, (x : Object), x U All goals completed! 🐙
end Chapter3