334 | no_args k i (Bound m) = m < k orelse m > k+i |
334 | no_args k i (Bound m) = m < k orelse m > k+i |
335 | no_args _ _ _ = true; |
335 | no_args _ _ _ = true; |
336 fun split_pat tp i (Abs (_,_,t)) = if tp 0 i t then Some (i,t) else None |
336 fun split_pat tp i (Abs (_,_,t)) = if tp 0 i t then Some (i,t) else None |
337 | split_pat tp i (Const ("split", _) $ Abs (_, _, t)) = split_pat tp (i+1) t |
337 | split_pat tp i (Const ("split", _) $ Abs (_, _, t)) = split_pat tp (i+1) t |
338 | split_pat tp i _ = None; |
338 | split_pat tp i _ = None; |
339 fun metaeq sg lhs rhs = mk_meta_eq (prove_goalw_cterm [] |
339 fun metaeq sg lhs rhs = mk_meta_eq (Tactic.prove sg [] [] |
340 (cterm_of sg (HOLogic.mk_Trueprop (HOLogic.mk_eq (lhs,rhs)))) |
340 (HOLogic.mk_Trueprop (HOLogic.mk_eq (lhs,rhs))) |
341 (K [simp_tac (HOL_basic_ss addsimps [cond_split_eta]) 1])); |
341 (K (simp_tac (HOL_basic_ss addsimps [cond_split_eta]) 1))); |
342 |
342 |
343 fun beta_term_pat k i (Abs (_, _, t)) = beta_term_pat (k+1) i t |
343 fun beta_term_pat k i (Abs (_, _, t)) = beta_term_pat (k+1) i t |
344 | beta_term_pat k i (t $ u) = Pair_pat k i (t $ u) orelse |
344 | beta_term_pat k i (t $ u) = Pair_pat k i (t $ u) orelse |
345 (beta_term_pat k i t andalso beta_term_pat k i u) |
345 (beta_term_pat k i t andalso beta_term_pat k i u) |
346 | beta_term_pat k i t = no_args k i t; |
346 | beta_term_pat k i t = no_args k i t; |