115 (make_term t [] paths 0)); |
115 (make_term t [] paths 0)); |
116 val tye = Sign.typ_match thy (tT, #T (rep_cterm tt)) Vartab.empty; |
116 val tye = Sign.typ_match thy (tT, #T (rep_cterm tt)) Vartab.empty; |
117 val tye' = Sign.typ_match thy (PT, #T (rep_cterm Pt)) tye; |
117 val tye' = Sign.typ_match thy (PT, #T (rep_cterm Pt)) tye; |
118 val ctye = map (fn (ixn, (S, T)) => |
118 val ctye = map (fn (ixn, (S, T)) => |
119 (ctyp_of thy (TVar (ixn, S)), ctyp_of thy T)) (Vartab.dest tye'); |
119 (ctyp_of thy (TVar (ixn, S)), ctyp_of thy T)) (Vartab.dest tye'); |
120 val tv = cterm_of thy (Var (("t", j), Envir.typ_subst_TVars tye' tT)); |
120 val tv = cterm_of thy (Var (("t", j), Envir.subst_type tye' tT)); |
121 val Pv = cterm_of thy (Var (("P", j), Envir.typ_subst_TVars tye' PT)); |
121 val Pv = cterm_of thy (Var (("P", j), Envir.subst_type tye' PT)); |
122 val rule' = instantiate (ctye, [(tv, tt), (Pv, Pt)]) rule |
122 val rule' = instantiate (ctye, [(tv, tt), (Pv, Pt)]) rule |
123 in rule' end; |
123 in rule' end; |
124 |
124 |
125 |
125 |
126 (*** the admissibility tactic ***) |
126 (*** the admissibility tactic ***) |