<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" article-type="research-article">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">Front. Neurorobot.</journal-id>
<journal-title>Frontiers in Neurorobotics</journal-title>
<abbrev-journal-title abbrev-type="pubmed">Front. Neurorobot.</abbrev-journal-title>
<issn pub-type="epub">1662-5218</issn>
<publisher>
<publisher-name>Frontiers Media S.A.</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="doi">10.3389/fnbot.2017.00056</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Neuroscience</subject>
<subj-group>
<subject>Original Research</subject>
</subj-group>
</subj-group>
</article-categories>
<title-group>
<article-title>Bio-Inspired Genetic Algorithms with Formalized Crossover Operators for Robotic Applications</article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author" corresp="yes">
<name><surname>Zhang</surname> <given-names>Jie</given-names></name>
<xref ref-type="aff" rid="aff1"><sup>1</sup></xref>
<xref ref-type="author-notes" rid="fn001"><sup>&#x0002A;</sup></xref>
</contrib>
<contrib contrib-type="author">
<name><surname>Kang</surname> <given-names>Man</given-names></name>
<xref ref-type="aff" rid="aff1"><sup>1</sup></xref>
</contrib>
<contrib contrib-type="author">
<name><surname>Li</surname> <given-names>Xiaojuan</given-names></name>
<xref ref-type="aff" rid="aff2"><sup>2</sup></xref>
</contrib>
<contrib contrib-type="author">
<name><surname>Liu</surname> <given-names>Geng-yang</given-names></name>
<xref ref-type="aff" rid="aff1"><sup>1</sup></xref>
<uri xlink:href="http://loop.frontiersin.org/people/464124/overview"/>
</contrib>
</contrib-group>
<aff id="aff1"><sup>1</sup><institution>College of Information Science and Technology, Beijing University of Chemical Technology</institution>, <addr-line>Beijing</addr-line>, <country>China</country></aff>
<aff id="aff2"><sup>2</sup><institution>College of Information Engineering, Capital Normal University</institution>, <addr-line>Beijing</addr-line>, <country>China</country></aff>
<author-notes>
<fn fn-type="edited-by"><p>Edited by: Yangming Li, University of Washington, United States</p></fn>
<fn fn-type="edited-by"><p>Reviewed by: Long Jin, Lanzhou University, China; Duo Liu, Chongqing University, China; Yi Wang, Shenzhen University, China; Zili Shao, Hong Kong Polytechnic University, Hong Kong</p></fn>
<fn fn-type="corresp" id="fn001"><p>&#x0002A;Correspondence: Jie Zhang <email>jzhang&#x00040;mail.buct.edu.cn</email></p></fn>
</author-notes>
<pub-date pub-type="epub">
<day>24</day>
<month>10</month>
<year>2017</year>
</pub-date>
<pub-date pub-type="collection">
<year>2017</year>
</pub-date>
<volume>11</volume>
<elocation-id>56</elocation-id>
<history>
<date date-type="received">
<day>01</day>
<month>08</month>
<year>2017</year>
</date>
<date date-type="accepted">
<day>06</day>
<month>10</month>
<year>2017</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#x000A9; 2017 Zhang, Kang, Li and Liu.</copyright-statement>
<copyright-year>2017</copyright-year>
<copyright-holder>Zhang, Kang, Li and Liu</copyright-holder>
<license xlink:href="http://creativecommons.org/licenses/by/4.0/"><p>This is an open-access article distributed under the terms of the Creative Commons Attribution License (CC BY). The use, distribution or reproduction in other forums is permitted, provided the original author(s) or licensor are credited and that the original publication in this journal is cited, in accordance with accepted academic practice. No use, distribution or reproduction is permitted which does not comply with these terms.</p></license>
</permissions>
<abstract><p>Genetic algorithms are widely adopted to solve optimization problems in robotic applications. In such safety-critical systems, it is vitally important to formally prove the correctness when genetic algorithms are applied. This paper focuses on formal modeling of crossover operations that are one of most important operations in genetic algorithms. Specially, we for the first time formalize crossover operations with higher-order logic based on HOL4 that is easy to be deployed with its user-friendly programing environment. With correctness-guaranteed formalized crossover operations, we can safely apply them in robotic applications. We implement our technique to solve a path planning problem using a genetic algorithm with our formalized crossover operations, and the results show the effectiveness of our technique.</p></abstract>
<kwd-group>
<kwd>genetic algorithm</kwd>
<kwd>formalization</kwd>
<kwd>crossover operator</kwd>
<kwd>high order logic</kwd>
<kwd>HOL4</kwd>
</kwd-group>
<contract-num rid="cn001">61572331</contract-num>
<contract-num rid="cn001">61373034</contract-num>
<contract-sponsor id="cn001">National Natural Science Foundation of China<named-content content-type="fundref-id">10.13039/501100001809</named-content></contract-sponsor>
<counts>
<fig-count count="5"/>
<table-count count="0"/>
<equation-count count="41"/>
<ref-count count="20"/>
<page-count count="12"/>
<word-count count="7674"/>
</counts>
</article-meta>
</front>
<body>
<sec sec-type="intro" id="s1">
<title>Introduction</title>
<p>Genetic algorithms are widely adopted in robotic applications such as path planning (Hu and Yang, <xref ref-type="bibr" rid="B7">2004</xref>; Taharwa et al., <xref ref-type="bibr" rid="B13">2008</xref>; Achour and Chaalal, <xref ref-type="bibr" rid="B1">2011</xref>; Liu et al., <xref ref-type="bibr" rid="B5">2013</xref>; Sanfilippo et al., <xref ref-type="bibr" rid="B12">2013</xref>; Gautam and Verma, <xref ref-type="bibr" rid="B4">2014</xref>; Vicmudo et al., <xref ref-type="bibr" rid="B15">2014</xref>). When genetic algorithms are applied in such safety-critical applications, it is extremely important to prove their correctness. Specially, crossover operators play a key role in searching for near-optimal solution in genetic algorithms. Therefore, it becomes an important issue for how to develop correctness-guaranteed formalized crossover operations in robotic applications (Zhou and Sun, <xref ref-type="bibr" rid="B20">1999</xref>; Wang and Cao, <xref ref-type="bibr" rid="B17">2002</xref>).</p>
<p>There have been studies to formalize crossover operations of genetic algorithms. In Uchibori and Endou (<xref ref-type="bibr" rid="B14">1999</xref>), completed the formalization of crossover operators. In Vidal et al. (<xref ref-type="bibr" rid="B16">2008</xref>), a mathematical abstraction of crossover operators is proposed to extend the applicability of formalized crossover operators in genetic algorithms. In Nawaz et al. (<xref ref-type="bibr" rid="B11">2013</xref>), the correctness of genetic algorithms with formalized crossover operators is verified. While the above studies lay the foundation for formalizing crossover operations of genetic algorithms, effective mechanisms and techniques are still urgently needed for developing correctness-guaranteed formalized crossover operations that can be easily deployed in genetic algorithms in practice.</p>
<p>In this paper, we for the first time develop correctness-guaranteed formalized crossover operations based on HOL4 (Higher-Order Logic 4) (HOL Project, <xref ref-type="bibr" rid="B6">2017</xref>) that is easy to be deployed with its user-friendly programing environment. We first present a general structural model and construct the formal model of cross operators. Based on these, one-point crossover operator and multi-point crossover operator are then formalized and proved with HOL4. We conduct a case study by implementing the proposed technique in robotic applications to solve a path planning problem, in which a genetic algorithm with our formalized crossover operations has been developed, and the results show that our technique can be easily applied and effectively solve optimization problems with genetic algorithms.</p>
<p>The rest of paper is organized as follows. Section Manuscript Formatting presents background. Section Higher-order Logic Representation of Crossover Operators: Basic Elements describes the formal model of cross operations with HOL4. In sections Higher-order Logic Representation and Formal Verification of One-point Crossover Operators and Higher-order Logic Representation and Formal Verification of Multi-Point Crossover Operators, we formalize and prove one-point and multi-point crossover operators with HOL4, respectively. Section Discussion discusses the proposed technique. Section Evaluation evaluates the proposed work with a case study for implementing our technique to solve path planning in robotic applications. Finally, we conclude this paper in section Conclusion.</p>
</sec>
<sec id="s2">
<title>Manuscript formatting</title>
<sec>
<title>Population</title>
<p>In order to complete the formalization of crossover operators, we must formalize the population that is the base of the evolution of genetic algorithms and the workspace of crossover operators. According to the collective property of the population, a population is defined as the abstract set and is represented as &#x0201C;: bool list - &#x0003E; bool&#x0201D; in HOL4. We use the symbol <italic>D</italic> to represent the non-empty set of a population. In addition, in order to ensure that crossover operations can be carried out in the formalized population <italic>D</italic> to generate new chromosomes, population <italic>D</italic> also needs to meet the following two properties:</p>
<list list-type="bullet">
<list-item><p>Non-unitary: There are at least two chromosomes in population <italic>D</italic>, and the two chromosomes are not the same.</p></list-item>
<list-item><p>Closure: Offspring chromosomes generated by a crossover operator which involves two chromosomes in population <italic>D</italic> still belong to population <italic>D</italic>.</p></list-item>
</list>
</sec>
<sec>
<title>Crossover operations</title>
<p>A crossover operation is defined as the behavioral process in which offspring are produced by crossover operators. A crossover operation intercepts two parent chromosomes at the crossover point, and reconnects the dissected gene segments to create a new chromosome. Figure <xref ref-type="fig" rid="F1">1</xref> illustrate how a crossover operation works.</p>
<fig id="F1" position="float">
<label>Figure 1</label>
<caption><p>The workflow of a cross operation.</p></caption>
<graphic xlink:href="fnbot-11-00056-g0001.tif"/>
</fig>
<p>To implement the higher-order logic formalization of crossover operations, we can abstract the process shown in Figure <xref ref-type="fig" rid="F1">1</xref>. into three elements, namely, the operation object, the operation position and the basic operation. Based on this abstraction, Figure <xref ref-type="fig" rid="F2">2</xref> shows a structural model. In Figure <xref ref-type="fig" rid="F2">2</xref>, chromosomes are individuals in population <italic>D</italic>; chromosome <italic>p</italic> and chromosome <italic>q</italic> as operation objects that represent the two parent chromosomes; cross-term <italic>l</italic> denotes the operation position which is the set of crossover points; the basic operations consisting of TAKE, DROP and APPEND are the behavior operations used to complete gene exchange.</p>
<fig id="F2" position="float">
<label>Figure 2</label>
<caption><p>A structure model of crossover operations.</p></caption>
<graphic xlink:href="fnbot-11-00056-g0002.tif"/>
</fig>
<p>As shown in Figure <xref ref-type="fig" rid="F2">2</xref>, the operation objects and operation positions in the general model of crossover operations constitute the basic variables of the formal model, and the basic operations in the general structural model construct the behavior of the formal model. Moreover, the basic variables and the basic behavior operations will form the formal model of the crossover operation.</p>
</sec>
</sec>
<sec id="s3">
<title>Higher-order logic representation of crossover operators: basic elements</title>
<p>To realize the formalization of crossover operations, the prerequisite work is to use the higher-order logic to represent the basic elements of crossover operations. Therefore, the higher-order logic representation of the three basic elements in the above model and the proofs of their related properties are presented in this section.</p>
<sec>
<title>Higher-order logic representation of chromosomes</title>
<p>Since a chromosome is an arrangement of a limited number of genes, the data structure of chromosomes in HOL4 is defined as a list; the data type of elements in the list is defined as Boolean (: bool). Then a chromosome can be represented as a Boolean list (: bool list). Correspondingly, two parent chromosomes of an operation object can be represented by <italic>p</italic> and <italic>q</italic> respectively, <italic>p</italic> &#x0003D; <italic>p</italic><sub>1</sub> &#x02026;<italic> p</italic><sub><italic>n</italic></sub>,<italic>q</italic> &#x0003D; <italic>q</italic><sub>1</sub> &#x02026;<italic> q</italic><sub><italic>n</italic></sub>,<italic>p</italic> &#x02208; <italic>D</italic>,<italic>q</italic> &#x02208; <italic>D</italic>. Here <italic>p</italic><sub><italic>i</italic></sub> (: bool) (<italic>1</italic> &#x02264; <italic>i</italic> &#x02264; <italic>n</italic>) is the gene that constitutes the chromosome <italic>p</italic> (: bool list);<italic>q</italic><sub><italic>i</italic></sub> (: bool) (<italic>1</italic> &#x02264; <italic>i</italic> &#x02264; <italic>n</italic>) is the gene that forms the chromosome <italic>q</italic> (: bool list).</p>
</sec>
<sec>
<title>Higher-order logic representation of cross-term</title>
<p>The crossover position in crossover operations, called cross-term, is represented by a natural number. Thus, its data type is defined as natural number (: num) in HOL4. Since the crossover operators include one-point crossover and multi-point crossover, the number of crossover points may be one or more. Therefore, the data structure of cross-term in HOL4 is defined as natural number lists (: num list) and represented by <italic>l</italic> (: num list).</p>
</sec>
<sec>
<title>Higher-order logic representation of basic operations</title>
<p>As described above, the data structure of both chromosomes and cross-term are defined as lists. By analyzing the list theory base in HOL4, the operation functions, namely, TAKE, DROP and APPEND, exactly match the three basic operation functions in the general model. Therefore, TAKE is used to get the first n genes of chromosome p, abbreviated as <italic>p</italic> &#x02191; <italic>n</italic>; DROP is used to obtain the genes after the n-th position of chromosome p, abbreviated as <italic>q</italic> &#x02193; <italic>n</italic>; APPEND is utilized to connect the two chromosome fragments <italic>p</italic><sub>1</sub> and <italic>q</italic><sub>1</sub> to form a new chromosome, abbreviated as <italic>p</italic><sub>1</sub> &#x0002B;&#x0002B; <italic>q</italic><sub>1</sub>.</p>
<p>The mathematical description of the three basic operations (TAKE, DROP and APPEND) is presented as follows.</p>
<p>For any <italic>p, q</italic> &#x02208; <italic>D</italic>, let n be the length of <italic>p, m</italic> the crossover point, <italic>k</italic> the length of <italic>q</italic>, where <italic>m, n, k</italic> &#x02208; <italic>N</italic>. The basic operations are defined as:</p>
<disp-formula id="E1"><mml:math id="M1"><mml:mtable columnalign='left'><mml:mtr><mml:mtd><mml:mtext>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;</mml:mtext><mml:mi>p</mml:mi><mml:mtext>&#x000A0;&#x000A0;&#x000A0;TAKE&#x000A0;&#x000A0;&#x000A0;</mml:mtext><mml:mi>m</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:mrow><mml:mtable columnalign='left'><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x022EF;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mi>m</mml:mi></mml:msub><mml:mo stretchy='false'>)</mml:mo><mml:mtext>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;if&#x000A0;&#x000A0;&#x000A0;&#x000A0;</mml:mtext><mml:mi>m</mml:mi><mml:mo>&#x0003C;</mml:mo><mml:mi>n</mml:mi><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mi>p</mml:mi><mml:mtext>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;if&#x000A0;&#x000A0;&#x000A0;&#x000A0;</mml:mtext><mml:mi>m</mml:mi><mml:mo>&#x02265;</mml:mo><mml:mi>n</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mtext>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;</mml:mtext><mml:mi>p</mml:mi><mml:mtext>&#x000A0;&#x000A0;&#x000A0;DROP&#x000A0;&#x000A0;&#x000A0;</mml:mtext><mml:mi>m</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>{</mml:mo><mml:mrow><mml:mtable columnalign='left'><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mrow><mml:mi>m</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x022EF;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:mo stretchy='false'>)</mml:mo><mml:mtext>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;if&#x000A0;&#x000A0;&#x000A0;&#x000A0;</mml:mtext><mml:mi>m</mml:mi><mml:mo>&#x0003C;</mml:mo><mml:mi>n</mml:mi><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo stretchy='false'>[</mml:mo><mml:mo stretchy='false'>]</mml:mo><mml:mtext>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;if&#x000A0;&#x000A0;&#x000A0;&#x000A0;</mml:mtext><mml:mi>m</mml:mi><mml:mo>&#x02265;</mml:mo><mml:mi>n</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mi>p</mml:mi><mml:mtext>&#x000A0;&#x000A0;&#x000A0;APPEND&#x000A0;&#x000A0;&#x000A0;</mml:mtext><mml:mi>q</mml:mi><mml:mo>=</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x022EF;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x022EF;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mi>k</mml:mi></mml:msub><mml:mo stretchy='false'>)</mml:mo><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>Here, [] denotes an empty list.</p>
<p>Based on the above definitions, the higher-order logic representations of the three basic operations in HOL4 can be expressed respectively as follows:</p>
<list list-type="simple">
<list-item><p>&#x0003E; val TAKE &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;[] |&#x02212; (!<italic>l</italic>. TAKE 0 <italic>l</italic> &#x0003D; []) /\</p>
<p>!<italic>n x l</italic>. TAKE (SUC <italic>n</italic>) (<italic>x</italic>::<italic>l</italic>) &#x0003D; <italic>x</italic>::TAKE <italic>n l</italic>: thm</p>
<p>&#x0003E; val DROP &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;[] |&#x02212; (!<italic>l</italic>. DROP 0 <italic>l</italic> &#x0003D; <italic>l</italic>) /\</p>
<p>!<italic>n x l</italic>. DROP (SUC <italic>n</italic>) (<italic>x</italic>::<italic>l</italic>) &#x0003D; DROP <italic>n l</italic>: thm</p>
<p>&#x0003E; val APPEND &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;[] |&#x02212; (!<italic>l</italic>. [] &#x0002B;&#x0002B; <italic>l</italic> &#x0003D; <italic>l</italic>) /\</p>
<p>!<italic>l1 l2 h</italic>. <italic>h</italic>::<italic>l1</italic> &#x0002B;&#x0002B; <italic>l2</italic> &#x0003D; <italic>h</italic>::(<italic>l1</italic> &#x0002B;&#x0002B; <italic>l2</italic>): thm</p></list-item>
</list>
</sec>
<sec>
<title>Formal verification of basic operations</title>
<p>In HOL4 library, TAKE and DROP are used to manipulate the list, and they have two parameters, i.e., natural number and list. Function TAKE can cut the child list of list before the natural number, and function DROP can cut the child list of list after the natural number. In order to prove the properties of the formalized crossover operators, it is necessary to prove the properties of TAKE and DROP (Darmochwal and Nakamura, <xref ref-type="bibr" rid="B3">1991</xref>; Kotowicz, <xref ref-type="bibr" rid="B8">1993</xref>; Uchibori and Endou, <xref ref-type="bibr" rid="B14">1999</xref>; Vidal et al., <xref ref-type="bibr" rid="B16">2008</xref>; Nawaz et al., <xref ref-type="bibr" rid="B11">2013</xref>). Since the existing properties of APPEND in HOL4 are sufficient, there is no need for more proofs. The basic properties of TAKE and DROP are classified as follows and their mathematical descriptions are given below.</p>
<p>Properties of TAKE: for any p, q &#x02208; D,m, n &#x02208; N</p>
<disp-formula id="E2"><label>(1)</label><mml:math id="M2"><mml:mrow><mml:mo>&#x02217;</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mo stretchy='false'>[</mml:mo><mml:mo stretchy='false'>]</mml:mo><mml:mo>&#x02191;</mml:mo><mml:mi>n</mml:mi><mml:mo>=</mml:mo><mml:mo stretchy='false'>[</mml:mo><mml:mo stretchy='false'>]</mml:mo></mml:mrow></mml:math></disp-formula>
<disp-formula id="E3"><label>(2)</label><mml:math id="M3"><mml:mrow><mml:mi>p</mml:mi><mml:mo>&#x02191;</mml:mo><mml:mn>0</mml:mn><mml:mo>=</mml:mo><mml:mo stretchy='false'>[</mml:mo><mml:mo stretchy='false'>]</mml:mo></mml:mrow></mml:math></disp-formula>
<disp-formula id="E4"><label>(3)</label><mml:math id="M4"><mml:mrow><mml:mo>&#x02217;</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mo stretchy='false'>(</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02191;</mml:mo><mml:mi>m</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x02191;</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>=</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02191;</mml:mo><mml:mtext>MIN</mml:mtext><mml:mo stretchy='false'>(</mml:mo><mml:mi>m</mml:mi><mml:mo>,</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:math></disp-formula>
<disp-formula id="E5"><label>(4)</label><mml:math id="M5"><mml:mrow><mml:mo>&#x02217;</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02191;</mml:mo><mml:mtext>MIN</mml:mtext><mml:mo stretchy='false'>(</mml:mo><mml:mi>m</mml:mi><mml:mo>,</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo stretchy='false'>)</mml:mo><mml:mo>=</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02191;</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x02191;</mml:mo><mml:mi>m</mml:mi><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:math></disp-formula>
<disp-formula id="E6"><label>(5)</label><mml:math id="M6"><mml:mrow><mml:mo>&#x02217;</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mo stretchy='false'>(</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02191;</mml:mo><mml:mi>m</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x02191;</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>=</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02191;</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x02191;</mml:mo><mml:mi>m</mml:mi><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:math></disp-formula>
<disp-formula id="E7"><label>(6)</label><mml:math id="M7"><mml:mtable columnalign='left'><mml:mtr><mml:mtd><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtext>LENGTH</mml:mtext></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mi>p</mml:mi><mml:mo>=</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtext>LENGTH</mml:mtext></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mi>q</mml:mi><mml:mo>=</mml:mo><mml:mo>=</mml:mo><mml:mo>&#x0003E;</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mo>&#x02217;</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mi>L</mml:mi><mml:mi>E</mml:mi><mml:mi>N</mml:mi><mml:mi>G</mml:mi><mml:mi>T</mml:mi><mml:mi>H</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02191;</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>=</mml:mo><mml:mtext>LENGTH&#x000A0;</mml:mtext><mml:mo stretchy='false'>(</mml:mo><mml:mi>q</mml:mi><mml:mo>&#x02191;</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<disp-formula id="E8"><label>(7)</label><mml:math id="M8"><mml:mtable columnalign='left'><mml:mtr><mml:mtd><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtext>LENGTH</mml:mtext></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02191;</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable><mml:mo>=</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mtext>MIN</mml:mtext><mml:mo stretchy='false'>(</mml:mo><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mtext>LENGTH&#x000A0;</mml:mtext><mml:mi>p</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo stretchy='false'>)</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<disp-formula id="E9"><label>(8)</label><mml:math id="M9"><mml:mrow><mml:mtable columnalign='left'><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>m</mml:mi><mml:mo>&#x0003C;</mml:mo><mml:mo>=</mml:mo><mml:mtext>LENGTH&#x000A0;</mml:mtext><mml:mi>p</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>/</mml:mo><mml:mo>&#x0005C;</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>m</mml:mi><mml:mo>&#x0003C;</mml:mo><mml:mo>=</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo stretchy='false'>)</mml:mo><mml:mo>=</mml:mo><mml:mo>=</mml:mo><mml:mo>&#x0003E;</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo>&#x02217;</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mo stretchy='false'>(</mml:mo><mml:mi>m</mml:mi><mml:mo>&#x0003C;</mml:mo><mml:mo>=</mml:mo><mml:mtext>LENGTH&#x000A0;</mml:mtext><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02191;</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula>
<disp-formula id="E10"><label>(9)</label><mml:math id="M10"><mml:mrow><mml:mtable columnalign='left'><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mi>m</mml:mi><mml:mo>&#x0003C;</mml:mo><mml:mo>=</mml:mo><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtext>LENGTH</mml:mtext></mml:mrow></mml:mtd><mml:mtd><mml:mi>p</mml:mi></mml:mtd></mml:mtr></mml:mtable><mml:mo stretchy='false'>)</mml:mo><mml:mo>=</mml:mo><mml:mo>=</mml:mo><mml:mo>&#x0003E;</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo>&#x02217;</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mo stretchy='false'>(</mml:mo><mml:mi>m</mml:mi><mml:mo>=</mml:mo><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtext>LENGTH</mml:mtext></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02191;</mml:mo><mml:mi>m</mml:mi><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula>
<disp-formula id="E11"><label>(10)</label><mml:math id="M11"><mml:mrow><mml:mtable columnalign='left'><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtext>LENGTH</mml:mtext></mml:mrow></mml:mtd><mml:mtd><mml:mi>p</mml:mi></mml:mtd></mml:mtr></mml:mtable><mml:mo>&#x0003C;</mml:mo><mml:mo>=</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>=</mml:mo><mml:mo>=</mml:mo><mml:mo>&#x0003E;</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>+</mml:mo><mml:mo>+</mml:mo><mml:mi>q</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x02191;</mml:mo><mml:mi>n</mml:mi><mml:mo>=</mml:mo><mml:mi>p</mml:mi><mml:mo>+</mml:mo><mml:mo>+</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo>&#x02217;</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mo stretchy='false'>(</mml:mo><mml:mi>q</mml:mi><mml:mo>&#x02191;</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>n</mml:mi><mml:mo>&#x02212;</mml:mo><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtext>LENGTH</mml:mtext></mml:mrow></mml:mtd><mml:mtd><mml:mi>p</mml:mi></mml:mtd></mml:mtr></mml:mtable><mml:mo stretchy='false'>)</mml:mo><mml:mo stretchy='false'>)</mml:mo><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula>
<disp-formula id="E12"><label>(11)</label><mml:math id="M12"><mml:mrow><mml:mtable columnalign='left'><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtext>LENGTH</mml:mtext></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02191;</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable><mml:mo>=</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mtext>if</mml:mtext><mml:mo stretchy='false'>(</mml:mo><mml:mi>n</mml:mi><mml:mo>&#x0003C;</mml:mo><mml:mo>=</mml:mo><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtext>LENGTH</mml:mtext></mml:mrow></mml:mtd><mml:mtd><mml:mi>p</mml:mi></mml:mtd></mml:mtr></mml:mtable><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mtext>then&#x000A0;</mml:mtext><mml:mi>n</mml:mi></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mtext>else&#x000A0;</mml:mtext><mml:mo stretchy='false'>(</mml:mo><mml:mtext>LENGTH&#x000A0;</mml:mtext><mml:mi>p</mml:mi><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula>
<disp-formula id="E13"><label>(12)</label><mml:math id="M13"><mml:mrow><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mtext>LENGTH</mml:mtext></mml:mrow></mml:mtd><mml:mtd><mml:mi>p</mml:mi></mml:mtd></mml:mtr></mml:mtable><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x0003C;</mml:mo><mml:mo>=</mml:mo><mml:mi>n</mml:mi><mml:mo>=</mml:mo><mml:mo>=</mml:mo><mml:mo>&#x0003E;</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02191;</mml:mo><mml:mi>n</mml:mi><mml:mo>=</mml:mo><mml:mi>p</mml:mi></mml:mrow></mml:math></disp-formula>
<disp-formula id="E14"><label>(13)</label><mml:math id="M14"><mml:mrow><mml:mtable columnalign='left'><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mi>n</mml:mi><mml:mo>&#x0003C;</mml:mo><mml:mo>=</mml:mo><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtext>LENGTH</mml:mtext></mml:mrow></mml:mtd><mml:mtd><mml:mi>p</mml:mi></mml:mtd></mml:mtr></mml:mtable><mml:mo stretchy='false'>)</mml:mo><mml:mo>=</mml:mo><mml:mo>=</mml:mo><mml:mo>&#x0003E;</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>+</mml:mo><mml:mo>+</mml:mo><mml:mi>q</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x02191;</mml:mo><mml:mi>n</mml:mi><mml:mo>=</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02191;</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula>
<disp-formula id="E15"><label>(14)</label><mml:math id="M15"><mml:mrow><mml:mtable columnalign='left'><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtext>LENGTH</mml:mtext></mml:mrow></mml:mtd><mml:mtd><mml:mi>p</mml:mi></mml:mtd></mml:mtr></mml:mtable><mml:mo>&#x0003C;</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>=</mml:mo><mml:mo>=</mml:mo><mml:mo>&#x0003E;</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>+</mml:mo><mml:mo>+</mml:mo><mml:mi>q</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x02191;</mml:mo><mml:mi>n</mml:mi><mml:mo>=</mml:mo><mml:mi>p</mml:mi><mml:mo>+</mml:mo><mml:mo>+</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mi>q</mml:mi><mml:mo>&#x02191;</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>n</mml:mi><mml:mo>&#x02212;</mml:mo><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtext>LENGTH</mml:mtext></mml:mrow></mml:mtd><mml:mtd><mml:mi>p</mml:mi></mml:mtd></mml:mtr></mml:mtable><mml:mo stretchy='false'>)</mml:mo><mml:mo stretchy='false'>)</mml:mo><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula>
<disp-formula id="E16"><label>(15)</label><mml:math id="M16"><mml:mrow><mml:mtable columnalign='left'><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtext>LENGTH</mml:mtext></mml:mrow></mml:mtd><mml:mtd><mml:mi>p</mml:mi></mml:mtd></mml:mtr></mml:mtable><mml:mo>&#x0003C;</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>=</mml:mo><mml:mo>=</mml:mo><mml:mo>&#x0003E;</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>+</mml:mo><mml:mo>+</mml:mo><mml:mi>q</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x02191;</mml:mo><mml:mi>n</mml:mi><mml:mo>=</mml:mo><mml:mi>p</mml:mi><mml:mo>+</mml:mo><mml:mo>+</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mi>q</mml:mi><mml:mo>&#x02191;</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>n</mml:mi><mml:mo>&#x02212;</mml:mo><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtext>LENGTH</mml:mtext></mml:mrow></mml:mtd><mml:mtd><mml:mi>p</mml:mi></mml:mtd></mml:mtr></mml:mtable><mml:mo stretchy='false'>)</mml:mo><mml:mo stretchy='false'>)</mml:mo><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula>
<disp-formula id="E17"><label>(16)</label><mml:math id="M17"><mml:mrow><mml:mtable columnalign='left'><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mi>m</mml:mi><mml:mo>&#x0003C;</mml:mo><mml:mo>=</mml:mo><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtext>LENGTH</mml:mtext></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mi>p</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x02227;</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>n</mml:mi><mml:mo>&#x0003C;</mml:mo><mml:mo>=</mml:mo><mml:mi>m</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>=</mml:mo><mml:mo>=</mml:mo><mml:mo>&#x0003E;</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02191;</mml:mo><mml:mi>m</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x02191;</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>=</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02191;</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula>
<p>Properties of DROP: for any <italic>p, q</italic> &#x02208; <italic>D, m, n</italic> &#x02208; <italic>N</italic></p>
<disp-formula id="E18"><label>(17)</label><mml:math id="M18"><mml:mrow><mml:mo>&#x02217;</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mo stretchy='false'>[</mml:mo><mml:mo stretchy='false'>]</mml:mo><mml:mo>&#x02193;</mml:mo><mml:mi>n</mml:mi><mml:mo>=</mml:mo><mml:mo stretchy='false'>[</mml:mo><mml:mo stretchy='false'>]</mml:mo></mml:mrow></mml:math></disp-formula>
<disp-formula id="E19"><label>(18)</label><mml:math id="M19"><mml:mrow><mml:mi>p</mml:mi><mml:mo>&#x02193;</mml:mo><mml:mn>0</mml:mn><mml:mo>=</mml:mo><mml:mi>p</mml:mi></mml:mrow></mml:math></disp-formula>
<disp-formula id="E20"><label>(19)</label><mml:math id="M20"><mml:mrow><mml:mi>p</mml:mi><mml:mo>&#x02193;</mml:mo><mml:mn>0</mml:mn><mml:mo>=</mml:mo><mml:mi>q</mml:mi><mml:mo>=</mml:mo><mml:mo>=</mml:mo><mml:mo>&#x0003E;</mml:mo><mml:mi>p</mml:mi><mml:mo>=</mml:mo><mml:mi>q</mml:mi></mml:mrow></mml:math></disp-formula>
<disp-formula id="E21"><label>(20)</label><mml:math id="M21"><mml:mrow><mml:mo>&#x02217;</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mo stretchy='false'>(</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02193;</mml:mo><mml:mi>m</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x02193;</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>=</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02193;</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>m</mml:mi><mml:mo>+</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:math></disp-formula>
<disp-formula id="E22"><label>(21)</label><mml:math id="M22"><mml:mrow><mml:mo>&#x02217;</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02193;</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>m</mml:mi><mml:mo>+</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo stretchy='false'>)</mml:mo><mml:mo>=</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02193;</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x02193;</mml:mo><mml:mi>m</mml:mi><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:math></disp-formula>
<disp-formula id="E23"><label>(22)</label><mml:math id="M23"><mml:mrow><mml:mo>&#x02217;</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mo stretchy='false'>(</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02193;</mml:mo><mml:mi>m</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x02193;</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>=</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02193;</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x02193;</mml:mo><mml:mi>m</mml:mi><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:math></disp-formula>
<disp-formula id="E24"><label>(23)</label><mml:math id="M24"><mml:mrow><mml:mtable columnalign='left'><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtext>LENGTH</mml:mtext></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mi>p</mml:mi><mml:mo>=</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtext>LENGTH</mml:mtext></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mi>q</mml:mi><mml:mo>=</mml:mo><mml:mo>=</mml:mo><mml:mo>&#x0003E;</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mo>&#x02217;</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mi>L</mml:mi><mml:mi>E</mml:mi><mml:mi>N</mml:mi><mml:mi>G</mml:mi><mml:mi>T</mml:mi><mml:mi>H</mml:mi></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02193;</mml:mo><mml:mi>n</mml:mi></mml:mrow></mml:mtd></mml:mtr></mml:mtable><mml:mo stretchy='false'>)</mml:mo><mml:mo>=</mml:mo><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtext>LENGTH</mml:mtext></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mi>q</mml:mi><mml:mo>&#x02193;</mml:mo><mml:mi>n</mml:mi></mml:mrow></mml:mtd></mml:mtr></mml:mtable><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula>
<disp-formula id="E25"><label>(24)</label><mml:math id="M25"><mml:mrow><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtext>LENGTH</mml:mtext></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02193;</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>=</mml:mo><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mtext>LENGTH</mml:mtext></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mi>p</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x02212;</mml:mo><mml:mi>n</mml:mi></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula>
<disp-formula id="E26"><label>(25)</label><mml:math id="M26"><mml:mrow><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mtext>LENGTH</mml:mtext></mml:mrow></mml:mtd><mml:mtd><mml:mi>p</mml:mi></mml:mtd></mml:mtr></mml:mtable><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x0003C;</mml:mo><mml:mo>=</mml:mo><mml:mi>n</mml:mi><mml:mo>=</mml:mo><mml:mo>=</mml:mo><mml:mo>&#x0003E;</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02193;</mml:mo><mml:mi>n</mml:mi><mml:mo>=</mml:mo><mml:mo stretchy='false'>[</mml:mo><mml:mo stretchy='false'>]</mml:mo></mml:mrow></mml:math></disp-formula>
<disp-formula id="E27"><label>(26)</label><mml:math id="M27"><mml:mrow><mml:mtable columnalign='left'><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mi>n</mml:mi><mml:mo>&#x0003C;</mml:mo><mml:mo>=</mml:mo><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtext>LENGTH</mml:mtext></mml:mrow></mml:mtd><mml:mtd><mml:mi>p</mml:mi></mml:mtd></mml:mtr></mml:mtable><mml:mo stretchy='false'>)</mml:mo><mml:mo>=</mml:mo><mml:mo>=</mml:mo><mml:mo>&#x0003E;</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>+</mml:mo><mml:mo>+</mml:mo><mml:mi>q</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x02193;</mml:mo><mml:mi>n</mml:mi><mml:mo>=</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02193;</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>+</mml:mo><mml:mo>+</mml:mo><mml:mi>q</mml:mi><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula>
<disp-formula id="E28"><label>(27)</label><mml:math id="M28"><mml:mrow><mml:mtable columnalign='left'><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtext>LENGTH</mml:mtext></mml:mrow></mml:mtd><mml:mtd><mml:mi>p</mml:mi></mml:mtd></mml:mtr></mml:mtable><mml:mo>&#x0003C;</mml:mo><mml:mo>=</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>=</mml:mo><mml:mo>=</mml:mo><mml:mo>&#x0003E;</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>+</mml:mo><mml:mo>+</mml:mo><mml:mi>q</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x02193;</mml:mo><mml:mi>n</mml:mi><mml:mo>=</mml:mo><mml:mi>q</mml:mi><mml:mo>&#x02193;</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>n</mml:mi><mml:mo>&#x02212;</mml:mo><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtext>LENGTH</mml:mtext></mml:mrow></mml:mtd><mml:mtd><mml:mi>p</mml:mi></mml:mtd></mml:mtr></mml:mtable><mml:mo stretchy='false'>)</mml:mo><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula>
<disp-formula id="E29"><label>(28)</label><mml:math id="M29"><mml:mrow><mml:mtable columnalign='left'><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>n</mml:mi><mml:mo>+</mml:mo><mml:mi>m</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x0003C;</mml:mo><mml:mo>=</mml:mo><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtext>LENGTH</mml:mtext></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mi>p</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>=</mml:mo><mml:mo>=</mml:mo><mml:mo>&#x0003E;</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02193;</mml:mo><mml:mi>m</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x02193;</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>=</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02193;</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>n</mml:mi><mml:mo>+</mml:mo><mml:mi>m</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula>
<p>The relation between TAKE and DROP: for any <italic>p</italic>, <italic>q</italic> &#x02208; <italic>D,m,n</italic> &#x02208; <italic>N</italic></p>
<disp-formula id="E30"><label>(29)</label><mml:math id="M30"><mml:mrow><mml:mo>&#x02217;</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02191;</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x02193;</mml:mo><mml:mi>n</mml:mi><mml:mo>=</mml:mo><mml:mo stretchy='false'>[</mml:mo><mml:mo stretchy='false'>]</mml:mo></mml:mrow></mml:math></disp-formula>
<disp-formula id="E31"><label>(30)</label><mml:math id="M31"><mml:mrow><mml:mo>&#x02217;</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02193;</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x02191;</mml:mo><mml:mi>m</mml:mi><mml:mo>=</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02191;</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>m</mml:mi><mml:mo>+</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x02193;</mml:mo><mml:mi>n</mml:mi></mml:mrow></mml:math></disp-formula>
<disp-formula id="E32"><label>(31)</label><mml:math id="M32"><mml:mrow><mml:mo>&#x02217;</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02191;</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x02193;</mml:mo><mml:mi>m</mml:mi><mml:mo>=</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>&#x02193;</mml:mo><mml:mi>m</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x02191;</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mi>n</mml:mi><mml:mo>&#x02212;</mml:mo><mml:mi>m</mml:mi><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:math></disp-formula>
<p>In the above equations, the properties with <sup>&#x0002A;</sup> are required to be proved in this paper, while these properties without <sup>&#x0002A;</sup> have existed in HOL4 and need not be proved.</p>
</sec>
<sec>
<title>Formal modeling and implementation of crossover operations with HOL4</title>
<p>As mentioned above, crossover operations are the process of generating offspring. In order to establish a formal model of crossover operation, we first construct the basic implementation flow of generating offspring based on the general structural model of crossover operation, as shown in Figure <xref ref-type="fig" rid="F3">3</xref>.</p>
<fig id="F3" position="float">
<label>Figure 3</label>
<caption><p>Basic flow chart of crossover operations.</p></caption>
<graphic xlink:href="fnbot-11-00056-g0003.tif"/>
</fig>
<p>In Figure <xref ref-type="fig" rid="F3">3</xref>, <italic>p</italic> and <italic>q</italic> are two parent chromosomes; <italic>l</italic> is the cross-term that represents the crossover position; l &#x0003D; [s] indicates that there is only one crossover point s; chromosome p&#x00027; is the offspring chromosome generated.</p>
<p>The basic implementation of crossover operation in Figure <xref ref-type="fig" rid="F3">3</xref> can only be used for one-point crossover operator. In order to apply the formalized crossover operation to other crossover operators, the crossover process is improved according to the characteristics of multi-point crossover operators.</p>
<p>In general, the process of multi-point crossover can be regarded as the repetition of one-point crossover. Therefore, when the number of crossover points are <italic>n</italic> (<italic>n</italic> &#x0003E; 1) in cross-term l, the operation objects of TAKE and DROP are the offspring chromosomes generated by <italic>n-</italic>1 rounds of crossover.</p>
<p>Let CROSSOVER represent a crossover operation. CROSSOVER crosses the chromosomes <italic>p</italic> and <italic>q</italic> in turns according to the crossover points in cross-term <italic>l</italic>. According to the features of the functional language, recursive methods can be used to achieve the repeated process between one-point crossover and multi-point crossover. Figure <xref ref-type="fig" rid="F4">4</xref> shows the implementation process of crossover operations.</p>
<fig id="F4" position="float">
<label>Figure 4</label>
<caption><p>Implementation flow of crossover operations.</p></caption>
<graphic xlink:href="fnbot-11-00056-g0004.tif"/>
</fig>
<p>As shown in Figure <xref ref-type="fig" rid="F4">4</xref>, CROSSOVER <italic>l p q</italic> is the offspring chromosome generated by the crossover operation with two parent chromosomes <italic>p</italic> and <italic>q</italic>. Similarly, CROSSOVER <italic>l q p</italic> is another offspring chromosome generated by the crossover operation with two parent chromosomes <italic>q</italic> and <italic>p</italic>. To complete the gene exchange, a crossover operation uses two basic operations, namely, TAKE and DROP. The operation object of TAKE and DROP also contains the crossover operation itself, so the whole process contains two recursive lines. Because the two recursive lines are parallel, the method employed is called double recursion. According to the execution diagram of the double recursion, it can be observed that the recursion procedure is to reduce the size of the cross-term, while the regression process is to exchange genes at each crossover point in turn.</p>
<p>In Figure <xref ref-type="fig" rid="F4">4</xref>, the implementation procedure of the crossover operation can be viewed as a binary tree where the number of crossover points corresponds to the height of the binary tree. For the special case in which there is only one crossover point, the height of the full binary tree is one. Therefore, the crossover operation with the double recursion method, which can be used to construct one-point crossover and multi-point crossover, possesses generality. Moreover, the implementation process of this crossover operation can also be used to form other crossover operators such as uniform crossover operators and partially matched crossover operators.</p>
<p>According to the implementation process of the crossover operation, the mathematical description of the crossover operation is given as follows:</p>
<disp-formula id="E33"><mml:math id="M33"><mml:mtext>CROSSOVER&#x000A0;</mml:mtext><mml:mi>l</mml:mi><mml:mtext>&#x000A0;p&#x000A0;q</mml:mtext><mml:mo>=</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mrow><mml:mo>{</mml:mo><mml:mrow><mml:mtable columnalign='left'><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mi>p</mml:mi></mml:mtd><mml:mtd columnalign='left'><mml:mrow><mml:mtext>if&#x000A0;</mml:mtext><mml:mi>l</mml:mi><mml:mo>=</mml:mo><mml:mo stretchy='false'>[</mml:mo><mml:mo stretchy='false'>]</mml:mo><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mtext>CROSSOVER&#x000A0;</mml:mtext><mml:mi>t</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mi>p</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mi>q</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x02191;</mml:mo><mml:mi>h</mml:mi><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:mtd><mml:mtd columnalign='left'><mml:mrow><mml:mtext>if&#x000A0;</mml:mtext><mml:mi>l</mml:mi><mml:mo>=</mml:mo><mml:mi>h</mml:mi><mml:mo>:</mml:mo><mml:mo>:</mml:mo><mml:mi>t</mml:mi><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mo>+</mml:mo><mml:mo>+</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mtext>CROSSOVER&#x000A0;</mml:mtext><mml:mi>t</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mi>q</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mi>p</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>&#x02193;</mml:mo><mml:mi>h</mml:mi><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:mtd><mml:mtd columnalign='left'><mml:mo>&#x000A0;</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mrow></mml:math></disp-formula>
<p>Based on the above mathematical description, the higher-order logic implementation of the crossover operation in HOL4 is given as follows:</p>
<list list-type="simple">
<list-item><p>&#x0003E; val CROSSOVER_def &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;[] |&#x02212; (!<italic>p q</italic>. CROSSOVER [] <italic>p q</italic> &#x0003D; <italic>p</italic>) /\</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;!<italic>h t p q</italic>.</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;CROSSOVER (<italic>h</italic>::<italic>t</italic>) <italic>p q</italic> &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;TAKE <italic>h</italic> (CROSSOVER <italic>t p q</italic>) &#x0002B;&#x0002B;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;DROP <italic>h</italic> (CROSSOVER <italic>t q p</italic>): thm</p></list-item>
</list>
<p>The higher-order logic description of the crossover operation is an important preliminary work for formalizing crossover operators. We further describe the one-point crossover operator and multi-point crossover operator using higher-order logic in HOL4 and complete the proofs of their relevant properties next.</p>
</sec>
</sec>
<sec id="s4">
<title>Higher-order logic representation and formal verification of one-point crossover operators</title>
<p>One-point crossover operator selects two chromosomes in population D as two parent chromosomes and one random crossover point, and then exchanges the chromosome segments at the crossover point to obtain two new offspring chromosomes.</p>
<p>Two parent chromosomes in population D are defined as follows:</p>
<disp-formula id="E34"><mml:math id="M34"><mml:mrow><mml:mtable columnalign='left'><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mi>p</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x02026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mi>n</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mi>q</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x02026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mi>n</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula>
<p><italic>p</italic> and <italic>q</italic> represent the two parent chromosomes; <italic>p</italic><sub><italic>i</italic></sub> (1 &#x02264; <italic>i</italic> &#x02264; n) and <italic>q</italic><sub><italic>i</italic></sub> (1 &#x02264; <italic>i</italic> &#x02264; n) express the genes that make up the chromosomes.</p>
<p>Choose an random intersection <italic>i</italic>(1 &#x02264; <italic>i</italic> &#x02264; n), then generate two new offspring:</p>
<disp-formula id="E35"><mml:math id="M35"><mml:mrow><mml:mtable columnalign='left'><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:msup><mml:mi>p</mml:mi><mml:mo>&#x02032;</mml:mo></mml:msup><mml:mo>=</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x02026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x02026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mtext>n</mml:mtext></mml:msub></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:msup><mml:mi>q</mml:mi><mml:mo>&#x02032;</mml:mo></mml:msup><mml:mo>=</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x02026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x02026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mtext>n</mml:mtext></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula>
<p><italic>p</italic>&#x02032; and <italic>q</italic>&#x02032; denote the two offspring; <italic>p</italic><sub><italic>i</italic></sub> (1 &#x02264; <italic>i</italic> &#x02264; n) and <italic>q</italic><sub><italic>i</italic></sub> (1 &#x02264; <italic>i</italic> &#x02264; n) express the genes that make up the chromosomes.</p>
<sec>
<title>Formalization of one-point crossover operator in HOL4</title>
<p>From the definition of the one-point crossover operator, it is known that the one-point crossover operator generates two chromosomes at the same time, while the crossover operation can only produce one offspring chromosome every time. Thus, the implementation of the one-point crossover operator needs two crossover operations. Since the two offspring are generated at the same time and their relation is parallel, two-tuples are used to indicate the relation between two offspring generated in the mathematical description of the one-point crossover operator as follows:</p>
<disp-formula id="E36"><mml:math id="M36"><mml:mtable columnalign='left'><mml:mtr><mml:mtd><mml:mtable><mml:mtr><mml:mtd><mml:mover accent='true'><mml:mi>&#x02299;</mml:mi><mml:mo>&#x000AF;</mml:mo></mml:mover><mml:mtext>&#x000A0;</mml:mtext><mml:mi>n</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mi>p</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mi>q</mml:mi></mml:mtd></mml:mtr></mml:mtable><mml:mo>=</mml:mo><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mtext>CROSSOVER</mml:mtext></mml:mrow><mml:mrow><mml:mtext>&#x000A0;</mml:mtext><mml:mo stretchy='false'>[</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>]</mml:mo><mml:mtext>&#x000A0;</mml:mtext></mml:mrow><mml:mi>p</mml:mi><mml:mrow><mml:mtext>&#x000A0;</mml:mtext><mml:mi>q</mml:mi><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mtext>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;CROSSOVER</mml:mtext></mml:mrow><mml:mrow><mml:mtext>&#x000A0;</mml:mtext><mml:mo stretchy='false'>[</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>]</mml:mo></mml:mrow><mml:mtext>&#x000A0;</mml:mtext><mml:mi>q</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mi>p</mml:mi></mml:mtd></mml:mtr></mml:mtable><mml:mo stretchy='false'>)</mml:mo><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>Symbol <inline-formula><mml:math id="M37"><mml:mover accent="true"><mml:mrow><mml:mi>&#x02299;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:math></inline-formula> represents an one-point crossover operator; CROSSOVER denotes the crossover operation; <italic>p</italic> and <italic>q</italic> are two parent chromosomes in population <italic>D</italic>; [<italic>n</italic>] is the crossover term with one crossover point <italic>n</italic>.</p>
<p>Based on the above mathematical descriptions, the higher-order logic description of the one-point crossover operator in HOL4 is as follows:</p>
<list list-type="simple">
<list-item><p>&#x0003E; val ONEPOINT_CROSSOVER_def &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;[] |&#x02212; !<italic>n p q</italic>.</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;ONEPOINT_CROSSOVER <italic>n</italic> (<italic>p,q</italic>) &#x0003D;</p>
<p>(CROSSOVER [<italic>n</italic>] <italic>p q</italic>, CROSSOVER [<italic>n</italic>] <italic>q p</italic>): thm</p></list-item>
</list>
</sec>
<sec>
<title>Verification of one-point crossover operator</title>
<p>In order to ensure the correctness of one-point crossover operator, we prove the four basic properties of the one-point crossover operator in HOL4.</p>
<p>Theorem 1: Given any <italic>p, q</italic> &#x02208; <italic>D</italic> and a random crossover point <italic>n</italic>, if LENGTH<italic>p</italic> &#x0003D; LENGTH<italic>q</italic>, then LENGTH (CROSSOVER [<italic>n</italic>] <italic>p q</italic>) &#x0003D; LENGTH <italic>p</italic>. The higher-order logic description is as follows:</p>
<list list-type="simple">
<list-item><p>&#x0003E; val OCROSSOVER_LENGTH &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;[] |&#x02212; !<italic>n p q</italic>.</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;<italic>p</italic> IN <italic>D</italic> /\<italic>q</italic> IN <italic>D</italic> /\</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;(LENGTH <italic>p</italic> &#x0003D; LENGTH <italic>q</italic>) &#x0003D;&#x0003D;&#x0003E;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;(LENGTH (CROSSOVER [<italic>n</italic>] <italic>p q</italic>) &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;LENGTH <italic>p</italic>): thm</p></list-item>
</list>
<p>Theorem 1 ensures that the one-point crossover does not change the length of chromosome.</p>
<p>Theorem 2: Given any <italic>p, q</italic> &#x02208; <italic>D</italic>, if LENGTH <italic>p</italic> &#x0003D; LENGTH <italic>q</italic>, 0 is the crossover point, then CROSSOVER [0] <italic>p q</italic> &#x0003D; <italic>q</italic>. The higher-order logic description is as follows:</p>
<list list-type="simple">
<list-item><p>&#x0003E; val OCROSSOVER_ZERO &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;[] |&#x02212; !<italic>p q</italic>.</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;<italic>p</italic> IN <italic>D</italic> /\<italic>q</italic> IN <italic>D</italic></p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;/\(LENGTH <italic>p</italic> &#x0003D; LENGTH <italic>q</italic>) &#x0003D;&#x0003D;&#x0003E;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;(CROSSOVER [0] <italic>p q</italic> &#x0003D; <italic>q</italic>): thm</p></list-item>
</list>
<p>Theorem 2 shows that when crossover point is 0, the offspring generated by one-point crossover operator are the same as parent chromosomes, but the order is exchanged, that is, the first offspring is the second parent and the second child is the first parent.</p>
<p>Theorem 3: Given any <italic>p, q</italic> &#x02208; <italic>D</italic>, if LENGTH <italic>p</italic> &#x0003D; LENGTH <italic>q</italic>, <italic>n</italic> is the crossover point andLENGTH <italic>p</italic> &#x0003C; <italic>n</italic>, then CROSSOVER [<italic>n</italic>] <italic>p q</italic> &#x0003D; <italic>p</italic>. The higher-order logic description is as follows:</p>
<list list-type="simple">
<list-item><p>&#x0003E; val OCROSSOVER_TOO_LONG &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;[] |&#x02212; !<italic>n p q</italic>.</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;<italic>p</italic> IN <italic>D</italic> /\<italic>q</italic> IN <italic>D</italic> /\</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;(LENGTH <italic>p</italic> &#x0003D; LENGTH <italic>q</italic>) /\</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;LENGTH <italic>p</italic> &#x0003C; <italic>n</italic> &#x0003D;&#x0003D;&#x0003E;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;(CROSSOVER [<italic>n</italic>] <italic>p q</italic> &#x0003D; <italic>p</italic>): thm</p></list-item>
</list>
<p>Theorem 3 guarantees that if the position of the crossing point is larger than the length of chromosome, then the offspring produced by the one-point crossover operator are the same as the parent chromosomes.</p>
<p>Theorem 4: Given any <italic>p, q</italic> &#x02208; <italic>D</italic>, if LENGTH <italic>p</italic> &#x0003D; LENGTH <italic>q</italic>, <italic>n</italic> is the crossover point and LENGTH <italic>p</italic> &#x0003D; <italic>n</italic>, then CROSSOVER [<italic>n</italic>] <italic>p q</italic> &#x0003D; <italic>p</italic>. The higher-order logic description is as follows:</p>
<list list-type="simple">
<list-item><p>&#x0003E; val OCROSSOVER_EQ &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;[] |&#x02212; !<italic>n p q</italic>.</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;<italic>p</italic> IN <italic>D</italic> /\<italic>q</italic> IN <italic>D</italic> /\</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;(LENGTH <italic>p</italic> &#x0003D; LENGTH <italic>q</italic>) /\</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;(<italic>n</italic> &#x0003D; LENGTH <italic>p</italic>) &#x0003D;&#x0003D;&#x0003E;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;(CROSSOVER [<italic>n</italic>] <italic>p q</italic> &#x0003D; <italic>p</italic>): thm</p></list-item>
</list>
<p>Theorem 4 holds the property that if the position of the intersection is equal to the length of chromosome, the offspring generated by the one-point crossover operator are the same as the parents.</p>
<p>As mentioned above, Theorems 1-4 mainly reflect the relation between the positions of crossover points and the results produced by the one-point crossover operator. In addition, the formalization of the one-point crossover operator provides a good foundation for our analysis and design of formalization of the multi-point crossover operator.</p>
</sec>
</sec>
<sec id="s5">
<title>Higher-order logic representation and formal verification of multi-point crossover operators</title>
<p>With a multi-point crossover operator, two chromosomes in population <italic>D</italic> are selected as two parent chromosomes, and with n crossover points, we exchange the chromosome segments to eventually obtain two new offspring chromosomes.</p>
<p>Two parent chromosomes in population <italic>D</italic> are:</p>
<disp-formula id="E37"><mml:math id="M38"><mml:mrow><mml:mtable columnalign='left'><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mi>p</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x02026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mtext>n</mml:mtext></mml:msub></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:mi>q</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x02026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mtext>n</mml:mtext></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula>
<p><italic>p</italic> and <italic>q</italic> represent the two parent chromosomes; <italic>p</italic><sub><italic>i</italic></sub> (1 &#x02264; <italic>i</italic> &#x02264; n) and <italic>q</italic><sub><italic>i</italic></sub> (1 &#x02264; <italic>i</italic> &#x02264; n) represent the genes that make up the chromosomes.</p>
<p>By randomly selecting <italic>n</italic> crossover points: <italic>i, j, k</italic>,&#x02026;., the offspring produced can be represented as follows:</p>
<disp-formula id="E38"><mml:math id="M39"><mml:mrow><mml:mtable columnalign='left'><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:msup><mml:mi>p</mml:mi><mml:mo>&#x02032;</mml:mo></mml:msup><mml:mo>=</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x02026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x02026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mrow><mml:mi>j</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x02026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mi>k</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mrow><mml:mi>k</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>&#x02026;</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr columnalign='left'><mml:mtd columnalign='left'><mml:mrow><mml:msup><mml:mi>q</mml:mi><mml:mo>&#x02032;</mml:mo></mml:msup><mml:mo>=</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x02026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x02026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mrow><mml:mi>j</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x02026;</mml:mo><mml:mo>,</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mi>k</mml:mi></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>p</mml:mi><mml:mrow><mml:mi>k</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>&#x02026;</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula>
<p>Here, <italic>p</italic>&#x02032; and <italic>q</italic>&#x02032; denote the two offspring; <italic>p</italic><sub><italic>i</italic></sub> (1 &#x02264; <italic>i</italic> &#x02264; n).</p>
<sec>
<title>Formalization of multi-point crossover operator in HOL4</title>
<p>From the definition of the multi-point crossover operator, we can see that the multi-point crossover operator is similar to the one-point crossover operator. In both cases, progeny is generated in parallel. The difference is the number of crossover points. Therefore, the creation of multi-point crossover also needs two crossover operations. However, the cross-term denoted by <italic>l</italic> is an arrangement of multiple crossover points rather than only one point. When describing the multi-point crossover with mathematical methods, we still use two-tuples to represent the parallel relation between two offspring.</p>
<p>Therefore, the mathematical description of the multi-point crossover operator obtained is as follows:</p>
<disp-formula id="E39"><mml:math id="M40"><mml:mrow><mml:mover accent='true'><mml:mi>&#x02297;</mml:mi><mml:mo>&#x000AF;</mml:mo></mml:mover><mml:mtext>&#x000A0;&#x000A0;</mml:mtext><mml:mi>l</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mo stretchy='false'>(</mml:mo><mml:mi>p</mml:mi><mml:mo>,</mml:mo><mml:mi>q</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>=</mml:mo><mml:mo stretchy='false'>(</mml:mo><mml:mtext>CROSSOVER&#x000A0;</mml:mtext><mml:mi>l</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mi>p</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mi>q</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mo>,</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mi>C</mml:mi><mml:mi>R</mml:mi><mml:mi>O</mml:mi><mml:mi>S</mml:mi><mml:mi>S</mml:mi><mml:mi>O</mml:mi><mml:mi>V</mml:mi><mml:mi>E</mml:mi><mml:mi>R</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mi>l</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mi>q</mml:mi><mml:mtext>&#x000A0;</mml:mtext><mml:mi>p</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula>
<p>Symbol <inline-formula><mml:math id="M41"><mml:mover accent="false" class="mml-overline"><mml:mrow><mml:mi>&#x02297;</mml:mi></mml:mrow><mml:mo accent="true">&#x000AF;</mml:mo></mml:mover></mml:math></inline-formula> represents multi-point crossover operator; CROSSOVER denotes crossover operation; <italic>p</italic> and <italic>q</italic> are two parent chromosomes in population <italic>D</italic>; <italic>l</italic> is the cross-term with multiple crossover points.</p>
<p>Based on the above mathematical description, a multi-point crossover operator in HOL4 can be denoted as follows:</p>
<list list-type="simple">
<list-item><p>&#x0003E; val MULTIPOINT_CROSSOVER_def &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;[] |&#x02212; !<italic>l p q</italic>.</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;MULTIPOINT_CROSSOVER <italic>l</italic> (<italic>p</italic>,<italic>q</italic>) &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;(CROSSOVER <italic>l p q</italic>, CROSSOVER <italic>l q p</italic>): thm</p></list-item>
</list>
</sec>
<sec>
<title>Verification of multi-point crossover operator</title>
<p>To ensure that the higher-order logic representation of a multi-point crossover operator is correct, its properties must be verified. In the following, Theorems 6 and 7 describe the relation between the crossover point and offspring generated by the multi-point crossover operator; Theorems 8-9 and Theorems 14-16 mainly show that the results produced by the multi-point crossover operator are independent of the arrangement of cross-term; Theorem 10 guarantees that the elimination of two identical elements in a cross-term does not affect the results obtained by the multi-point crossover operator.</p>
<p>Theorem 5: Given any <italic>p, q</italic> &#x02208; <italic>D</italic>, any cross-term <italic>l</italic>, if LENGTH <italic>p</italic> &#x0003D; LENGTH <italic>q</italic>, then LENGTH (CROSSOVER <italic>l p q</italic>) &#x0003D; LENGTH <italic>p</italic>. The higher-order logic description is as follows:</p>
<list list-type="simple">
<list-item><p>&#x0003E; val XCROSSOVER_LENGTH &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;[]|&#x02212; !<italic>l p q</italic>.</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;<italic>p</italic> IN <italic>D</italic> /\<italic>q</italic> IN <italic>D</italic> /\</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;(LENGTH <italic>p</italic> &#x0003D; LENGTH <italic>q</italic>) &#x0003D;&#x0003D;&#x0003E;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;(LENGTH (CROSSOVER <italic>l p q</italic>) &#x0003D; LENGTH <italic>p</italic>): thm</p></list-item>
</list>
<p>Theorem 5 ensures that the length of new chromosomes generated by the multi-point crossover is equal to the length of two parent chromosomes <italic>p</italic> and <italic>q</italic>.</p>
<p>Theorem 6: Given any <italic>p, q</italic> &#x02208; <italic>D</italic>, any cross-term <italic>l</italic>, if LENGTH <italic>p</italic> &#x0003D; LENGTH <italic>q</italic>, then CROSSOVER (0::<italic>l</italic>) <italic>p q</italic> &#x0003D; CROSSOVER <italic>l q p</italic>. The higher-order logic description is as follows:</p>
<list list-type="simple">
<list-item><p>&#x0003E; val XCROSSOVER_ZERO_APPEND &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;[] |&#x02212; !<italic>p q l</italic>.</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;<italic>p</italic> IN <italic>D</italic> /\<italic>q</italic> IN <italic>D</italic> &#x0003D;&#x0003D;&#x0003E;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;(CROSSOVER (0::<italic>l</italic>) <italic>p q</italic> &#x0003D; CROSSOVER <italic>l q p</italic>): thm</p></list-item>
</list>
<p>Theorem 6 shows that in the case of the same chromosomes <italic>p</italic> and <italic>q</italic>, adding a crossover point 0 at the beginning of the cross-term <italic>l</italic> does not change the progeny generated by the multi-point crossover.</p>
<p>Theorem 7: Given any <italic>p, q</italic> &#x02208; <italic>D</italic>, any cross-term <italic>l</italic>, if LENGTH <italic>p</italic> &#x0003D; LENGTH <italic>q</italic> and LENGTH <italic>p</italic> &#x02264; <italic>n</italic>, then CROSSOVER (<italic>n</italic>::<italic>l</italic>) <italic>p q</italic> &#x0003D; CROSSOVER <italic>l p q</italic>. The higher-order logic description is as follows:</p>
<list list-type="simple">
<list-item><p>&#x0003E; val XCROSSOVER_TOO_LENGTH &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;[] |&#x02212; !<italic>p q n l</italic>.</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;<italic>p</italic> IN <italic>D</italic> /\<italic>q</italic> IN <italic>D</italic> /\</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;(LENGTH <italic>p</italic> &#x0003D; LENGTH <italic>q</italic>) /\LENGTH <italic>p</italic> &#x0003C; &#x0003D; <italic>n</italic> &#x0003D;&#x0003D;&#x0003E;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;(CROSSOVER (<italic>n</italic>::<italic>l</italic>) <italic>p q</italic> &#x0003D; CROSSOVER <italic>l p q</italic>): thm</p></list-item>
</list>
<p>Theorem 7 guarantees that in the case of the same parent chromosomes <italic>p</italic> and <italic>q</italic>, when <italic>n</italic> is not less than the length of chromosome, adding a crossover point <italic>n</italic> at the beginning of the cross-term <italic>l</italic> does not change the progeny generated by multi-point crossover.</p>
<p>Theorem 8: Given any <italic>p, q</italic> &#x02208; <italic>D</italic>, any cross-term <italic>l, l1, l2</italic>, if LENGTH <italic>p</italic> &#x0003D; <italic>cc</italic>LENGTH <italic>q</italic> and CROSSOVER <italic>l</italic>1 <italic>p q</italic> &#x0003D; CROSSOVER <italic>l</italic>2 <italic>p q</italic>, then CROSSOVER (<italic>l</italic>&#x0002B;&#x0002B;<italic>l</italic>1) <italic>p q</italic> &#x0003D; CROSSOVER (<italic>l</italic>&#x0002B;&#x0002B;<italic>l</italic>2) <italic>p q</italic>. The higher-order logic description is as follows:</p>
<list list-type="simple">
<list-item><p>&#x0003E; val XCROSSOVER_EQ &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;[]|&#x02212; !<italic>l1 l2</italic>.</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;(!<italic>p q</italic>.<italic>p</italic> IN <italic>D</italic> /\<italic>q</italic> IN <italic>D</italic> /\</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;(LENGTH <italic>p</italic> &#x0003D; LENGTH <italic>q</italic>) /\</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;(CROSSOVER <italic>l1 p q</italic> &#x0003D; CROSSOVER <italic>l2 p q</italic>)) &#x0003D;&#x0003D;&#x0003E;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;!<italic>p q l</italic>. CROSSOVER (<italic>l</italic> &#x0002B;&#x0002B; <italic>l1</italic>) <italic>p q</italic> &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;CROSSOVER (<italic>l</italic> &#x0002B;&#x0002B; <italic>l2</italic>) <italic>p q</italic>: thm</p></list-item>
</list>
<p>Theorem 8 shows that in the case of the same parent chromosomes <italic>p</italic> and <italic>q</italic>, if the offspring generated by the multi-point crossover with cross-term <italic>l1</italic> are equal to the offspring produced by the multi-point crossover with cross-term <italic>l2</italic>, adding cross-term <italic>l</italic> at the beginning of the cross-term <italic>l1</italic> and <italic>l2</italic> respectively does not change the equivalency of the progeny generated in the same way.</p>
<p>Theorem 9: Given any <italic>p, q</italic> &#x02208; <italic>D</italic>, any cross-term <italic>l</italic>, any <italic>m, n</italic> &#x02208; <italic>N</italic>, if LENGTH <italic>p</italic> &#x0003D; LENGTH <italic>q</italic>, then CROSSOVER (<italic>n</italic>::(<italic>m</italic>::<italic>l</italic>)) <italic>p q</italic> &#x0003D; CROSSOVER (<italic>m</italic>::(<italic>n</italic>::<italic>l</italic>)) <italic>p q</italic>. The higher-order logic description is as follows:</p>
<list list-type="simple">
<list-item><p>&#x0003E; val XCROSSOVER_SWAP &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;[] |&#x02212; !<italic>p q l m n</italic>.</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;<italic>p</italic> IN <italic>D</italic> /\<italic>q</italic> IN <italic>D</italic> /\</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;(LENGTH <italic>p</italic> &#x0003D; LENGTH <italic>q</italic>) &#x0003D;&#x0003D;&#x0003E;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;(CROSSOVER (<italic>n</italic>::<italic>m</italic>::<italic>l</italic>) <italic>p q</italic> &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;CROSSOVER (<italic>m</italic>::<italic>n</italic>::<italic>l</italic>) <italic>p q</italic>): thm</p></list-item>
</list>
<p>Theorem 9 holds the property that in the case of the same parent chromosomes <italic>p</italic> and <italic>q</italic>, two crossover points with different order are added respectively at the beginning of cross-term <italic>l</italic>, then the progeny produced by the multi-point crossover with the new two cross-terms respectively are the same.</p>
<p>Theorem 10: Given any <italic>p, q</italic> &#x02208; <italic>D</italic>, any cross-term <italic>l</italic>, any <italic>n</italic> &#x02208; <italic>N</italic>, if LENGTH <italic>p</italic> &#x0003D; LENGTH <italic>q</italic>, then CROSSOVER (<italic>n</italic>::(<italic>n</italic>::<italic>l</italic>)) <italic>p q</italic> &#x0003D; CROSSOVER <italic>l p q</italic>. The higher-order logic description is as follows:</p>
<list list-type="simple">
<list-item><p>&#x0003E; val XCROSSOVER_SAME &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;[] |&#x02212; !<italic>p q l n</italic>.</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;<italic>p</italic> IN <italic>D</italic> /\<italic>q</italic> IN <italic>D</italic> /\</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;(LENGTH <italic>p</italic> &#x0003D; LENGTH <italic>q</italic>) &#x0003D;&#x0003D;&#x0003E;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;(CROSSOVER (<italic>n</italic>::<italic>n</italic>::<italic>l</italic>) <italic>p q</italic> &#x0003D; CROSSOVER <italic>l p q</italic>): thm</p></list-item>
</list>
<p>Theorem 10 guarantees that in the case of the same parent chromosomes <italic>p</italic> and <italic>q</italic>, if we add two identical crossover points at the beginning of the cross-term <italic>l</italic> to obtain a new cross-term, the offspring generated by multi-point crossover operator with the new cross-term are the equal to those generated with cross-term <italic>l</italic>. In other words, the elimination of two identical elements in cross-term does not affect the results generated by multi-point crossover.</p>
<p>From Theorems 8&#x02013;10, we can see that the results produced by the multi-point crossover operator used in genetic algorithms are related to the position of crossover points, and independent of the order of crossover points.</p>
<p>To demonstrate that the results generated by the multi-point crossover are not affected by the order of cross-term, the concept of strictly increasing list is used to verify the properties of the crossover operator. Strictly increasing list means that the elements in the list are in ascending order, and two identical elements are eliminated in the list. If cross-term <italic>l&#x00027;</italic> is the strictly increasing list of cross-term <italic>l</italic>, the property that progeny generated by the multi-point crossover operator are not affected by the order of cross-term, can be expressed as: CROSSOVER <italic>l p q</italic> &#x0003D; CROSSOVER <italic>l</italic>&#x02032; <italic>p q</italic>.</p>
<p>In order to get the strictly increasing list of any list in HOL4, it is necessary to define two predicates INSERT_PL and CANON_PL. Given a strictly increasing list <italic>l</italic> and a natural number <italic>n</italic>, when <italic>n</italic> is not in list <italic>1</italic>, predicate INSERT_PL can produce a new strictly increasing list with element <italic>n</italic>; otherwise it gets a new list that has the eliminated element <italic>n</italic>. The function of predicate CANON_PL is to get the strictly increasing list <italic>l&#x00027;</italic> of any given list <italic>l</italic>.</p>
<p>The higher-order logic presentations of predicate INSERT_PL and predicate CANON_PL are expressed as follows:</p>
<list list-type="simple">
<list-item><p>&#x0003E; val INSERT_PL &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;[] |&#x02212; (!<italic>n</italic>. INSERT_PL <italic>n</italic> [] &#x0003D; [<italic>n</italic>]) /\</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;!<italic>n h t</italic>.</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;INSERT_PL <italic>n</italic> (<italic>h</italic>::<italic>t</italic>) &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;if <italic>n</italic> &#x0003C; <italic>h</italic> then <italic>n</italic>::<italic>h</italic>::<italic>t</italic> else if <italic>n</italic> &#x0003D; <italic>h</italic></p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;then <italic>t</italic> else <italic>h</italic>::INSERT_PL <italic>n t</italic>: thm</p>
<p>&#x0003E; val CANON_PL &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;[] |&#x02212; (CANON_PL [] &#x0003D; []) /\</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;!<italic>h t</italic>. CANON_PL (<italic>h</italic>::<italic>t</italic>) &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;INSERT_PL <italic>h</italic> (CANON_PL <italic>t</italic>): thm</p></list-item>
</list>
<p>To ensure that the definitions of the two predicates are correct, we need to prove the properties of the strictly increasing list. The property of the strictly increasing list can be described as &#x0201C;any element in a strictly increasing list is smaller than the next element&#x0201D;. Predicate INCREASE_PRO is used to represent this property in HOL4, and its higher-order logic description is as follows:</p>
<list list-type="simple">
<list-item><p>&#x0003E; val INCREASE_PRO &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;[] |- (INCREASE_PRO [] &#x0003C;&#x0003D;&#x0003E; T) /\</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;!<italic>t1 h1</italic>. INCREASE_PRO (<italic>h1</italic>::<italic>t1</italic>) &#x0003C;&#x0003D;&#x0003E;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;case <italic>t1</italic> of [] &#x0003D; &#x0003E; T |<italic>h2</italic>::<italic>t2</italic> &#x0003D; &#x0003E;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;<italic>h1</italic> &#x0003C; <italic>h2</italic> /\INCREASE_PRO (<italic>h2</italic>::<italic>t2</italic>): thm</p></list-item>
</list>
<p>In addition, it is also required to prove the following properties of the strictly increasing list:</p>
<p>Theorem 11: Given any cross-term <italic>l</italic>, any <italic>m, n</italic> &#x02208; <italic>N</italic>, if INCREASE_PRO(<italic>n</italic>::<italic>l</italic>) and <italic>m</italic> &#x0003C; <italic>n</italic>, then INCREASE_PRO(<italic>m</italic>::<italic>l</italic>). The higher-order logic description is as follows:</p>
<list list-type="simple">
<list-item><p>&#x0003E; val LIST_INCREASE_ONE &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;[] |&#x02212; !<italic>l m n</italic>. INCREASE_PRO (<italic>n</italic>::<italic>l</italic>) /\</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;<italic>m</italic> &#x0003C; <italic>n</italic> &#x0003D;&#x0003D;&#x0003E; INCREASE_PRO (<italic>m</italic>::<italic>l</italic>): thm</p></list-item>
</list>
<p>Theorem 11 shows that if adding a natural number <italic>n</italic> at the beginning of list <italic>l</italic> possesses the strictly increasing property, then adding a natural number <italic>m</italic> that is smaller than <italic>n</italic> at the beginning of list <italic>l</italic> can still get a new strictly increasing list.</p>
<p>Theorem 12: Given any cross-term <italic>l</italic>, any <italic>n</italic> &#x02208; <italic>N</italic>, if INCREASE_PRO <italic>l</italic>, then INSERT_PL <italic>n l</italic> still meets INCREASE_PRO(INSERT_PL <italic>n l</italic>). The higher-order logic description is as follows:</p>
<list list-type="simple">
<list-item><p>&#x0003E; val LIST_INCREASE_INSERT &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;[] |- !<italic>l n</italic>. INCREASE_PRO <italic>l</italic> &#x0003D;&#x0003D;&#x0003E;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;INCREASE_PRO (INSERT_PL <italic>n l</italic>): thm</p></list-item>
</list>
<p>Theorem 12 ensures that if <italic>l</italic> is a strictly increasing list and a natural number <italic>n</italic> is inserted into list <italic>1</italic> by predicate INSERT_PL, then the new list obtained is still a strictly increasing list.</p>
<p>In order to prove the theorem 13, we need to give the following lemma:</p>
<p>Lemma 1: Given any cross-term <italic>l</italic>, any <italic>m, n</italic> &#x02208; <italic>N</italic>, if INCREASE_PRO(<italic>m</italic>::<italic>n</italic>::<italic>l</italic>), then <italic>m</italic> &#x0003C; <italic>n</italic> and INCREASE_PRO(<italic>n</italic>::<italic>l</italic>). The higher-order logic description is as follows:</p>
<list list-type="simple">
<list-item><p>&#x0003E; val LIST_INCREASE_IMP &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;[] |&#x02212; !<italic>l m n</italic>. INCREASE_PRO (<italic>m</italic>::<italic>n</italic>::<italic>l</italic>) &#x0003D;&#x0003D;&#x0003E;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;<italic>m</italic> &#x0003C; <italic>n</italic> /\INCREASE_PRO (<italic>n</italic>::<italic>l</italic>): thm</p></list-item>
</list>
<p>Lemma 1 shows that if (<italic>m</italic>::<italic>n</italic>::<italic>l</italic>) is a strictly increasing list, then (<italic>n</italic>::<italic>l</italic>) is a strictly increasing list and <italic>m</italic> &#x0003C; <italic>n</italic>.</p>
<p>Theorem 13: Given any cross-term <italic>l</italic>, if INCREASE_PRO <italic>l</italic>, then CANON_PL <italic>l</italic> &#x0003D; <italic>l</italic>. The higher-order logic description is as follows:</p>
<list list-type="simple">
<list-item><p>&#x0003E; val LIST_INCREASE_CANON &#x0003D; [] |&#x02212;</p>
<p>!<italic>l</italic>. INCREASE_PRO <italic>l</italic> &#x0003D;&#x0003D;&#x0003E; (CANON_PL <italic>l</italic> &#x0003D; <italic>l</italic>): thm</p></list-item>
</list>
<p>Theorem 13 illustrates that if the arrangement of a list is strictly incremental, then the list is a strictly increasing list.</p>
<p>The proofs of Theorems 11&#x02013;13 ensure the correctness of the strictly increasing list defined in HOL4. By using the definition of strictly increasing list, the following properties of the multi-point crossover operator can be further proved.</p>
<p>Theorem 14: Given any <italic>p, q</italic> &#x02208; <italic>D</italic>, any cross-term <italic>l</italic>. <italic>l</italic>&#x02032; is the strictly increasing list of <italic>l</italic>, if LENGTH <italic>p</italic> &#x0003D; LENGTH <italic>q</italic>, then CROSSOVER <italic>l p q</italic> &#x0003D; CROSSOVER<italic>l</italic>&#x02032; <italic>p q</italic>. The higher-order logic description is as follows:</p>
<list list-type="simple">
<list-item><p>&#x0003E; val CANON_XCROSSOVER_EQ &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;[] |&#x02212; !<italic>p q l n</italic>.</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;<italic>p</italic> IN <italic>D</italic> /\<italic>q</italic> IN <italic>D</italic> /\</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;(LENGTH <italic>p</italic> &#x0003D; LENGTH <italic>q</italic>) &#x0003D;&#x0003D;&#x0003E;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;(CROSSOVER (CANON <italic>l</italic>) <italic>p q</italic> &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;CROSSOVER <italic>l p q</italic>): thm</p></list-item>
</list>
<p>Theorem 14 guarantees that in the case of the same parent chromosomes <italic>p</italic> and <italic>q</italic>, the progeny generated by multi-point crossover with cross-term <italic>l</italic> are equal to the ones produced in the same way with the strictly increasing list of <italic>l</italic>. It is also more straightforward to illustrate that the results of the multi-point crossover are independent of the order of the elements in the cross-term.</p>
<p>Theorem 15: Given any <italic>p, q</italic> &#x02208; <italic>D</italic>, any cross-term <italic>l</italic>. <italic>l</italic>&#x02032; is the strictly increasing list of <italic>l</italic>, any <italic>n</italic> &#x02208; <italic>N</italic>. if LENGTH <italic>p</italic> &#x0003D; LENGTH <italic>q</italic>, then CROSSOVER (INSERT_PL <italic>n l</italic>&#x02032;) <italic>p q</italic> &#x0003D; CROSSOVER (<italic>n</italic>::<italic>l</italic>) <italic>p q</italic>. The higher-order logic description is as follows:</p>
<list list-type="simple">
<list-item><p>&#x0003E; val LINCREASE_XCROSSOVER_N &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;[] |&#x02212; !<italic>p q l n</italic>.</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;<italic>p</italic> IN <italic>D</italic> /\<italic>q</italic> IN <italic>D</italic> /\</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;(LENGTH <italic>p</italic> &#x0003D; LENGTH <italic>q</italic>) &#x0003D;&#x0003D;&#x0003E;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;(CROSSOVER (INSERT_PL <italic>n l</italic>) <italic>p q</italic> &#x0003D;</p>
<p>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;CROSSOVER (<italic>n</italic>::<italic>l</italic>) <italic>p q</italic>): thm</p></list-item>
</list>
<p>Theorem 15 shows that in the case of the same parent chromosomes <italic>p</italic> and <italic>q</italic>, if the crossover point <italic>n</italic> is inserted into cross-term <italic>l</italic> and <italic>l&#x00027;</italic> respectively, where <italic>l&#x00027;</italic> is the strictly increasing list of <italic>l</italic>, then the results obtained by the multi-point crossover under these two new cross-terms are the same.</p>
<p>Theorem 16: Given any <italic>p, q</italic> &#x02208; <italic>D</italic>, any cross-term <italic>l1, l2</italic>, if LENGTH <italic>p</italic> &#x0003D; LENGTH <italic>q</italic> and (CANON_PL <italic>l</italic>1) &#x0003D; (CANON_PL <italic>l</italic>2), then CROSSOVER <italic>l</italic>1 <italic>p q</italic> &#x0003D; CROSSOVER <italic>l</italic>2 <italic>p q</italic>. The higher-order logic description is as follows:</p>
<list list-type="simple">
<list-item><p>&#x0003E; val CANON_XCROSSOVER_DEQ &#x0003D;</p>
<p>[] |&#x02212; !<italic>p q l1 l2</italic>.</p>
<p><italic>p</italic> IN <italic>D</italic> /\<italic>q</italic> IN <italic>D</italic> /\</p>
<p>(LENGTH <italic>p</italic> &#x0003D; LENGTH <italic>q</italic>) /\</p>
<p>(CANON_PL <italic>l1</italic> &#x0003D; CANON_PL <italic>l2</italic>) &#x0003D;&#x0003D;&#x0003E;</p>
<p>(CROSSOVER <italic>l1 p q</italic> &#x0003D; CROSSOVER <italic>l2 p q</italic>): thm</p></list-item>
</list>
<p>Theorem 16 ensures that in the case of the same parent chromosomes <italic>p</italic> and <italic>q</italic>, if the strictly increasing list of different cross-terms are the same, then the offspring respectively produced by the multi-point crossover under the different cross-terms are the same.</p>
</sec>
</sec>
<sec sec-type="discussion" id="s6">
<title>Discussion</title>
<p>As shown above, one-point and multi-point crossover operators are formalized and verified. The proposed technique is general and can applied in formalizing and verifying other genetic operators in genetic algorithms such as mutation. Mutation is another genetic operator that can preserve genetic diversity in such a way local minima caused by similar populations of chromosomes can be avoided. With mutation, one or more gene values in a chromosome can be changed from its initial state so a better solution may be achieved. To implement mutation, a common method is to generate a random variable for each bit in a chromosome sequence that is used to determine whether or not a particular bit will be amended. To realize the formalization and verification of mutation operations, first, we need to use the higher-order logic to represent basic elements, and then we can construct the formal modeling and perform verification with HOL4. This will be investigated in our future work.</p>
</sec>
<sec id="s7">
<title>Evaluation</title>
<sec>
<title>Experimental setup</title>
<p>We conduct the experiment in Windows 7 with the specific tool HOL4, and the programing language is ML. In the experiment, robot path planning based on GA is described by ML, and the cross operation in algorithm is described by multi-point crossover mentioned in this paper. We proved the effectiveness of our formal model of crossover by running the algorithm in HOL4 successfully. In addition, we do not need to specify the inputs because of the advantage of theorem proving, and HOL4 will exhaust all the cases space, i.e., covering all inputs. The final output will show that robot can avoid collisions in any input situation.</p>
</sec>
<sec>
<title>Case study on robotics</title>
<p>Genetic Algorithms have many advantages compared with traditional optimization methods. In this section, we present a case study on robotics, in which a genetic algorithm with the two-point crossover operator implemented by HOL4 is applied in robot path planning. We give the specific formal description and collision free verification.</p>
<p>The workspace of the robot is a 2-D environment. We assume that the location and size of obstacles are known, and the obstacles will stay the same during the movement of robot. The robot working space is modeled with grids following Cartesian coordinates. As shown in Figure <xref ref-type="fig" rid="F5">5</xref>, the lower left corner of the grid array is the coordinate origin, the right direction of the horizontal axis is the forward direction of x axis, and the up direction of the vertical axis is the forward direction of y axis. Each grid interval corresponds to a unit length on the coordinate axis, and any grid can be uniquely identified by (<italic>x, y</italic>). The length and width of a grid is defined as 10 units of distance, S represents the starting point of the robot, G represents the target point of the robot, and black grids are used to represent obstacles.</p>
<fig id="F5" position="float">
<label>Figure 5</label>
<caption><p>Schematic diagram of the robot motion space.</p></caption>
<graphic xlink:href="fnbot-11-00056-g0005.tif"/>
</fig>
<p>The moving path of the robot is represented by the chromosome. We defined the chromosome through a real list, where the subscript of the list represents the value of the coordinate <italic>x</italic>, and the gene is the value of the list, which represents the value of the coordinate <italic>y</italic>. The population is composed of a certain number of chromosomes, and its size is 20. In order to guarantee the global optimality of the genetic algorithm, the initial population is randomly generated.</p>
<p>The fitness function directly affects the computation efficiency and time of the genetic algorithm. In the path planning of the robot, the design of the fitness function needs to consider the length of the path and collision avoidance. Therefore, the fitness function is set to the sum of the path length and the obstacles&#x00027; coordinates. It is represented as:</p>
<disp-formula id="E40"><mml:math id="M42"><mml:mrow><mml:mi>L</mml:mi><mml:mo>=</mml:mo><mml:mi>L</mml:mi><mml:mn>1</mml:mn><mml:mo>+</mml:mo><mml:mi>L</mml:mi><mml:mn>2</mml:mn><mml:mo>=</mml:mo><mml:mstyle displaystyle='true'><mml:munderover><mml:mo>&#x02211;</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mi>N</mml:mi></mml:munderover><mml:mrow><mml:msqrt><mml:mrow><mml:msup><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:msub><mml:mi>y</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>&#x02212;</mml:mo><mml:msub><mml:mi>y</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo stretchy='false'>)</mml:mo></mml:mrow><mml:mn>2</mml:mn></mml:msup><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msqrt></mml:mrow></mml:mstyle><mml:mo>+</mml:mo><mml:mi>A</mml:mi><mml:mstyle displaystyle='true'><mml:munderover><mml:mo>&#x02211;</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mi>m</mml:mi></mml:munderover><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:msub><mml:mi>x</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mi>y</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:mstyle></mml:mrow></mml:math></disp-formula>
<p>Here, <italic>L1</italic> represents the distance between two adjacent coordinate points, and <italic>L2</italic> represents the obstacle coordinates. When <italic>i</italic> &#x0003D; <italic>xj</italic> and <italic>yi</italic> &#x0003D; <italic>yj, A</italic> is 100; otherwise <italic>A</italic> is 0. <italic>N</italic> &#x0003D; 10 indicates that the space coordinate has 10 unit lengths,<italic>m</italic> represents the number of obstacles. In this way, the fitness function is very large when there are obstacles in the path. In order to simplify the calculation in HOL4, we modified the function as follows:</p>
<disp-formula id="E41"><mml:math id="M43"><mml:mrow><mml:msup><mml:mi>L</mml:mi><mml:mo>&#x02032;</mml:mo></mml:msup><mml:mo>=</mml:mo><mml:mstyle displaystyle='true'><mml:munderover><mml:mo>&#x02211;</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mi>N</mml:mi></mml:munderover><mml:mrow><mml:msup><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:msub><mml:mi>y</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>&#x02212;</mml:mo><mml:msub><mml:mi>y</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:mo stretchy='false'>)</mml:mo></mml:mrow><mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:mstyle><mml:mo>+</mml:mo><mml:mn>10</mml:mn><mml:mo>+</mml:mo><mml:mi>A</mml:mi><mml:mstyle displaystyle='true'><mml:munderover><mml:mo>&#x02211;</mml:mo><mml:mrow><mml:mi>j</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mi>m</mml:mi></mml:munderover><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:msub><mml:mi>x</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mi>y</mml:mi><mml:mi>j</mml:mi></mml:msub><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:mstyle></mml:mrow></mml:math></disp-formula>
<p>In this function, <italic>L1</italic> represents the sum of squares of the distance between two points. Although we modified the calculated way of <italic>L1</italic>, it does not affect the comparative relationship between the length of the path of two chromosomes. Thus, the new fitness function can also be used to evaluate the optimal path in the path planning. According to the property of the shortest path, we can see that the lower the fitness value of the chromosome is, the better the path will become.</p>
<p>In this genetic algorithm, we use three basic genetic operators: selection, crossover, and mutation. In the selection operator, we use ranking selection, by which each individual in the population is ranked from low to high according to the fitness, the selected probability of the forward 80% individuals in the population is 6.25%, and the remaining 20% is 0. In the crossover operator, we use the two-point crossover operator, the crossover probability is 0.9, and the two intersections are generated randomly. In the mutation operator, we use the basic bit mutation, the mutation probability is 0.08, and the mutation position is selected randomly.</p>
<p>Next, we present how to define each operators using HOL4.</p>
<p>The selection operator is defined as follows:</p>
<list list-type="simple">
<list-item><p>val <italic>Pi</italic> &#x0003D; FST (List.nth (QuickresultList, hd Random.rangelist(0,16) (1,Random.newgen())))</p></list-item>
</list>
<p>QuickresultList preserves the chromosome and its fitness value according to fitness value from low to high. hd Random.rangelist(0,16) (1,Random.newgen()) indicates the selected chromosome subscript with equal probability. FST deletes the selected fitness value of the chromosome and returns the selected chromosome to the chromosome <italic>Pi</italic>&#x025E6;</p>
<p>The crossover operator is defined as follows:</p>
<list list-type="simple">
<list-item><p>fun TWOIPOINT_CROSSOVER <italic>l</italic> (<italic>p</italic>,<italic>q</italic>) &#x0003D; (CROSSOVER <italic>l p q</italic>, CROSSOVER <italic>l q p</italic>)</p></list-item>
</list>
<p>TWOIPOINT_CROSSOVER is the formalized crossover operator, CROSSOVER is the formalized crossover operation. With the two-point crossover, TWOIPOINT_CROSSOVER <italic>l</italic> (<italic>p,q</italic>) will transfer a cross-term <italic>l</italic> to two crossover points.</p>
<p>The mutation operator is defined as follows:</p>
<list list-type="simple">
<list-item><p>fun BMUTATION (<italic>pih</italic>::<italic>pil</italic>) <italic>point</italic> &#x0003D; List.take ((<italic>pih</italic>::<italic>pil</italic>),<italic>point</italic>-1) &#x00040; ((Random.rangelist(1,11)(1,Random.newgen()) &#x00040; List.drop ((<italic>pih</italic>::<italic>pil</italic>),<italic>point</italic>)))</p></list-item>
</list>
<p>BMUTATION represents the mutation operator, <italic>pih</italic>::<italic>pil</italic> is the chromosomes to be mutated, <italic>point</italic> indicates the mutation point randomly produced. List.take ((<italic>pih</italic>::<italic>pil</italic>), <italic>point</italic>-1) obtains the genes before the mutation point, Random.rangelist(1,11)(1,Random.newgen()) can select the allele gene by equal probability at the mutation position, List.drop ((<italic>pih</italic>::<italic>pil</italic>),<italic>point</italic>) obtains the genes after the mutation point, &#x00040; is used to connect the gene segments obtained by the three functions after the mutation.</p>
<p>With the genetic algorithm, we can obtain the optimization collision free path. In order to ensure that the genetic algorithm can find the final path and meet the collision free conditions, we need verify the final path. In this paper, the array of coordinate points of the final path represented by the list. If one of the elements in the list is equal to the coordinate of the obstacle, the final path does not meet the property of collision free.</p>
<p>The verification result is shown as follow:</p>
<list list-type="simple">
<list-item><p>val <italic>BP</italic> &#x0003D; INTER ([(1,2),(2,4),(3,6),(4,7),(5,8),(6,8),(7,9),(8,9), (9,9),(10,10)],</p>
<p>[(5,7),(7,8),(8,8),(9,8)]);</p>
<p>&#x0003E; val <italic>BP</italic> &#x0003D; []: int list</p></list-item>
</list>
<p>Among them, INNER refers to the formal description of the property of collision free is shown below:</p>
<list list-type="simple">
<list-item><p>val BP &#x0003D; INTER (<italic>PATH, O</italic>);</p></list-item>
</list>
<p>It is used to determine whether the two lists have the same elements. If there is no such elements, it outputs the empty list; otherwise, it generates the new list of the same elements. <italic>PATH</italic> is the list of the final robot path generated by the genetic algorithm, <italic>PATH</italic>=[(<italic>x1</italic>,<italic>y1</italic>),&#x02026;,(<italic>x10</italic>,<italic>y10</italic>)], (<italic>xi</italic>,<italic>yi</italic>)(1 &#x02264; <italic>i</italic> &#x02264; 10) indicates the coordinates of the final path. <italic>O</italic> is the list of the Coordinates of the obstacles,<italic>O</italic>=[(<italic>xO1</italic>,<italic>yO1</italic>),&#x02026;(<italic>xOm</italic>,<italic>yOm</italic>)], (<italic>xOi</italic>,<italic>yOi</italic>)(1 &#x02264; <italic>i</italic> &#x02264; <italic>m</italic>) indicates the Coordinates of the obstacles, and <italic>m</italic> represents the number of the obstacles.</p>
<p>The <italic>BP</italic> is final result. It is an empty list, illustrating the optimal or near optimal path generated by the genetic algorithm has no common elements with the obstacles. Thus, the final path meets the collision free condition.</p>
</sec>
</sec>
<sec sec-type="conclusions" id="s8">
<title>Conclusion</title>
<p>In this paper, we formalized crossover operations with higher-order logic based on HOL4 that is easy to be deployed with its user-friendly programing environment. We implemented our technique to solve a path planning problem using a genetic algorithm with our formalized crossover operations, and the results show the effectiveness of our technique.</p>
<p>There are two directions for the future work. First, it is interesting to extend formalized crossover operations to other applications such as energy optimization for embedded systems (Wang et al., <xref ref-type="bibr" rid="B18">2011</xref>) and non-volatile memory (Chen et al., <xref ref-type="bibr" rid="B2">2016</xref>; Long et al., <xref ref-type="bibr" rid="B10">2016</xref>; Wang et al., <xref ref-type="bibr" rid="B19">2016</xref>; Liu et al., <xref ref-type="bibr" rid="B9">2017</xref>), and construct a crossover operator library in HOL4. Moreover, we can further formalize genetic algorithms using formalized crossover operators. Based on this, the formalized genetic algorithm can be used to create the general tactics in HOL4, thus improving the automation level of the interactive theorem proving system.</p>
</sec>
<sec id="s9">
<title>Author contributions</title>
<p>JZ: Substantial contributions to the conception and design of the work, drafting the work, final approval of the version to be published. MK: Substantial contributions to draft the work the acquisition, analysis, and interpretation of data for the work. XL: Revising the work critically for important intellectual content. GL: In ensuring that questions related to the accuracy of the work are appropriately investigated and resolved.</p>
<sec>
<title>Conflict of interest statement</title>
<p>The authors declare that the research was conducted in the absence of any commercial or financial relationships that could be construed as a potential conflict of interest.</p>
</sec>
</sec>
</body>
<back>
<ref-list>
<title>References</title>
<ref id="B1">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Achour</surname> <given-names>N.</given-names></name> <name><surname>Chaalal</surname> <given-names>M.</given-names></name></person-group> (<year>2011</year>). <article-title>Mobile robots path planning using genetic algorithms</article-title>, in <source>Proceeding of the Seventh International Conference on Autonomic and Autonomous Systems</source>, (<publisher-loc>Venice/Mestre</publisher-loc>), <fpage>111</fpage>&#x02013;<lpage>115</lpage>.</citation></ref>
<ref id="B2">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Chen</surname> <given-names>R.</given-names></name> <name><surname>Wang</surname> <given-names>Y.</given-names></name> <name><surname>Hu</surname> <given-names>J.</given-names></name> <name><surname>Liu</surname> <given-names>D.</given-names></name> <name><surname>Shao</surname> <given-names>Z.</given-names></name> <name><surname>Guan</surname> <given-names>Y.</given-names></name></person-group> (<year>2016</year>). <source>Image-Content-Aware I/O Optimization for Mobile Virtualization</source>, <volume>Vol. 16</volume>. <publisher-loc>New York, NY</publisher-loc>: <publisher-name>ACM Transactions on Embedded Computing Systems (TECS)</publisher-name>.</citation></ref>
<ref id="B3">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Darmochwal</surname> <given-names>A.</given-names></name> <name><surname>Nakamura</surname> <given-names>Y.</given-names></name></person-group> (<year>1991</year>). <article-title>The topological space E2Arcs, line segments and special polygonal arcs</article-title>. <source>J. Formal. Math.</source> <volume>3</volume>, <fpage>617</fpage>&#x02013;<lpage>621</lpage>.</citation></ref>
<ref id="B4">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Gautam</surname> <given-names>S. A.</given-names></name> <name><surname>Verma</surname> <given-names>N.</given-names></name></person-group> (<year>2014</year>). <article-title>Path planning for unmanned aerial vehicle based on genetic algorithm &#x00026; artificial neural network in 3D</article-title>, in <source>Proceeding of the Conference on Data Mining and Intelligent Computing (ICDMIC &#x00027;14)</source>, (<publisher-loc>New Delhi</publisher-loc>), <fpage>1</fpage>&#x02013;<lpage>5</lpage>.</citation></ref>
<ref id="B5">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Liu</surname> <given-names>G.-D.</given-names></name> <name><surname>Xie</surname> <given-names>H.-B.</given-names></name> <name><surname>Li</surname> <given-names>C.-G.</given-names></name></person-group> (<year>2013</year>). <article-title>Method of mobile robot path planning in dynamic environment based on genetic algorithm</article-title>. <source>J. Rob. 2003</source> <volume>25</volume>, <fpage>327</fpage>&#x02013;<lpage>330</lpage>; 343. <pub-id pub-id-type="doi">10.3321/j.issn:1002-0446.2003.04.009</pub-id></citation></ref>
<ref id="B6">
<citation citation-type="web"><person-group person-group-type="author"><collab>HOL Project</collab></person-group> (<year>2017</year>). Available online at: <ext-link ext-link-type="uri" xlink:href="https://hol-theorem-prover.org">https://hol-theorem-prover.org</ext-link></citation></ref>
<ref id="B7">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Hu</surname> <given-names>Y.</given-names></name> <name><surname>Yang</surname> <given-names>S. X.</given-names></name></person-group> (<year>2004</year>). <article-title>A knowledge based genetic algorithm for path planning of a mobile robot</article-title>, in <source>Proceeding of the IEEE International Conference on Robotics and Automation</source>, (<publisher-loc>New Orleans, LA</publisher-loc>), <fpage>4350</fpage>&#x02013;<lpage>4355</lpage>.</citation></ref>
<ref id="B8">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Kotowicz</surname> <given-names>J.</given-names></name></person-group> (<year>1993</year>). <article-title>Functions and finite sequences of real numbers</article-title>. <source>J. Formal. Math.</source> <volume>5</volume>, <fpage>1</fpage>&#x02013;<lpage>4</lpage>.</citation></ref>
<ref id="B9">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Liu</surname> <given-names>D.</given-names></name> <name><surname>Zhong</surname> <given-names>K.</given-names></name> <name><surname>Wang</surname> <given-names>T.</given-names></name> <name><surname>Wang</surname> <given-names>Y.</given-names></name> <name><surname>Shao</surname> <given-names>Z.</given-names></name> <name><surname>Edwin</surname> <given-names>H.</given-names></name> <etal/></person-group>. (<year>2017</year>). <article-title>Durable address translation in PCM-based flash storage systems</article-title>. <source>IEEE Trans. Parall. Distrib. Syst.</source> <volume>28</volume>, <fpage>475</fpage>&#x02013;<lpage>490</lpage>. <pub-id pub-id-type="doi">10.1109/TPDS.2016.2586059</pub-id></citation></ref>
<ref id="B10">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Long</surname> <given-names>L.</given-names></name> <name><surname>Liu</surname> <given-names>D.</given-names></name> <name><surname>Liang</surname> <given-names>L.</given-names></name> <name><surname>Zhu</surname> <given-names>X.</given-names></name> <name><surname>Zhong</surname> <given-names>K.</given-names></name> <name><surname>Shao</surname> <given-names>Z.</given-names></name> <etal/></person-group>. (<year>2016</year>). <article-title>Morphable resistive memory optimization for mobile virtualization</article-title>. <source>IEEE Trans. Comput. Aided Des. Integr. Circ. Syst.</source> <volume>35</volume>, <fpage>891</fpage>&#x02013;<lpage>904</lpage>. <pub-id pub-id-type="doi">10.1109/TCAD.2015.2495264</pub-id></citation></ref>
<ref id="B11">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Nawaz</surname> <given-names>M. S.</given-names></name> <name><surname>Lali</surname> <given-names>M. I.</given-names></name> <name><surname>Pasha</surname> <given-names>M. A.</given-names></name></person-group> (<year>2013</year>). <article-title>Formal verification of crossover operator in Genetic Algorithms using Prototype Verification System (PVS)</article-title>, in <source>Proceeding of the IEEE 9th International Conference on Emerging Technologies (ICET &#x00027;2013)</source>, (<publisher-loc>Islamabad</publisher-loc>), <fpage>1</fpage>&#x02013;<lpage>6</lpage>.</citation></ref>
<ref id="B12">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Sanfilippo</surname> <given-names>F.</given-names></name> <name><surname>Hatledal</surname> <given-names>L. I.</given-names></name> <name><surname>Schaathun</surname> <given-names>H.</given-names></name> <name><surname>Pettersen</surname> <given-names>K. Y.</given-names></name> <name><surname>Zhang</surname> <given-names>H.</given-names></name></person-group> (<year>2013</year>). <article-title>A universal control architecture for maritime cranes and robots using genetic algorithms as a possible mapping approach</article-title>, in <source>Proceeding of the IEEE International Conference on Robotics and Biomimetics (ROBIO &#x00027;13)</source>, (<publisher-loc>Shenzhen</publisher-loc>), <fpage>322</fpage>&#x02013;<lpage>327</lpage>.</citation></ref>
<ref id="B13">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Taharwa</surname> <given-names>I.</given-names></name> <name><surname>Sheta</surname> <given-names>A.</given-names></name> <name><surname>Al-Weshah</surname> <given-names>M.</given-names></name></person-group> (<year>2008</year>). <article-title>A mobile robot path planning using genetic algorithm in static environment</article-title>. <source>J. Comput. Sci.</source> <volume>4</volume>, <fpage>341</fpage>&#x02013;<lpage>344</lpage>. <pub-id pub-id-type="doi">10.3844/jcssp.2008.341.344</pub-id></citation></ref>
<ref id="B14">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Uchibori</surname> <given-names>A.</given-names></name> <name><surname>Endou</surname> <given-names>N.</given-names></name></person-group> (<year>1999</year>). <article-title>Basic properties of genetic algorithms</article-title>. <source>J. Formal. Math.</source> <volume>8</volume>, <fpage>151</fpage>&#x02013;<lpage>160</lpage>.</citation></ref>
<ref id="B15">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Vicmudo</surname> <given-names>M. P.</given-names></name> <name><surname>Dadios</surname> <given-names>E. P.</given-names></name> <name><surname>Vicerra</surname> <given-names>R. R.</given-names></name></person-group> (<year>2014</year>). <article-title>Path planning of underwater swarm robots using genetic algorithm</article-title>, in <source>Proceeding of the Conference on Humanoid, Nanotechnology, Information Technology, Communication and Control, Environment and Management (HNICEM &#x00027;14)</source>, (<publisher-loc>Puerto Princesa, PL</publisher-loc>), <fpage>1</fpage>&#x02013;<lpage>5</lpage>.</citation></ref>
<ref id="B16">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Vidal</surname> <given-names>C.</given-names></name> <name><surname>Aguado</surname> <given-names>F.</given-names></name> <name><surname>Doncel</surname> <given-names>J. L.</given-names></name> <name><surname>Molinelli</surname> <given-names>J. M.</given-names></name> <name><surname>Perez</surname> <given-names>G.</given-names></name></person-group> (<year>2008</year>). <article-title>Genetic algorithms in coq:generalization and formalization of the crossover operator</article-title>. <source>J. Formal Reason</source>. <volume>1</volume>, <fpage>25</fpage>&#x02013;<lpage>37</lpage>. <pub-id pub-id-type="doi">10.6092/issn.1972-5787/1052</pub-id></citation></ref>
<ref id="B17">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Wang</surname> <given-names>X.</given-names></name> <name><surname>Cao</surname> <given-names>L.</given-names></name></person-group> (<year>2002</year>). <source>Genetic Algorithm&#x02014;Theory, Application and Software Realization</source>. <publisher-loc>Xi&#x00027;an</publisher-loc>: <publisher-name>Xi&#x00027;an Jiao Tong University</publisher-name>.</citation></ref>
<ref id="B18">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Wang</surname> <given-names>Y.</given-names></name> <name><surname>Liu</surname> <given-names>H.</given-names></name> <name><surname>Liu</surname> <given-names>D.</given-names></name> <name><surname>Qin</surname> <given-names>Z.</given-names></name> <name><surname>Shao</surname> <given-names>Z.</given-names></name> <name><surname>Edwin</surname> <given-names>H.</given-names></name> <etal/></person-group>. (<year>2011</year>). <article-title>Overhead-aware energy optimization for real-time streaming applications on multiprocessor system-on-chip</article-title>. <source>ACM Trans. Des. Autom. Electron. Syst.</source> <volume>16</volume>, <fpage>1</fpage>&#x02013;<lpage>32</lpage>. <pub-id pub-id-type="doi">10.1145/1929943.1929946</pub-id></citation></ref>
<ref id="B19">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Wang</surname> <given-names>Y.</given-names></name> <name><surname>Qin</surname> <given-names>Z.</given-names></name> <name><surname>Chen</surname> <given-names>R.</given-names></name> <name><surname>Shao</surname> <given-names>Z.</given-names></name> <name><surname>Yang</surname> <given-names>L. T.</given-names></name></person-group> (<year>2016</year>). <article-title>An adaptive demand-based caching mechanism for NAND flash memory storage systems</article-title>. <source>ACM Trans. Des. Autom. Electron. Syst.</source> <volume>22</volume>, <fpage>18:1</fpage>&#x02013;<lpage>18:22</lpage>. <pub-id pub-id-type="doi">10.1145/2947658</pub-id></citation></ref>
<ref id="B20">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Zhou</surname> <given-names>M.</given-names></name> <name><surname>Sun</surname> <given-names>S.</given-names></name></person-group> (<year>1999</year>). <source>Genetic Algorithms: Theory and Application</source>. <publisher-loc>Beijing</publisher-loc>: <publisher-name>National Defence Industry Press</publisher-name>.</citation></ref>
</ref-list>
<fn-group>
<fn fn-type="financial-disclosure"><p><bold>Funding.</bold> We thank the support of the National Natural Science Foundation of China (grant numbers: 61572331, 61373034).</p>
</fn>
</fn-group>
</back>
</article>
