Skip to content

Commit

Permalink
Merge pull request #228 from trishullab/george
Browse files Browse the repository at this point in the history
Make notational improvements and fix misformalizations.
  • Loading branch information
GeorgeTsoukalas authored Oct 19, 2024
2 parents aa46136 + e653e81 commit 1a26b10
Show file tree
Hide file tree
Showing 44 changed files with 567 additions and 346 deletions.
34 changes: 28 additions & 6 deletions coq/src/putnam_1965_b4.v
Original file line number Diff line number Diff line change
@@ -1,7 +1,29 @@
Require Import Reals Coquelicot.Hierarchy Ensembles.
Definition putnam_1965_b4_solution : (((R -> R) -> R -> R) * ((R -> R) -> R -> R)) * ((Ensemble R) * (R -> R)) := (((fun (h : R -> R) (x : R) => h x + x), (fun (h : R -> R) (x : R) => h x + 1)), ((fun x : R => x >= 0), sqrt)).
From mathcomp Require Import all_algebra all_ssreflect.
From mathcomp Require Import reals normedtype sequences topology.
From mathcomp Require Import classical_sets.
Import numFieldNormedType.Exports.
Import Order.TTheory GRing.Theory Num.Theory.

Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.

Local Open Scope ring_scope.
Local Open Scope classical_set_scope.

