reserve x for set;
reserve k, l for Nat;
reserve p, q for FinSequence;
reserve R for Relation;
reserve p, q for RedSequence of R;
reserve E for set;
reserve s, t for XFinSequence;
reserve p, q for XFinSequence-yielding FinSequence;

theorem
  s ^+ (p^q) = (s ^+ p)^(s ^+ q) & (p^q) +^ s = (p +^ s)^(q +^ s)
proof
A1: now
    let k be Nat;
    assume
A2: k in dom (s ^+ (p^q));
    then
A3: k in dom (p^q) by Def2;
    now
      per cases;
      suppose
A4:     k in dom p;
        then
A5:     k in dom (s ^+ p) by Def2;
        thus (s ^+ (p^q)).k = s^((p^q).k) by A3,Def2
          .= s^(p.k) by A4,FINSEQ_1:def 7
          .= (s ^+ p).k by A4,Def2
          .= ((s ^+ p)^(s ^+ q)).k by A5,FINSEQ_1:def 7;
      end;
      suppose
A6:     not k in dom p;
A7:     k <= len (p^q) by A3,FINSEQ_3:25;
        k < 1 or k > len p by A6,FINSEQ_3:25;
        then consider i being Nat such that
A8:     k = len p + i and
A9:     i >= 1 & i <= len q by A2,A7,Th2,FINSEQ_3:25;
A10:    i in dom q by A9,FINSEQ_3:25;
        then
A11:    i in dom (s ^+ q) by Def2;
A12:    len (s ^+ p) = len p by Th5;
        thus (s ^+ (p^q)).k = s^((p^q).(len p + i)) by A3,A8,Def2
          .= s^(q.i) by A10,FINSEQ_1:def 7
          .= (s ^+ q).i by A10,Def2
          .= ((s ^+ p)^(s ^+ q)).k by A8,A11,A12,FINSEQ_1:def 7;
      end;
    end;
    hence (s ^+ (p^q)).k = ((s ^+ p)^(s ^+ q)).k;
  end;
  len (s ^+ (p^q)) = len (p^q) by Th5
    .= len p + len q by FINSEQ_1:22
    .= len (s ^+ p) + len q by Th5
    .= len (s ^+ p) + len (s ^+ q) by Th5
    .= len ((s ^+ p)^(s ^+ q)) by FINSEQ_1:22;
  then dom (s ^+ (p^q)) = dom ((s ^+ p)^(s ^+ q)) by FINSEQ_3:29;
  hence s ^+ (p^q) = (s ^+ p)^(s ^+ q) by A1,FINSEQ_1:13;
A13: now
    let k be Nat;
    assume
A14: k in dom ((p^q) +^ s);
    then
A15: k in dom (p^q) by Def3;
    now
      per cases;
      suppose
A16:    k in dom p;
        then
A17:    k in dom (p +^ s) by Def3;
        thus ((p^q) +^ s).k = ((p^q).k)^s by A15,Def3
          .= (p.k)^s by A16,FINSEQ_1:def 7
          .= (p +^ s).k by A16,Def3
          .= ((p +^ s)^(q +^ s)).k by A17,FINSEQ_1:def 7;
      end;
      suppose
A18:    not k in dom p;
A19:    k <= len (p^q) by A15,FINSEQ_3:25;
        k < 1 or k > len p by A18,FINSEQ_3:25;
        then consider i being Nat such that
A20:    k = len p + i and
A21:    i >= 1 & i <= len q by A14,A19,Th2,FINSEQ_3:25;
A22:    i in dom q by A21,FINSEQ_3:25;
        then
A23:    i in dom (q +^ s) by Def3;
A24:    len (p +^ s) = len p by Th5;
        thus ((p^q) +^ s).k = ((p^q).(len p + i))^s by A15,A20,Def3
          .= (q.i)^s by A22,FINSEQ_1:def 7
          .= (q +^ s).i by A22,Def3
          .= ((p +^ s)^(q +^ s)).k by A20,A23,A24,FINSEQ_1:def 7;
      end;
    end;
    hence ((p^q) +^ s).k = ((p +^ s)^(q +^ s)).k;
  end;
  len ((p^q) +^ s) = len (p^q) by Th5
    .= len p + len q by FINSEQ_1:22
    .= len (p +^ s) + len q by Th5
    .= len (p +^ s) + len (q +^ s) by Th5
    .= len ((p +^ s)^(q +^ s)) by FINSEQ_1:22;
  then dom ((p^q) +^ s) = dom ((p +^ s)^(q +^ s)) by FINSEQ_3:29;
  hence thesis by A13,FINSEQ_1:13;
end;
