reserve i,j for Nat;
reserve x,y for set;
reserve A for non empty set;
reserve c for Element of StandardStackSystem A;
reserve m for stack of StandardStackSystem A;
reserve X for non empty non void StackSystem;
reserve s,s1,s2 for stack of X;
reserve e,e1,e2 for Element of X;
reserve X for StackAlgebra;
reserve s,s1,s2,s3 for stack of X;
reserve e,e1,e2,e3 for Element of X;

theorem Th38:
  for S being stack of X/==, E being Element of X/==
  st S = Class(==_X, s) & E = e holds
  push(e, s) in push(E, S) & Class(==_X, push(e, s)) = push(E, S)
  proof
    let S be stack of X/==;
    let E be Element of X/==;
    assume A1: S = Class(==_X, s);
    assume A2: E = e;
A3: s in S by A1,EQREL_1:20;
A4: S in Class(==_X) by A1,EQREL_1:def 3;
A5: the s_push of X is BinOp of the carrier of X,the carrier' of X, ==_X
    proof
      let x be Element of X,y1,y2 be stack of X;
      assume [y1,y2] in ==_X; then
      y1 == y2 by Def16; then
      push(x,y1) == push(x,y2) by Th16;
      hence [(the s_push of X).(x,y1),(the s_push of X).(x,y2)] in ==_X
      by Def16;
    end;
    push(E,S) = ((the s_push of X)/\/==_X).(E,S) by Def20
    .= Class(==_X, push(e, s)) by A2,A3,A4,A5,Def2;
    hence thesis by EQREL_1:20;
  end;
