reserve x,y,z for Variable,
  H for ZF-formula,
  E for non empty set,
  a,b,c,X,Y,Z for set,
  u,v,w for Element of E,
  f,g,h,i,j for Function of VAR,E;

theorem Th8:
  E is epsilon-transitive implies (E |= the_axiom_of_power_sets iff
  for u holds E /\ bool u in E)
proof
  assume
A1: X in E implies X c= E;
  thus E |= the_axiom_of_power_sets implies for u holds E /\ bool u in E
  proof
    set f0 = the Function of VAR,E;
    assume
A2: E |= the_axiom_of_power_sets;
    let u;
    set f = f0+*(x0,u);
    E |= Ex(x1,All(x2,x2 'in' x1 <=> All(x3,x3 'in' x2 => x3 'in' x0) ))
    by A2,ZF_MODEL:23;
    then
    E,f |= Ex(x1,All(x2,x2 'in' x1 <=> All(x3,x3 'in' x2 => x3 'in' x0 ) )
    );
    then consider g such that
A3: for x st g.x <> f.x holds x1 = x and
A4: E,g |= All(x2,x2 'in' x1 <=> All(x3,x3 'in' x2 => x3 'in' x0) ) by
ZF_MODEL:20;
A5: f.x0= u by FUNCT_7:128;
    g.x1 = E /\ bool u
    proof
      thus for a being object holds a in g.x1 implies a in E /\ bool u
      proof let a be object;
        assume
A6:     a in g.x1;
        g.x1 c= E by A1;
        then reconsider a9 = a as Element of E by A6;
        set h = g+*(x2,a9);
A7:     h.x2= a9 by FUNCT_7:128;
        for x st h.x <> g.x holds x2 = x by FUNCT_7:32;
        then
A8:     E,h |= x2 'in' x1 <=> All(x3,x3 'in' x2 => x3 'in' x0) by A4,
ZF_MODEL:16;
        h.x1 = g.x1 by FUNCT_7:32;
        then E,h |= x2 'in' x1 by A6,A7,ZF_MODEL:13;
        then
A9:     E,h |= All(x3,x3 'in' x2 => x3 'in' x0) by A8,ZF_MODEL:19;
        a9 c= u
        proof
          let b be object such that
A10:      b in a9;
          a9 c= E by A1;
          then reconsider b9 = b as Element of E by A10;
          set m = h+*(x3,b9);
A11:      m.x3= b9 by FUNCT_7:128;
          for x st m.x <> h.x holds x3 = x by FUNCT_7:32;
          then
A12:      E,m |= x3 'in' x2 => x3 'in' x0 by A9,ZF_MODEL:16;
          m.x2 = h.x2 by FUNCT_7:32;
          then E,m |= x3 'in' x2 by A7,A10,A11,ZF_MODEL:13;
          then
A13:      E,m |= x3 'in' x0 by A12,ZF_MODEL:18;
A14:      m.x0 = h.x0 & h.x0 = g.x0 by FUNCT_7:32;
          g.x0 = f.x0 by A3;
          hence thesis by A5,A11,A13,A14,ZF_MODEL:13;
        end;
        hence thesis by XBOOLE_0:def 4;
      end;
      let a be object;
      assume
A15:  a in E /\ bool u;
      then
A16:  a in bool u by XBOOLE_0:def 4;
      reconsider a as Element of E by A15,XBOOLE_0:def 4;
      set h = g+*(x2,a);
A17:  h.x2= a by FUNCT_7:128;
      now
        let m be Function of VAR,E such that
A18:    for x st m.x <> h.x holds x3 = x;
        now
          assume E,m |= x3 'in' x2;
          then
A19:      m.x3 in m.x2 by ZF_MODEL:13;
A20:      h.x0 = g.x0 & g.x0 = f.x0 by A3,FUNCT_7:32;
          m.x2 = h.x2 & m.x0 = h.x0 by A18;
          hence E,m |= x3 'in' x0 by A5,A16,A17,A19,A20,ZF_MODEL:13;
        end;
        hence E,m |= x3 'in' x2 => x3 'in' x0 by ZF_MODEL:18;
      end;
      then
