src/Pure/proofterm.ML
changeset 79280 db8ac864ab03
parent 79279 d9a7ee1bd070
child 79282 5a5d0c36ade8
equal deleted inserted replaced
79279:d9a7ee1bd070 79280:db8ac864ab03
   793   else
   793   else
   794     let
   794     let
   795       val term = Term.subst_bounds_same args;
   795       val term = Term.subst_bounds_same args;
   796 
   796 
   797       fun proof lev (AbsP (a, t, p)) =
   797       fun proof lev (AbsP (a, t, p)) =
   798           (AbsP (a, Same.map_option (term lev) t, Same.commit (proof lev) p)
   798             (AbsP (a, Same.map_option (term lev) t, Same.commit (proof lev) p)
   799             handle Same.SAME => AbsP (a, t, proof lev p))
   799               handle Same.SAME => AbsP (a, t, proof lev p))
   800         | proof lev (Abst (a, T, p)) = Abst (a, T, proof (lev + 1) p)
   800         | proof lev (Abst (a, T, p)) = Abst (a, T, proof (lev + 1) p)
   801         | proof lev (p %% q) = (proof lev p %% Same.commit (proof lev) q
   801         | proof lev (p %% q) =
   802             handle Same.SAME => p %% proof lev q)
   802             (proof lev p %% Same.commit (proof lev) q
   803         | proof lev (p % t) = (proof lev p % Option.map (Same.commit (term lev)) t
   803               handle Same.SAME => p %% proof lev q)
   804             handle Same.SAME => p % Same.map_option (term lev) t)
   804         | proof lev (p % t) =
       
   805             (proof lev p % Option.map (Same.commit (term lev)) t
       
   806               handle Same.SAME => p % Same.map_option (term lev) t)
   805         | proof _ _ = raise Same.SAME;
   807         | proof _ _ = raise Same.SAME;
   806     in Same.commit (proof 0) prf end;
   808     in Same.commit (proof 0) prf end;
   807 
   809 
   808 fun subst_pbounds args prf =
   810 fun subst_pbounds args prf =
   809   let
   811   let
   812          (if i < Plev then raise Same.SAME    (*var is locally bound*)
   814          (if i < Plev then raise Same.SAME    (*var is locally bound*)
   813           else if i - Plev < n then incr_boundvars Plev tlev (nth args (i - Plev))
   815           else if i - Plev < n then incr_boundvars Plev tlev (nth args (i - Plev))
   814           else PBound (i - n)  (*loose: change it*))
   816           else PBound (i - n)  (*loose: change it*))
   815       | proof Plev tlev (AbsP (a, t, p)) = AbsP (a, t, proof (Plev + 1) tlev p)
   817       | proof Plev tlev (AbsP (a, t, p)) = AbsP (a, t, proof (Plev + 1) tlev p)
   816       | proof Plev tlev (Abst (a, T, p)) = Abst (a, T, proof Plev (tlev + 1) p)
   818       | proof Plev tlev (Abst (a, T, p)) = Abst (a, T, proof Plev (tlev + 1) p)
   817       | proof Plev tlev (p %% q) = (proof Plev tlev p %% Same.commit (proof Plev tlev) q
   819       | proof Plev tlev (p %% q) =
   818           handle Same.SAME => p %% proof Plev tlev q)
   820           (proof Plev tlev p %% Same.commit (proof Plev tlev) q
       
   821             handle Same.SAME => p %% proof Plev tlev q)
   819       | proof Plev tlev (p % t) = proof Plev tlev p % t
   822       | proof Plev tlev (p % t) = proof Plev tlev p % t
   820       | proof _ _ _ = raise Same.SAME;
   823       | proof _ _ _ = raise Same.SAME;
   821   in if null args then prf else Same.commit (proof 0 0) prf end;
   824   in if null args then prf else Same.commit (proof 0 0) prf end;
   822 
   825 
   823 
   826