我以这种方式有一个应用程序序列(f(f(f x))),它是f的任意函数,任何应用程序都可以编号序列。 我想证明f(x y)和(x(f y)),x =(f f f ...)和y =任何值,它是相等的。 我需要以下代码中的证明:
Fixpoint r_nat {A : Type} (a : nat) : A -> (A -> A) -> A :=
match a with
|S n => fun (x0 : A) (a0 : A -> A) => r_nat n (a0 x0) a0
|0 => fun (x0 : A) (_ : A -> A) => x0
end.
Theorem homomo_nat : forall {T} (f : T -> T) (h : T) (x : nat), (r_nat x (f h) f) = f ((r_nat x) h f) .
compute.
??.
Qed.
我尝试展开和优化,但不起作用。
答案 0 :(得分:1)
通过应用x
的次数f
上的归纳法可以解决。
答案 1 :(得分:1)
我将参数(x:nat)
移到了(h:T)
之前。这使得归纳假设更强-它适用于 all h
。那么证明就是:
Theorem homomo_nat : forall {T} (f : T -> T) (x:nat) (h : T), (r_nat x (f h) f) = f ((r_nat x) h f) .
Proof.
induction x.
reflexivity.
intros. apply IHx.
Qed.
如果您愿意的话,还可以使用策略“绕开论点”以保留原始定理...从intros; generalize dependent h.