Hello John,

On 04/11/2012 03:48, John Nicol wrote:
> Never figured out why
> real#real is a different type than real*real (they're both just tuples,
> right?), but I digress.


Unless I'm missing something, real*real is the OCaml notation for a pair 
of reals, whereas real#real is the HOL Light notation.
There is no 'real*real' type in HOL Light as * is parsed as the times 
operator.


> 4. Eventually I was able to prove that the cardinality of {3} was 1,
> which I thought should be trivial from something like SET_TAC, but
> apparently not.  It involved CONJ_TAC, REWRITE_TAC[FINITE_SING], and
> some other stuff I've forgotten, but it worked.
>
> 5.  I still can't prove that the cardinality of {3,4} is 2.
 >
 > [...]
>
> I guess my questions are:
> 1.  It can't really be this hard, can it?  What am I missing?

I have also experienced some pain trying to achieve simple calculations 
for sets in HOL Light (to the point where I chose to change my 
formalisation to using lists).

Unfortunately, to my knowledge, HOL Light only provides SET_TAC as an 
automated tactic for sets, which is often insufficient for such 
calculations.

I tried this particular example and came up with a proof based on 
CARD_CLAUSES, assuming you have already proven the cardinality of a 
singleton set, ie. CARD {4} = 1:

g `CARD {4} = 1 ==> (CARD {3,4} = 2)`;;
e (SUBGOAL_TAC "" `FINITE {4}` 
[REWRITE_TAC[FINITE_RULES;FINITE_INSERT]]);; (* You need finiteness to 
reason about cardinality. *)
e (FIRST_ASSUM (SUBST1_TAC o (MATCH_MP (ISPEC `3` (CONJUNCT2 
CARD_CLAUSES)))));;
e (DISCH_THEN SUBST1_TAC);;
e (REWRITE_TAC[IN_SING]);;
e (NUM_REDUCE_TAC);;

I'm sure there are others that can suggest better proofs.

More generally it might be easier to build small lemmas to help reason 
about such computations more easily, such as:

let CARD_SING = prove ( `!a:A . CARD {a} = 1`, REWRITE_TAC[ONE;MATCH_MP 
(ISPECL [`a:A`;`{}:A->bool`] (CONJUNCT2 CARD_CLAUSES)) FINITE_EMPTY; 
CARD_CLAUSES;NOT_IN_EMPTY]);;

At least for me it has been standard practice to build my own little 
libraries of lemmas to make reasoning about a particular theory easier 
and more tailored to my needs.


> 2.  Is there a way to rewind in the goal stack if I do something dumb,
> or do I have to just redeclare my goal?

You can use:
b();;
which stands for "back".


> 3.  Is there some basic tactic that I could use for trivial problems to
> say, "try everything possible and then tell me what tactics solved
> this".  I thought that's what things like MESON_TAC were for, but I'm
> not sure any more.  Would I need to wire in an automated theorem prover
> or something?


There are some automated tactics for particular sets of problems such as 
MESON_TAC, NUM_REDUCE_TAC, REAL_ARITH_TAC, ITAUT, etc, but nothing more 
general than MESON_TAC.

More generally, it takes some experience and going through the existing 
lemmas and tactics (eg. through 
http://www.cl.cam.ac.uk/~jrh13/hol-light/reference_220.html) to become 
accustomed to what you can use in each case.


> 4.  Are there any simpler examples than what's in the Examples/ directory?

You may find it useful to inspect individual files containing the 
theories you are interested in, such as sets.ml.

They usually include general lemmas and you can understand a lot about 
how theories can be developed in HOL Light.

You can expand packaged proofs to step-by-step tactics using Tactician:
http://www.proof-technologies.com/tactician/index.html


Hope this helps.

Regards,

Petros


-- 
Petros Papapanagiotou
CISA, School of Informatics
The University of Edinburgh

Email: p.papapanagio...@sms.ed.ac.uk

---
  The University of Edinburgh is a charitable body, registered in
  Scotland, with registration number SC005336.

------------------------------------------------------------------------------
LogMeIn Central: Instant, anywhere, Remote PC access and management.
Stay in control, update software, and manage PCs from one command center
Diagnose problems and improve visibility into emerging IT issues
Automate, monitor and manage. Do more in less time with Central
http://p.sf.net/sfu/logmein12331_d2d
_______________________________________________
hol-info mailing list
hol-info@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/hol-info

Reply via email to