I found a way to prove the goal `abs_rat (abs_frac (1,10)) = abs_rat
(abs_frac (10,100))` and probably a bug about `RAT_EQ_CONV`.

In `ratLib.sml` :
```
val RAT_EQ_CONV:conv = fn term1 =>
let
        val eqn = dest_neg term1;
        val (lhs,rhs) = dest_eq eqn;
        val (lhc, f1) = dest_comb lhs;
        val (rhc, f2) = dest_comb rhs;
in
        UNDISCH_ALL (SPECL[f1,f2] RAT_EQ)
end
handle HOL_ERR _ => raise ERR "RAT_EQ_CONV" "";
```
The `dest_neg` in 3rd line is weird, who fails when the term isn't
a negation. Maybe the line tries to handle the case of negation and
`dest_neg` was more tolerant in some old version?
Anyway, after removing the line, both `RAT_EQ_CONV` and `RAT_EQ_TAC` work.
And the goal could be proved as:

```
g `abs_rat (abs_frac (1,10)) = abs_rat (abs_frac (10,100))`;
e (FIXED_RAT_EQ_TAC);
e (rw[DNM, NMR]);
```
And then I found another way to prove the simpler form `1q/10 = 10/100`
using `RAT_CALCEQ_TAC`.
But it's also broken in somewhere so I replaced the broken step.

The original definition of `RAT_CALCEQ_TAC` in `ratLib.sml` :
```
val RAT_CALCEQ_TAC =
        RAT_CALC_TAC THEN
        FRAC_CALC_TAC THEN
        REWRITE_TAC[RAT_EQ] THEN
        FRAC_NMRDNM_TAC THEN (* Fail, and I don't know why. *)
        INT_RING_TAC;
```

And my replacement:
```
val MY_RAT_CALCEQ_TAC =
        RAT_CALC_TAC THEN
        FRAC_CALC_TAC THEN
        REWRITE_TAC[RAT_EQ] THEN
        rw[NMR, DNM] THEN (* The replacement does the same thing according
to the comment of origin. *)
        INT_RING_TAC;

g `1q/10 = 10/100`;
e (MY_RAT_CALCEQ_TAC);
(* goal : 100 * SGN 10 = 100 * SGN 100 *)
e (rw[SGN_def]);
(* proved. *)
```

Xero Essential <xqyww...@gmail.com> 于2019年1月14日周一 下午1:24写道:

> Hi, every expert.
>
>     Maybe I'm a little new to the HOL4 libraries.
>
>     But, how could I prove the basic equivalency of rational like `1q / 10
> = 10 / 100`?
>     The documentation is little and I have searched all the source, but
> related conversions and tactics like `RAT_EQ_TAC` are all failed and throw
> an empty error.
>     I looked the source about `RAT_EQ_TAC`, which something about
> `abs_rat`, and then I become confused.
>
>     Sorry for my bothering, and hope the suggestion.
>
> Thanks.
> Qiyuan Xu.
>
_______________________________________________
hol-info mailing list
hol-info@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/hol-info

Reply via email to