| Step | Hyp | Ref | Expression | 
        
          | 1 | 
           | 
          finss | 
          X\ x e. A, B C_ Xp A (sUnion ((\ a2, lower (S[a2 / x] B)) '' A)) -> finite (Xp A (sUnion ((\ a2, lower (S[a2 / x] B)) '' A))) -> finite (X\ x e. A, B)  | 
        
        
          | 2 | 
           | 
          cbvxabs | 
          X\ x e. A, B == X\ a1 e. A, (S[a1 / x] B)  | 
        
        
          | 3 | 
           | 
          eqlower | 
          finite (S[a1 / x] B) <-> S[a1 / x] B == lower (S[a1 / x] B)  | 
        
        
          | 4 | 
           | 
          nfv | 
          F/ x G /\ a1 e. A  | 
        
        
          | 5 | 
           | 
          nfsbs1 | 
          FS/ x S[a1 / x] B  | 
        
        
          | 6 | 
          5 | 
          nffin | 
          F/ x finite (S[a1 / x] B)  | 
        
        
          | 7 | 
          4, 6 | 
          nfim | 
          F/ x G /\ a1 e. A -> finite (S[a1 / x] B)  | 
        
        
          | 8 | 
           | 
          hyp h2 | 
          G /\ x e. A -> finite B  | 
        
        
          | 9 | 
           | 
          eleq1 | 
          x = a1 -> (x e. A <-> a1 e. A)  | 
        
        
          | 10 | 
          9 | 
          aneq2d | 
          x = a1 -> (G /\ x e. A <-> G /\ a1 e. A)  | 
        
        
          | 11 | 
           | 
          sbsq | 
          x = a1 -> B == S[a1 / x] B  | 
        
        
          | 12 | 
          11 | 
          fineqd | 
          x = a1 -> (finite B <-> finite (S[a1 / x] B))  | 
        
        
          | 13 | 
          10, 12 | 
          imeqd | 
          x = a1 -> (G /\ x e. A -> finite B <-> G /\ a1 e. A -> finite (S[a1 / x] B))  | 
        
        
          | 14 | 
          7, 8, 13 | 
          sbethh | 
          G /\ a1 e. A -> finite (S[a1 / x] B)  | 
        
        
          | 15 | 
          3, 14 | 
          sylib | 
          G /\ a1 e. A -> S[a1 / x] B == lower (S[a1 / x] B)  | 
        
        
          | 16 | 
          15 | 
          xabeq2da | 
          G -> X\ a1 e. A, (S[a1 / x] B) == X\ a1 e. A, lower (S[a1 / x] B)  | 
        
        
          | 17 | 
          2, 16 | 
          syl5eqs | 
          G -> X\ x e. A, B == X\ a1 e. A, lower (S[a1 / x] B)  | 
        
        
          | 18 | 
           | 
          eqscom | 
          X\ a1 e. A, sUnion ((\ a2, lower (S[a2 / x] B)) '' A) == Xp A (sUnion ((\ a2, lower (S[a2 / x] B)) '' A)) ->
  Xp A (sUnion ((\ a2, lower (S[a2 / x] B)) '' A)) == X\ a1 e. A, sUnion ((\ a2, lower (S[a2 / x] B)) '' A)  | 
        
        
          | 19 | 
           | 
          xabconst | 
          X\ a1 e. A, sUnion ((\ a2, lower (S[a2 / x] B)) '' A) == Xp A (sUnion ((\ a2, lower (S[a2 / x] B)) '' A))  | 
        
        
          | 20 | 
          18, 19 | 
          ax_mp | 
          Xp A (sUnion ((\ a2, lower (S[a2 / x] B)) '' A)) == X\ a1 e. A, sUnion ((\ a2, lower (S[a2 / x] B)) '' A)  | 
        
        
          | 21 | 
          20 | 
          a1i | 
          G -> Xp A (sUnion ((\ a2, lower (S[a2 / x] B)) '' A)) == X\ a1 e. A, sUnion ((\ a2, lower (S[a2 / x] B)) '' A)  | 
        
        
          | 22 | 
          17, 21 | 
          sseqd | 
          G ->
  (X\ x e. A, B C_ Xp A (sUnion ((\ a2, lower (S[a2 / x] B)) '' A)) <-> X\ a1 e. A, lower (S[a1 / x] B) C_ X\ a1 e. A, sUnion ((\ a2, lower (S[a2 / x] B)) '' A)
  )  | 
        
        
          | 23 | 
           | 
          elssuni | 
          lower (S[a1 / x] B) e. (\ a2, lower (S[a2 / x] B)) '' A -> lower (S[a1 / x] B) C_ sUnion ((\ a2, lower (S[a2 / x] B)) '' A)  | 
        
        
          | 24 | 
           | 
          elimai | 
          a1, lower (S[a1 / x] B) e. \ a2, lower (S[a2 / x] B) -> a1 e. A -> lower (S[a1 / x] B) e. (\ a2, lower (S[a2 / x] B)) '' A  | 
        
        
          | 25 | 
           | 
          ellam | 
          a1, lower (S[a1 / x] B) e. \ a2, lower (S[a2 / x] B) <-> E. a2 a1, lower (S[a1 / x] B) = a2, lower (S[a2 / x] B)  | 
        
        
          | 26 | 
           | 
          id | 
          a2 = a1 -> a2 = a1  | 
        
        
          | 27 | 
          26 | 
          sbseq1d | 
          a2 = a1 -> S[a2 / x] B == S[a1 / x] B  | 
        
        
          | 28 | 
          27 | 
          lowereqd | 
          a2 = a1 -> lower (S[a2 / x] B) = lower (S[a1 / x] B)  | 
        
        
          | 29 | 
          26, 28 | 
          preqd | 
          a2 = a1 -> a2, lower (S[a2 / x] B) = a1, lower (S[a1 / x] B)  | 
        
        
          | 30 | 
          29 | 
          eqeq2d | 
          a2 = a1 -> (a1, lower (S[a1 / x] B) = a2, lower (S[a2 / x] B) <-> a1, lower (S[a1 / x] B) = a1, lower (S[a1 / x] B))  | 
        
        
          | 31 | 
          30 | 
          iexe | 
          a1, lower (S[a1 / x] B) = a1, lower (S[a1 / x] B) -> E. a2 a1, lower (S[a1 / x] B) = a2, lower (S[a2 / x] B)  | 
        
        
          | 32 | 
           | 
          eqid | 
          a1, lower (S[a1 / x] B) = a1, lower (S[a1 / x] B)  | 
        
        
          | 33 | 
          31, 32 | 
          ax_mp | 
          E. a2 a1, lower (S[a1 / x] B) = a2, lower (S[a2 / x] B)  | 
        
        
          | 34 | 
          25, 33 | 
          mpbir | 
          a1, lower (S[a1 / x] B) e. \ a2, lower (S[a2 / x] B)  | 
        
        
          | 35 | 
          24, 34 | 
          ax_mp | 
          a1 e. A -> lower (S[a1 / x] B) e. (\ a2, lower (S[a2 / x] B)) '' A  | 
        
        
          | 36 | 
          35 | 
          anwr | 
          G /\ a1 e. A -> lower (S[a1 / x] B) e. (\ a2, lower (S[a2 / x] B)) '' A  | 
        
        
          | 37 | 
          23, 36 | 
          syl | 
          G /\ a1 e. A -> lower (S[a1 / x] B) C_ sUnion ((\ a2, lower (S[a2 / x] B)) '' A)  | 
        
        
          | 38 | 
          37 | 
          xabssd | 
          G -> X\ a1 e. A, lower (S[a1 / x] B) C_ X\ a1 e. A, sUnion ((\ a2, lower (S[a2 / x] B)) '' A)  | 
        
        
          | 39 | 
          22, 38 | 
          mpbird | 
          G -> X\ x e. A, B C_ Xp A (sUnion ((\ a2, lower (S[a2 / x] B)) '' A))  | 
        
        
          | 40 | 
           | 
          xpfin | 
          finite A -> finite (sUnion ((\ a2, lower (S[a2 / x] B)) '' A)) -> finite (Xp A (sUnion ((\ a2, lower (S[a2 / x] B)) '' A)))  | 
        
        
          | 41 | 
           | 
          hyp h | 
          G -> finite A  | 
        
        
          | 42 | 
           | 
          finuni | 
          finite ((\ a2, lower (S[a2 / x] B)) '' A) -> finite (sUnion ((\ a2, lower (S[a2 / x] B)) '' A))  | 
        
        
          | 43 | 
           | 
          finlamima | 
          finite A -> finite ((\ a2, lower (S[a2 / x] B)) '' A)  | 
        
        
          | 44 | 
          43, 41 | 
          syl | 
          G -> finite ((\ a2, lower (S[a2 / x] B)) '' A)  | 
        
        
          | 45 | 
          42, 44 | 
          syl | 
          G -> finite (sUnion ((\ a2, lower (S[a2 / x] B)) '' A))  | 
        
        
          | 46 | 
          40, 41, 45 | 
          sylc | 
          G -> finite (Xp A (sUnion ((\ a2, lower (S[a2 / x] B)) '' A)))  | 
        
        
          | 47 | 
          1, 39, 46 | 
          sylc | 
          G -> finite (X\ x e. A, B)  |