const binunion : set set set const Repl : set (set set) set const SetAdjoin : set set set const Sing : set set const ordsucc : set set const Empty : set term SNo_pair = \x:set.\y:set.binunion x (Repl y \z:set.SetAdjoin z (Sing (ordsucc (ordsucc Empty)))) 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 term nIn = \x:set.\y:set.~ x iIn y const SNo : set prop axiom ctagged_notin_SNo: !x:set.!y:set.SNo x -> nIn (SetAdjoin y (Sing (ordsucc (ordsucc Empty)))) x axiom FalseE: ~ False axiom ctagged_eqE_eq: !x:set.!y:set.SNo x -> SNo y -> !z:set.z iIn x -> !w:set.w iIn y -> SetAdjoin z (Sing (ordsucc (ordsucc Empty))) = SetAdjoin w (Sing (ordsucc (ordsucc Empty))) -> z = w 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 lemma !x:set.!y:set.!z:set.!w:set.SNo x -> SNo y -> z iIn x -> w iIn y -> SetAdjoin z (Sing (ordsucc (ordsucc Empty))) = SetAdjoin w (Sing (ordsucc (ordsucc Empty))) -> z = w -> z iIn y var x:set var y:set var z:set var w:set var u:set hyp SNo y hyp SNo z hyp SNo w hyp SNo_pair x y = SNo_pair z w hyp u iIn y claim SetAdjoin u (Sing (ordsucc (ordsucc Empty))) iIn SNo_pair z w -> u iIn w