src/HOL/Tools/BNF/bnf_lfp_rec_sugar.ML
changeset 58187 d2ddd401d74d
parent 58112 8081087096ad
child 58211 c1f3fa32d322
equal deleted inserted replaced
58186:a6c3962ea907 58187:d2ddd401d74d
   150     val nn = length perm_ctrss;
   150     val nn = length perm_ctrss;
   151     val kks = 0 upto nn - 1;
   151     val kks = 0 upto nn - 1;
   152 
   152 
   153     val perm_ctr_offsets = map (fn kk => Integer.sum (map length (take kk perm_ctrss))) kks;
   153     val perm_ctr_offsets = map (fn kk => Integer.sum (map length (take kk perm_ctrss))) kks;
   154 
   154 
   155     val perm_lfpTs = map (body_type o fastype_of o hd) perm_ctrss;
   155     val perm_fpTs = map #T perm_basic_lfp_sugars;
   156     val perm_Cs = map #C perm_basic_lfp_sugars;
   156     val perm_Cs = map #C perm_basic_lfp_sugars;
   157     val perm_fun_arg_Tssss = map #fun_arg_Tsss perm_basic_lfp_sugars;
   157     val perm_fun_arg_Tssss = map #fun_arg_Tsss perm_basic_lfp_sugars;
   158 
   158 
   159     fun unpermute0 perm0_xs = permute_like_unique (op =) perm0_kks kks perm0_xs;
   159     fun unpermute0 perm0_xs = permute_like_unique (op =) perm0_kks kks perm0_xs;
   160     fun unpermute perm_xs = permute_like_unique (op =) perm_indices indices perm_xs;
   160     fun unpermute perm_xs = permute_like_unique (op =) perm_indices indices perm_xs;
   161 
   161 
   162     val inducts = unpermute0 (conj_dests nn common_induct);
   162     val inducts = unpermute0 (conj_dests nn common_induct);
   163 
   163 
   164     val lfpTs = unpermute perm_lfpTs;
   164     val fpTs = unpermute perm_fpTs;
   165     val Cs = unpermute perm_Cs;
   165     val Cs = unpermute perm_Cs;
   166     val ctr_offsets = unpermute perm_ctr_offsets;
   166     val ctr_offsets = unpermute perm_ctr_offsets;
   167 
   167 
   168     val As_rho = tvar_subst thy (take nn0 lfpTs) arg_Ts;
   168     val As_rho = tvar_subst thy (take nn0 fpTs) arg_Ts;
   169     val Cs_rho = map (fst o dest_TVar) Cs ~~ pad_list HOLogic.unitT nn res_Ts;
   169     val Cs_rho = map (fst o dest_TVar) Cs ~~ pad_list HOLogic.unitT nn res_Ts;
   170 
   170 
   171     val substA = Term.subst_TVars As_rho;
   171     val substA = Term.subst_TVars As_rho;
   172     val substAT = Term.typ_subst_TVars As_rho;
   172     val substAT = Term.typ_subst_TVars As_rho;
   173     val substCT = Term.typ_subst_TVars Cs_rho;
   173     val substCT = Term.typ_subst_TVars Cs_rho;