reserve i,j,k,m,n for Nat,
  D for non empty set,
  p for Element of D,
  f for FinSequence of D;
reserve D for non empty set,
  p for Element of D,
  f for FinSequence of D;
reserve f for circular FinSequence of D;
reserve f,g for FinSequence of TOP-REAL 2;
reserve p for Point of TOP-REAL 2,
  f for FinSequence of TOP-REAL 2;

theorem Th29:
  for f being non constant standard special_circular_sequence
  holds Rev Rotate(f,p) = Rotate(Rev f,p)
proof
  let f be non constant standard special_circular_sequence;
  per cases;
  suppose
    not p in rng f;
    then Rotate(f,p) = f & not p in rng Rev f by FINSEQ_5:57,FINSEQ_6:def 2;
    hence thesis by FINSEQ_6:def 2;
  end;
  suppose
A1: p = f/.1;
    then
A2: p = (Rev f)/.len f by FINSEQ_5:65
      .= (Rev f)/.len Rev f by FINSEQ_5:def 3
      .= (Rev f)/.1 by FINSEQ_6:def 1;
    Rotate(f,p) = f by A1,FINSEQ_6:89;
    hence thesis by A2,FINSEQ_6:89;
  end;
  suppose that
A3: p in rng f and
A4: p <> f/.1;
    f just_once_values p
    proof
      take p..f;
      thus
A5:   p..f in dom f by A3,FINSEQ_4:20;
      thus
A6:   p = f.(p..f) by A3,FINSEQ_4:19
        .= f/.(p..f) by A5,PARTFUN1:def 6;
      let z be set such that
A7:   z in dom f and
A8:   z <> p..f;
      reconsider k = z as Element of NAT by A7;
      per cases by A8,XXREAL_0:1;
      suppose
A9:     k < p..f;
        p..f <= len f & p..f <> len f by A3,A4,A6,FINSEQ_4:21,FINSEQ_6:def 1;
        then
A10:    p..f < len f by XXREAL_0:1;
        1 <= k by A7,FINSEQ_3:25;
        hence thesis by A6,A9,A10,GOBOARD7:36;
      end;
      suppose
A11:    k > p..f;
        p..f >= 1 by A3,FINSEQ_4:21;
        then
A12:    p..f > 1 by A4,A6,XXREAL_0:1;
        k <= len f by A7,FINSEQ_3:25;
        hence thesis by A6,A11,A12,GOBOARD7:37;
      end;
    end;
    hence thesis by FINSEQ_6:106;
  end;
end;
