I recommend learning about the syntax of HOL a bit more. Also, as Michael
suggested (to you or someone else) maybe write the code up first as an SML
program and then translate to HOL. In any case, here are some nonsense
definitions that HOL allows. They should help you get further.
load "realLib";
val _ =
Datatype `
coordinate = <| x_axis: real; y_axis: real; z_axis: real |> `;
val _ =
Datatype `
chromosome = <| r: num; b: num; distance: real;
rx: coordinate; path: coordinate list;
bx: coordinate |> `;
val ch = ``ch: chromosome``;
val pop = ``pop: chromosome list``;
val get_def =
Define `
get E pop =
case E pop
of SOME ch => (ch with <| distance := ch.distance + 145 |>)
| NONE => (HD pop with <| distance := (HD pop).distance |>)`;
val getA_def =
Define `
getA pop =
case pop
of [] => ARB
| ch::t =>
if ch.r < ch.b
then (ch with <| distance := ch.distance + 145 |>)
else ch`;
On Wed, Dec 19, 2018 at 9:09 PM 幻@未来 <[email protected]> wrote:
> The following data types are defined in HOL4.
>
> val _ = Datatype `
>
> coordinate = <|
>
> x_axis: real;
>
> y_axis: real;
>
> z_axis: real
>
> |> `;
>
> val _ = Datatype `
>
> chromosome = <|
>
> r: num;
>
> b: num;
>
> distance: real;
>
> rx: coordinate;
>
> path: coordinate list;
>
> bx: coordinate
>
> |> `;
> val ch = ``ch: chromosome``;
> val pop = ``pop: chromosome list``;
>
>
> Given a pop(:chromosome list), I want to achieve a goal : If if-condition
> is met, the distance value of the ch in the pop is assigned to other values,
> otherwise the distance value of ch is unchanged. How to solve this problem?
> How to define such an operation?
>
> _______________________________________________
> hol-info mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/hol-info
>
_______________________________________________
hol-info mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/hol-info