Hello Petros and Marco,

thank you for your replies.

With your help I was able to finish the subgoal.


Regards,


Heiko


On 07/05/2016 04:59 PM, Petros Papapanagiotou wrote:
> Hello Keiko,
>
>
> On 05/07/2016 11:02, Heiko Becker wrote:
>> The script I used is:
>>
>> e (ONCE_REWRITE_TAC[eval_exp_CASES]);;
>> e (INTRO_TAC "!eps env v val; cases");;
>> e (REMOVE_THEN "cases" (DESTRUCT_TAC "var | const | bin"));;
>> (* Var case *)
>> e (REMOVE_THEN "var" (DESTRUCT_TAC "@v2. var_eq val_eq"));;
>> e (SUBGOAL_TAC "v_eq_v2" `v = v2` [REMOVE_THEN "var_eq" (MP_TAC) THEN
>> ONCE_REWRITE_TAC[injectivity "exp"]]);;
>> e (DISCH_TAC);;
>> e (EXPAND_TAC "v2");;
>> e (ONCE_REWRITE_TAC[ASSUME `v = v2`]);
>>
>> Since the last two tactics do not change the goal in any way my
>> questions in this case are:
>>
>> 1) How can I use the assumption 1 and rewrite it inside my goal?
>
> Do you mean to rewrite the assumption itself or use the assumption to 
> rewrite the goal?
> The former can be accomplished with RULE_ASSUM_TAC (REWRITE_RULE 
> [...]). This will rewrite all assumptions (there are more complicated 
> ways that allow more control).
> For the latter you can use ASM_REWRITE_TAC. For simple variable 
> substitutions you can also use FIRST_X_ASSUM SUBST1_TAC.
>
>
>> 2) Is there an easier way of closing the proof, since I already derived
>> the goal I have?
>
> The problem is in your SUBGOAL_TAC step. When you introduce the 
> subgoal `v = v2`, HOL Light does not know the context of v and v2 so 
> it assigns them variable types. The resulting subgoal is unprovable.
> Instead you can use:
>
> e(SUBGOAL_TAC "v_eq_v2" `v:num = v2` [...
>
> (The answer to your 3rd question may help with such problems in the 
> future.)
>
> There is a number of other ways to deal with this proof. For example:
>
> e (RULE_ASSUM_TAC (REWRITE_RULE[injectivity "exp"]) THEN 
> ASM_REWRITE_TAC[]);;
>
>
>
>> 3) (A little unrelated) Can I make HOL-Light annotate all terms in my
>> goal with their derived type?
>>
>
> This snippet* has come in handy in numerous occasions:
>
> let print_varandtype fmt tm =
>   let hop,args = strip_comb tm in
>   let s = name_of hop
>   and ty = type_of hop in
>   if is_var hop & args = [] then
>    (pp_print_string fmt "(";
>     pp_print_string fmt s;
>     pp_print_string fmt ":";
>     pp_print_type fmt ty;
>     pp_print_string fmt ")")
>   else fail() ;;
>
> let show_types,hide_types =
>   (fun () -> install_user_printer ("Show Types",print_varandtype)),
>   (fun () -> try delete_user_printer "Show Types"
>              with Failure _ -> failwith ("hide_types: "^
>                                          "Types are already hidden."));;
>
> * Slightly modified from original source: 
> https://code.google.com/archive/p/flyspeck/wikis/TipsAndTricks.wiki#Investigating_Types
>
> Use "show_types();;" to make HOL Light print out the types of all 
> variables.
> Use "hide_types();;" to restore the original behaviour.
>
> Hope this helps.
>
> Regards,
> Petros
>
>
>
>>
>> ------------------------------------------------------------
>>
>> let binop_IND, binop_REC = define_type
>>     "binop = Plus | Sub | Mult | Div ";;
>> (*
>>     Define an evaluation function for binary operators.
>> *)
>> let eval_binop = new_recursive_definition binop_REC
>>     `(eval_binop Plus v1 v2 = v1 + v2) /\
>>     (eval_binop Sub v1 v2 = v1 - v2) /\
>>     (eval_binop Mult v1 v2 = v1 * v2) /\
>>     (eval_binop Div v1 v2 = v1 / v2)`;;
>>
>> let exp_IND, exp_REC= define_type
>>     "exp = Var num
>>     | Const V
>>     | Binop binop exp exp";;
>>
>> let perturb = define `(perturb:real->real->real) = \r e. r * ((&1) + 
>> e)`;;
>> new_type_abbrev ("env_ty",`:num->real`);;
>>
>> let eval_exp_RULES, eval_exp_IND, eval_exp_CASES = 
>> new_inductive_definition
>>     `(!eps env v.
>>         eval_exp eps env (Var v) (env v)) /\
>>     (!eps env n delta.
>>        abs delta <= eps ==>
>>        eval_exp eps env (Const n) (perturb n delta)) /\
>>     (!eps env b e1 e2 v1 v2 delta.
>>        eval_exp eps env e1 v1 /\
>>        eval_exp eps env e2 v2 /\
>>        abs delta <= eps ==>
>>        eval_exp eps env (Binop b e1 e2) (perturb (eval_binop b v1 v2)
>> delta))`;;
>>
>>
>> ------------------------------------------------------------------------------
>>  
>>
>> Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
>> Francisco, CA to explore cutting-edge tech and listen to tech luminaries
>> present their vision of the future. This family event has something for
>> everyone, including kids. Get more information and register today.
>> http://sdm.link/attshape
>> _______________________________________________
>> hol-info mailing list
>> hol-info@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/hol-info
>>
>


------------------------------------------------------------------------------
Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
Francisco, CA to explore cutting-edge tech and listen to tech luminaries
present their vision of the future. This family event has something for
everyone, including kids. Get more information and register today.
http://sdm.link/attshape
_______________________________________________
hol-info mailing list
hol-info@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/hol-info

Reply via email to