#k #p #B #nil #op #f #g (elim k) [normalize @nill]
-k #k #Hind (cases (true_or_false (p k))) #H
[>bigop_Strue // >bigop_Strue // >bigop_Strue //
- <assoc <assoc in ⊢ (???%) @eq_f >assoc >comm in ⊢ (??(????%?)?)
+ normalize <assoc <assoc in ⊢ (???%) @eq_f >assoc >comm in ⊢ (??(????%?)?)
<assoc @eq_f @Hind
|>bigop_Sfalse // >bigop_Sfalse // >bigop_Sfalse //
]
[>(not_eq_to_eqb_false … (lt_to_not_eq … Hi)) //] #Hcut
cases (true_or_false (p n)) #pn
[>bigop_Strue // >bigop_Strue //
- >assoc >(comm ?? op (f i) (f n)) <assoc >Hind //
+ normalize >assoc >(comm ?? op (f i) (f n)) <assoc >Hind //
|>bigop_Sfalse // >bigop_Sfalse // >Hind //
]
|<Hi >bigop_Strue // @eq_f >bigop_Sfalse
#m #n #a #b #ltam #ltbn #pnm
cut (andb (eqb ((cr_pair m n a b) \mod m) a)
(eqb ((cr_pair m n a b) \mod n) b) = true)
- [@f_min_true cases(congruent_ab_lt m n a b ?? pnm)
+ [whd in match (cr_pair m n a b) @f_min_true cases(congruent_ab_lt m n a b ?? pnm)
[#x * * #cxa #cxb #ltx @(ex_intro ?? x) % /2/
- >eq_to_eqb_true
+ >eq_to_eqb_true
[>eq_to_eqb_true // <(lt_to_eq_mod …ltbn) //
|<(lt_to_eq_mod …ltam) //
]
lemma divides_to_gcd_aux: ∀p,m,n. O < p → O < n →n ∣ m →
gcd_aux p m n = n.
-#p #m #n #posp @(lt_O_n_elim … posp) #l #posn #divnm normalize
+#p #m #n #posp @(lt_O_n_elim … posp) #l #posn #divnm whd in ⊢ (??%?)
>divides_to_dividesb_true normalize //
qed.
lemma not_divides_to_gcd_aux: ∀p,m,n. 0 < n → n ∤ m →
gcd_aux (S p) m n = gcd_aux p n (m \mod n).
-#p #m #n #lenm #divnm normalize >not_divides_to_dividesb_false
+#p #m #n #lenm #divnm whd in ⊢ (??%?) >not_divides_to_dividesb_false
normalize // qed.
theorem divides_gcd_aux_mn: ∀p,m,n. O < n → n ≤ m → n ≤ p →
theorem max_f_g: ∀f,g,n.(∀i. i < n → f i = g i) →
max n f = max n g.
#f #g #n (elim n) //
-#m #Hind #ext normalize >ext >Hind //
+#m #Hind #ext normalize >ext normalize in Hind >Hind //
#i #ltim @ext /2/
qed.
theorem primeb_false_to_not_prime : ∀n:nat.
primeb n = false → ¬ (prime n).
-#n #H cut ((leb 2 n ∧ (eqb (smallest_factor n) n)) = false) [>H //]
+#n #H cut ((leb 2 n ∧ (eqb (smallest_factor n) n)) = false) [@H]
@leb_elim
[#_ #H1 @(not_to_not … (prime_to_smallest_factor … ))
@eqb_false_to_not_eq @H1
theorem prime_nth_prime : ∀n:nat.prime (nth_prime n).
#n (cases n)
[@primeb_true_to_prime //
- |#m >nth_primeS @primeb_true_to_prime @f_min_true
+ |#m >nth_primeS @primeb_true_to_prime check f_min_true @(f_min_true primeb)
@(ex_intro nat ? (smallest_factor (S (nth_prime m)!)))
% [% // @le_S_S @(transitive_le … (le_smallest_factor_n …))
<plus_n_Sm @le_plus_n_r
#A #n elim n -n //
#n #IHn #l elim l normalize //
qed.
-
+(*
lemma length_ltl: ∀A,n,l. |ltl A l n| = |l| - n.
#A #n elim n -n /2/
#n #IHn * normalize /2/
qed.
+*)
\ No newline at end of file
].
lemma all_hd: ∀A:Type[0]. ∀P:A→Prop. ∀a. P a → ∀l. all … P l → P (hd … l a).
-#A #P #a #Ha #l elim l -l [ #_ @Ha | #b #l #_ #Hl elim Hl -Hl // ]
+#A #P #a #Ha #l elim l -l [ #_ @Ha | #b #l #_ #Hl elim Hl -Hl; normalize // ]
qed.
lemma all_tl: ∀A:Type[0]. ∀P:A→Prop. ∀l. all … P l → all … P (tail … l).
-#A #P #l elim l -l // #b #l #IH #Hl elim Hl -Hl //
+#A #P #l elim l -l // #b #l #IH #Hl elim Hl -Hl; normalize //
qed.
lemma all_nth: ∀A:Type[0]. ∀P:A→Prop. ∀a. P a → ∀i,l. all … P l → P (nth i … l a).
∀l1,l2. all2 … P l1 l2 → P (hd … l1 a) (hd … l2 b).
#A #B #P #a #b #Hab #l1 elim l1 -l1 [ #l2 #H2 >H2 @Hab ]
#x1 #l1 #_ #l2 elim l2 -l2 [ #false elim false ]
-#x2 #l2 #_ #H elim H -H //
+#x2 #l2 #_ #H elim H -H; normalize //
qed.
lemma all2_tl: ∀A,B:Type[0]. ∀P:A→B→Prop.
∀l1,l2. all2 … P l1 l2 → all2 … P (tail … l1) (tail … l2).
#A #B #P #l1 elim l1 -l1 [ #l2 #H >H // ]
#x1 #l1 #_ #l2 elim l2 -l2 [ #false elim false ]
-#x2 #l2 #_ #H elim H -H //
+#x2 #l2 #_ #H elim H -H; normalize //
qed.
lemma all2_nth: ∀A,B:Type[0]. ∀P:A→B→Prop. ∀a,b. P a b →