reserve a,a1,a2,b,c,d for Ordinal,
  n,m,k for Nat,
  x,y,z,t,X,Y,Z for set;
reserve f,g for Function;
reserve A,B,C for array;
reserve O for connected non empty Poset;
reserve R,Q for array of O;
reserve T for non empty array of O;
reserve p,q,r,s for Element of dom T;
reserve A for array, B for permutation of A;

theorem Th85:
  for A being 0-based finite non empty array of O
  ex C being 0-based arr_computation of A st C is complete
  proof
    let A be 0-based finite non empty array of O;
    reconsider rA = rng A as non empty Subset of O by RELAT_1:def 19;
    reconsider a = dom A as Ordinal;
    set X = Funcs(a, rA);
    deffunc F(array of O) = card inversions $1;
    defpred P[Element of X, Element of X] means
    ex p,q being Element of dom A
    st [p,q] in inversions
    (($1 qua Element of Funcs(a, rA qua Subset of O)) qua array of O) &
    $2 = Swap($1,p,q);
    A is permutation of A by Th38; then
A1: A in X by Th82;
A2: F(A) is finite;
A3: for x being Element of X st
    F((x qua Element of Funcs(a, rA qua Subset of O)) qua array of O) <> {}
    ex y being Element of X st P[x,y] &
    F((y qua Element of Funcs(a, rA qua Subset of O)) qua array of O) c<
    F((x qua Element of Funcs(a, rA qua Subset of O)) qua array of O)
    proof
      let x be Element of X;
      reconsider c = x as array of O;
      set z = the Element of inversions c;
      set Fx = F((x qua Element of Funcs(a, rA qua Subset of O))
      qua array of O);
      assume Fx <> {}; then
A4:   inversions c <> {}; then
      z in inversions c &
      inversions c is Relation of dom x,dom x by Th47; then
      consider p,q being object such that
A5:   z = [p,q] & p in dom x & q in dom x by RELSET_1:2;
      set y = Swap(x,p,q);
A6:   dom y = dom x & rng y = rng x by FUNCT_7:99,103;
      dom x = dom A & rng x c= rng A by FUNCT_2:92; then
      reconsider y as Element of X by A6,FUNCT_2:def 2;
      reconsider b = y as array of O;
      set Fy = F((y qua Element of Funcs(a, rA qua Subset of O))
        qua array of O);
      take y;
      thus P[x,y] by A4,A5;
      F(b) in F(c) by A4,A5,Th73;
      hence Fy c= Fx & Fy <> Fx by ORDINAL1:def 2;
    end;
    consider f being finite 0-based non empty array, k being Element of X
    such that
A7: k = last f &
    F((k qua Element of Funcs(a, rA qua Subset of O)) qua array of O) = {} &
    f.0 = A and
A8: for a st succ a in dom f
    ex x,y being Element of X st x = f.a & y = f.succ a & P[x,y]
    from A(A1,A2,A3);
    f is arr_computation of A
    proof
      thus f.(base-f) = A by A7,Th24;
      thus for a st a in dom f holds f.a is array of O
      proof
        let a; assume
A9:     a in dom f;
        per cases by A9,Th84;
        suppose a = 0;
          hence f.a is array of O by A7;
        end;
        suppose ex b st a = succ b; then
          consider b such that
A10:       a = succ b;
          ex x,y being Element of X st x = f.b & y = f.a & P[x,y] by A8,A9,A10;
          hence f.a is array of O;
        end;
      end;
      let a; assume
      a in dom f & succ a in dom f; then
      ex x,y being Element of X st x = f.a & y = f.succ a & P[x,y] by A8;
      hence thesis;
    end; then
    reconsider f as 0-based arr_computation of A;
    take f;
    inversions last f = {} by A7;
    hence last f is ascending by Th48;
  end;
