Well, it's not that "perfect", having seen the double "p" in ``x /\ p /\ p
/\ ~q`` returned by normalForms.DNF_CONV. Maybe this indicates some
possible improvements in normalForms.CONTRACT_CONV.  Let me try ...

--Chun

On Tue, Oct 1, 2019 at 11:01 AM Chun Tian (binghe) <binghe.l...@gmail.com>
wrote:

> Thanks to both of you.
>
> That SIMP_CONV indeed works: (it also explains why just using bool_ss
> doesn't work)
>
> > SIMP_CONV (bool_ss ++ boolSimps.CONJ_ss) [] ``(q \/ p /\ x) /\ p /\ ~q``;
> val it = |- (q \/ p /\ x) /\ p /\ ~q <=> x /\ p /\ ~q: thm
>
> But now I realized that, what I'm looking for is actually a conversion to
> DNF forms with possible simplifications. The normalForms.DNF_CONV (in
> src/metis, by Joe Hurd) did this work perfectly: (by using the
> CONTRACT_CONV in the same lib)
>
> > normalForms.DNF_CONV ``(q ∨ p ∧ x) ∧ p ∧ ¬q``;
> val it = |- (q \/ p /\ x) /\ p /\ ~q <=> x /\ p /\ p /\ ~q: thm
>
> while refuteLib.DNF_CONV doesn't do any simplification:
>
> > refuteLib.DNF_CONV ``(q ∨ p ∧ x) ∧ p ∧ ¬q``;
> val it = |- (q \/ p /\ x) /\ p /\ ~q <=> q /\ p /\ ~q \/ p /\ x /\ p /\
> ~q: thm
>
> P. S. "src/metis/normalForms.sml" is currently broken due to the "tight
> equality" changes. To reproduce my above demos, you need to (temporarily)
> put a
>
>         val _ = ParseExtras.temp_loose_equality()
>
> at the beginning of that file. I'm preparing a PR to fix this issue.
>
> Regards,
>
> Chun Tian
>
> Il 01/10/19 10:42, Thomas Sewell ha scritto:
> > Try this:
> >
> > SIMP_CONV (bool_ss ++ boolSimps.CONJ_ss) [] `` (q \/ p /\ x) /\ p /\ ~q
> ``;
> >
> > That CONJ_ss just adds a congruence rule that uses each side of a
> conjunction to simplify the other.
> >
> > I found it by investigating bossLib.csimp, which you might also want to
> know about.
> >
> > Once upon a time in Isabelle I had a problem with such congruences,
> since they might locally add rewrites which might be looping or
> inefficient. Is there a similar risk in HOL4?
> >
> > Cheers,
> >     Thomas.
> >
> >
> > On 2019-09-30 23:49, Konrad Slind wrote:
> >> A couple of places to look in HOLindex: refuteLib and normalForms
> structure.
> >>
> >>
> >> On Mon, Sep 30, 2019 at 1:31 PM Chun Tian (binghe) <
> binghe.l...@gmail.com <mailto:binghe.l...@gmail.com>> wrote:
> >>
> >>     Hi,
> >>
> >>     it can be proven (by DECIDE_TAC) that,
> >>
> >>     |- (q \/ p /\ x) /\ p /\ ~q <=> p /\ ~q /\ x
> >>
> >>     but is there any conversion function available in HOL4 such that
> from LHS of above equation I can directly get the RHS - something like a
> canonical form?
> >>
> >>     --Chun
> >>
> >>
> >>
> >>     _______________________________________________
> >>     hol-info mailing list
> >>     hol-info@lists.sourceforge.net <mailto:
> hol-info@lists.sourceforge.net>
> >>     https://lists.sourceforge.net/lists/listinfo/hol-info
> >>
> >>
> >>
> >> _______________________________________________
> >> hol-info mailing list
> >> hol-info@lists.sourceforge.net
> >> https://lists.sourceforge.net/lists/listinfo/hol-info
> >
> >
> >
> > _______________________________________________
> > hol-info mailing list
> > hol-info@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/hol-info
> >
>
>

-- 
----
Chun Tian (binghe)
Fondazione Bruno Kessler (Italy)
_______________________________________________
hol-info mailing list
hol-info@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/hol-info

Reply via email to