src/Pure/Proof/reconstruct.ML
changeset 13734 50dcee1c509e
parent 13715 61bfaa892a41
child 14854 61bdf2ae4dc5
equal deleted inserted replaced
13733:8ea7388f66d4 13734:50dcee1c509e
   311   let val (prop', fmap) = Type.varify (prop, []);
   311   let val (prop', fmap) = Type.varify (prop, []);
   312   in subst_TVars (map fst (term_tvars prop) @ map snd fmap ~~ Ts)
   312   in subst_TVars (map fst (term_tvars prop) @ map snd fmap ~~ Ts)
   313     (forall_intr_vfs prop')
   313     (forall_intr_vfs prop')
   314   end;
   314   end;
   315 
   315 
   316 fun prop_of' Hs (PBound i) = nth_elem (i, Hs)
   316 val head_norm = Envir.head_norm (Envir.empty 0);
   317   | prop_of' Hs (Abst (s, Some T, prf)) =
   317 
   318       all T $ (Abs (s, T, prop_of' Hs prf))
   318 fun prop_of0 Hs (PBound i) = nth_elem (i, Hs)
   319   | prop_of' Hs (AbsP (s, Some t, prf)) =
   319   | prop_of0 Hs (Abst (s, Some T, prf)) =
   320       Logic.mk_implies (t, prop_of' (t :: Hs) prf)
   320       all T $ (Abs (s, T, prop_of0 Hs prf))
   321   | prop_of' Hs (prf % Some t) = (case prop_of' Hs prf of
   321   | prop_of0 Hs (AbsP (s, Some t, prf)) =
   322       Const ("all", _) $ f => betapply (f, t)
   322       Logic.mk_implies (t, prop_of0 (t :: Hs) prf)
       
   323   | prop_of0 Hs (prf % Some t) = (case head_norm (prop_of0 Hs prf) of
       
   324       Const ("all", _) $ f => f $ t
   323     | _ => error "prop_of: all expected")
   325     | _ => error "prop_of: all expected")
   324   | prop_of' Hs (prf1 %% prf2) = (case prop_of' Hs prf1 of
   326   | prop_of0 Hs (prf1 %% prf2) = (case head_norm (prop_of0 Hs prf1) of
   325       Const ("==>", _) $ P $ Q => Q
   327       Const ("==>", _) $ P $ Q => Q
   326     | _ => error "prop_of: ==> expected")
   328     | _ => error "prop_of: ==> expected")
   327   | prop_of' Hs (Hyp t) = t
   329   | prop_of0 Hs (Hyp t) = t
   328   | prop_of' Hs (PThm (_, _, prop, Some Ts)) = prop_of_atom prop Ts
   330   | prop_of0 Hs (PThm (_, _, prop, Some Ts)) = prop_of_atom prop Ts
   329   | prop_of' Hs (PAxm (_, prop, Some Ts)) = prop_of_atom prop Ts
   331   | prop_of0 Hs (PAxm (_, prop, Some Ts)) = prop_of_atom prop Ts
   330   | prop_of' Hs (Oracle (_, prop, Some Ts)) = prop_of_atom prop Ts
   332   | prop_of0 Hs (Oracle (_, prop, Some Ts)) = prop_of_atom prop Ts
   331   | prop_of' _ _ = error "prop_of: partial proof object";
   333   | prop_of0 _ _ = error "prop_of: partial proof object";
   332 
   334 
       
   335 val prop_of' = Pattern.eta_contract oo (Envir.beta_norm oo prop_of0);
   333 val prop_of = prop_of' [];
   336 val prop_of = prop_of' [];
   334 
   337 
   335 
   338 
   336 (**** expand and reconstruct subproofs ****)
   339 (**** expand and reconstruct subproofs ****)
   337 
   340