Variable R : realType.
Definition putnam_1965_b4_solution : ((((R -> R) -> (R -> R)) * ((R -> R) -> (R -> R))) * ((set R) * (R -> R))) :=
((fun h : R -> R => (fun x : R => h x + x), fun h : R -> R => (fun x => h x + 1)), ([set x : R | x >= 0], @Num.sqrt R)).
Theorem putnam_1965_b4
(f : nat -> R -> R)
(hf : forall n : nat, gt n 0 -> f n = (fun x : R => (sum_n (fun i : nat => (C n (2 * i)) * x ^ i) (n / 2)) / (sum_n (fun i : nat => (C n (2 * i + 1)) * x ^ i) ((n - 1) / 2))))
: let '((p, q), (s, g)) := putnam_1965_b4_solution in (forall n : nat, gt n 0 -> f (Nat.add n 1) = (fun x : R => p (f n) x / q (f n) x) /\ s = (fun x : R => exists L : R, filterlim (fun n : nat => f n x) eventually (locally L)) /\ (forall x : R, s x -> filterlim (fun n : nat => f n x) eventually (locally (g x)))).
Proof. Admitted.
(f u v : nat -> R -> R)
(hu : forall n : nat, gt n 0 -> forall x : R, u n x = \sum_(0 <= i < n%/2 .+1) ('C(n, 2 * i)%:R * x^i))
(hv : forall n : nat, gt n 0 -> forall x : R, v n x = \sum_(0 <= i < (n.-1)%/2 .+1) ('C(n, 2 * (i.+1))%:R * x^i))
(hf : forall n : nat, gt n 0 -> forall x : R, f n x = u n x / v n x)
(n : nat)
(hn : gt n 0)
(f_seq : R -> (nat -> R) := fun (x : R) => fun (m : nat) => f m x) :
let '((p, q), (s, g)) := putnam_1965_b4_solution in
(forall x : R, v n x <> 0 -> v (n.+1) x <> 0 -> q (f n) x <> 0 -> f (n.+1) x = p (f n) x / q (f n) x) /\
s = [set x : R | exists l : R, f_seq x @ \oo --> l] /\
(forall x : R, x \in s -> (f_seq x) @ \oo --> g x).
Proof. Admitted.
23 changes: 16 additions & 7 deletions coq/src/putnam_1968_a3.v
Original file line number Diff line number Diff line change
@@ -1,8 +1,17 @@
Require Import Ensembles List. From mathcomp Require Import fintype.
Variable A : finType.
From mathcomp Require Import all_algebra all_ssreflect.
From mathcomp Require Import classical_sets cardinality.

Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.

Local Open Scope classical_set_scope.
Local Open Scope card_scope.

Theorem putnam_1968_a3
(nthvalue : list (Ensemble A) -> nat -> Ensemble A)
(hnthvalue : forall (l : list (Ensemble A)) (n : nat), n < length l -> nth_error l n = value (nthvalue l n))
: exists l : list (Ensemble A), head l = value (Empty_set A) /\ (forall SS : Ensemble A, exists! i : nat, i < length l /\ nthvalue l i = SS) /\
(forall i : nat, i < length l - 1 -> (exists a : A, (~((nthvalue l i) a) /\ nthvalue l (i + 1) = Ensembles.Add A (nthvalue l i) a) \/ (~((nthvalue l (i + 1)) a) /\ nthvalue l i = Ensembles.Add A (nthvalue l (i + 1)) a))).
Proof. Admitted.
(A : finType) :
exists (n : nat) (s : nat -> (set A)),
s 0 = set0 /\
(forall (t : set A), exists! i, i < (\prod_(0 <= i < n) 2) /\ s i = t) /\
(forall i, i + 1 < \prod_(0 <= i < n) 2 -> ((s i) `\` (s (i + 1))) `|` ((s (i + 1)) `\` (s i)) #= [set: 'I_1]).
Proof. Admitted.
17 changes: 13 additions & 4 deletions coq/src/putnam_1969_a5.v
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,17 @@ Local Open Scope ring_scope.
Local Open Scope classical_set_scope.

Variable R : realType.
Theorem putnam_1969_a5 :
forall x y : R -> R, (forall t : R, differentiable x t /\ differentiable y t) ->
(forall t : R, t > 0 -> x 0 = y 0 <-> exists u : R -> R, continuous u /\
(x t = 0 /\ y t = 0 /\ forall p : R, x^`() p = -2 * y p + u p /\ y^`() p = -2 * x p + u p)).
Theorem putnam_1969_a5
(x0 y0 t : R)
(ht : 0 < t) :
x0 = y0 <-> exists x y u : R -> R,
(forall x' : R, differentiable x x') /\
(forall y' : R, differentiable y y') /\
continuous u /\
(forall x' : R, x^`() x' = -2 * (y x') + u x') /\
(forall y' : R, y^`() y' = -2 * (x y') + u y') /\
x 0 = x0 /\
y 0 = y0 /\
x t = 0 /\
y t = 0.
Proof. Admitted.
7 changes: 4 additions & 3 deletions coq/src/putnam_1977_a3.v
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ Local Open Scope ring_scope.
Variable R : realType.
Definition putnam_1977_a3_solution : (R -> R) -> (R -> R) -> (R -> R) := fun f g x => g x - f (x - 3) + f (x - 1) + f (x + 1) - f (x + 3).
Theorem putnam_1977_a3
(f g : R -> R)
: let h := putnam_1977_a3_solution f g in
forall x : R, f x = (h (x + 1) + h (x - 1)) / 2 /\ g x = (h (x + 4) + h (x - 4)) / 2.
(f g h : R -> R)
(hf : forall x, f x = (h (x + 1) + h (x - 1)) / 2)
(hg : forall x, g x = (h (x + 4) + h (x - 4)) / 2)
: h = putnam_1977_a3_solution f g.
Proof. Admitted.
24 changes: 18 additions & 6 deletions coq/src/putnam_1981_a1.v
Original file line number Diff line number Diff line change
@@ -1,8 +1,20 @@
Require Import Nat Reals Coquelicot.Coquelicot. From mathcomp Require Import div bigop.
Definition putnam_1981_a1_solution : R := Rdiv 1 8.
From mathcomp Require Import all_algebra all_ssreflect.
From mathcomp Require Import reals normedtype sequences topology.
From mathcomp Require Import classical_sets.
Import numFieldNormedType.Exports.

Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.

Local Open Scope ring_scope.
Local Open Scope classical_set_scope.

Variable R : realType.
Definition putnam_1981_a1_solution : R := 1 / 8.
Theorem putnam_1981_a1
(P : nat -> nat -> Prop := fun n k => 5 ^ k %| (\prod_(1<=i<n+1) (i^i)) = true)
(f : nat -> nat)
(hf : forall (n: nat), gt n 1 -> P n (f n) /\ forall (k: nat), P n k -> le k (f n))
: Lim_seq (fun n => INR (f n) / INR n ^ 2) = putnam_1981_a1_solution.
(P : nat -> nat -> Prop := fun n k => (5 ^ k %| (\prod_( 1<= i < n+1) (i%:Z ^+ i)))%Z)
(E : nat -> nat)
(hE : forall n : nat, ge n 1 -> P n (E n) /\ forall k : nat, P n k -> le k (E n))
: (fun n : nat => (E n)%:R / (n%:R ^ 2)) @ \oo --> putnam_1981_a1_solution.
Proof. Admitted.
7 changes: 5 additions & 2 deletions coq/src/putnam_1981_b5.v
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
Require Import BinNums Nat NArith Coquelicot.Coquelicot.

Local Coercion Raxioms.INR : nat >-> Rdefinitions.R.

Definition putnam_1981_b5_solution := True.
Theorem putnam_1981_b5
(f := fix count_ones (n : positive) : nat :=
Expand All @@ -7,6 +10,6 @@ Theorem putnam_1981_b5
| xO n' => count_ones n'
| xI n' => 1 + count_ones n'
end)
(k := Series (fun n => Rdefinitions.Rdiv (Raxioms.INR (f (Pos.of_nat n))) (Raxioms.INR (n + pow n 2))))
: exists (a b: nat), Rtrigo_def.exp k = Rdefinitions.Rdiv (Raxioms.INR a) (Raxioms.INR b) <-> putnam_1981_b5_solution.
(k := Series (fun n => Rdefinitions.Rdiv (f (Pos.of_nat n)) (n + pow n 2)))
: exists (a b: nat), Rtrigo_def.exp k = Rdefinitions.Rdiv a b <-> putnam_1981_b5_solution.
Proof. Admitted.
24 changes: 13 additions & 11 deletions coq/src/putnam_1983_a3.v
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
Require Import Nat ZArith Znumtheory.
Open Scope nat_scope.
Fixpoint nat_sum (a : nat -> nat) (k : nat) : nat :=
match k with
| O => a O
| S k' => a k + nat_sum a k'
end.
From mathcomp Require Import all_algebra all_ssreflect.

Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.

Local Open Scope nat_scope.

Theorem putnam_1983_a3
(p : nat)
(hp : odd p = true /\ prime (Z.of_nat p))
(f : nat -> nat := fun n => nat_sum (fun i => (i+1) * n^i) (p-2))
: forall (a b : nat), a < p /\ b < p /\ a <> b -> (f a) mod p <> (f b) mod p.
Proof. Admitted.
(F : nat -> nat)
(poddprime : odd p = true /\ prime p)
(hF : forall n : nat, F n = \sum_(0 <= i < p-1) ((i.+1) * n ^ i))
: forall a b : nat, 1 <= a <= p /\ 1 <= b <= p /\ a <> b -> ~ (F a = F b %[mod p]).
Proof. Admitted.
2 changes: 1 addition & 1 deletion coq/src/putnam_1985_b2.v
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ Theorem putnam_1985_b2
(hfn0 : forall n : nat, ge n 1 -> f n 0 = 0)
(hfderiv : forall n : nat, forall x : R, Derive (f (S n)) x = (INR n + 1) * f n (x + 1))
: (forall n : nat, In n putnam_1985_b2_solution -> prime (Z.of_nat n)) /\ exists a : nat, INR a = f 100%nat 1 /\ fold_left mul putnam_1985_b2_solution 1%nat = a.
Proof. Admitted.
Proof. Admitted.
34 changes: 18 additions & 16 deletions coq/src/putnam_1986_a6.v
Original file line number Diff line number Diff line change
@@ -1,20 +1,22 @@
Require Import Reals Factorial Coquelicot.Coquelicot.
Definition putnam_1986_a6_solution (b: nat -> nat) (n: nat) :=
let fix prod_n (b : nat -> nat) (n : nat) : nat :=
match n with
| O => 1%nat
| S n' => Nat.mul (b n') (prod_n b n')
end in
INR (prod_n b n) / INR (fact n).
From mathcomp Require Import all_algebra all_ssreflect.
From mathcomp Require Import reals.

Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.

Local Open Scope ring_scope.

Variable R : realType.
Definition putnam_1986_a6_solution : (nat -> nat) -> nat -> R := fun b n => (\prod_(1 <= i < n.+1) (b i)%:R) / n`!%:R.
Theorem putnam_1986_a6
(n : nat)
(npos : gt n 0)
(a : nat -> R)
(a : nat -> R)
(b : nat -> nat)
(bpos : forall i : nat, lt i n -> gt (b i) 0)
(binj : forall i j : nat, lt i n /\ lt j n -> (b i = b j -> i = j))
(f : R -> R)
(fpoly : exists c : nat -> R, exists deg : nat, f = fun x => sum_n (fun n => c n * x ^ n) deg)
(hf : forall x : R, (1 - x) ^ n * f x = 1 + sum_n (fun i => (a i) * x ^ (b i)) (n - 1))
: f 1 = putnam_1986_a6_solution b n.
Proof. Admitted.
(bpos : forall i : nat, lt i n /\ gt n 0 -> gt (b i) 0)
(binj : forall i j : nat, lt i n /\ lt j n /\ gt i 0 /\ gt j 0 -> (b i = b j -> i = j))
(f : {poly R})
(hf : forall x : R, (1 - x) ^ n * f.[x] = 1 + \sum_(1 <= i < n.+1) ((a i) * x ^ (b i)))
: f.[1] = putnam_1986_a6_solution b n.
Proof. Admitted.
7 changes: 0 additions & 7 deletions coq/src/putnam_1989_a1.v

This file was deleted.

33 changes: 21 additions & 12 deletions coq/src/putnam_1990_b2.v
Original file line number Diff line number Diff line change
@@ -1,13 +1,22 @@
Require Import Reals Coquelicot.Coquelicot.
Open Scope R.
Theorem putnam_1990_b2
(prod_n : (nat -> R) -> nat -> R := fix P (a: nat -> R) (n : nat) : R :=
match n with
| O => 1
| S n' => a n' * P a n'
end)
From mathcomp Require Import all_algebra all_ssreflect.
From mathcomp Require Import reals exp sequences normedtype topology.
From mathcomp Require Import classical_sets.
Import numFieldNormedType.Exports.

Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.

Local Open Scope ring_scope.
Local Open Scope classical_set_scope.

Variable R : realType.

Theorem putnam_1990_b2
(x z : R)
(hxz : Rabs x < 1 /\ Rabs z > 1)
(P : nat -> R := fun j => (prod_n (fun i => 1 - z * x ^ i) j) / (prod_n (fun i => z - x ^ (i + 1)) j))
: 1 + Series (fun j => (1 + x ^ (j+1)) * P (j+1)%nat) = 0.
Proof. Admitted.
(P : nat -> R)
(xlt1 : `| x | < 1)
(zgt1 : `| z | > 1)
(hP : forall j : nat, ge j 1 -> P j = (\prod_(0 <= i < j) (1 - z * x ^ i)) / (\prod_(1 <= i < j.+1) (z - x ^ i)))
: (fun n : nat => 1 + \sum_(1 <= j < n) ((1 + x ^ j) * P j)) @ \oo --> 0.
Proof. Admitted.
26 changes: 18 additions & 8 deletions coq/src/putnam_1990_b5.v
Original file line number Diff line number Diff line change
@@ -1,8 +1,18 @@
Require Import Reals Ensembles Finite_sets Coquelicot.Coquelicot.
Definition putnam_1990_b5_solution := True.
Open Scope R.
Theorem putnam_1990_b5
(pn : (nat -> R) -> nat -> R -> R := fun a n x => sum_n (fun i => a i * pow x i) n)
: (exists (a : nat -> R), forall (n: nat), gt n 0 -> exists (roots: Ensemble R), cardinal R roots n /\ forall (r: R), roots r <-> pn a n r = 0) <->
putnam_1990_b5_solution.
Proof. Admitted.
From mathcomp Require Import all_algebra all_ssreflect.
From mathcomp Require Import reals sequences topology normedtype.
From mathcomp Require Import classical_sets cardinality.

Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.

Local Open Scope ring_scope.
Local Open Scope classical_set_scope.
Local Open Scope card_scope.

Variable R : realType.
Definition putnam_1990_b5_solution : Prop := True.
Theorem putnam_1990_b5 :
(exists a : nat -> R, (forall i : nat, a i != 0) /\
(forall n : nat, ge n 1 -> (exists roots : seq R, uniq roots /\ size roots = n /\ all (fun x => 0 == \sum_(0 <= i < n.+1) (a i) * (x) ^ i) roots))).
Proof. Admitted.
32 changes: 21 additions & 11 deletions coq/src/putnam_1991_a3.v
Original file line number Diff line number Diff line change
@@ -1,14 +1,24 @@
Require Import Reals Coquelicot.Coquelicot.
Open Scope R.
Definition poly (coeff : nat -> R) (deg : nat) : R -> R := fun x : R => sum_n (fun i => coeff i * x ^ i) deg.
Definition putnam_1991_a3_solution (coeff: nat -> R) : Prop := (forall n : nat, gt n 2 -> coeff n = 0) /\ exists (r1 r2 : R), r1 <> r2 /\ poly coeff 2 r1 = 0 /\ poly coeff 2 r2 = 0.
From mathcomp Require Import all_algebra all_ssreflect.
From mathcomp Require Import reals normedtype sequences topology derive.
From mathcomp Require Import classical_sets.
Import numFieldNormedType.Exports.

Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.

Local Open Scope ring_scope.
Local Open Scope classical_set_scope.

Variable R : realType.
Definition putnam_1991_a3_solution : set {poly R} := [set P : {poly R} | size P = 3%nat /\ (exists r1 r2 : R, r1 <> r2 /\ P.[r1] = 0 /\ P.[r2] = 0)].
Theorem putnam_1991_a3
(coeff : nat -> R)
(P : {poly R})
(n : nat)
(hn : coeff n <> 0 /\ forall m : nat, gt m n -> coeff m = 0)
(hn : n = (size P).-1)
(hge : ge n 2)
: (exists (r: nat -> R), (forall i : nat, lt i (n - 1) -> r i < r (S i)) /\
(forall i : nat, lt i n -> poly coeff n (r i) = 0) /\
(forall i : nat, lt i (n - 1) -> (Derive (poly coeff n)) ((r i + r (S i)) / 2) = 0)) <->
putnam_1991_a3_solution coeff.
Proof. Admitted.
: P \in putnam_1991_a3_solution <->
(exists (r: nat -> R), (forall i : nat, lt i (n - 1) -> r i < r (i.+1)) /\
(forall i : nat, lt i n -> P.[r i] = 0) /\
(forall i : nat, lt i (n.-1) -> (P^`()).[(r i + r i.+1) / 2] = 0)).
Proof. Admitted.
1 change: 1 addition & 0 deletions coq/src/putnam_1995_b4.v
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ Definition putnam_1995_b4_solution : Z * Z * Z * Z := (3%Z,1%Z,5%Z,2%Z).
Theorem putnam_1995_b4
(contfrac : R)
(hcontfrac : contfrac = 2207 - 1/contfrac)
(hcontfrac' : 1 < contfrac)
: let (abc, d) := putnam_1995_b4_solution in let (ab, c) := abc in let (a, b) := ab in
pow contfrac (1 / 8) = (IZR a + IZR b * sqrt (IZR c))/IZR d.
Proof. Admitted.
24 changes: 15 additions & 9 deletions coq/src/putnam_1996_a3.v
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
Require Import Nat Ensembles Finite_sets. From mathcomp Require Import fintype.
From mathcomp Require Import all_algebra all_ssreflect classical_sets cardinality.

Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.

Local Open Scope classical_set_scope.
Local Open Scope card_scope.

Definition putnam_1996_a3_solution : Prop := False.
Theorem putnam_1996_a3
(studentchoicesinrange : (nat -> Ensemble nat) -> Prop := (fun studentchoices : (nat -> Ensemble nat) => forall n : nat, Included _ (studentchoices n) (fun i : nat => le 1 i /\ le i 6)))
(studentchoicesprop : (nat -> Ensemble nat) -> Prop := (fun studentchoices : (nat -> Ensemble nat) =>
exists S : Ensemble nat, Included _ S (fun i : nat => le 1 i /\ le i 20) /\ cardinal _ S 5 /\
(exists c1 c2 : nat, (le 1 c1 /\ le c1 6) /\ (le 1 c2 /\ le c2 6) /\ c1 <> c2 /\
((Included _ (fun i : nat => i = c1 \/ i = c2) (fun i : nat => forall s : nat, In _ S s -> In _ (studentchoices s) i))
\/ (Included _ (fun i : nat => i = c1 \/ i = c2) (fun i : nat => forall s : nat, In _ S s -> ~ (In _ (studentchoices s) i)))))))
: (forall studentchoices : (nat -> Ensemble nat), studentchoicesinrange studentchoices -> studentchoicesprop studentchoices) <-> putnam_1996_a3_solution.
Theorem putnam_1996_a3 :
(forall choices : 'I_20 -> set 'I_6,
exists (students : set 'I_20) (courses : set 'I_6),
students #= [set: 'I_5] /\ courses #= [set: 'I_2] /\
(courses `<=` \bigcap_(s in students) (choices s) \/ courses `<=` \bigcap_(s in students) (~` choices s)))
<-> putnam_1996_a3_solution.
Proof. Admitted.
29 changes: 17 additions & 12 deletions coq/src/putnam_1998_a4.v
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
Require Import Nat ZArith Reals Coquelicot.Coquelicot.
Open Scope nat_scope.
Definition putnam_1998_a4_solution : nat -> Prop := (fun n : nat => exists k : nat, n = 6 * k + 1).
From mathcomp Require Import all_algebra all_ssreflect.
From mathcomp Require Import classical_sets.

Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.

Local Open Scope classical_set_scope.

Definition putnam_1998_a4_solution : set nat := [set n | n = 1 %[mod 6]].
Theorem putnam_1998_a4
(concatenate : nat -> nat -> nat := fun x y => Nat.pow 10 (Z.to_nat (floor (Rdiv (ln (INR y)) (ln 10))) + 1) * x + y)
(a := fix A (n: nat) :=
match n with
| O => O
| S O => 1
| S ((S n'') as n') => if eqb n'' O then 10 else (concatenate (A n') (A n''))
end)
: forall (n: nat), n >= 1 -> ((a (n-1)) mod 11 = 0 <-> putnam_1998_a4_solution n).
Proof. Admitted.
(A : nat -> list nat)
(hA1 : A 1 = [:: 0])
(hA2 : A 2 = [:: 1])
(hA : forall n, gt n 0 -> A (n.+2) = A (n.+1) ++ A n)
(of_digits : list nat -> nat := fun L => foldl (fun x y => 10 * y + x) 0 L)
: [set n : nat | ge n 1 /\ 11 %| of_digits (A n)] = putnam_1998_a4_solution.
Proof. Admitted.
Loading

0 comments on commit 1a26b10

Please sign in to comment.