src/Pure/Proof/reconstruct.ML
changeset 27330 1af2598b5f7d
parent 26939 1035c89b4c02
child 28808 7925199a0226
equal deleted inserted replaced
27329:91c0c894e1b4 27330:1af2598b5f7d
    24 fun message s = if !quiet_mode then () else writeln s;
    24 fun message s = if !quiet_mode then () else writeln s;
    25 
    25 
    26 fun vars_of t = rev (fold_aterms
    26 fun vars_of t = rev (fold_aterms
    27   (fn v as Var _ => insert (op =) v | _ => I) t []);
    27   (fn v as Var _ => insert (op =) v | _ => I) t []);
    28 
    28 
    29 fun forall_intr t prop =
    29 fun forall_intr_vfs prop = fold_rev Logic.all
    30   let val (a, T) = (case t of Var ((a, _), T) => (a, T) | Free p => p)
       
    31   in all T $ Abs (a, T, abstract_over (t, prop)) end;
       
    32 
       
    33 fun forall_intr_vfs prop = fold_rev forall_intr
       
    34   (vars_of prop @ sort Term.term_ord (term_frees prop)) prop;
    30   (vars_of prop @ sort Term.term_ord (term_frees prop)) prop;
    35 
    31 
    36 fun forall_intr_prf t prf =
    32 fun forall_intr_prf t prf =
    37   let val (a, T) = (case t of Var ((a, _), T) => (a, T) | Free p => p)
    33   let val (a, T) = (case t of Var ((a, _), T) => (a, T) | Free p => p)
    38   in Abst (a, SOME T, prf_abstract_over t prf) end;
    34   in Abst (a, SOME T, prf_abstract_over t prf) end;
   315 
   311 
   316 val head_norm = Envir.head_norm (Envir.empty 0);
   312 val head_norm = Envir.head_norm (Envir.empty 0);
   317 
   313 
   318 fun prop_of0 Hs (PBound i) = List.nth (Hs, i)
   314 fun prop_of0 Hs (PBound i) = List.nth (Hs, i)
   319   | prop_of0 Hs (Abst (s, SOME T, prf)) =
   315   | prop_of0 Hs (Abst (s, SOME T, prf)) =
   320       all T $ (Abs (s, T, prop_of0 Hs prf))
   316       Term.all T $ (Abs (s, T, prop_of0 Hs prf))
   321   | prop_of0 Hs (AbsP (s, SOME t, prf)) =
   317   | prop_of0 Hs (AbsP (s, SOME t, prf)) =
   322       Logic.mk_implies (t, prop_of0 (t :: Hs) prf)
   318       Logic.mk_implies (t, prop_of0 (t :: Hs) prf)
   323   | prop_of0 Hs (prf % SOME t) = (case head_norm (prop_of0 Hs prf) of
   319   | prop_of0 Hs (prf % SOME t) = (case head_norm (prop_of0 Hs prf) of
   324       Const ("all", _) $ f => f $ t
   320       Const ("all", _) $ f => f $ t
   325     | _ => error "prop_of: all expected")
   321     | _ => error "prop_of: all expected")