Thanks, Petros, but I don't see how SUBGOAL_TAC is any better than SUBGOAL_THEN 
at avoiding the one-step-forward-one-step-back awkwardness of MP_TAC/DISCH_THEN 
ASSUME_TAC/FIRST_X_ASSUM that John's cases and the modification bcases have.  
Below is a tactics script for my proof of the LABEL_TAC exercise in the HOL 
Light reference manual, which I should have posted yesterday.  BTW how does HOL 
and Informatics fit together?  Thanks for the feedback on my explanation of 
John's cases, which as you say assumes tac will prove t, as does bcases.  I 
thought of this 

   you could use replace MP_TAC with (REPEAT_TCL DISJ_CASES_THEN
   (LABEL_TAC lab)) [but] DISJ_CASES_THEN will create two new subgoals
   (for a total of three).

but as you say that won't work unless I can calculate how my disjuncts I'll 
get.  There must be a function that calculates that.  In the first bcases 
below, it's 2, and it's 3 for the second.  I need to know because of the THENL 
[tac; ALL_TAC], which would be changed to THENL [tac; ALL_TAC; ALL_TAC; 
ALL_TAC] for 3 disjuncts.  I also don't know how to print a variable number of 
ALL_TACs.  I thought maybe I could try 
SUBGOAL_THEN t ALL_TAC THENL [SUBGOAL_THEN t ALL_TAC; ALL_TAC]
so the top 3 goals in the goalstack would be (for g the original top goal) 
t, t, and g 
But  that won't fly, because 
MP_TAC is a thm_tactic, and ALL_TAC is just a tactic.  I that the correct 
usage?  And that's the difference between SUBGOAL_THEN and SUBGOAL_TAC, whether 
you use a thm_tactic or a tactic?  BTW how do I learn the typed LC or whatever 
that explains how tactics and thm_tactics actually work?  The HOL Light 
tutorial I think is actually a pretty good way to learn how to write tactics 
proofs, if you read the whole tutorial from beginning to end, dipping into the 
reference manual (and posting here!) when you get stuck, but I don't think it 
explains the theory of tactics proofs.  Maybe I missed it.  

-- 
Best,
Bill 

let soby labs MesonList = FIRST_ASSUM MP_TAC THEN MAP_EVERY 
   (fun l -> USE_THEN l MP_TAC) labs THEN (MESON_TAC MesonList);;
let consider t lab pf = SUBGOAL_THEN t (CHOOSE_THEN (LABEL_TAC lab)) THENL [pf; 
ALL_TAC];;
let state t lab pf = SUBGOAL_THEN t (LABEL_TAC lab) THENL [pf; ALL_TAC];;
let bcases t lab pf =
  state t  "" pf THEN FIRST_X_ASSUM 
  (REPEAT_TCL DISJ_CASES_THEN (LABEL_TAC lab));;

let WfAndAntisymImpliesWo = prove
  (`(!x y. x <<= y /\ y <<= x ==> x = y) /\
  (!s. ~(s = {}) ==> ?a:A. a IN s /\ !x. x IN s ==> a <<= x)
  ==> (!x y. x <<= y \/ y <<= x) /\
  !x y z. x <<= y /\ y <<= z ==> x <<= z`, 
  DISCH_THEN(CONJUNCTS_THEN2 (LABEL_TAC "antisym") (LABEL_TAC "swf")) 
  THEN STRIP_TAC THEN REPEAT GEN_TAC THENL [ALL_TAC;
  DISCH_THEN(CONJUNCTS_THEN2 (LABEL_TAC "xLESSy") (LABEL_TAC "yLESSz"))] THENL 
  [consider `?s:A->bool. s = {x:A,y:A}` "" (soby [] []);
  consider `?s:A->bool. s = {x:A,y:A,z:A}` "C" (soby [] [])] THENL
  [state `!p:A. p IN s <=> p = x \/ p = y` "sxy" (soby [] [IN_INSERT; 
MEMBER_NOT_EMPTY]);
  state `!p:A. p IN s <=> p = x \/ p = y \/ p = z` "sxyz" 
  (soby [] [IN_INSERT; MEMBER_NOT_EMPTY])] THEN
  state `~(s:A->bool = {})` "" (soby [] [MEMBER_NOT_EMPTY]) THEN
  consider `?a:A. a IN (s:A->bool) /\ !p:A. p IN s ==> a <<= p` "aExists" (soby 
["swf"] []) THENL
  [bcases `a:A = x:A \/ a = y:A` "" (soby ["sxy"] []);
  bcases `a:A = x:A \/ a = y:A \/ a = z:A` "" (soby ["sxyz"] [])] THENL
  [soby ["aExists"; "sxy"] []; 
  soby ["aExists"; "sxy"] [];
  soby ["aExists"; "sxyz"] [];
  soby ["aExists"; "sxyz"; "xLESSy"; "antisym"; "yLESSz"] [];
  soby ["aExists"; "sxyz"; "yLESSz"; "antisym"; "xLESSy"] []]);;

------------------------------------------------------------------------------
Master Java SE, Java EE, Eclipse, Spring, Hibernate, JavaScript, jQuery
and much more. Keep your Java skills current with LearnJavaNow -
200+ hours of step-by-step video tutorials by Java experts.
SALE $49.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122612 
_______________________________________________
hol-info mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/hol-info

Reply via email to