在证明目标是存在主义的情况下,我有以下内容,目标属性是其中一个假设。
H : x ==> y
...
______________________________________(1/2)
exists t : tm, x ==> t
我知道我可以exists y. apply H.
来证明目前的目标,但我想知道是否有更智能的策略可以直接使用假设证明存在目标,例如eapply H
?
由于这是一个统一,所以不必在X
中编写exists X.
部分会很好。
如果不存在这样的策略,我该怎么写呢?
答案 0 :(得分:4)
存在这样的策略,它被称为Variable T : Type.
Variable R : T -> T -> Prop.
Theorem test : forall x y, R x y -> exists t, R x t.
Proof.
intros. eexists. apply H.
Qed.
。
它完全符合您的期望。
https://coq.inria.fr/distrib/current/refman/Reference-Manual010.html#hevea_tactic23
使用示例:
program poly;
type
polynomial = record
a, b, c : real;
end;
procedure readPolynomial (var p : polynomial);
begin
writeln ('Input 1st coefficient: ');
readln (p.a);
writeln ('Input 2nd coefficient: ');
readln (p.b);
writeln ('Input 3rd coefficient: ');
readln (p.c);
end;
function square (x : real) : real;
begin
square := x * x;
end;
procedure roots (p : polynomial; var rP, rN : real);
begin
rP := (-p.b + (sqrt((square(p.b)) - (4 * p.a * p.c)))) / (2 * p.a);
rN := (-p.b - (sqrt((square(p.b)) - (4 * p.a * p.c)))) / (2 * p.a);
writeln('The roots are: ', rP:0:3, ' y ' ,rN:0:3);
end;
var
myPolynomial : polynomial;
r1, r2 : real;
begin
writeln ('Enter the coefficients: ');
readPolynomial (myPolynomial);
roots (myPolynomial, r1, r2);
end.