src/HOL/Tools/record.ML
changeset 46218 ecf6375e2abb
parent 46215 0da9433f959e
child 46219 426ed18eba43
equal deleted inserted replaced
46217:7b19666f0e3d 46218:ecf6375e2abb
  1119             in
  1119             in
  1120               (case mk_eq_terms (upd $ k $ r) of
  1120               (case mk_eq_terms (upd $ k $ r) of
  1121                 SOME (trm, trm', vars) =>
  1121                 SOME (trm, trm', vars) =>
  1122                   SOME
  1122                   SOME
  1123                     (prove_unfold_defs thy [] []
  1123                     (prove_unfold_defs thy [] []
  1124                       (list_all (vars, Logic.mk_equals (sel $ trm, trm'))))
  1124                       (Logic.list_all (vars, Logic.mk_equals (sel $ trm, trm'))))
  1125               | NONE => NONE)
  1125               | NONE => NONE)
  1126             end
  1126             end
  1127           else NONE
  1127           else NONE
  1128       | _ => NONE));
  1128       | _ => NONE));
  1129 
  1129 
  1247         val noops' = maps snd (Symtab.dest noops);
  1247         val noops' = maps snd (Symtab.dest noops);
  1248       in
  1248       in
  1249         if simp then
  1249         if simp then
  1250           SOME
  1250           SOME
  1251             (prove_unfold_defs thy noops' [simproc]
  1251             (prove_unfold_defs thy noops' [simproc]
  1252               (list_all (vars, Logic.mk_equals (lhs, rhs))))
  1252               (Logic.list_all (vars, Logic.mk_equals (lhs, rhs))))
  1253         else NONE
  1253         else NONE
  1254       end);
  1254       end);
  1255 
  1255 
  1256 end;
  1256 end;
  1257 
  1257 
  1343         (case t of
  1343         (case t of
  1344           Const (@{const_name Ex}, Tex) $ Abs (s, T, t) =>
  1344           Const (@{const_name Ex}, Tex) $ Abs (s, T, t) =>
  1345            (let
  1345            (let
  1346              val eq = mkeq (dest_sel_eq t) 0;
  1346              val eq = mkeq (dest_sel_eq t) 0;
  1347              val prop =
  1347              val prop =
  1348                list_all ([("r", T)],
  1348                Logic.list_all ([("r", T)],
  1349                  Logic.mk_equals
  1349                  Logic.mk_equals
  1350                   (Const (@{const_name Ex}, Tex) $ Abs (s, T, eq), @{term True}));
  1350                   (Const (@{const_name Ex}, Tex) $ Abs (s, T, eq), @{term True}));
  1351             in
  1351             in
  1352               SOME (Skip_Proof.prove_global thy [] [] prop
  1352               SOME (Skip_Proof.prove_global thy [] [] prop
  1353                 (fn _ => simp_tac (Simplifier.inherit_context ss (get_simpset thy)
  1353                 (fn _ => simp_tac (Simplifier.inherit_context ss (get_simpset thy)