Coq:加入一句;“强感应”;策略
自然数上的“强”(或“完全”)归纳意味着当证明n上的归纳步骤时,可以假定该属性适用于任意kCoq:加入一句;“强感应”;策略,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
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.