src/Provers/hypsubst.ML
changeset 71402 fb9edfe035e1
parent 71401 a3ae93ed7b1b
child 71406 3887432720a9
equal deleted inserted replaced
71401:a3ae93ed7b1b 71402:fb9edfe035e1
   169         val Bi = Thm.term_of cBi;
   169         val Bi = Thm.term_of cBi;
   170         val ps = Logic.strip_params Bi;
   170         val ps = Logic.strip_params Bi;
   171         val U = Term.fastype_of1 (rev (map snd ps), t);
   171         val U = Term.fastype_of1 (rev (map snd ps), t);
   172         val Q = Data.dest_Trueprop (Logic.strip_assums_concl Bi);
   172         val Q = Data.dest_Trueprop (Logic.strip_assums_concl Bi);
   173         val rl' = Thm.lift_rule cBi rl;
   173         val rl' = Thm.lift_rule cBi rl;
   174         val Var (ixn, T) = Term.head_of (Data.dest_Trueprop
   174         val (ixn, T) = dest_Var (Term.head_of (Data.dest_Trueprop
   175           (Logic.strip_assums_concl (Thm.prop_of rl')));
   175           (Logic.strip_assums_concl (Thm.prop_of rl'))));
   176         val (v1, v2) = Data.dest_eq (Data.dest_Trueprop
   176         val (v1, v2) = Data.dest_eq (Data.dest_Trueprop
   177           (Logic.strip_assums_concl (hd (Thm.prems_of rl'))));
   177           (Logic.strip_assums_concl (hd (Thm.prems_of rl'))));
   178         val (Ts, V) = split_last (Term.binder_types T);
   178         val (Ts, V) = split_last (Term.binder_types T);
   179         val u =
   179         val u =
   180           fold_rev Term.abs (ps @ [("x", U)])
   180           fold_rev Term.abs (ps @ [("x", U)])