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") |