reserve D for non empty set;
reserve f1,f2 for FinSequence of D;
reserve i,n,n1,n2,n3,n4,n5,n6 for Element of NAT;
reserve S for Gene-Set;
reserve p1,p2 for Individual of S;

theorem Th3:
  crossover(p1,p2,n) is Individual of S
proof
A1: len crossover(p1,p2,n) = len S
  proof
A2: len crossover(p1,p2,n) = len (p1|n) + len (p2/^n) by FINSEQ_1:22;
    now
      per cases;
      suppose
A3:     n <= len p1;
        len(p2/^n) = len p2 -'n by RFINSEQ:29
          .= len S -'n by Def1
          .= len p1 -'n by Def1
          .= len p1 - n by A3,XREAL_1:233;
        then len crossover(p1,p2,n) = n + (len p1 - n) by A2,A3,FINSEQ_1:59
          .= len p1;
        hence thesis by Def1;
      end;
      suppose
A4:     n > len p1;
        p1|n = p1|Seg n by FINSEQ_1:def 16;
        then
A5:     p1|n = p1 by A4,FINSEQ_2:20;
A6:     len p1 - n < 0 by A4,XREAL_1:49;
        len(p2/^n) = len p2 -'n by RFINSEQ:29
          .= len S -'n by Def1
          .= len p1 -'n by Def1
          .= 0 by A6,XREAL_0:def 2;
        hence thesis by A2,A5,Def1;
      end;
    end;
    hence thesis;
  end;
  for i st i in dom crossover(p1,p2,n) holds crossover(p1,p2,n).i in S.i
  proof
    let i;
    assume
A7: i in dom crossover(p1,p2,n);
    now
      per cases by A7,FINSEQ_1:25;
      suppose
A8:     i in dom(p1|n);
A9:     dom(p1|n) c= dom p1 by FINSEQ_5:18;
        (p1|n).i = (p1|n)/.i by A8,PARTFUN1:def 6
          .= p1/.i by A8,FINSEQ_4:70
          .= p1.i by A8,A9,PARTFUN1:def 6;
        then (p1|n).i in S.i by A8,A9,Def1;
        hence thesis by A8,FINSEQ_1:def 7;
      end;
      suppose
        ex k be Nat st k in dom(p2/^n) & i = len(p1|n)+k;
        then consider k being Nat such that
A10:    k in dom(p2/^n) and
A11:    i = len(p1|n)+k;
        reconsider k as Element of NAT by ORDINAL1:def 12;
A12:    n <= len(p1|n)
        proof
          n+k in dom p2 by A10,FINSEQ_5:26;
          then n+k in Seg len p2 by FINSEQ_1:def 3;
          then n+k <= len p2 by FINSEQ_1:1;
          then n+k <= len S by Def1;
          then n+k <= len p1 by Def1;
          then
A13:      k <= len p1 - n by XREAL_1:19;
          k in Seg len(p2/^n) by A10,FINSEQ_1:def 3;
          then 1 <= k by FINSEQ_1:1;
          then 1 <= len p1 - n by A13,XXREAL_0:2;
          then 1 + n <= len p1 by XREAL_1:19;
          then
A14:      n <= len p1 - 1 by XREAL_1:19;
          len p1 <= len p1 + 1 by NAT_1:11;
          then
A15:      len p1 - 1 <= len p1 by XREAL_1:20;
          assume n > len(p1|n);
          hence contradiction by A14,A15,FINSEQ_1:59,XXREAL_0:2;
        end;
        len(p1|n) <= n by FINSEQ_5:17;
        then
A16:    len(p1|n) = n by A12,XXREAL_0:1;
        then n+k in Seg len S by A1,A7,A11,FINSEQ_1:def 3;
        then n+k in Seg len p2 by Def1;
        then
A17:    n+k in dom p2 by FINSEQ_1:def 3;
        crossover(p1,p2,n).i = (p2/^n).k by A10,A11,FINSEQ_1:def 7
          .= (p2/^n)/.k by A10,PARTFUN1:def 6
          .= p2/.(n+k) by A10,FINSEQ_5:27
          .= p2.(n+k) by A17,PARTFUN1:def 6;
        hence thesis by A11,A16,A17,Def1;
      end;
    end;
    hence thesis;
  end;
  hence thesis by A1,Def1;
end;
