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;
reserve X1,X2,X3 for StackAlgebra;
reserve F,F1,F2,G,G1,G2 for Function;

theorem Th43:
  F,G form_isomorphism_between X1,X2 implies
  F",G" form_isomorphism_between X2,X1
  proof assume that
A1: dom F = the carrier of X1 & rng F = the carrier of X2 & F is one-to-one and
A2: dom G = the carrier' of X1 & rng G = the carrier' of X2 & G is one-to-one
    and
A3: for s1 being stack of X1, s2 being stack of X2 st s2 = G.s1
    holds (emp s1 iff emp s2) &
    (not emp s1 implies pop s2 = G.pop s1 & top s2 = F.top s1) &
    for e1 being Element of X1, e2 being Element of X2 st e2 = F.e1
    holds push(e2,s2) = G.push(e1,s1);
    thus dom(F") = the carrier of X2 & rng(F") = the carrier of X1 &
    F" is one-to-one by A1,FUNCT_1:33;
    thus dom(G") = the carrier' of X2 & rng(G") = the carrier' of X1 &
    G" is one-to-one by A2,FUNCT_1:33;
    let s1 be stack of X2, s2 be stack of X1; assume
    s2 = G".s1; then
A4: G.s2 = s1 by A2,FUNCT_1:35;
    hence
A5: emp s1 iff emp s2 by A3;
    hereby assume not emp s1; then
      pop s1 = G.pop s2 & top s1 = F.top s2 by A3,A5,A4;
      hence pop s2 = G".pop s1 & top s2 = F".top s1 by A1,A2,FUNCT_1:34;
    end;
    let e1 be Element of X2, e2 be Element of X1; assume e2 = F".e1; then
    F.e2 = e1 by A1,FUNCT_1:35; then
    G.push(e2,s2) = push(e1,s1) by A3,A4;
    hence thesis by A2,FUNCT_1:34;
  end;
