src/Pure/proofterm.ML
changeset 16880 411d91d104c4
parent 16787 b6b6e2faaa41
child 16940 d14ec6f2d29b
equal deleted inserted replaced
16879:b81d3f2ee565 16880:411d91d104c4
    71   val forall_intr_proof : term -> string -> proof -> proof
    71   val forall_intr_proof : term -> string -> proof -> proof
    72   val varify_proof : term -> (string * sort) list -> proof -> proof
    72   val varify_proof : term -> (string * sort) list -> proof -> proof
    73   val freezeT : term -> proof -> proof
    73   val freezeT : term -> proof -> proof
    74   val rotate_proof : term list -> term -> int -> proof -> proof
    74   val rotate_proof : term list -> term -> int -> proof -> proof
    75   val permute_prems_prf : term list -> int -> int -> proof -> proof
    75   val permute_prems_prf : term list -> int -> int -> proof -> proof
    76   val instantiate : (typ * typ) list -> (term * term) list -> proof -> proof
    76   val instantiate : ((indexname * sort) * typ) list * ((indexname * typ) * term) list
       
    77     -> proof -> proof
    77   val lift_proof : term -> int -> term -> proof -> proof
    78   val lift_proof : term -> int -> term -> proof -> proof
    78   val assumption_proof : term list -> term -> int -> proof -> proof
    79   val assumption_proof : term list -> term -> int -> proof -> proof
    79   val bicompose_proof : term list -> term list -> term list -> term option ->
    80   val bicompose_proof : term list -> term list -> term list -> term option ->
    80     int -> proof -> proof -> proof
    81     int -> proof -> proof -> proof
    81   val equality_axms : (string * term) list
    82   val equality_axms : (string * term) list
   595   end;
   596   end;
   596 
   597 
   597 
   598 
   598 (***** instantiation *****)
   599 (***** instantiation *****)
   599 
   600 
   600 fun instantiate vTs tpairs prf =
   601 fun instantiate (instT, inst) prf =
   601   map_proof_terms (subst_atomic (map (apsnd remove_types) tpairs) o
   602   map_proof_terms (Term.instantiate (instT, map (apsnd remove_types) inst))
   602     map_term_types (typ_subst_atomic vTs)) (typ_subst_atomic vTs) prf;
   603     (Term.instantiateT instT) prf;
   603 
   604 
   604 
   605 
   605 (***** lifting *****)
   606 (***** lifting *****)
   606 
   607 
   607 fun lift_proof Bi inc prop prf =
   608 fun lift_proof Bi inc prop prf =
   609     val (_, lift_all) = Logic.lift_fns (Bi, inc);
   610     val (_, lift_all) = Logic.lift_fns (Bi, inc);
   610 
   611 
   611     fun lift'' Us Ts t = strip_abs Ts (Logic.incr_indexes (Us, inc) (mk_abs Ts t));
   612     fun lift'' Us Ts t = strip_abs Ts (Logic.incr_indexes (Us, inc) (mk_abs Ts t));
   612 
   613 
   613     fun lift' Us Ts (Abst (s, T, prf)) =
   614     fun lift' Us Ts (Abst (s, T, prf)) =
   614           (Abst (s, apsome' (same (incr_tvar inc)) T, lifth' Us (dummyT::Ts) prf)
   615           (Abst (s, apsome' (same (Logic.incr_tvar inc)) T, lifth' Us (dummyT::Ts) prf)
   615            handle SAME => Abst (s, T, lift' Us (dummyT::Ts) prf))
   616            handle SAME => Abst (s, T, lift' Us (dummyT::Ts) prf))
   616       | lift' Us Ts (AbsP (s, t, prf)) =
   617       | lift' Us Ts (AbsP (s, t, prf)) =
   617           (AbsP (s, apsome' (same (lift'' Us Ts)) t, lifth' Us Ts prf)
   618           (AbsP (s, apsome' (same (lift'' Us Ts)) t, lifth' Us Ts prf)
   618            handle SAME => AbsP (s, t, lift' Us Ts prf))
   619            handle SAME => AbsP (s, t, lift' Us Ts prf))
   619       | lift' Us Ts (prf % t) = (lift' Us Ts prf % Option.map (lift'' Us Ts) t
   620       | lift' Us Ts (prf % t) = (lift' Us Ts prf % Option.map (lift'' Us Ts) t
   620           handle SAME => prf % apsome' (same (lift'' Us Ts)) t)
   621           handle SAME => prf % apsome' (same (lift'' Us Ts)) t)
   621       | lift' Us Ts (prf1 %% prf2) = (lift' Us Ts prf1 %% lifth' Us Ts prf2
   622       | lift' Us Ts (prf1 %% prf2) = (lift' Us Ts prf1 %% lifth' Us Ts prf2
   622           handle SAME => prf1 %% lift' Us Ts prf2)
   623           handle SAME => prf1 %% lift' Us Ts prf2)
   623       | lift' _ _ (PThm (s, prf, prop, Ts)) =
   624       | lift' _ _ (PThm (s, prf, prop, Ts)) =
   624           PThm (s, prf, prop, apsome' (same (map (incr_tvar inc))) Ts)
   625           PThm (s, prf, prop, apsome' (same (map (Logic.incr_tvar inc))) Ts)
   625       | lift' _ _ (PAxm (s, prop, Ts)) =
   626       | lift' _ _ (PAxm (s, prop, Ts)) =
   626           PAxm (s, prop, apsome' (same (map (incr_tvar inc))) Ts)
   627           PAxm (s, prop, apsome' (same (map (Logic.incr_tvar inc))) Ts)
   627       | lift' _ _ _ = raise SAME
   628       | lift' _ _ _ = raise SAME
   628     and lifth' Us Ts prf = (lift' Us Ts prf handle SAME => prf);
   629     and lifth' Us Ts prf = (lift' Us Ts prf handle SAME => prf);
   629 
   630 
   630     val ps = map lift_all (Logic.strip_imp_prems prop);
   631     val ps = map lift_all (Logic.strip_imp_prems prop);
   631     val k = length ps;
   632     val k = length ps;