Coq:加入一句;“强感应”;策略

Coq:加入一句;“强感应”;策略,coq,Coq,自然数上的“强”(或“完全”)归纳意味着当证明n上的归纳步骤时,可以假定该属性适用于任意k Theorem strong_induction: forall P : nat -> Prop, (forall n : nat, (forall k : nat, (k < n -> P k)) -> P n) -> forall n : nat, P n. 在上下文中使用b:nat;我怎么能告诉Coq在a上做强诱导而不是在b上?简单地做“应用强诱导”会导致 n : n

自然数上的“强”(或“完全”)归纳意味着当证明n上的归纳步骤时,可以假定该属性适用于任意k
Theorem strong_induction:
forall P : nat -> Prop,
(forall n : nat, (forall k : nat, (k < n -> P k)) -> P n) ->
forall n : nat, P n.
在上下文中使用b:nat;我怎么能告诉Coq在a上做强诱导而不是在b上?简单地做“应用强诱导”会导致

n : nat
H0 : forall k : nat, k < n -> exists q r : nat, a = b * q + r
______________________________________(1/2)
exists q r : nat, a = b * q + r
______________________________________(2/2)
nat
n:nat
H0:k:nat,k存在q r:nat,a=b*q+r
______________________________________(1/2)
存在q r:nat,a=b*q+r
______________________________________(2/2)
纳特

假设是无用的(因为n与a无关),我不知道第二个目标是什么意思。

在这种情况下,要应用强归纳法,你需要
改变目标的结论,使其更好地符合定理的结论

Goal forall a b, b <> 0 -> exists ! q r, a = q * b + r /\ r < b.
change (forall a, (fun c => forall b, b <> 0 -> exists ! q r, c = q * b + r /\ r < b) a).
eapply strong_induction.
但是
归纳
策略已经处理了任意归纳原则

Goal forall a b, b <> 0 -> exists ! q r, a = q * b + r /\ r < b.
induction a using strong_induction.
所有a b、b 0的目标->存在!q r,a=q*b+r/\r使用强感应的感应。

更多关于这些战术。在
intro
-ing和
split
-ing之前,您可能应该使用
inclution

“使用强诱导的诱导”非常有效!另一方面,“更改”策略因“错误:不可转换”而失败。当更改太复杂时,您可以尝试使用
replace
策略,这将要求提供平等性证明
change
只是
replace
当证明是微不足道的自反性时。
Goal forall a b, b <> 0 -> exists ! q r, a = q * b + r /\ r < b.
refine (strong_induction _ _).
Goal forall a b, b <> 0 -> exists ! q r, a = q * b + r /\ r < b.
induction a using strong_induction.