@@ -3,6 +3,7 @@ From mathcomp Require Import all_boot.
33From Stdlib Require Import NArith.
44Require Import digitn.
55
6+
67(***************************************************************************** *)
78(* *)
89(* A formalisation of the wrong fact *)
@@ -329,7 +330,7 @@ Proof. by []. Qed.
329330
330331Lemma is_repeat_digit n p :
331332 size p = n.*2 -> is_repeat p =
332- [forall i : 'I_n.*2, digitn 10 (n10nat p) i == digitn 10 (n10nat p) (i %%2)].
333+ [forall i : 'I_n.*2, digitn 10 (n10nat p) i == digitn 10 (n10nat p) (i %% 2)].
333334Proof .
334335have dL d : dval d < 10 by case: d.
335336elim: n p => [|n IH] [|d1 [|d2 [|d3 [|d4 p]]]] H //.
520521Definition get_list n := let: Res l _ _ := run_res n in [seq n10nat i | i <- l].
521522
522523Lemma get_list_correct n i : i <= (10%N ^ n.+1.*2)./2 ->
523- (forall j, j < n.+1.*2 -> digitn 10 (i ^ 2) j = digitn 10 (i ^ 2) (j %%2)) ->
524+ (forall j, j < n.+1.*2 -> digitn 10 (i ^ 2) j = digitn 10 (i ^ 2) (j %% 2)) ->
524525 (i ^ 2) %% 100 \in get_list n.
525526Proof .
526527move=> iLp Hf.
541542
542543Lemma get_list_all_correct n i :
543544 0 < n ->
544- (forall j, j < n.+1.*2 -> digitn 10 (i ^ 2) j = digitn 10 (i ^ 2) (j %%2)) ->
545+ (forall j, j < n.+1.*2 -> digitn 10 (i ^ 2) j = digitn 10 (i ^ 2) (j %% 2)) ->
545546 (i ^ 2) %% 100 \in get_list n.
546547Proof .
547548move=> n_pos Hf.
@@ -582,31 +583,31 @@ by apply: Hf1.
582583Qed .
583584
584585Lemma get_list_all_correct4 i :
585- (forall j, j < 4 -> digitn 10 (i ^ 2) j = digitn 10 (i ^ 2) (j %%2)) ->
586+ (forall j, j < 4 -> digitn 10 (i ^ 2) j = digitn 10 (i ^ 2) (j %% 2)) ->
586587 (i ^ 2) %% 100 \in [:: 00; 04; 16; 21; 29; 36; 61; 64; 69; 84; 96].
587588Proof .
588589move=> Hf.
589- pose l := [:: 00; 04; 16; 96; 36; 61; 64; 84; 69; 29; 21].
590- have -> : [:: 00; 04; 16; 21; 29; 36; 61; 64; 69; 84; 96] =i l.
590+ pose l := [:: 00; 04; 16; 96; 36; 61; 64; 84; 69; 29; 21].
591+ have -> : [:: 00; 04; 16; 21; 29; 36; 61; 64; 69; 84; 96] =i l.
591592 by move=> j; rewrite !inE; do 11 (case:eqP => //).
592593have -> : l = get_list 1 by vm_cast_no_check (refl_equal l).
593594by apply: get_list_all_correct.
594595Qed .
595596
596597Lemma get_list_all_correct6 i :
597- (forall j, j < 6 -> digitn 10 (i ^ 2) j = digitn 10 (i ^ 2) (j %%2)) ->
598+ (forall j, j < 6 -> digitn 10 (i ^ 2) j = digitn 10 (i ^ 2) (j %% 2)) ->
598599 (i ^ 2) %% 100 \in [:: 00; 16; 21; 29; 61; 64; 69; 84].
599600Proof .
600601move=> Hf.
601- pose l := [:: 00; 16; 64; 61; 29; 84; 21; 69].
602+ pose l := [:: 00; 16; 64; 61; 29; 84; 21; 69].
602603have -> : [:: 00; 16; 21; 29; 61; 64; 69; 84] =i l.
603604 by move=> j; rewrite !inE; do 8 (case:eqP => //).
604605have -> : l = get_list 2 by vm_cast_no_check (refl_equal l).
605606by apply: get_list_all_correct.
606607Qed .
607608
608609Lemma get_list_all_correct8 i :
609- (forall j, j < 8 -> digitn 10 (i ^ 2) j = digitn 10 (i ^ 2) (j %%2)) ->
610+ (forall j, j < 8 -> digitn 10 (i ^ 2) j = digitn 10 (i ^ 2) (j %% 2)) ->
610611 (i ^ 2) %% 100 \in [:: 00; 21; 29; 61; 64; 69; 84].
611612Proof .
612613move=> Hf.
@@ -633,11 +634,11 @@ Compute (509895478 ^ 2)%N.
633634(* This takes 3 hours *)
634635
635636Lemma get_list_all_correct10 i :
636- (forall j, j < 10 -> digitn 10 (i ^ 2) j = digitn 10 (i ^ 2) (j %%2)) ->
637+ (forall j, j < 10 -> digitn 10 (i ^ 2) j = digitn 10 (i ^ 2) (j %% 2)) ->
637638 (i ^ 2) %% 100 \in [:: 00; 21; 29; 61; 69; 84].
638639Proof.
639640move=> Hf.
640- pose l := [:: 0 ; 29; 21; 84; 69; 61].
641+ pose l := [:: 00 ; 29; 21; 84; 69; 61].
641642have -> : [:: 00; 21; 29; 61; 69; 84] =i l.
642643 move=> j; rewrite !inE; do 6 (case:eqP => //).
643644have -> : l = get_list 4 by vm_cast_no_check (refl_equal l).
0 commit comments