Похоже, что для такого рода целей доказательства, которые могут быть решены путем многократного применения правила вывода, следует использовать классический аргумент (auto
), а не переписчик (simpl
).
Если я объявляю все правила набора как безопасные вступительные правила:
declare HtVar [intro!]
declare HtConst [intro!]
declare HtPlus [intro!]
declare HtAbs [intro!]
declare HtApp [intro!]
Тогда большая часть моей леммы подтверждается auto
, что оставляет две открытые цели поиска, которые могут быть решены с помощью simp
:
lemma eleven: "hasty $0 (App (App
(Abs ''n'' (Abs ''m'' (Plus (Var ''n'') (Var ''m''))))
(Const 7)) (Const 4)) Nat"
apply(auto)
apply(simp_all add: my_simps)
done
Кроме того, с учетом классического рассуждения, такого как auto
, можно легко указать, какой преобразователь использовать для оставшихся подцелей, следующим образом, поэтому приведенное выше доказательство может быть сведено в одну строку:
apply(auto simp add: my_simps)
Принимая во внимание, что с учетом такого переписчика, как simp
, представляется более сложным указать, какой метод использовать в оставшихся подцелях.