src/Pure/zterm.ML
changeset 80560 960b866b1117
parent 80294 eec06d39e5fa
child 80579 69cf3c308d6c
equal deleted inserted replaced
80559:38c63d4027c4 80560:960b866b1117
   198   | ZThm of {theory_name: string, thm_name: Thm_Name.P, serial: serial};
   198   | ZThm of {theory_name: string, thm_name: Thm_Name.P, serial: serial};
   199 
   199 
   200 type zproof_const = (zproof_name * zterm) * (ztyp ZTVars.table * zterm ZVars.table);
   200 type zproof_const = (zproof_name * zterm) * (ztyp ZTVars.table * zterm ZVars.table);
   201 
   201 
   202 datatype zproof =
   202 datatype zproof =
   203     ZDummy                         (*dummy proof*)
   203     ZNop
   204   | ZConstp of zproof_const
   204   | ZConstp of zproof_const
   205   | ZBoundp of int
   205   | ZBoundp of int
   206   | ZAbst of string * ztyp * zproof
   206   | ZAbst of string * ztyp * zproof
   207   | ZAbsp of string * zterm * zproof
   207   | ZAbsp of string * zterm * zproof
   208   | ZAppt of zproof * zterm
   208   | ZAppt of zproof * zterm
   478 
   478 
   479 (* fold types/terms within proof *)
   479 (* fold types/terms within proof *)
   480 
   480 
   481 fun fold_proof {hyps} typ term =
   481 fun fold_proof {hyps} typ term =
   482   let
   482   let
   483     fun proof ZDummy = I
   483     fun proof ZNop = I
   484       | proof (ZConstp (_, (instT, inst))) =
   484       | proof (ZConstp (_, (instT, inst))) =
   485           ZTVars.fold (typ o #2) instT #> ZVars.fold (term o #2) inst
   485           ZTVars.fold (typ o #2) instT #> ZVars.fold (term o #2) inst
   486       | proof (ZBoundp _) = I
   486       | proof (ZBoundp _) = I
   487       | proof (ZAbst (_, T, p)) = typ T #> proof p
   487       | proof (ZAbst (_, T, p)) = typ T #> proof p
   488       | proof (ZAbsp (_, t, p)) = term t #> proof p
   488       | proof (ZAbsp (_, t, p)) = term t #> proof p
   536         |> make_inst;
   536         |> make_inst;
   537   in if ! changed then (instT', inst') else raise Same.SAME end;
   537   in if ! changed then (instT', inst') else raise Same.SAME end;
   538 
   538 
   539 fun map_proof_same {hyps} typ term =
   539 fun map_proof_same {hyps} typ term =
   540   let
   540   let
   541     fun proof ZDummy = raise Same.SAME
   541     fun proof ZNop = raise Same.SAME
   542       | proof (ZConstp (a, (instT, inst))) =
   542       | proof (ZConstp (a, (instT, inst))) =
   543           ZConstp (a, map_insts_same typ term (instT, inst))
   543           ZConstp (a, map_insts_same typ term (instT, inst))
   544       | proof (ZBoundp _) = raise Same.SAME
   544       | proof (ZBoundp _) = raise Same.SAME
   545       | proof (ZAbst (a, T, p)) =
   545       | proof (ZAbst (a, T, p)) =
   546           (ZAbst (a, typ T, Same.commit proof p)
   546           (ZAbst (a, typ T, Same.commit proof p)