IntEx.thy
changeset 591 01a0da807f50
parent 582 a082e2d138ab
child 592 66f39908df95
equal deleted inserted replaced
585:b16cac0b7c88 591:01a0da807f50
   255 apply(tactic {* all_inj_repabs_tac_intex @{context} 1*})
   255 apply(tactic {* all_inj_repabs_tac_intex @{context} 1*})
   256 apply(tactic {* clean_tac @{context} 1 *})
   256 apply(tactic {* clean_tac @{context} 1 *})
   257 apply(simp only: foldl_prs[OF Quotient_my_int Quotient_my_int] cons_prs[OF Quotient_my_int])
   257 apply(simp only: foldl_prs[OF Quotient_my_int Quotient_my_int] cons_prs[OF Quotient_my_int])
   258 done
   258 done
   259 
   259 
       
   260 lemma ho_tst3: "foldl f (s::nat \<times> nat) ([]::(nat \<times> nat) list) = s"
       
   261 by simp
       
   262 
       
   263 lemma "foldl f (x::my_int) ([]::my_int list) = x"
       
   264 apply(tactic {* procedure_tac @{context} @{thm ho_tst3} 1 *})
       
   265 apply(tactic {* regularize_tac @{context} 1 *})
       
   266 apply(tactic {* all_inj_repabs_tac_intex @{context} 1*})
       
   267 (* TODO: does not work when this is added *)
       
   268 (* apply(tactic {* lambda_prs_tac @{context} 1 *})*)
       
   269 apply(tactic {* clean_tac @{context} 1 *})
       
   270 apply(simp only: foldl_prs[OF Quotient_my_int Quotient_my_int] nil_prs[OF Quotient_my_int])
       
   271 done
       
   272 
       
   273 lemma lam_tst: "(\<lambda>x. (x, x)) y = (y, (y :: nat \<times> nat))"
       
   274 by simp
       
   275 
       
   276 lemma "(\<lambda>x. (x, x)) (y::my_int) = (y, y)"
       
   277 apply(tactic {* procedure_tac @{context} @{thm lam_tst} 1 *})
       
   278 defer
       
   279 apply(tactic {* inj_repabs_tac_intex @{context} 1*})
       
   280 apply(tactic {* inj_repabs_tac_intex @{context} 1*})
       
   281 apply(tactic {* inj_repabs_tac_intex @{context} 1*})
       
   282 apply(simp only: prod_rel.simps)
       
   283 defer
       
   284 apply(tactic {* clean_tac @{context} 1 *})
       
   285 apply(simp add: prod_rel.simps)
       
   286 apply(tactic {* clean_tac @{context} 1 *})
       
   287 apply(simp)
       
   288 (*apply(tactic {* regularize_tac @{context} 1 *})
       
   289 apply(tactic {* inj_repabs_tac_intex @{context} 1*})*)
       
   290 sorry
       
   291 
       
   292 lemma lam_tst2: "(\<lambda>(y :: nat \<times> nat). y) = (\<lambda>(x :: nat \<times> nat). x)"
       
   293 by simp
       
   294 
       
   295 lemma "(\<lambda>(y :: my_int). y) = (\<lambda>(x :: my_int). x)"
       
   296 apply(tactic {* ObjectLogic.full_atomize_tac 1 *})
       
   297 apply(tactic {* gen_frees_tac @{context} 1 *})
       
   298 ML_prf {* procedure_inst @{context} (prop_of @{thm lam_tst2}) @{prop "(\<lambda>(y :: my_int). y) = (\<lambda>(x :: my_int). x)"} *}
       
   299 
       
   300 apply(tactic {* procedure_tac @{context} @{thm lam_tst2} 1 *})
       
   301 apply(tactic {* regularize_tac @{context} 1 *})
       
   302 apply(tactic {* all_inj_repabs_tac_intex @{context} 1*})
       
   303 apply(tactic {* clean_tac @{context} 1 *})
       
   304 done
       
   305