# HG changeset patch # User Mathias Fleury # Date 1647013389 -3600 # Node ID 73650a19591d6f1f5393cca4bc4f37b0712e6138 # Parent 6369151119ee973b83a5a7bb5fb5edecbf5deec1 fix handling of lambdas in reconstruction of eq_congruent diff -r 6369151119ee -r 73650a19591d src/HOL/SMT_Examples/SMT_Examples_Verit.thy --- a/src/HOL/SMT_Examples/SMT_Examples_Verit.thy Fri Mar 11 14:02:13 2022 +0100 +++ b/src/HOL/SMT_Examples/SMT_Examples_Verit.thy Fri Mar 11 16:43:09 2022 +0100 @@ -649,32 +649,32 @@ fun_evaluate_match :: \'astate \ 'vsemv_env \ _ \ ('pat \ 'exp0) list \ _ \ 'astate*((('v)list),('v))result\ assumes - " fix_clock (st::'astate) (fun_evaluate st (env::'vsemv_env) [e::'exp0]) = - (st'::'astate, r::('v list, 'v) result)" - " clock (fst (fun_evaluate (st::'astate) (env::'vsemv_env) [e::'exp0])) \ clock st" - "\(b::nat) (a::nat) c::nat. b \ a \ c \ b \ c \ a" - "\(a::'astate) p::'astate \ ('v list, 'v) result. (a = fst p) = (\b::('v list, 'v) result. p = (a, b))" - "\y::'v error_result. (\x1::'v. y = Rraise x1 \ False) \ (\x2::abort. y = Rabort x2 \ False) \ False" - "\(f1::'v \ 'astate \ ('v list, 'v) result) (f2::abort \ 'astate \ ('v list, 'v) result) x1::'v. - (case Rraise x1 of Rraise (x::'v) \ f1 x | Rabort (x::abort) \ f2 x) = f1 x1" - " \(f1::'v \ 'astate \ ('v list, 'v) result) (f2::abort \ 'astate \ ('v list, 'v) result) x2::abort. - (case Rabort x2 of Rraise (x::'v) \ f1 x | Rabort (x::abort) \ f2 x) = f2 x2" - "\(s1::'astate) (s2::'astate) (x::('v list, 'v) result) s::'astate. - fix_clock s1 (s2, x) = (s, x) \ clock s \ clock s2" - "\(s::'astate) (s'::'astate) res::('v list, 'v) result. - fix_clock s (s', res) = - (update_clock (\_::nat. if clock s' \ clock s then clock s' else clock s) s', res)" - "\(x2::'v error_result) x1::'v. - (r::('v list, 'v) result) = Rerr x2 \ x2 = Rraise x1 \ - clock (fst (fun_evaluate_match (st'::'astate) (env::'vsemv_env) x1 (pes::('pat \ 'exp0) list) x1)) - \ clock st'" - shows "((r::('v list, 'v) result) = Rerr (x2::'v error_result) \ + "fix_clock (st::'astate) (fun_evaluate st (env::'vsemv_env) [e::'exp0]) = + (st'::'astate, r::('v list, 'v) result)" + "clock (fst (fun_evaluate (st::'astate) (env::'vsemv_env) [e::'exp0])) \ clock st" + "\(b::nat) (a::nat) c::nat. b \ a \ c \ b \ c \ a" + "\(a::'astate) p::'astate \ ('v list, 'v) result. (a = fst p) = (\b::('v list, 'v) result. p = (a, b))" + "\y::'v error_result. (\x1::'v. y = Rraise x1 \ False) \ (\x2::abort. y = Rabort x2 \ False) \ False" + "\(f1::'v \ 'astate \ ('v list, 'v) result) (f2::abort \ 'astate \ ('v list, 'v) result) x1::'v. + (case Rraise x1 of Rraise (x::'v) \ f1 x | Rabort (x::abort) \ f2 x) = f1 x1" + "\(f1::'v \ 'astate \ ('v list, 'v) result) (f2::abort \ 'astate \ ('v list, 'v) result) x2::abort. + (case Rabort x2 of Rraise (x::'v) \ f1 x | Rabort (x::abort) \ f2 x) = f2 x2" + "\(s1::'astate) (s2::'astate) (x::('v list, 'v) result) s::'astate. + fix_clock s1 (s2, x) = (s, x) \ clock s \ clock s2" + "\(s::'astate) (s'::'astate) res::('v list, 'v) result. + fix_clock s (s', res) = + (update_clock (\_::nat. if clock s' \ clock s then clock s' else clock s) s', res)" + "\(x2::'v error_result) x1::'v. + (r::('v list, 'v) result) = Rerr x2 \ x2 = Rraise x1 \ + clock (fst (fun_evaluate_match (st'::'astate) (env::'vsemv_env) x1 (pes::('pat \ 'exp0) list) x1)) + \ clock st'" + shows "((r::('v list, 'v) result) = Rerr (x2::'v error_result) \ clock (fst (case x2 of Rraise (v2::'v) \ fun_evaluate_match (st'::'astate) (env::'vsemv_env) v2 (pes::('pat \ 'exp0) list) v2 | Rabort (abort::abort) \ (st', Rerr (Rabort abort)))) - \ clock (st::'astate)) " + \ clock (st::'astate))" using assms by (smt (verit)) end diff -r 6369151119ee -r 73650a19591d src/HOL/Tools/SMT/verit_replay_methods.ML --- a/src/HOL/Tools/SMT/verit_replay_methods.ML Fri Mar 11 14:02:13 2022 +0100 +++ b/src/HOL/Tools/SMT/verit_replay_methods.ML Fri Mar 11 16:43:09 2022 +0100 @@ -901,6 +901,7 @@ f $ arg => (Conv.fun_conv (eq_pred_conv rews f ctxt) then_conv Conv.arg_conv (eq_pred_conv rews arg ctxt)) ctrm + | Abs (_, _, f) => Conv.abs_conv (eq_pred_conv rews f o snd) ctxt ctrm | _ => Conv.all_conv ctrm)) fun eq_pred_rewrite_tac ({context = ctxt, prems, concl, ...}: Subgoal.focus) = @@ -917,6 +918,7 @@ | Const(_, _) $ t1 $ (Const(\<^const_name>\HOL.Not\, _) $ _) => (t1, conv_left_neg) | Const(_, _) $ t1 $ _ => (t1, conv_left) | t1 => (t1, conv_left)) + fun throwing_CONVERSION cv i st = Seq.single (Conv.gconv_rule cv i st) in throwing_CONVERSION (conv_term (eq_pred_conv rews t1 ctxt))