reserve x,y,z for set;
reserve f,f1,f2,f3 for FinSequence,
  p,p1,p2,p3 for set,
  i,k for Nat;
reserve D for non empty set,
  p,p1,p2,p3 for Element of D,
  f,f1,f2 for FinSequence of D;
reserve D for non empty set;
reserve p, q for FinSequence,
  X, Y, x, y for set,
  D for non empty set,
  i, j, k, l, m, n, r for Nat;
reserve a, a1, a2 for TwoValued Alternating FinSequence;
reserve fs, fs1, fs2 for FinSequence of X,
  fss, fss2 for Subset of fs;
reserve F, F1 for FinSequence of INT,
  k, m, n, ma for Nat;
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;

theorem Th17:
  p in rng f & len(f:-p) <= i & i <= len f implies
    (Rotate(f,p))/.i = f/.(i + p..f -' len f)
proof
  assume that
A1: p in rng f and
A2: len(f:-p) <= i and
A3: i <= len f;
A4: p..f <= len f by A1,FINSEQ_4:21; then
A5: len f - p..f = len f -' p..f by XREAL_1:233;
  per cases by A2,XXREAL_0:1;
  suppose
A6: i = len(f:-p); then
A7: i = len f - p..f + 1 by A1,FINSEQ_5:50;
    then i >= 1 by A5,NAT_1:11;
    hence (Rotate(f,p))/.i = f/.(i -' 1 + p..f) by A1,A6,Th9
      .= f/.(len f -' p..f + p..f) by A5,A7,NAT_D:34
      .= f/.len f by A4,XREAL_1:235
      .= f/.1 by Def1A
      .= f/.(len f + 1 -' len f) by NAT_D:34
      .= f/.(i + p..f -' len f) by A7;
  end;
  suppose
    i > len(f:-p);
    hence thesis by A1,A3,Th12;
  end;
end;
