const In : set set prop term iIn = In infix iIn 2000 2000 term Subq = \x:set.\y:set.!z:set.z iIn x -> z iIn y const binunion : set set set const Repl : set (set set) set const Sing : set set term SetAdjoin = \x:set.\y:set.binunion x (Sing y) const Empty : set const ordsucc : set set term eps_ = \x:set.binunion (Sing Empty) (Repl x \y:set.SetAdjoin (ordsucc y) (Sing (ordsucc Empty))) term SNoElts_ = \x:set.binunion x (Repl x \y:set.SetAdjoin y (Sing (ordsucc Empty))) term nIn = \x:set.\y:set.~ x iIn y term SNo_ = \x:set.\y:set.Subq y (SNoElts_ x) & !z:set.z iIn x -> ~(SetAdjoin z (Sing (ordsucc Empty)) iIn y <-> z iIn y) term SNoElts_ = \x:set.binunion x (Repl x \y:set.SetAdjoin y (Sing (ordsucc Empty))) term SNo_ = \x:set.\y:set.Subq y (SNoElts_ x) & !z:set.z iIn x -> ~(SetAdjoin z (Sing (ordsucc Empty)) iIn y <-> z iIn y) axiom ReplI: !x:set.!f:set set.!y:set.y iIn x -> f y iIn Repl x f axiom binunionI2: !x:set.!y:set.!z:set.z iIn y -> z iIn binunion x y const nat_p : set prop axiom nat_0_in_ordsucc: !x:set.nat_p x -> Empty iIn ordsucc x axiom SingE: !x:set.!y:set.y iIn Sing x -> y = x axiom EmptyE: !x:set.nIn x Empty const ordinal : set prop axiom nat_p_ordinal: !x:set.nat_p x -> ordinal x axiom tagged_not_ordinal: !x:set.~ ordinal (SetAdjoin x (Sing (ordsucc Empty))) axiom ReplE_impred: !x:set.!f:set set.!y:set.y iIn Repl x f -> !P:prop.(!z:set.z iIn x -> y = f z -> P) -> P axiom binunionE: !x:set.!y:set.!z:set.z iIn binunion x y -> z iIn x | z iIn y axiom exactly1of2_I1: !P:prop.!Q:prop.P -> ~ Q -> ~(P <-> Q) var x:set var y:set var z:set hyp nat_p x hyp nat_p z hyp y = ordsucc z hyp nat_p y hyp ordsucc z iIn ordsucc x claim z iIn x -> ~(SetAdjoin y (Sing (ordsucc Empty)) iIn eps_ x <-> y iIn eps_ x)