是否有Isabelle/Isar证明策略来证明关于非归纳定义的引理?

是否有Isabelle/Isar证明策略来证明关于非归纳定义的引理?,isabelle,isar,Isabelle,Isar,我有带非归纳定义的Isabelle理论(我想对避免归纳的算法进行建模,就像工业开发人员通常做的那样)和该定义的引理: theory Maximum imports (* Main *) "HOL-Library.Multiset" "HOL-Library.Code_Target_Numeral" "HOL-Library.Code_Target_Nat" "HOL-Library.Code

我有带非归纳定义的Isabelle理论(我想对避免归纳的算法进行建模,就像工业开发人员通常做的那样)和该定义的引理:

theory Maximum
  imports (* Main *)
    "HOL-Library.Multiset"
    "HOL-Library.Code_Target_Numeral"
    "HOL-Library.Code_Target_Nat"
    "HOL-Library.Code_Abstract_Nat"
begin

definition two_integer_max_case_def :: "nat ⇒ nat ⇒ nat" where
"two_integer_max_case_def a b = (case a > b of True ⇒ a | False ⇒ b)"

lemma spec_1:
  fixes a :: nat and b :: nat
  assumes "a > b"
  shows "two_integer_max_case_def a b = a"
  apply (induction b)
  apply (induction a)
  apply simp_all
  done

end
当前验证状态已生成3个目标,所有目标均与归纳法相关(直接应用simp失败,无法应用验证方法):


我的问题是——有没有避免归纳的证明方法和策略可以应用于这个简单的案例?也许某种程度上与
simp
战术家族有关?

这个引理可以用
用ASSM证明(simp add:two\u integer\u max\u case\u def)
。我会惊讶地发现这是大锤无法达到的。。。
proof (prove)
goal (3 subgoals):
 1. two_integer_max_case_def 0 0 = 0
 2. ⋀a. two_integer_max_case_def a 0 = a ⟹
         two_integer_max_case_def (Suc a) 0 =
         Suc a
 3. ⋀b. two_integer_max_case_def a b = a ⟹
         two_integer_max_case_def a (Suc b) = a