A21:  E,h |= All(x3,x3 'in' x2 => x3 'in' x0) by ZF_MODEL:16;
A22:  h.x1 = g.x1 by FUNCT_7:32;
      for x st h.x <> g.x holds x2 = x by FUNCT_7:32;
      then E,h |= x2 'in' x1 <=> All(x3,x3 'in' x2 => x3 'in' x0) by A4,
ZF_MODEL:16;
      then E,h |= x2 'in' x1 by A21,ZF_MODEL:19;
      hence thesis by A17,A22,ZF_MODEL:13;
    end;
    hence thesis;
  end;
  assume
A23: for u holds E /\ bool u in E;
  E |= Ex(x1,All(x2,x2 'in' x1 <=> All(x3,x3 'in' x2 => x3 'in' x0) ))
  proof
    let f;
    reconsider v = E /\ bool(f.x0) as Element of E by A23;
    set g = f+*(x1,v);
A24: g.x1= v by FUNCT_7:128;
    now
      let h such that
A25:  for x st h.x <> g.x holds x2 = x;
      now
        thus E,h |= x2 'in' x1 implies E,h |= All(x3,x3 'in' x2 => x3 'in' x0)
        proof
          assume E,h |= x2 'in' x1;
          then
A26:      h.x2 in h.x1 by ZF_MODEL:13;
          h.x1 = v by A24,A25;
          then
A27:      h.x2 in bool(f.x0) by A26,XBOOLE_0:def 4;
          now
            let m be Function of VAR,E such that
A28:        for x st m.x <> h.x holds x3 = x;
            now
              assume E,m |= x3 'in' x2;
              then
A29:          m.x3 in m.x2 by ZF_MODEL:13;
A30:          m.x2 = h.x2 & f.x0 = g.x0 by A28,FUNCT_7:32;
              g.x0 = h.x0 & h.x0 = m.x0 by A25,A28;
              hence E,m |= x3 'in' x0 by A27,A29,A30,ZF_MODEL:13;
            end;
            hence E,m |= x3 'in' x2 => x3 'in' x0 by ZF_MODEL:18;
          end;
          hence thesis by ZF_MODEL:16;
        end;
        assume
A31:    E,h |= All(x3,x3 'in' x2 => x3 'in' x0);
A32:    h.x2 c= f.x0
        proof
          let a be object such that
A33:      a in h.x2;
          h.x2 c= E by A1;
          then reconsider a9 = a as Element of E by A33;
          set m = h+*(x3,a9);
A34:      m.x3= a9 by FUNCT_7:128;
          for x st m.x <> h.x holds x3 = x by FUNCT_7:32;
          then
A35:      E,m |= x3 'in' x2 => x3 'in' x0 by A31,ZF_MODEL:16;
          m.x2 = h.x2 by FUNCT_7:32;
          then E,m |= x3 'in' x2 by A33,A34,ZF_MODEL:13;
          then E,m |= x3 'in' x0 by A35,ZF_MODEL:18;
          then
A36:      m.x3 in m.x0 by ZF_MODEL:13;
          m.x0 = h.x0 & g.x0 = f.x0 by FUNCT_7:32;
          hence thesis by A25,A34,A36;
        end;
        h.x1 = g.x1 by A25;
        then h.x2 in h.x1 by A24,A32,XBOOLE_0:def 4;
        hence E,h |= x2 'in' x1 by ZF_MODEL:13;
      end;
      hence E,h |= x2 'in' x1 <=> All(x3,x3 'in' x2 => x3 'in' x0) by
ZF_MODEL:19;
    end;
    then
A37: E,g |= All(x2,x2 'in' x1 <=> All(x3,x3 'in' x2 => x3 'in' x0) ) by
ZF_MODEL:16;
    for x st g.x <> f.x holds x1 = x by FUNCT_7:32;
    hence thesis by A37,ZF_MODEL:20;
  end;
  hence thesis by ZF_MODEL:23;
end;
