我有一个函数,可以给我一对自然数。
每对都由其序列号标识,例如sr1=(1,25)
sr2=(26,50)
sr3=(51,75)
。
平均数为25。然后,我还有另一个函数,可为我提供每对第一对和第二对之间存在的自然数的列表,例如l1=[1,2,......25]
l2=[26,27...50]
。
我想证明,如果对的序列号不同,则列表中不会重复任何元素。因此,配对是互斥的。
Lemma lgroups: forall sn1 sn2 avg,
S sn1 < S sn2 ->
avg =? 0 = false ->
(S sn1 * avg <? S sn2 * avg - (avg - 1) = true)
Proof. intros. induction sn1 . rewrite mult_1_l.
simpl. induction sn2. simpl. rewrite plus1_0_r.
destruct avg. inversion H0. inversion H .
答案 0 :(得分:2)
对我而言,上下文还不是很清楚,但是我可以回答证明给定引理的问题。
首先,此类引理通常不会使用布尔运算来陈述,而是使用它们的命题对应物来陈述。这样会得到这样的结果。
Lemma lgroups: forall sn1 sn2 avg,
S sn1 < S sn2 ->
avg <> 0 ->
S sn1 * avg < S sn2 * avg - (avg - 1).
第二,在处理自然数时,我一般也倾向于使用+
代替-
,因为由于没有负数,自然数的行为有点不自然。我认为,在您的情况下,这也更有意义,因为它正确表达了直观的陈述“当前序列的最后一个元素小于随后出现的第一个元素”,而我对此的含义还不清楚您的原始声明。
Lemma lgroups: forall sn1 sn2 avg,
S sn1 < S sn2 ->
avg <> 0 ->
S sn1 * avg + avg - 1 < S sn2 * avg.
第三,我也将S
放到任何地方,因为结果在这种情况下也成立并且严格。
Lemma lgroups: forall sn1 sn2 avg,
sn1 < sn2 ->
avg <> 0 ->
sn1 * avg + avg - 1 < sn2 * avg.
对于证明,这种简单的算术证明实际上可以通过某些策略自动证明,特别是Micromega中的策略nia
。
这最终给出:
Require Import Lia.
Lemma lgroups: forall sn1 sn2 avg,
sn1 < sn2 ->
avg <> 0 ->
sn1 * avg + avg - 1 < sn2 * avg.
Proof.
intros. nia.
Qed.