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 finite : set prop const Empty : set axiom finite_Empty: finite Empty const famunion : set (set set) set axiom famunion_Empty: !f:set set.famunion Empty f = Empty axiom famunionI: !x:set.!f:set set.!y:set.!z:set.y iIn x -> z iIn f y -> z iIn famunion x f const binunion : set set set axiom binunionI1: !x:set.!y:set.!z:set.z iIn x -> z iIn binunion x y axiom binunionI2: !x:set.!y:set.!z:set.z iIn y -> z iIn binunion x y const ordsucc : set set axiom ordsuccE: !x:set.!y:set.y iIn ordsucc x -> y iIn x | y = x axiom famunionE_impred: !x:set.!f:set set.!y:set.y iIn famunion x f -> !P:prop.(!z:set.z iIn x -> y iIn f z -> P) -> P axiom ordsuccI1: !x:set.Subq x (ordsucc x) axiom ordsuccI2: !x:set.x iIn ordsucc x axiom binunionE': !x:set.!y:set.!z:set.!P:prop.(z iIn x -> P) -> (z iIn y -> P) -> z iIn binunion x y -> P axiom set_ext: !x:set.!y:set.Subq x y -> Subq y x -> x = y const nat_p : set prop axiom nat_ind: !p:set prop.p Empty -> (!x:set.nat_p x -> p x -> p (ordsucc x)) -> !x:set.nat_p x -> p x lemma !f:set set.!x:set.((!y:set.y iIn x -> finite (f y)) -> finite (famunion x f)) -> (!y:set.y iIn ordsucc x -> finite (f y)) -> famunion (ordsucc x) f = binunion (famunion x f) (f x) -> finite (famunion (ordsucc x) f) claim !f:set set.!x:set.nat_p x -> (!y:set.y iIn x -> finite (f y)) -> finite (famunion x f)