diff --git a/README.md b/README.md
index eadbf458..a374a566 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@
-PutnamBench is a benchmark for evaluation of theorem-proving algorithms on competition mathematics problems sourced from the William Lowell Putnam Mathematical Competition years 1962 - 2023. Our formalizations currently support three formal languages : Lean 4 $\land$ Isabelle $\land$ Coq. PutnamBench comprises of 1697 manually-crafted formalizations, aggregated over all languages.
+PutnamBench is a benchmark for evaluation of theorem-proving algorithms on competition mathematics problems sourced from the William Lowell Putnam Mathematical Competition years 1962 - 2023. Our formalizations currently support three formal languages : Lean 4 $\land$ Isabelle $\land$ Coq. PutnamBench comprises of 1696 manually-crafted formalizations, aggregated over all languages.
PutnamBench aims to support research in automated mathematical reasoning by providing a multilingual benchmark for evaluating theorem-proving algorithms. It is released under permissive licenses (Apache 2.0 for Lean 4 and Isabelle, MIT for Coq). The [informal statements](informal/README.md) are also available with permission from the MAA.
@@ -14,14 +14,14 @@ PutnamBench includes factored solutions for problems which require exhibiting a
We are hosting a [**leaderboard**](https://trishullab.github.io/PutnamBench/leaderboard.html) and will readily receive evaluation results which are accompanied by a preprint or publication. **Do not** include proofs as confirmation in any public setting. Please reach out privately at `george.tsoukalas@utexas.edu` with any requests for additions to the leaderboard.
-**We strongly encourage community feedback!** Please let us know if you have any comments for improving PutnamBench. If you notice any mistakes, please raise an issue on the repository and we will address it. We kindly ask that you do not write formal proofs for any of the problems in an effort to reduce contamination.
+**We strongly encourage community feedback!** Please let us know if you have any comments for improving PutnamBench. If you notice any mistakes, please raise an issue on the repository and we will address it. We kindly ask that you do not write formal proofs for any of the problems in an effort to reduce contamination. If you do wish to write formal proofs for a subset of the problems, we please ask that you first engage in discussion with us.
## Statistics
| Language | Count |
| ------------- | -------------- |
-| Lean 4 | 640 |
+| Lean 4 | 644 |
| Isabelle | 640 |
-| Coq | 417 |
+| Coq | 412 |
We also report the number of problems in a certain category. Note that some problems fall under multiple categories. While the categories are intended to capture general features of the problems, we also note that there is a high variance of problems inside an individual category.
@@ -29,18 +29,14 @@ We also report the number of problems in a certain category. Note that some prob
| ---------------- | -------------- |
| Algebra | 253 |
| Analysis | 226 |
-| Number Theory | 107 |
-| Geometry | 68 |
+| Number Theory | 108 |
+| Geometry | 69 |
| Linear Algebra | 51 |
| Abstract Algebra | 28 |
-| Combinatorics | 26 |
-| Probability | 9 |
+| Combinatorics | 29 |
+| Probability | 10 |
| Set Theory | 8 |
-## Versioning
-- Version: `v0`
-- In preliminary release to allow for initial community feedback. We seek to release an official first version following several weeks of discussion with the community.
-
## Citation
The associated paper for PutnamBench is [available at this link](https://arxiv.org/abs/2407.11214). Please consider including the following citation if you find PutnamBench useful.
```
diff --git a/coq/README.md b/coq/README.md
index 70243bcf..4526175b 100644
--- a/coq/README.md
+++ b/coq/README.md
@@ -1,6 +1,5 @@
-Note: We are continuing to make modifications to the Coq formalizations, in particular those which were recently added. We encourage feedback, but keep this in mind. The format of the formalizations will be standardized with the other languages upon completion.
+Note that roughly half of the Coq formalizations rely on Mathcomp, while the other half rely on a combination of the Coq Standard Library, Coquelicot, and other various Coq repositories. We also note that while the dependencies listed in each formalization are sufficient to *state* the problem, one may need further mathematical theory developed in Coq to write a proof.
-We also note that while the dependencies listed in each formalization are sufficient to *state* the problem, one may need further mathematical theory developed in Coq to write a proof.
# Installation
You need to install `opam` and then run `setup.sh` to install the necessary dependencies.
diff --git a/coq/src/commented_problems.v b/coq/src/commented_problems.v
deleted file mode 100644
index 13b26c0c..00000000
--- a/coq/src/commented_problems.v
+++ /dev/null
@@ -1,186 +0,0 @@
-
-(* TODO: WIP *)
-(* NOTE -- Divide-and-conquer recursion is hard to formulate in Coq. A proof must be provided for termination *)
-(* Section putnam_2013_b1.
-Require Import ZArith Nat List Lia Ensembles Finite_sets Reals Program Coquelicot.Hierarchy.
-Open Scope Z.
-Program Fixpoint Aa (n : nat) {measure n} : Z :=
- match n with
- | O => 0
- | S O => 1
- | S (S m) => if even m then Aa (div2 (m+2)) else if even (div2 (m+2)) then Aa (div2 (m+2)) else (-1) * Aa (div2 (m+2))
- end.
-Next Obligation. Proof. destruct m. simpl; auto. induction m. simpl; auto. simpl. Admitted.
-Theorem putnam_2013_b1:
- sum_n (fun n => (Aa n)*(Aa (n+2))) 2013 = 1.
-Proof. Admitted.
-End putnam_2013_b1. *)
-
-(* Skipped due to lack of surface integral function *)
-(* Section putnam_2019_a4.
-Require Import PeanoNat. Require Import Reals Coquelicot.Derive.
-Definition putnam_2019_a4_solution := false.
-Theorem putnam_2019_a4:
- forall (f: R -> R),
- continuity f ->
- forall (x y z: R), x*x + y*y + z*z = 1 ->
- True.
-Proof. Admitted.
-End putnam_2019_a4. *)
-
-(* TODO: missing determinant refinement in coqeal *)
-(* Section putnam_2023_b6.
-Require Import Nat Finite_sets.
-From mathcomp Require Import matrix ssrbool ssralg fintype.
-Variable putnam_2023_b6_solution : nat -> nat.
-Open Scope ring_scope.
-Theorem putnam_2023_b6:
- forall (n: nat),
- let s (i j: nat) := cardinal (nat*nat) (fun p => let (a, b) := p in 1 <= i <= n /\ 1 <= j <= n /\ eq (add (mul a i) (mul b j)) n) in
- (\matrix_(i < n, j < n) s i j)
- = (\matrix_(i < n, j < n) s i j).
-Proof. Admitted.
-End putnam_2023_b6. *)
-
-(* TODO: How to get the cardinality of a set with cardinal? Could not figure out a clean way*)
-(* Section putnam_1973_a6.
-Require Import Reals Finite_sets Ensembles Coquelicot.Coquelicot. From mathcomp Require Import fintype.
-Theorem putnam_1973_a6
- (h_nint : nat -> ('I_7 -> (R * R)) -> nat := fun n lines =>
- let intersection_set (p : R * R) : Prop := exists! S : Ensemble 'I_7, cardinal _ S n /\ (forall i : 'I_7, In _ S i -> (snd p = (snd (lines i)) * (fst p) + (fst (lines i)))) in
- cardinal _ intersection_set
- )
- : ~ (exists lines: 'I_7 -> (R * R), (forall i j : 'I_7, i <> j -> (lines i <> lines j)) /\ h_nint 3 lines >= 6 /\ h_nint 2 lines >= 4).
-Proof. Admitted.
-End putnam_1973_a6. *)
-
-(* Section putnam_1999_a5.
-Require Import Reals NewtonInt. From mathcomp Require Import all_algebra all_ssreflect ssrnat ssrnum ssralg fintype poly seq.
-Open Scope ring_scope.
-Theorem putnam_1999_a5:
- forall (R: numDomainType) (p: {poly R}),
- (size p = 1999%nat) ->
- exists (C: R), Num.norm p.[0] <= GRing.mul C (Num.norm p.[0]).
-Proof. Admitted.
-End putnam_1999_a5. *)
-
-(* Section putnam_2010_a5.
-Require Import Reals. From mathcomp Require Import fingroup ssreflect ssrbool eqtype seq choice fintype div path tuple bigop prime finset.
-Open Scope R.
-Variable R3: finGroupType.
-Definition cross_product (a b : R -> R -> R) : R -> R -> R := a.
-Theorem putnam_2010_a5:
- forall (G: {group R3}),
- forall (a b: R -> R -> R),
- cross_product a b = a \/ cross_product a b = a ->
- forall (a b: R -> R -> R),
- cross_product a b = a.
-Proof. Admitted.
-End putnam_2010_a5. *)
-
-(* From mathcomp Require Import matrix ssralg ssrbool.
-Open Scope ring_scope.
-Definition putnam_1991_a2_solution := False.
-Theorem putnam_1991_a2
- (R : comUnitRingType)
- (n : nat)
- (npos : n >= 1)
- : (exists A B : 'M[R]_n, A <> B /\ mulmx (mulmx A A) A = mulmx (mulmx B B) B /\
- mulmx (mulmx A A) B = mulmx (mulmx B B) A /\
- (mulmx A A + mulmx B B) \in unitmx) <-> putnam_1991_a2_solution.
-Proof. Admitted. *)
-
-(* From mathcomp Require Import ssrnat ssrnum ssralg poly polydiv seq.
-Open Scope ring_scope.
-Definition putnam_1992_b4_solution := 3984%nat.
-Theorem putnam_1992_b4
- (R : numDomainType)
- (itercomp := fix iter (f : {poly R} * {poly R} -> {poly R} * {poly R}) (n : nat) (p : {poly R} * {poly R}) : {poly R} * {poly R} :=
- match n with
- | O => p
- | S n' => f (iter f n' p)
- end)
- (qr : {poly R} * {poly R} -> {poly R} * {poly R} := fun duple => (deriv (fst duple) * snd duple - deriv (snd duple) * fst duple, snd duple * snd duple))
- (valid : {poly R} -> Prop := fun p => p <> 0 /\ lt (size p) 1992 /\ exists c : R, gcdp_rec p ('X^3 - 'X) = polyC c)
- (twople : {poly R} -> {poly R} -> Prop := fun p f => exists g : {poly R}, g * fst (itercomp qr 1992%nat (p, 'X^3 - 'X)) = f * snd (itercomp qr 1992%nat (p, 'X^3 - 'X)))
- (min : nat)
- (hmineq : exists p f : {poly R}, (valid p /\ twople p f) /\ size f = min)
- (hminlb : forall p f : {poly R}, (valid p /\ twople p f) -> ge (size f) min)
- : min = putnam_1992_b4_solution.
-Proof. Admitted. *)
-
-(* Require Import Reals
-GeoCoq.Main.Tarski_dev.Ch16_coordinates_with_functions
-GeoCoq.Axioms.Definitions
-GeoCoq.Main.Highschool.triangles.
-Context `{T2D:Tarski_2D} `{TE:@Tarski_euclidean Tn TnEQD}.
-Open Scope R.
-Definition putnam_2003_b5_solution (pt_to_R : Tpoint -> (R * R)) (dist : Tpoint -> Tpoint -> R) (P Op : Tpoint) := sqrt 3 * (1 - (dist P Op) ^ 2 - 1).
-Theorem putnam_2003_b5
- (pt_to_R : Tpoint -> (R * R))
- (F_to_R : F -> R)
- (dist : Tpoint -> Tpoint -> R := fun A B => let (a, b) := pt_to_R A in let (c, d) := pt_to_R B in dist_euc a b c d)
- (Triangle : Tpoint -> Tpoint -> Tpoint -> Prop := fun x y z => ~ Col x y z) (* copied from GeoCoq.Axioms.euclidean_axioms *)
- (A B C Op Op' P: Tpoint)
- (fixpoint : dist Op Op' = R1)
- (hABC : OnCircle A Op Op' /\ OnCircle B Op Op' /\ OnCircle C Op Op')
- (hABC' : Main.Highschool.triangles.equilateral A B C)
- (hp : InCircle P Op Op')
- (a : R := dist P A)
- (b : R := dist P B)
- (c : R := dist P C)
- : exists (A' B' C' : Tpoint) (D: Cs O E A' B' C'),
- Triangle A' B' C' /\ dist A' B' = a /\ dist B' C' = b /\ dist C' A' = c /\
- F_to_R (signed_area A' B' C' D A' B' C') = (putnam_2003_b5_solution pt_to_R dist P Op).
-Proof. Admitted. *)
-
-(* Require Import Reals Rgeom ZArith
-GeoCoq.Main.Tarski_dev.Ch16_coordinates_with_functions
-GeoCoq.Main.Annexes.midpoint_theorems
-GeoCoq.Main.Highschool.circumcenter.
-Context `{T2D:Tarski_2D} `{TE:@Tarski_euclidean Tn TnEQD}.
-Open Scope R.
-Definition putnam_1997_a1_solution := 28.
-Theorem putnam_1997_a1
- (pt_to_R : Tpoint -> (R * R))
- (dist : Tpoint -> Tpoint -> R := fun A B => let (a, b) := pt_to_R A in let (c, d) := pt_to_R B in dist_euc a b c d)
- (A B C : Tpoint)
- (Hp Op Mp Fp : Tpoint)
- (l1 : dist Hp Op = 11)
- (l2 : dist Op Mp = 5)
- (s : Rectangle Hp Op Mp Fp)
- (hHp : Bet A Fp Hp)
- (hOp : is_circumcenter Op A B C)
- (hMp : Midpoint B C Mp)
- (hFp : Perp A C B Fp /\ Col A C Fp)
- : dist B C = putnam_1997_a1_solution.
-Proof. Admitted. *)
-
-(* Require Import Nat Reals Coquelicot.Coquelicot ZArith.
-Theorem putnam_1997_b4
- (a : nat -> nat -> Z)
- (max_degree : nat -> nat)
- (coeff : nat -> (nat -> R))
- (hpoly : forall (m : nat) (x : R), sum_n (fun i => (coeff m i) * (x^i)) (max_degree m) = (1 + x + x^2)^m)
- (ha : forall m n : nat, IZR (a m n) = coeff m n)
- : forall k : nat, ge k 0 -> 0 <= (sum_n (fun i => (-1)^i * (IZR (a (Nat.sub k i) i))) (Z.to_nat (Coquelicot.Rcomplements.floor (2 * INR k / 3)))) <= 1.
-Proof. Admitted. *)
-
-(* From mathcomp Require Import ssralg ssrnum fintype seq poly.
-Open Scope ring_scope.
-Variable (R: numDomainType).
-Definition putnam_1985_a6_solution : {poly R} := 6%:R *: 'X^2 + 5%:R *: 'X + 1%:R.
-Theorem putnam_1985_a6
- (g : {poly R} := 3%:R *: 'X^2 + 7%:R *: 'X + 2%:R)
- (Comp_poly_n := fix comp_poly_n (p : {poly R}) (n : nat) : {poly R} :=
- match n with
- | O => 1
- | S n' => comp_poly (comp_poly_n p n') p
- end)
- : forall (f: {poly R}), f`_0 = 0 ->
- forall (n: nat),
- let F : {poly R} := Comp_poly_n f n in
- let G : {poly R} := Comp_poly_n g n in
- (\sum_(i < size F) F`_i) = (\sum_(i < size G) G`_i)
- <-> f = putnam_1985_a6_solution.
-Proof. Admitted. *)
\ No newline at end of file
diff --git a/coq/src/putnam_1965_b4.v b/coq/src/putnam_1965_b4.v
index 33d4a59f..32e18301 100644
--- a/coq/src/putnam_1965_b4.v
+++ b/coq/src/putnam_1965_b4.v
@@ -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.
\ No newline at end of file
diff --git a/coq/src/putnam_1968_a3.v b/coq/src/putnam_1968_a3.v
index 8553351c..6f5a2828 100644
--- a/coq/src/putnam_1968_a3.v
+++ b/coq/src/putnam_1968_a3.v
@@ -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.
\ No newline at end of file
diff --git a/coq/src/putnam_1969_a5.v b/coq/src/putnam_1969_a5.v
index 1083aa7b..19a354c4 100644
--- a/coq/src/putnam_1969_a5.v
+++ b/coq/src/putnam_1969_a5.v
@@ -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.
\ No newline at end of file
diff --git a/coq/src/putnam_1977_a3.v b/coq/src/putnam_1977_a3.v
index 416ee684..cc23009b 100644
--- a/coq/src/putnam_1977_a3.v
+++ b/coq/src/putnam_1977_a3.v
@@ -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.
diff --git a/coq/src/putnam_1981_a1.v b/coq/src/putnam_1981_a1.v
index c8b01ce3..5317d699 100644
--- a/coq/src/putnam_1981_a1.v
+++ b/coq/src/putnam_1981_a1.v
@@ -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 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.
diff --git a/coq/src/putnam_1981_b5.v b/coq/src/putnam_1981_b5.v
index 91cec724..26793fd3 100644
--- a/coq/src/putnam_1981_b5.v
+++ b/coq/src/putnam_1981_b5.v
@@ -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 :=
@@ -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.
diff --git a/coq/src/putnam_1983_a3.v b/coq/src/putnam_1983_a3.v
index 646a520a..6e2425cd 100644
--- a/coq/src/putnam_1983_a3.v
+++ b/coq/src/putnam_1983_a3.v
@@ -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.
\ No newline at end of file
diff --git a/coq/src/putnam_1985_a6.v b/coq/src/putnam_1985_a6.v
new file mode 100644
index 00000000..b879d8df
--- /dev/null
+++ b/coq/src/putnam_1985_a6.v
@@ -0,0 +1,17 @@
+From mathcomp Require Import all_ssreflect all_algebra.
+From mathcomp Require Import reals.
+
+Set Implicit Arguments.
+Unset Strict Implicit.
+Unset Printing Implicit Defensive.
+
+Open Scope ring_scope.
+
+Variable R : realType.
+Definition putnam_1985_a6_solution : {poly R} := 6 * 'X ^ 2 + 5 * 'X + 1.
+Theorem putnam_1985_a6
+ (Gamma : {poly R} -> R := fun p => \sum_(i <- p) (i ^+ 2))
+ (f : {poly R} := 3 * 'X ^ 2 + 7 * 'X + 2)
+ : let g := putnam_1985_a6_solution in
+ g.[0] = 1 /\ forall n : nat, ge n 1 -> Gamma (f ^ n) = Gamma (g ^ n).
+Proof. Admitted.
\ No newline at end of file
diff --git a/coq/src/putnam_1985_b2.v b/coq/src/putnam_1985_b2.v
index f2637f7e..b1a5f797 100644
--- a/coq/src/putnam_1985_b2.v
+++ b/coq/src/putnam_1985_b2.v
@@ -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.
\ No newline at end of file
diff --git a/coq/src/putnam_1986_a6.v b/coq/src/putnam_1986_a6.v
index 0cb90a86..21b63e89 100644
--- a/coq/src/putnam_1986_a6.v
+++ b/coq/src/putnam_1986_a6.v
@@ -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.
\ No newline at end of file
diff --git a/coq/src/putnam_1989_a1.v b/coq/src/putnam_1989_a1.v
deleted file mode 100644
index f0ee0af5..00000000
--- a/coq/src/putnam_1989_a1.v
+++ /dev/null
@@ -1,7 +0,0 @@
-Require Import Nat Reals ZArith Znumtheory Coquelicot.Coquelicot Finite_sets.
-Open Scope R.
-Definition putnam_1989_a1_solution := 1%nat.
-Theorem putnam_1989_a1
- (a : nat -> R := fun n => sum_n (fun i => if odd i then INR (10^(i-1)) else R0) (2*n+2))
- : cardinal nat (fun n => prime (floor (a n))) putnam_1989_a1_solution.
-Proof. Admitted.
diff --git a/coq/src/putnam_1990_b2.v b/coq/src/putnam_1990_b2.v
index cae46349..214cc66f 100644
--- a/coq/src/putnam_1990_b2.v
+++ b/coq/src/putnam_1990_b2.v
@@ -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.
\ No newline at end of file
diff --git a/coq/src/putnam_1990_b5.v b/coq/src/putnam_1990_b5.v
index d1a40d89..3360fa45 100644
--- a/coq/src/putnam_1990_b5.v
+++ b/coq/src/putnam_1990_b5.v
@@ -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.
\ No newline at end of file
diff --git a/coq/src/putnam_1991_a3.v b/coq/src/putnam_1991_a3.v
index c5ae4639..86d9abad 100644
--- a/coq/src/putnam_1991_a3.v
+++ b/coq/src/putnam_1991_a3.v
@@ -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.
\ No newline at end of file
diff --git a/coq/src/putnam_1995_b4.v b/coq/src/putnam_1995_b4.v
index 89fbd543..473703e2 100644
--- a/coq/src/putnam_1995_b4.v
+++ b/coq/src/putnam_1995_b4.v
@@ -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.
diff --git a/coq/src/putnam_1996_a3.v b/coq/src/putnam_1996_a3.v
index dbb9e677..49378a4f 100644
--- a/coq/src/putnam_1996_a3.v
+++ b/coq/src/putnam_1996_a3.v
@@ -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.
diff --git a/coq/src/putnam_1998_a4.v b/coq/src/putnam_1998_a4.v
index 6a2f4284..bfc03e00 100644
--- a/coq/src/putnam_1998_a4.v
+++ b/coq/src/putnam_1998_a4.v
@@ -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.
\ No newline at end of file
diff --git a/coq/src/putnam_1999_a3.v b/coq/src/putnam_1999_a3.v
index daa763fe..e5a175ef 100644
--- a/coq/src/putnam_1999_a3.v
+++ b/coq/src/putnam_1999_a3.v
@@ -1,6 +1,6 @@
Require Import Reals Coquelicot.Coquelicot.
Theorem putnam_1999_a3
- (f : R -> R := fun x => 1/(1- 2 * x - x^2))
+ (f : R -> R := fun x => 1/(1 - 2 * x - x^2))
(a : nat -> R)
(hf : exists epsilon : R, epsilon > 0 /\ (forall x : R, 0 <= Rabs (x) < epsilon -> filterlim (fun n : nat => sum_n (fun i => a i * x^i) n) eventually (locally (f x))))
: forall n : nat, exists m : nat, (a n)^2 + (a (S n))^2 = a m.
diff --git a/coq/src/putnam_1999_b2.v b/coq/src/putnam_1999_b2.v
index 25b7d49b..8605cbce 100644
--- a/coq/src/putnam_1999_b2.v
+++ b/coq/src/putnam_1999_b2.v
@@ -1,10 +1,18 @@
-Require Import List Reals Coquelicot.Coquelicot.
+From mathcomp Require Import all_algebra all_ssreflect.
+From mathcomp Require Import reals complex derive topology normedtype.
+
+Set Implicit Arguments.
+Unset Strict Implicit.
+Unset Printing Implicit Defensive.
+
+Local Open Scope ring_scope.
+
+Variable R : realType.
+
Theorem putnam_1999_b2
- (a1 a2: nat -> R)
- (n: nat)
- (p : R -> R := fun x => sum_n (fun i => a1 i * x ^ i) n)
- (q : R -> R := fun x => sum_n (fun i => a2 i * x ^ i) 2)
- (hP : forall (x: R), p x = q x * (Derive_n p 2) x)
- : (exists (r1 r2: R), r1 <> r2 /\ p r1 = 0 /\ p r2 = 0) ->
- (exists (roots: list R), length roots = n /\ NoDup roots /\ (forall (r: R), In r roots -> p r = 0)).
-Proof. Admitted.
+ (P Q : {poly R[i]})
+ (hQ : size Q = 3%nat)
+ (hP : forall x : R[i], P.[x] = Q.[x] * (P^`(2)).[x])
+ : (exists x1 x2 : R[i], x1 <> x2 /\ P.[x1] = 0 /\ P.[x2] = 0) ->
+ (exists f : seq R[i], size f = (size P).-1 /\ uniq f /\ all (fun x => P.[x] == 0) f).
+Proof. Admitted.
\ No newline at end of file
diff --git a/coq/src/putnam_2000_a6.v b/coq/src/putnam_2000_a6.v
index 1679776f..54499a81 100644
--- a/coq/src/putnam_2000_a6.v
+++ b/coq/src/putnam_2000_a6.v
@@ -1,9 +1,15 @@
-Require Import ZArith Reals Coquelicot.Coquelicot.
+From mathcomp Require Import all_algebra all_ssreflect.
+
+Set Implicit Arguments.
+Unset Strict Implicit.
+Unset Printing Implicit Defensive.
+
+Local Open Scope ring_scope.
+
Theorem putnam_2000_a6
- (n : nat)
- (coeff : nat -> Z)
- (f : R -> R := fun x => sum_n (fun i => (IZR (coeff i)) * (x^i)) n)
- (a : nat -> R)
- (ha : a O = 0 /\ forall i : nat, a (S i) = f (a i))
- : (exists m : nat, gt m 0 /\ a m = 0) -> (a (S O) = 0 \/ a (S (S O)) = 0).
-Proof. Admitted.
+ (f : {poly int})
+ (a : nat -> int)
+ (ha0 : a 0%nat = 0)
+ (ha : forall n : nat, a (n.+1) = f.[a n])
+ : (exists m : nat, gt m 0 /\ a m = 0) -> (a 1%nat = 0 \/ a 2%nat = 0).
+Proof. Admitted.
\ No newline at end of file
diff --git a/coq/src/putnam_2001_b2.v b/coq/src/putnam_2001_b2.v
index 4d0c5fdc..554df025 100644
--- a/coq/src/putnam_2001_b2.v
+++ b/coq/src/putnam_2001_b2.v
@@ -1,7 +1,10 @@
Require Import Reals Coquelicot.Coquelicot.
Definition putnam_2001_b2_solution : R -> R -> Prop := (fun x y : R => x = (3 ^ (1 / 5) + 1) / 2 /\ y = (3 ^ (1 / 5) - 1) / 2).
Theorem putnam_2001_b2
- : forall (x y: R),
- (1 / x + 1 / (2 * y) = (x ^ 2 + 3 * y ^ 2) * (3 * x ^ 2 + y ^ 2) /\
+ (x y : R)
+ (hx : x <> 0)
+ (hy : y <> 0)
+ : (1 / x + 1 / (2 * y) = (x ^ 2 + 3 * y ^ 2) * (3 * x ^ 2 + y ^ 2) /\
1 / x - 1 / (2 * y) = 2 * (y ^ 4 - x ^ 4)) <-> putnam_2001_b2_solution x y.
Proof. Admitted.
+
diff --git a/coq/src/putnam_2001_b4.v b/coq/src/putnam_2001_b4.v
index 6d4df621..7bd435a0 100644
--- a/coq/src/putnam_2001_b4.v
+++ b/coq/src/putnam_2001_b4.v
@@ -1,12 +1,13 @@
Require Import Basics List QArith. From mathcomp Require Import bigop fintype seq ssrbool ssreflect ssrnat ssrnum ssralg finfun.
Open Scope Q_scope.
-Definition putnam_2001_b4_solution : Prop := True.
+
Definition image (f: Q -> Q) := fun y => exists (x: Q), (~ In x [:: -1; 0; 1]) /\ f x = y.
Fixpoint compose_n {A : Type} (f : A -> A) (n : nat) :=
match n with
| O => fun x => x
| S n' => compose f (compose_n f n')
end.
+Definition putnam_2001_b4_solution : Prop := True.
Theorem putnam_2001_b4
(f : Q -> Q := fun x => x - 1 / x)
: (~exists (x: Q), (~ In x [:: -1; 0; 1]) /\ (forall (n: nat), ge n 1 -> (image (compose_n f n)) x)) <-> putnam_2001_b4_solution.
diff --git a/coq/src/putnam_2002_a1.v b/coq/src/putnam_2002_a1.v
index 61112d51..d6c0ed6e 100644
--- a/coq/src/putnam_2002_a1.v
+++ b/coq/src/putnam_2002_a1.v
@@ -1,10 +1,21 @@
-Require Import Reals Factorial Coquelicot.Coquelicot.
-Definition putnam_2002_a1_solution (k n: nat) := Rpower (-1 * INR k) (INR n) * INR (fact n).
+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_2002_a1_solution : nat -> nat -> R := fun k n : nat => (-k%:R) ^ n * n`!%:R.
Theorem putnam_2002_a1
(k : nat)
- (p : (nat -> R) -> R -> nat -> R := fun a x n => sum_n (fun i => a i * x ^ i) n)
+ (P : nat -> {poly R})
(kpos : gt k 0)
- : forall (N: nat), forall (a: nat -> R) (n: nat),
- (forall (x: R), (Derive_n (fun x => 1 / (x ^ k - 1)) N) x = (p a x n) / (x ^ k - 1) ^ (n + 1)) ->
- p a 1 n = putnam_2002_a1_solution k n.
-Proof. Admitted.
+ (Pderiv : forall n : nat, forall x : R, derive1n n (fun x' : R => 1/(x' ^ k - 1)) x = (P n).[x] / ((x ^ k - 1) ^ (n.+1)))
+ : forall n : nat, (P n).[1] = putnam_2002_a1_solution k n.
+Proof. Admitted.
\ No newline at end of file
diff --git a/coq/src/putnam_2003_a2.v b/coq/src/putnam_2003_a2.v
index bfd920dc..38d38b55 100644
--- a/coq/src/putnam_2003_a2.v
+++ b/coq/src/putnam_2003_a2.v
@@ -1,16 +1,20 @@
-Require Import List Reals Coquelicot.Coquelicot.
+From mathcomp Require Import all_algebra all_ssreflect.
+From mathcomp Require Import reals exp sequences normedtype.
+
+Set Implicit Arguments.
+Unset Strict Implicit.
+Unset Printing Implicit Defensive.
+
+Local Open Scope ring_scope.
+
+Variable R : realType.
+
Theorem putnam_2003_a2
- (Suml := fix suml (l1 l2 : list R) : list R :=
- match l1, l2 with
- | nil, _ => nil
- | _, nil => nil
- | h1 :: t1, h2 :: t2 => (h1 + h2) :: suml t1 t2
- end)
(n : nat)
- (a b : list R)
- (npos : ge n 1)
- (ablen : length a = n /\ length b = n)
- (abnneg : forall i : nat, lt i n -> nth i a 0 >= 0 /\ nth i b 0 >= 0)
- : (fold_left Rmult a 1) ^ (1 / n) + (fold_left Rmult b 1) ^ (1 / n) <=
- (fold_left Rmult (Suml a b) 1) ^ (1 / n).
-Proof. Admitted.
+ (hn : gt n 0)
+ (a b : 'I_n -> R)
+ (abnneg : forall i : 'I_n, (a i) >= 0 /\ (b i) >= 0)
+ : expR (ln (\prod_(i < n) (a i)) * (1 / n%:R)) +
+ expR (ln (\prod_(i < n) (b i)) * (1 / n%:R)) <=
+ expR (ln (\prod_(i < n) (a i + b i)) * (1 / n%:R)).
+Proof. Admitted.
\ No newline at end of file
diff --git a/coq/src/putnam_2003_b1.v b/coq/src/putnam_2003_b1.v
index 39c7ad94..366421a1 100644
--- a/coq/src/putnam_2003_b1.v
+++ b/coq/src/putnam_2003_b1.v
@@ -1,8 +1,14 @@
-Require Import Reals Coquelicot.Coquelicot.
-Definition putnam_2003_b1_solution := False.
+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_2003_b1_solution : Prop := False.
Theorem putnam_2003_b1
- (p : (nat -> R) -> R -> nat -> R := fun coeff x n => sum_n (fun i => coeff i * x ^ i) n)
- : (exists (coeffa coeffb coeffc coeffd: nat -> R) (na nb nc nd: nat), forall (x y: R),
- 1 + x * y + x ^ 2 * y ^ 2 = (p coeffa x na) * (p coeffc y nc) + (p coeffb x nb) * (p coeffd y nd))
- <-> putnam_2003_b1_solution.
-Proof. Admitted.
+ : (exists a b c d : {poly R}, forall x y : R, 1 + x * y + x ^ 2 * y ^ 2 = a.[x] * c.[y] + b.[x] * d.[y]) <-> putnam_2003_b1_solution.
+Proof. Admitted.
\ No newline at end of file
diff --git a/coq/src/putnam_2003_b3.v b/coq/src/putnam_2003_b3.v
index 4c262935..ffc95f9e 100644
--- a/coq/src/putnam_2003_b3.v
+++ b/coq/src/putnam_2003_b3.v
@@ -1,16 +1,12 @@
-Require Import Nat List Reals Coquelicot.Coquelicot.
+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_2003_b3
- (lcmn := fix lcm_n (args : list nat) : nat :=
- match args with
- | nil => 1%nat
- | h :: args' => div (h * (lcm_n args')) (gcd h (lcm_n args'))
- end)
- (prodn := fix prod_n (m: nat -> R) (n : nat) : R :=
- match n with
- | O => m 0%nat
- | S n' => m n * prod_n m n'
- end)
(n : nat)
- (npos : gt n 0)
- : INR (fact n) = prodn (fun i => INR (lcmn (seq 1 (div n (i + 1))))) (sub n 1).
-Proof. Admitted.
+ : n `! = \prod_(1 <= i < n.+1) (foldl (fun x y => lcmn x y) 1%nat (iota 1 (n%/i))).
+Proof. Admitted.
\ No newline at end of file
diff --git a/coq/src/putnam_2004_b5.v b/coq/src/putnam_2004_b5.v
index 5844b7b2..0787c4bc 100644
--- a/coq/src/putnam_2004_b5.v
+++ b/coq/src/putnam_2004_b5.v
@@ -1,10 +1,20 @@
-Require Import Reals Coquelicot.Coquelicot.
-Definition putnam_2004_b5_solution := 2 / exp 1.
+From mathcomp Require Import all_algebra all_ssreflect.
+From mathcomp Require Import reals sequences topology normedtype exp.
+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 at_left := fun (x : R) => within (fun y => y < x) (nbhs x).
+Definition putnam_2004_b5_solution : R := 2 / expR 1.
Theorem putnam_2004_b5
- (prodn := fix prod_n (m: nat -> R) (n : nat) : R :=
- match n with
- | O => 1
- | S n' => m n' * prod_n m n'
- end)
- : filterlim (fun x => (Lim_seq (fun nInc => prodn (fun n => Rpower ((1 + x ^ (n + 1)) / (1 + x ^ n)) (x ^ n) ) nInc))) (at_left 1) (locally putnam_2004_b5_solution).
-Proof. Admitted.
+ (xprod : R -> R)
+ (hxprod : forall x : R, 0 < x < 1 -> (fun N : nat => \prod_(0 <= n < N) (expR (ln ((1 + x ^ (n.+1))/(1 + x ^ n)) * (x ^ n)))) @ \oo --> xprod x)
+ : xprod @ (at_left 1) --> putnam_2004_b5_solution.
+Proof. Admitted.
\ No newline at end of file
diff --git a/coq/src/putnam_2005_a3.v b/coq/src/putnam_2005_a3.v
index c40a1c39..d515cfeb 100644
--- a/coq/src/putnam_2005_a3.v
+++ b/coq/src/putnam_2005_a3.v
@@ -3,9 +3,10 @@ Theorem putnam_2005_a3
(csqrt : C -> C)
(c : nat -> C)
(n : nat)
+ (hn : gt n 0)
(p : C -> C := fun z : C => sum_n (fun i => c i * z^i) n)
(g : C -> C := fun z : C => p z / csqrt (z^n))
(pzeros : forall z : C, p z = 0 -> norm z = 1%R)
(hcsqrt : forall z : C, (csqrt z)^2 = z /\ Re (csqrt z) >= 0 /\ (Re (csqrt z) = 0%R -> Im (csqrt z) >= 0%R))
- : forall z : C, C_derive g z = 0 -> norm z = 1%R.
-Proof. Admitted.
+ : forall z : C, z <> 0 -> C_derive g z = 0 -> norm z = 1%R.
+Proof. Admitted.
\ No newline at end of file
diff --git a/coq/src/putnam_2005_b3.v b/coq/src/putnam_2005_b3.v
index b546a2af..8c4fb957 100644
--- a/coq/src/putnam_2005_b3.v
+++ b/coq/src/putnam_2005_b3.v
@@ -2,5 +2,7 @@ Require Import Reals Coquelicot.Coquelicot.
Definition putnam_2005_b3_solution (f : R -> R) := exists c d : R, c > 0 /\ d > 0 /\ (d = 1 -> c = 1) /\ forall x : R, x > 0 -> f x = c * Rpower x d.
Theorem putnam_2005_b3
(f : R -> R)
- : ((forall (x : R), x > 0 -> ex_derive f x) /\ exists a : R, a > 0 /\ forall x : R, x > 0 -> Derive f (a / x) = x / f x) <-> putnam_2005_b3_solution f.
+ (hf : forall x : R, x > 0 -> f x > 0)
+ (hf' : forall x : R, x > 0 -> ex_derive f x)
+ : (exists a : R, a > 0 /\ forall x : R, x > 0 -> Derive f (a / x) = x / f x) <-> putnam_2005_b3_solution f.
Proof. Admitted.
diff --git a/coq/src/putnam_2005_b4.v b/coq/src/putnam_2005_b4.v
index 15b9e6a1..bfad1777 100644
--- a/coq/src/putnam_2005_b4.v
+++ b/coq/src/putnam_2005_b4.v
@@ -1,13 +1,18 @@
-Require Import List Ensembles Finite_sets ZArith.
-Theorem putnam_2005_b4
- (Absl := fix absl (l : list Z) : list Z :=
- match l with
- | nil => nil
- | h :: t => Z.abs h :: absl t
- end)
- (m n : nat)
+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 ring_scope.
+Local Open Scope classical_set_scope.
+Local Open Scope card_scope.
+
+Theorem putnam_2005_b4
+ (m n : int)
(mnpos : m > 0 /\ n > 0)
- (f : nat -> nat -> nat)
- (hf : forall m' n' : nat, (m' > 0 /\ n' > 0) -> cardinal (list Z) (fun x => length x = n' /\ Z.le (fold_left Z.add (Absl x) 0%Z) (Z.of_nat m')) (f m' n'))
+ (f : int -> int -> nat)
+ (hf : forall m' n' : int, (m' > 0 /\ n' > 0) -> [set: 'I_(f m' n')] #= [set x : seq int | (size x)%:Z = n' /\ \sum_(i <- x) `|i| <= m'])
: f m n = f n m.
-Proof. Admitted.
+Proof. Admitted.
\ No newline at end of file
diff --git a/coq/src/putnam_2006_a5.v b/coq/src/putnam_2006_a5.v
index 3f3572f7..6656486a 100644
--- a/coq/src/putnam_2006_a5.v
+++ b/coq/src/putnam_2006_a5.v
@@ -1,16 +1,22 @@
-Require Import Nat Reals Coquelicot.Coquelicot.
-Definition putnam_2006_a5_solution (n: nat) := if eqb (n mod 4) (1%nat) then (Z.of_nat n) else (-1 * Z.of_nat n)%Z.
+From mathcomp Require Import all_algebra all_ssreflect.
+From mathcomp Require Import reals trigo.
+From mathcomp Require Import classical_sets.
+
+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_2006_a5_solution : nat -> int := fun n : nat => if n == 1 %[mod 4] then n%:Z else - n%:Z.
Theorem putnam_2006_a5
- (prodn := fix prod_n (m: nat -> R) (n : nat) : R :=
- match n with
- | O => 1
- | S n' => m (S n') * prod_n m n'
- end)
(n : nat)
- (th : R)
+ (theta : R)
(a : nat -> R)
- (nodd : odd n = true)
- (thetairr : ~ exists (p q: Z), th / PI = IZR (p / q))
- (ha : forall k, a k = tan (th + (INR k * PI) / INR n))
- : sum_n_m a 1 n / prodn a n = IZR (putnam_2006_a5_solution n).
-Proof. Admitted.
+ (nodd : odd n)
+ (thetairr : ~ exists a b : int, b <> 0 /\ theta / pi = (a%:~R / b%:~R))
+ (ha : forall k : nat, ge k 1 /\ ge n k -> a k = tan (theta + (k%:R * pi) / n%:R))
+ : \sum_(1 <= k < n.+1) a k / \prod_(1 <= k < n.+1) a k = (putnam_2006_a5_solution n)%:~R.
+Proof. Admitted.
\ No newline at end of file
diff --git a/coq/src/putnam_2011_a2.v b/coq/src/putnam_2011_a2.v
index 505d774e..650358de 100644
--- a/coq/src/putnam_2011_a2.v
+++ b/coq/src/putnam_2011_a2.v
@@ -1,18 +1,22 @@
-Require Import Reals Coquelicot.Coquelicot.
-Definition putnam_2011_a2_solution := 3 / 2.
+From mathcomp Require Import all_algebra all_ssreflect.
+From mathcomp Require Import reals sequences topology normedtype.
+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_2011_a2_solution : R := 3/2.
Theorem putnam_2011_a2
- (prodn := fix prod_n (m: nat -> R) (n : nat) : R :=
- match n with
- | O => m 0%nat
- | S n' => m n * prod_n m n'
- end)
- (a: nat -> R)
- (ha1 : a 0%nat = 1)
- (B := fix b (n: nat) :=
- match n with
- | O => 1
- | S n' => b n' * a n - 2
- end)
- (M: R)
- : (forall (n: nat), a n > 0 /\ B n > 0 /\ -1 * M <= B n <= M) -> Series (fun n => 1 / prodn a n) = putnam_2011_a2_solution.
-Proof. Admitted.
+ (a b : R ^nat)
+ (habn : forall n : nat, a n > 0 /\ b n > 0)
+ (hab1 : a 0%nat = 1 /\ b 0%nat = 1)
+ (hb : forall n : nat, ge n 1 -> b n = b (n.-1) * a n - 2)
+ (hbnd : exists B : R, forall n : nat, `|b n| <= B)
+ : (fun n : nat => \sum_(1 <= i < n.+1) 1/(\prod_(1 <= j < i.+1) (a j))) @ \oo --> putnam_2011_a2_solution.
+Proof. Admitted.
\ No newline at end of file
diff --git a/coq/src/putnam_2013_b4.v b/coq/src/putnam_2013_b4.v
index 23eb73fd..ede8c593 100644
--- a/coq/src/putnam_2013_b4.v
+++ b/coq/src/putnam_2013_b4.v
@@ -6,7 +6,7 @@ Theorem putnam_2013_b4
(var : (R -> R) -> (R -> R) := fun f : R -> R => fun x : R => f x - (mu f))
(Var : (R -> R) -> R := fun f => RInt (fMult (var f) (var f)) 0 1)
(M : (R -> R) -> R)
- (hM : forall (f : R -> R), ((exists (x : R), (0 <= x <= 1) /\ Rabs (f x) = M f) /\ (forall x : R, 0 <= x <= 1 -> Rabs (f x) <= M f)))
+ (hM : forall (f : R -> R), (forall x : R, (0 <= x <= 1) -> continuity_pt f x) -> ((exists (x : R), (0 <= x <= 1) /\ Rabs (f x) = M f) /\ (forall x : R, 0 <= x <= 1 -> Rabs (f x) <= M f)))
: forall (f g: R -> R), (forall (x: R), 0 <= x <= 1 -> continuity_pt f x /\ continuity_pt g x) ->
Var (fMult f g) <= 2 * Var f * (M g)^2 + 2 * Var g * (M f)^2.
Proof. Admitted.
diff --git a/coq/src/putnam_2015_a3.v b/coq/src/putnam_2015_a3.v
index f29d66ea..1073eb53 100644
--- a/coq/src/putnam_2015_a3.v
+++ b/coq/src/putnam_2015_a3.v
@@ -1,5 +1,7 @@
Require Import Reals ROrderedType Coquelicot.Coquelicot.
Open Scope C.
+
+(* Note: While this formalization is quite unwieldy, to my knowledge there is no definition of complex log in real-closed.complex.v *)
Definition putnam_2015_a3_solution : C := RtoC 13725.
Theorem putnam_2015_a3
(Carg : C -> R := fun z => if Reqb (Im z) 0 then (if Rlt_dec (Re z) 0 then PI else R0) else atan ((Im z)/(Re z)))
@@ -16,4 +18,4 @@ Theorem putnam_2015_a3
end)
(f : nat -> nat -> C := fun a b => Clog 2%nat (Re (1 + cos (2*PI*INR(a+1)*INR(b+1)/2015)), sin (2*PI*INR(a+1)*INR(b+1)/2015)))
: HCprod2 f 2015%nat 2015%nat = putnam_2015_a3_solution.
-Proof. Admitted.
+Proof. Admitted.
\ No newline at end of file
diff --git a/coq/src/putnam_2016_a2.v b/coq/src/putnam_2016_a2.v
index 13664d88..c0ad1399 100644
--- a/coq/src/putnam_2016_a2.v
+++ b/coq/src/putnam_2016_a2.v
@@ -1,9 +1,9 @@
Require Import Reals Coquelicot.Coquelicot.
Definition putnam_2016_a2_solution := (3 + sqrt 5) / 2.
Theorem putnam_2016_a2
- (p : nat -> nat -> Prop := fun n m => Binomial.C m (n - 1) > Binomial.C (m - 1) n)
+ (p : nat -> nat -> Prop := fun n m => gt m 0 /\ Binomial.C m (n - 1) > Binomial.C (m - 1) n)
(M : nat -> nat)
- (pM : forall n : nat, p n (M n))
- (hMub : forall n m : nat, p n m -> le m (M n))
+ (pM : forall n : nat, gt n 0 -> p n (M n))
+ (hMub : forall n m : nat, gt n 0 /\ p n m -> le m (M n))
: Lim_seq (fun n => (INR (M n) / INR n)) = putnam_2016_a2_solution.
Proof. Admitted.
diff --git a/coq/src/putnam_2016_a6.v b/coq/src/putnam_2016_a6.v
index 05b2f56e..68ecdf1e 100644
--- a/coq/src/putnam_2016_a6.v
+++ b/coq/src/putnam_2016_a6.v
@@ -1,20 +1,24 @@
-Require Import Reals Coquelicot.Coquelicot.
+From mathcomp Require Import all_algebra all_ssreflect.
+From mathcomp Require Import reals normedtype topology sequences measure lebesgue_measure lebesgue_integral.
+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 mu := [the measure _ _ of @lebesgue_measure R].
Definition putnam_2016_a6_solution : R := 5 / 6.
Theorem putnam_2016_a6
(C : R)
- (max : (R -> R) -> R)
- (hmax : forall (P : R -> R) (coeff: nat -> R) (n: nat),
- (coeff n <> 0 /\ P = (fun x => sum_n (fun i => coeff i * x ^ i) n)) ->
- exists (x: R), 0 <= x <= 1 /\ Rabs (P x) = max P)
- (hmaxub : forall (P : R -> R) (coeff: nat -> R) (n: nat),
- (coeff n <> 0 /\ P = (fun x => sum_n (fun i => coeff i * x ^ i) n)) ->
- (forall (x: R), 0 <= x <= 1 -> Rabs (P x) <= max P))
- (p : R -> Prop :=
- fun c =>
- forall (P : R -> R) (coeff: nat -> R),
- (coeff 3%nat <> R0 /\ P = (fun x => sum_n (fun i => coeff i * x ^ i) 3)) ->
- (exists (x: R), 0 <= x <= 1 /\ P x = 0) -> RInt P 0 1 <= c * max P)
- (hpC : p C)
- (hClb : forall c : R, p c -> C <= c)
- : (C = putnam_2016_a6_solution).
-Proof. Admitted.
+ (p : R -> Prop)
+ (max : {poly R} -> R)
+ (hmax : forall P, exists x : R, 0 <= x <= 1 /\ P.[x] = max P)
+ (hmaxub : forall P, forall x, 0 <= x <= 1 -> P.[x] <= max P)
+ (hp : forall c, p c <-> forall P : {poly R}, (size P = 4%nat) -> (exists x : R, 0 <= x <= 1 /\ P.[x] = 0) -> \int[mu]_(x in [set x | 0 <= x <= 1]) P.[x] <= c * max P)
+ : p putnam_2016_a6_solution /\ forall C, p C -> C <= putnam_2016_a6_solution.
+Proof. Admitted.
\ No newline at end of file
diff --git a/coq/src/putnam_2017_a1.v b/coq/src/putnam_2017_a1.v
index 9831f2a8..59ecc709 100644
--- a/coq/src/putnam_2017_a1.v
+++ b/coq/src/putnam_2017_a1.v
@@ -1,8 +1,22 @@
-From mathcomp Require Import div.
-Definition putnam_2017_a1_solution (x: nat) := x > 0 /\ (x = 1 \/ 5 %| x = true).
+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 ring_scope.
+Local Open Scope classical_set_scope.
+
+Definition putnam_2017_a1_solution : set int := [set x : int | x > 0 /\ (x = 1 \/ (5 %| x)%Z)].
Theorem putnam_2017_a1
- (A: nat -> Prop)
- (valid_set : (nat -> Prop) -> Prop := fun E => forall (n: nat), E 2 /\ E (n*n) -> E n /\ E n -> E ((n+5)*(n+5)))
- (hA : valid_set A /\ (forall (B: nat -> Prop), valid_set B -> (forall (n: nat), A n -> B n)))
- : forall n, ~ A n <-> putnam_2017_a1_solution n.
+ (IsQualifying : (set int) -> Prop)
+ (IsQualifying_def : forall S, IsQualifying S <->
+ (forall n : int, n \in S -> n > 0) /\
+ 2 \in S /\
+ (forall n : int, n > 0 /\ (n ^ 2) \in S -> n \in S) /\
+ (forall n : int, n \in S -> (n + 5) ^ 2 \in S))
+ (S : set int)
+ (hS : IsQualifying S /\ forall T : set int, T `<=` S -> ~ IsQualifying T)
+ : ~` S `&` [set n : int | n > 0] = putnam_2017_a1_solution.
Proof. Admitted.
\ No newline at end of file
diff --git a/coq/src/putnam_2018_b1.v b/coq/src/putnam_2018_b1.v
index 8d1d1090..4f62c828 100644
--- a/coq/src/putnam_2018_b1.v
+++ b/coq/src/putnam_2018_b1.v
@@ -1,29 +1,24 @@
-Require Import Logic Ensembles Finite_sets Nat List.
-Open Scope nat_scope.
-Definition putnam_2018_b1_solution : Ensemble (nat * nat) := fun v : nat * nat => exists (b : nat), 0 <= b <= 100 /\ even b = true /\ fst v = 1 /\ snd v = b.
-Definition is_in_ensemble_fst (E : Ensemble (nat * nat)) (x : nat) : bool :=
- match E (x, _) with
- | True => true
-end.
-Definition is_in_ensemble_snd (E : Ensemble (nat * nat)) (y : nat) : bool :=
- match E (_, y) with
- | True => true
-end.
+From mathcomp Require Import all_algebra all_ssreflect.
+From mathcomp Require Import reals trigo.
+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_2018_b4_solution : set (int * int) := [set v | exists b : int, 0 <= b <= 100 /\ (exists k : int, b = 2 * k) /\ v = (1,b)].
Theorem putnam_2018_b1
- (P : Ensemble (nat * nat))
- (v : nat * nat)
- (vinP : Prop)
- (Pvdiff : Ensemble (nat * nat))
- (Pvpart : Prop)
- (hP : P = fun v': nat * nat => 0 <= fst v' <= 2 /\ 0 <= snd v' <= 100)
- (hvinP : vinP = P v)
- (hPvdiff : Pvdiff = fun v' => P v' /\ v' <> v)
- (hPvpart : Pvpart =
- (exists Q R : Ensemble (nat * nat),
- (Union (nat * nat) Q R = Pvdiff) /\
- (Intersection (nat * nat) Q R = Empty_set (nat * nat)) /\
- (exists (n: nat), cardinal (nat * nat) Q n = cardinal (nat * nat) R n /\
- (fold_right plus 0%nat (filter (fun x: nat => is_in_ensemble_fst Q x) (seq 0 3)) = fold_right plus 0%nat (filter (fun x: nat => is_in_ensemble_fst R x) (seq 0 3))) /\
- (fold_right plus 0%nat (filter (fun y: nat => is_in_ensemble_snd Q y) (seq 0 101)) = fold_right plus 0%nat (filter (fun y: nat => is_in_ensemble_snd R y) (seq 0 101))))))
- : (vinP /\ Pvpart) <-> putnam_2018_b1_solution v.
-Proof. Admitted.
+ (P : set (int * int) := [set v' | 0 <= v'.1 <= 2 /\ 0 <= v'.2 <= 100])
+ (v : int * int)
+ (Pvdiff : set (int * int) := [set v' | v' \in P /\ v' != v])
+ : (v \in P /\ (exists Q R : set (int * int),
+ Q `|` R = Pvdiff /\ Q `&` R = set0 /\ Q #= R /\
+ \sum_(i <- iota 0 3) (\sum_(j <- iota 0 101) (if (i%:Z, j%:Z) \in Q then i%:Z else 0)) = \sum_(i <- iota 0 3) (\sum_(j <- iota 0 101) (if (i%:Z, j%:Z) \in R then i%:Z else 0)) /\
+ \sum_(i <- iota 0 3) (\sum_(j <- iota 0 101) (if (i%:Z, j%:Z) \in Q then j%:Z else 0)) = \sum_(i <- iota 0 3) (\sum_(j <- iota 0 101) (if (i%:Z, j%:Z) \in R then j%:Z else 0))))
+ <-> v \in putnam_2018_b4_solution.
+Proof. Admitted.
\ No newline at end of file
diff --git a/coq/src/putnam_2018_b3.v b/coq/src/putnam_2018_b3.v
index cbd64e13..0b3bfd14 100644
--- a/coq/src/putnam_2018_b3.v
+++ b/coq/src/putnam_2018_b3.v
@@ -1,5 +1,5 @@
Require Import Nat Ensembles. From mathcomp Require Import div seq ssrnat ssrbool.
-Definition putnam_2018_b3_solution := fun n => n = 2^2 \/ n = 2^4 \/ n = 2^8 \/ n = 2^(16).
+Definition putnam_2018_b3_solution := fun n => n = 2^2 \/ n = 2^4 \/ n = 2^16 \/ n = 2^(256).
Theorem putnam_2018_b3
(E : Ensemble nat := fun n => n > 0 /\ (n < 10^(100)) /\ (n %| 2^n) /\ ((n-1) %| (2^n-1)) /\ ((n-2) %| (2^n-2)))
: E = putnam_2018_b3_solution.
diff --git a/coq/src/putnam_2018_b4.v b/coq/src/putnam_2018_b4.v
index 3302cc9a..7e478e79 100644
--- a/coq/src/putnam_2018_b4.v
+++ b/coq/src/putnam_2018_b4.v
@@ -1,13 +1,18 @@
-Require Import Reals.
+From mathcomp Require Import all_algebra all_ssreflect.
+From mathcomp Require Import reals trigo.
+
+Set Implicit Arguments.
+Unset Strict Implicit.
+Unset Printing Implicit Defensive.
+
+Local Open Scope ring_scope.
+
+Variable R : realType.
Theorem putnam_2018_b4
- (a: R)
- (s := fix s (n:nat) {struct n}: R :=
- match n with
- | O => R1
- | S O => a
- | S (S O) => a
- | S (S ((S n''') as n'') as n') =>
- (2 * (s n') * (s n'') - (s n'''))%R
- end)
- : (exists n : nat, s n = R0) -> exists (T: nat), (gt T 0 /\ forall (i: nat), s (i+T) = s i).
-Proof. Admitted.
+ (a : R)
+ (x : nat -> R)
+ (hx0 : x 0%nat = 1)
+ (hx1 : x 1%nat = a /\ x 2%nat = a)
+ (hxn : forall n : nat, ge n 2 -> x (n.+1) = 2 * (x n) * (x n.-1) - (x n.-2))
+ : (exists n : nat, x n = 0) -> exists c : nat, (gt c 0) /\ (forall n : nat, x (Nat.add n c) = x n).
+Proof. Admitted.
\ No newline at end of file
diff --git a/coq/src/putnam_2021_a2.v b/coq/src/putnam_2021_a2.v
index 2dac3a66..cfd2e281 100644
--- a/coq/src/putnam_2021_a2.v
+++ b/coq/src/putnam_2021_a2.v
@@ -1,9 +1,22 @@
-Require Import Reals. From Coquelicot Require Import Continuity Lim_seq Rbar.
-Open Scope R.
-Definition putnam_2021_a2_solution := exp 1.
+From mathcomp Require Import all_algebra all_ssreflect.
+From mathcomp Require Import reals normedtype sequences topology exp.
+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.
+Local Open Scope card_scope.
+
+Variable R : realType.
+(* Note: This is a slightly weaker statement due to the lack of the ``eventually'' filter for reals. *)
+Definition putnam_2021_a2_solution : R := expR 1.
Theorem putnam_2021_a2
- (sequence_r_to_0 : nat -> R := fun n => 1 / INR n)
- (f : R -> R -> R := fun r x => Rpower (Rpower (x+1) (r+1) - Rpower x (r+1)) 1/r)
- (g : R -> R := fun x => Lim_seq (fun n => f (sequence_r_to_0 n) x))
- : Lim_seq (fun n => (g (INR n))/INR n) = putnam_2021_a2_solution.
-Proof. Admitted.
+ (g : R -> R)
+ (hg : forall x : R, x > 0 -> (fun r : R => expR (1/r * ln ((expR (ln (x + 1) * (r + 1))) - (expR (ln x * (r + 1)))))) @ at_right 0 --> g x)
+ : (fun x : nat => g x%:R / x%:R) @ \oo --> putnam_2021_a2_solution.
+Proof. Admitted.
\ No newline at end of file
diff --git a/coq/src/putnam_2021_b2.v b/coq/src/putnam_2021_b2.v
index 85465288..4b3af544 100644
--- a/coq/src/putnam_2021_b2.v
+++ b/coq/src/putnam_2021_b2.v
@@ -1,8 +1,18 @@
-Require Import List Reals Coquelicot.Hierarchy Coquelicot.Series.
-Definition putnam_2021_b2_solution := 2/3.
-Theorem putnam_2021_b2
- (A : (nat -> R) -> nat -> R := fun a n => fold_left Rmult (map a (seq 0 n)) 1)
- (B : (nat -> R) -> R := fun a => Series (fun n => INR n * (Rpower (A a n) 1/(INR n))))
- : (forall (a : nat -> R), (forall (i: nat), a i >= 0) /\ Series a = 1 -> putnam_2021_b2_solution >= B a) /\
- (exists (a : nat -> R), (forall (i: nat), a i >= 0) /\ Series a = 1 -> putnam_2021_b2_solution = B a).
-Proof. Admitted.
+From mathcomp Require Import all_algebra all_ssreflect.
+From mathcomp Require Import reals sequences topology normedtype.
+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_2021_b2_solution : R := 2/3.
+Theorem putnam_2021_b2 :
+ putnam_2021_b2_solution \in supremums [set S : R | exists a : R ^nat, series a @ \oo --> 1 /\ (forall k, a k >= 0) /\
+ series (fun n : nat => n%:R / (2 ^+ n) * (\prod_(1 <= k < n.+1) a k) ^ (1 / n%:R)) @ \oo --> S].
+Proof. Admitted.
\ No newline at end of file
diff --git a/coq/src/putnam_2021_b4.v b/coq/src/putnam_2021_b4.v
index 5e5ae219..25cd7c8e 100644
--- a/coq/src/putnam_2021_b4.v
+++ b/coq/src/putnam_2021_b4.v
@@ -1,11 +1,15 @@
-Require Import PeanoNat. From mathcomp Require Import bigop fintype ssrnat.
+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_2021_b4
- (F := fix f (n: nat) : nat :=
- match n with
- | O => O
- | S O => 1
- | S ((S n'') as n') => f n' + f n''
- end)
- : forall (m: nat), m > 2 = true ->
- exists (p: nat), (\prod_(k < (F m)) k^k) mod (F m) = F p.
-Proof. Admitted.
+ (F : nat -> nat)
+ (hF01 : F 0 = 0 /\ F 1 = 1)
+ (hF : forall n : nat, F (n.+2) = F (n.+1) + F n)
+ : forall m : nat, m > 2 ->
+ exists p : nat, (\prod_(1 <= k < F m) k ^ k) = F p %[mod (F m)].
+Proof. Admitted.
diff --git a/coq/src/putnam_2023_a1.v b/coq/src/putnam_2023_a1.v
index 9373da4d..6e921d87 100644
--- a/coq/src/putnam_2023_a1.v
+++ b/coq/src/putnam_2023_a1.v
@@ -1,12 +1,19 @@
-Require Import Reals List Rtrigo_def Coquelicot.Derive.
-Open Scope R.
+From mathcomp Require Import all_ssreflect ssrnum ssralg.
+From mathcomp Require Import reals trigo normedtype derive topology sequences.
+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_2023_a1_solution : nat := 18.
Theorem putnam_2023_a1
- (f : nat -> R -> R := fun n (x : R) =>
- let f_i i := cos (INR i * x) in
- let coeffs := map f_i (seq 1 n) in
- fold_right Rmult 1 coeffs
- )
- : gt putnam_2023_a1_solution 0 /\ Derive_n (f putnam_2023_a1_solution) 2 0 > 2023 /\ (forall n : nat, (gt n 0 /\ lt n putnam_2023_a1_solution) -> Derive_n (f n) 2 0 <= 2023).
-Proof. Admitted.
-
+ (f : nat -> R -> R := fun n x => \prod_(1 <= i < n.+1) cos (i%:R * x))
+ : gt putnam_2023_a1_solution 0 /\ `|(f putnam_2023_a1_solution)^`(2) 0| > 2023 /\
+ forall n : nat, gt n 0 -> lt n putnam_2023_a1_solution -> `|(f n)^`(2) 0| <= 2023.
+Proof. Admitted.
diff --git a/coq/src/putnam_2023_a2.v b/coq/src/putnam_2023_a2.v
index 4f44b056..dd589afc 100644
--- a/coq/src/putnam_2023_a2.v
+++ b/coq/src/putnam_2023_a2.v
@@ -1,12 +1,22 @@
-Require Import Nat Ensembles Factorial Reals Coquelicot.Coquelicot.
-Definition putnam_2023_a2_solution : nat -> Ensemble R := (fun n => (fun x => x = -1 / INR (fact n) \/ x = 1 / INR (fact n))).
-Theorem putnam_2023_a2
+From mathcomp Require Import all_algebra all_ssreflect.
+From mathcomp Require Import reals.
+From mathcomp Require Import classical_sets.
+
+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_2023_a2_solution : nat -> set R := fun n => [set x | x = -1 / (n`!)%:R \/ x = 1 / (n`!)%:R].
+Theorem putnam_2023_a2
(n : nat)
- (hn0 : gt n 0)
- (hnev : even n = true)
- (coeff: nat -> R)
- (p : R -> R := fun x => sum_n (fun i => coeff i * x ^ i) (2 * n))
- (monic_even : coeff (mul 2 n) = 1)
- (hpinv : forall k : Z, and (Z.le 1 (Z.abs k)) (Z.le (Z.abs k) (Z.of_nat n)) -> p (1 / (IZR k)) = IZR (k ^ 2))
- : (fun x => (p (1 / x) = x ^ 2 /\ ~ exists k : Z, x = IZR k /\ Z.le (Z.abs k) (Z.of_nat n))) = putnam_2023_a2_solution n.
+ (hn0 : gt n 0 /\ ~~ odd n)
+ (p : {poly R})
+ (hp : p \is monic /\ size p = (n.*2).+1)
+ (S : set R := [set x | exists k : int, x = k%:~R /\ 1 <= `|k| <= n])
+ (hpinv : forall k : int, k%:~R \in S -> p.[1 / k%:~R] = k%:~R ^+ 2)
+ : [set x | (p.[1 / x] == x ^+ 2) && (x \notin S)] = putnam_2023_a2_solution n.
Proof. Admitted.
diff --git a/docs/results.json b/docs/results.json
index 84706eba..58213303 100644
--- a/docs/results.json
+++ b/docs/results.json
@@ -91,5 +91,15 @@
"size": 7,
"condensed-compute-budget": "pass@4096",
"note": "pass@2048 w/ T = 1.0 + pass@2048 w/ T = 0.7"
+ },
+ "ABEL": {
+ "link": "https://openreview.net/forum?id=kk3mSjVCUO",
+ "open-data": "NONE",
+ "num-solved": {
+ "lean-wsolution": 7
+ },
+ "size": 7,
+ "condensed-compute-budget": "pass@596",
+ "note": "7 hour cumulative online proof search on 256 GPUs"
}
}
\ No newline at end of file
diff --git a/informal/README.md b/informal/README.md
index b51b9eeb..2e898b17 100644
--- a/informal/README.md
+++ b/informal/README.md
@@ -8,3 +8,5 @@ that is, you must write:
These statements are also present in the docstrings of some of the formal statements.
Github CI will automatically catch if these are out of sync, but if you update them in one place you will have to update them in the other.
+
+When a problem happens to require a solution (i.e. some additional data requested in the problem statement), we also add an `informal_solution` field which has as value an imperative sentence roughly of the form "Show that the solution is ..."
diff --git a/informal/putnam.json b/informal/putnam.json
index 61bc9c43..e1fdaa2b 100644
--- a/informal/putnam.json
+++ b/informal/putnam.json
@@ -172,7 +172,7 @@
},
{
"problem_name": "putnam_1964_a2",
- "informal_statement": "Let $\\alpha$ be a real number. Find all continuous real-valued functions $f : [0, 1] \\to (0, \\infty)$ such that \n\\begin{align*}\n\\int_0^1 f(x) dx &= 1, \\\\\n\\int_0^1 x f(x) dx &= \\alpha, \\\\\n\\int_0^1 x^2 f(x) dx &= \\alpha^2. \\\\\n\\end{align*}",
+ "informal_statement": "Let $\\alpha$ be a real number. Find all continuous real-valued functions $f : [0, 1] \\to (0, \\infty)$ such that\n\\begin{align*}\n\\int_0^1 f(x) dx &= 1, \\\\\n\\int_0^1 x f(x) dx &= \\alpha, \\\\\n\\int_0^1 x^2 f(x) dx &= \\alpha^2. \\\\\n\\end{align*}",
"informal_solution": "Prove that there are no such functions.",
"tags": [
"analysis",
@@ -189,14 +189,14 @@
},
{
"problem_name": "putnam_1964_a4",
- "informal_statement": "The sequence of integers $u_n$ is bounded and satisfies \n\\[\nu_n = \\frac{u_{n-1} + u_{n-2} + u_{n-3}u_{n-4}}{u_{n-1}u_{n-2} + u_{n-3} + u_{n-4}}.\n\\] \nShow that it is periodic for sufficiently large $n$.",
+ "informal_statement": "The sequence of integers $u_n$ is bounded and satisfies\n\\[\nu_n = \\frac{u_{n-1} + u_{n-2} + u_{n-3}u_{n-4}}{u_{n-1}u_{n-2} + u_{n-3} + u_{n-4}}.\n\\]\nShow that it is periodic for sufficiently large $n$.",
"tags": [
"analysis"
]
},
{
"problem_name": "putnam_1964_a5",
- "informal_statement": "Prove that there exists a constant $k$ such that for any sequence $a_i$ of positive numbers, \n\\[\n\\sum_{n=1}^{\\infty} \\frac{n}{a_1 + a_2 + \\dots + a_n} \\leq k \\sum_{n=1}^{\\infty}\\frac{1}{a_n}.\n\\]",
+ "informal_statement": "Prove that there exists a constant $k$ such that for any sequence $a_i$ of positive numbers,\n\\[\n\\sum_{n=1}^{\\infty} \\frac{n}{a_1 + a_2 + \\dots + a_n} \\leq k \\sum_{n=1}^{\\infty}\\frac{1}{a_n}.\n\\]",
"tags": [
"analysis"
]
@@ -696,7 +696,7 @@
},
{
"problem_name": "putnam_1969_b6",
- "informal_statement": "Let $A$ be a $3 \\times 2$ matrix and $B$ be a $2 \\times 3$ matrix such that $$AB = \n\\begin{pmatrix}\n8 & 2 & -2 \\\\\n2 & 5 & 4 \\\\\n-2 & 4 & 5\n\\end{pmatrix}.\n$$ Prove that $$BA = \n\\begin{pmatrix}\n9 & 0 \\\\\n0 & 9\n\\end{pmatrix}.$$",
+ "informal_statement": "Let $A$ be a $3 \\times 2$ matrix and $B$ be a $2 \\times 3$ matrix such that $$AB =\n\\begin{pmatrix}\n8 & 2 & -2 \\\\\n2 & 5 & 4 \\\\\n-2 & 4 & 5\n\\end{pmatrix}.\n$$ Prove that $$BA =\n\\begin{pmatrix}\n9 & 0 \\\\\n0 & 9\n\\end{pmatrix}.$$",
"informal_solution": "None.",
"tags": [
"linear_algebra"
@@ -1316,7 +1316,7 @@
},
{
"problem_name": "putnam_1977_a6",
- "informal_statement": "Let $X$ be the square $[0, 1] \\times [0, 1]$, and let $f : X \\to \\mathbb{R}$ be continuous. If $\\int_Y f(x, y) \\, dx \\, dy = 0$ for all squares $Y$ such that\n\\begin{itemize}\n\\item[(1)] $Y \\subseteq X$, \n\\item[(2)] $Y$ has sides parallel to those of $X$, \n\\item[(3)] at least one of $Y$'s sides is contained in the boundary of $X$, \n\\end{itemize}\nis it true that $f(x, y) = 0$ for all $x, y$?",
+ "informal_statement": "Let $X$ be the square $[0, 1] \\times [0, 1]$, and let $f : X \\to \\mathbb{R}$ be continuous. If $\\int_Y f(x, y) \\, dx \\, dy = 0$ for all squares $Y$ such that\n\\begin{itemize}\n\\item[(1)] $Y \\subseteq X$,\n\\item[(2)] $Y$ has sides parallel to those of $X$,\n\\item[(3)] at least one of $Y$'s sides is contained in the boundary of $X$,\n\\end{itemize}\nis it true that $f(x, y) = 0$ for all $x, y$?",
"informal_solution": "Prove that $f(x,y)$ must be identically zero.",
"tags": [
"analysis"
@@ -1380,14 +1380,14 @@
},
{
"problem_name": "putnam_1978_a4",
- "informal_statement": "A binary operation (represented by multiplication) on $S$ has the property that $(ab)(cd) = ad$ for all $a, b, c, d$. Show that: \n\\begin{itemize}\n\\item[(1)] if $ab = c$, then $cc = c$; \n\\item[(2)] if $ab = c$, then $ad = cd$ for all $d$. \n\\end{itemize}\nFind a set $S$, and such a binary operation, which also satisfies:\n\\begin{itemize}\n\\item[(A)] $a a = a$ for all $a$; \n\\item[(B)] $ab = a \\neq b$ for some $a, b$; \n\\item[(C)] $ab \\neq a$ for some $a, b$.\n\\end{itemize}",
+ "informal_statement": "A binary operation (represented by multiplication) on $S$ has the property that $(ab)(cd) = ad$ for all $a, b, c, d$. Show that:\n\\begin{itemize}\n\\item[(1)] if $ab = c$, then $cc = c$;\n\\item[(2)] if $ab = c$, then $ad = cd$ for all $d$.\n\\end{itemize}\nFind a set $S$, and such a binary operation, which also satisfies:\n\\begin{itemize}\n\\item[(A)] $a a = a$ for all $a$;\n\\item[(B)] $ab = a \\neq b$ for some $a, b$;\n\\item[(C)] $ab \\neq a$ for some $a, b$.\n\\end{itemize}",
"tags": [
"abstract_algebra"
]
},
{
"problem_name": "putnam_1978_a5",
- "informal_statement": "Let $a_1, a_2, \\dots , a_n$ be reals in the interval $(0, \\pi)$ with arithmetic mean $\\mu$. Show that \n\\[\n\\prod_{i=1}^n \\left( \\frac{\\sin a_i}{a_i} \\right) \\leq \\left( \\frac{\\sin \\mu}{\\mu} \\right)^n.\n\\]",
+ "informal_statement": "Let $a_1, a_2, \\dots , a_n$ be reals in the interval $(0, \\pi)$ with arithmetic mean $\\mu$. Show that\n\\[\n\\prod_{i=1}^n \\left( \\frac{\\sin a_i}{a_i} \\right) \\leq \\left( \\frac{\\sin \\mu}{\\mu} \\right)^n.\n\\]",
"tags": [
"analysis"
]
@@ -1411,7 +1411,7 @@
},
{
"problem_name": "putnam_1978_b3",
- "informal_statement": "The polynomials $P_n(x)$ are defined by \n\\begin{align*}\nP_1(x) &= 1 + x, \\\\\nP_2(x) &= 1 + 2x, \\\\\nP_{2n+1}(x) &= P_{2n}(x) + (n + 1) x P_{2n-1}(x), \\\\\nP_{2n+2}(x) &= P_{2n+1}(x) + (n + 1) x P_{2n}(x). \n\\end{align*}\nLet $a_n$ be the largest real root of $P_n(x)$. Prove that $a_n$ is strictly monotonically increasing and tends to zero.",
+ "informal_statement": "The polynomials $P_n(x)$ are defined by\n\\begin{align*}\nP_1(x) &= 1 + x, \\\\\nP_2(x) &= 1 + 2x, \\\\\nP_{2n+1}(x) &= P_{2n}(x) + (n + 1) x P_{2n-1}(x), \\\\\nP_{2n+2}(x) &= P_{2n+1}(x) + (n + 1) x P_{2n}(x).\n\\end{align*}\nLet $a_n$ be the largest real root of $P_n(x)$. Prove that $a_n$ is strictly monotonically increasing and tends to zero.",
"tags": [
"algebra",
"analysis"
@@ -1516,7 +1516,7 @@
},
{
"problem_name": "putnam_1979_b6",
- "informal_statement": "Let $z_i$ be complex numbers for $i = 1, 2, \\dots, n$. Show that \n\\[\n\\left \\lvert \\mathrm{Re} \\, [(z_1^2 + z_2^2 + \\dots + z_n^2)^{1/2} ] \\right \\rvert \\leq \\lvert \\mathrm{Re} \\, z_1 \\rvert + \\lvert \\mathrm{Re} \\, z_2 \\rvert + \\dots + \\lvert \\mathrm{Re} \\, z_n \\rvert.\n\\]",
+ "informal_statement": "Let $z_i$ be complex numbers for $i = 1, 2, \\dots, n$. Show that\n\\[\n\\left \\lvert \\mathrm{Re} \\, [(z_1^2 + z_2^2 + \\dots + z_n^2)^{1/2} ] \\right \\rvert \\leq \\lvert \\mathrm{Re} \\, z_1 \\rvert + \\lvert \\mathrm{Re} \\, z_2 \\rvert + \\dots + \\lvert \\mathrm{Re} \\, z_n \\rvert.\n\\]",
"tags": [
"analysis"
]
@@ -1762,7 +1762,7 @@
},
{
"problem_name": "putnam_1983_a4",
- "informal_statement": "Prove that for $m = 5 \\pmod 6$, \n\\[\n\\binom{m}{2} - \\binom{m}{5} + \\binom{m}{8} - \\binom{m}{11} + ... - \\binom{m}{m-6} + \\binom{m}{m-3} \\neq 0.\n\\]",
+ "informal_statement": "Prove that for $m = 5 \\pmod 6$,\n\\[\n\\binom{m}{2} - \\binom{m}{5} + \\binom{m}{8} - \\binom{m}{11} + ... - \\binom{m}{m-6} + \\binom{m}{m-3} \\neq 0.\n\\]",
"tags": [
"algebra"
]
@@ -2510,7 +2510,7 @@
{
"problem_name": "putnam_1992_a4",
"informal_statement": "Let $f$ be an infinitely differentiable real-valued function defined on the real numbers. If\n\\[\nf\\left( \\frac{1}{n} \\right) = \\frac{n^2}{n^2 + 1}, \\qquad n = 1, 2, 3, \\dots,\n\\]\ncompute the values of the derivatives $f^{(k)}(0), k = 1, 2, 3, \\dots$.",
- "informal_solution": "Prove that \n\\[\nf^{(k)}(0) = \n\\begin{cases} \n(-1)^{k/2}k! & \\text{if $k$ is even;} \\\\\n0 & \\text{if $k$ is odd.} \\\\\n\\end{cases}\n\\]",
+ "informal_solution": "Prove that\n\\[\nf^{(k)}(0) =\n\\begin{cases}\n(-1)^{k/2}k! & \\text{if $k$ is even;} \\\\\n0 & \\text{if $k$ is odd.} \\\\\n\\end{cases}\n\\]",
"tags": [
"analysis"
]
@@ -3910,7 +3910,7 @@
{
"problem_name": "putnam_2009_a2",
"informal_statement": "Functions $f,g,h$ are differentiable on some open interval around $0$\nand satisfy the equations and initial conditions\n\\begin{gather*}\nf' = 2f^2gh+\\frac{1}{gh},\\quad f(0)=1, \\\\\ng'=fg^2h+\\frac{4}{fh}, \\quad g(0)=1, \\\\\nh'=3fgh^2+\\frac{1}{fg}, \\quad h(0)=1.\n\\end{gather*}\nFind an explicit formula for $f(x)$, valid in some open interval around $0$.",
- "informal_solution": "Prove that the formula is \n\\[\nf(x) = 2^{-1/12} \\left(\\frac{\\sin(6x+\\pi/4)}{\\cos^2(6x+\\pi/4)}\\right)^{1/6}.\n\\]",
+ "informal_solution": "Prove that the formula is\n\\[\nf(x) = 2^{-1/12} \\left(\\frac{\\sin(6x+\\pi/4)}{\\cos^2(6x+\\pi/4)}\\right)^{1/6}.\n\\]",
"tags": [
"analysis"
]
@@ -4265,7 +4265,7 @@
},
{
"problem_name": "putnam_2013_a2",
- "informal_statement": "Let $S$ be the set of all positive integers that are \\emph{not} perfect squares. For $n$ in $S$, consider choices of integers\n$a_1, a_2, \\dots, a_r$ such that $n < a_1< a_2 < \\cdots < a_r$\nand $n \\cdot a_1 \\cdot a_2 \\cdots a_r$ is a perfect square, and\nlet $f(n)$ be the minumum of $a_r$ over all such choices. For example,\n$2 \\cdot 3 \\cdot 6$ is a perfect square, while $2 \\cdot 3$, $2 \\cdot 4$, \n$2 \\cdot 5$, $2 \\cdot 3 \\cdot 4$, $2 \\cdot 3 \\cdot 5$, $2 \\cdot 4 \\cdot 5$, and $2 \\cdot 3 \\cdot 4 \\cdot 5$ are not, and so $f(2) = 6$.\nShow that the function $f$ from $S$ to the integers is one-to-one.",
+ "informal_statement": "Let $S$ be the set of all positive integers that are \\emph{not} perfect squares. For $n$ in $S$, consider choices of integers\n$a_1, a_2, \\dots, a_r$ such that $n < a_1< a_2 < \\cdots < a_r$\nand $n \\cdot a_1 \\cdot a_2 \\cdots a_r$ is a perfect square, and\nlet $f(n)$ be the minumum of $a_r$ over all such choices. For example,\n$2 \\cdot 3 \\cdot 6$ is a perfect square, while $2 \\cdot 3$, $2 \\cdot 4$,\n$2 \\cdot 5$, $2 \\cdot 3 \\cdot 4$, $2 \\cdot 3 \\cdot 5$, $2 \\cdot 4 \\cdot 5$, and $2 \\cdot 3 \\cdot 4 \\cdot 5$ are not, and so $f(2) = 6$.\nShow that the function $f$ from $S$ to the integers is one-to-one.",
"informal_solution": "None.",
"tags": [
"number_theory",
@@ -4315,7 +4315,7 @@
},
{
"problem_name": "putnam_2013_b2",
- "informal_statement": "Let $C = \\bigcup_{N=1}^\\infty C_N$, where $C_N$ denotes the set of those `cosine polynomials' of the form\n\\[\nf(x) = 1 + \\sum_{n=1}^N a_n \\cos(2 \\pi n x)\n\\]\nfor which:\n\\begin{enumerate}\n\\item[(i)]\n$f(x) \\geq 0$ for all real $x$, and\n\\item[(ii)]\n$a_n = 0$ whenever $n$ is a multiple of $3$.\n\\end{enumerate}\nDetermine the maximum value of $f(0)$ as $f$ ranges through $C$, and \nprove that this maximum is attained.",
+ "informal_statement": "Let $C = \\bigcup_{N=1}^\\infty C_N$, where $C_N$ denotes the set of those `cosine polynomials' of the form\n\\[\nf(x) = 1 + \\sum_{n=1}^N a_n \\cos(2 \\pi n x)\n\\]\nfor which:\n\\begin{enumerate}\n\\item[(i)]\n$f(x) \\geq 0$ for all real $x$, and\n\\item[(ii)]\n$a_n = 0$ whenever $n$ is a multiple of $3$.\n\\end{enumerate}\nDetermine the maximum value of $f(0)$ as $f$ ranges through $C$, and\nprove that this maximum is attained.",
"informal_solution": "The maximum value of $f(0)$ is $3$.",
"tags": [
"algebra"
@@ -4512,7 +4512,7 @@
},
{
"problem_name": "putnam_2015_b4",
- "informal_statement": "Let $T$ be the set of all triples $(a,b,c)$ of positive integers for which there exist triangles with side lengths $a,b,c$. Express\n\\[\n\\sum_{(a,b,c) \\in T} \\frac{2^a}{3^b 5^c} \n\\]\nas a rational number in lowest terms.",
+ "informal_statement": "Let $T$ be the set of all triples $(a,b,c)$ of positive integers for which there exist triangles with side lengths $a,b,c$. Express\n\\[\n\\sum_{(a,b,c) \\in T} \\frac{2^a}{3^b 5^c}\n\\]\nas a rational number in lowest terms.",
"informal_solution": "The answer is $17/21$.",
"tags": [
"algebra"
@@ -4554,7 +4554,7 @@
},
{
"problem_name": "putnam_2016_a3",
- "informal_statement": "Suppose that $f$ is a function from $\\mathbb{R}$ to $\\mathbb{R}$ such that\n\\[\nf(x) + f\\left( 1 - \\frac{1}{x} \\right) = \\arctan x\n\\]\nfor all real $x \\neq 0$. (As usual, $y = \\arctan x$ means $-\\pi/2 < y < \\pi/2$ and $\\tan y = x$.) Find \n\\[\n\\int_0^1 f(x)\\,dx.\n\\]",
+ "informal_statement": "Suppose that $f$ is a function from $\\mathbb{R}$ to $\\mathbb{R}$ such that\n\\[\nf(x) + f\\left( 1 - \\frac{1}{x} \\right) = \\arctan x\n\\]\nfor all real $x \\neq 0$. (As usual, $y = \\arctan x$ means $-\\pi/2 < y < \\pi/2$ and $\\tan y = x$.) Find\n\\[\n\\int_0^1 f(x)\\,dx.\n\\]",
"informal_solution": "Prove that the answer is $\\frac{3\\pi}{8}$.",
"tags": [
"analysis"
@@ -4562,7 +4562,7 @@
},
{
"problem_name": "putnam_2016_a5",
- "informal_statement": "Suppose that $G$ is a finite group generated by the two elements $g$ and $h$, where the order of $g$ is odd. Show that every element of $G$ can be written in the form\n\\[\ng^{m_1} h^{n_1} g^{m_2} h^{n_2} \\cdots g^{m_r} h^{n_r}\n\\]\nwith $1 \\leq r \\leq |G|$ and $m_1, n_1, m_2, n_2, \\ldots, m_r, n_r \\in \\{-1, 1\\}$. \n(Here $|G|$ is the number of elements of $G$.)",
+ "informal_statement": "Suppose that $G$ is a finite group generated by the two elements $g$ and $h$, where the order of $g$ is odd. Show that every element of $G$ can be written in the form\n\\[\ng^{m_1} h^{n_1} g^{m_2} h^{n_2} \\cdots g^{m_r} h^{n_r}\n\\]\nwith $1 \\leq r \\leq |G|$ and $m_1, n_1, m_2, n_2, \\ldots, m_r, n_r \\in \\{-1, 1\\}$.\n(Here $|G|$ is the number of elements of $G$.)",
"tags": [
"abstract_algebra"
]
@@ -4689,7 +4689,7 @@
},
{
"problem_name": "putnam_2017_b6",
- "informal_statement": "Find the number of ordered $64$-tuples $(x_0,x_1,\\dots,x_{63})$ such that $x_0,x_1,\\dots,x_{63}$ are distinct elements of $\\{1,2,\\dots,2017\\}$ and \n\\[\nx_0 + x_1 + 2x_2 + 3x_3 + \\cdots + 63 x_{63}\n\\]\nis divisible by 2017.",
+ "informal_statement": "Find the number of ordered $64$-tuples $(x_0,x_1,\\dots,x_{63})$ such that $x_0,x_1,\\dots,x_{63}$ are distinct elements of $\\{1,2,\\dots,2017\\}$ and\n\\[\nx_0 + x_1 + 2x_2 + 3x_3 + \\cdots + 63 x_{63}\n\\]\nis divisible by 2017.",
"informal_solution": "Prove that the answer is $\\frac{2016!}{1953!} - 63! \\cdot 2016$",
"tags": [
"algebra",
@@ -4804,7 +4804,7 @@
},
{
"problem_name": "putnam_2019_a3",
- "informal_statement": "Given real numbers $b_0, b_1, \\dots, b_{2019}$ with $b_{2019} \\neq 0$, let $z_1,z_2,\\dots,z_{2019}$ be \nthe roots in the complex plane of the polynomial \n\\[\nP(z) = \\sum_{k=0}^{2019} b_k z^k.\n\\]\nLet $\\mu = (|z_1| + \\cdots + |z_{2019}|)/2019$ be the average of the distances from $z_1,z_2,\\dots,z_{2019}$ to the origin. Determine the largest constant $M$ such that $\\mu \\geq M$ for all choices of $b_0,b_1,\\dots, b_{2019}$ that satisfy\n\\[\n1 \\leq b_0 < b_1 < b_2 < \\cdots < b_{2019} \\leq 2019.\n\\]",
+ "informal_statement": "Given real numbers $b_0, b_1, \\dots, b_{2019}$ with $b_{2019} \\neq 0$, let $z_1,z_2,\\dots,z_{2019}$ be\nthe roots in the complex plane of the polynomial\n\\[\nP(z) = \\sum_{k=0}^{2019} b_k z^k.\n\\]\nLet $\\mu = (|z_1| + \\cdots + |z_{2019}|)/2019$ be the average of the distances from $z_1,z_2,\\dots,z_{2019}$ to the origin. Determine the largest constant $M$ such that $\\mu \\geq M$ for all choices of $b_0,b_1,\\dots, b_{2019}$ that satisfy\n\\[\n1 \\leq b_0 < b_1 < b_2 < \\cdots < b_{2019} \\leq 2019.\n\\]",
"informal_solution": "The answer is $M = 2019^{-1/2019}$.",
"tags": [
"algebra"
@@ -4921,7 +4921,7 @@
},
{
"problem_name": "putnam_2020_a6",
- "informal_statement": "For a positive integer $N$, let $f_N$ be the function defined by \n\\[\nf_N(x) = \\sum_{n=0}^N \\frac{N+1/2-n}{(N+1)(2n+1)} \\sin((2n+1)x).\n\\]\nDetermine the smallest constant $M$ such that $f_N(x) \\leq M$ for all $N$ and all real $x$.",
+ "informal_statement": "For a positive integer $N$, let $f_N$ be the function defined by\n\\[\nf_N(x) = \\sum_{n=0}^N \\frac{N+1/2-n}{(N+1)(2n+1)} \\sin((2n+1)x).\n\\]\nDetermine the smallest constant $M$ such that $f_N(x) \\leq M$ for all $N$ and all real $x$.",
"informal_solution": "The smallest constant $M$ is $\\pi/4$.",
"tags": [
"algebra"
@@ -5149,7 +5149,7 @@
},
{
"problem_name": "putnam_2023_a3",
- "informal_statement": "Determine the smallest positive real number $r$ such that there exist differentiable functions $f\\colon \\mathbb{R} \\to \\mathbb{R}$ and $g\\colon \\mathbb{R} \\to \\mathbb{R}$ satisfying \n\\begin{enumerate}\n \\item[(a)] $f(0) > 0$, \n \\item[(b)] $g(0) = 0$, \n \\item[(c)] $|f'(x)| \\leq |g(x)|$ for all $x$, \n \\item[(d)] $|g'(x)| \\leq |f(x)|$ for all $x$, and \n \\item[(e)] $f(r) = 0$. \\end{enumerate}",
+ "informal_statement": "Determine the smallest positive real number $r$ such that there exist differentiable functions $f\\colon \\mathbb{R} \\to \\mathbb{R}$ and $g\\colon \\mathbb{R} \\to \\mathbb{R}$ satisfying\n\\begin{enumerate}\n \\item[(a)] $f(0) > 0$,\n \\item[(b)] $g(0) = 0$,\n \\item[(c)] $|f'(x)| \\leq |g(x)|$ for all $x$,\n \\item[(d)] $|g'(x)| \\leq |f(x)|$ for all $x$, and\n \\item[(e)] $f(r) = 0$. \\end{enumerate}",
"informal_solution": "Show that the solution is $r = \\pi/2$.",
"tags": [
"analysis"
diff --git a/isabelle/putnam_1962_a2.thy b/isabelle/putnam_1962_a2.thy
index 38aef144..a7b19430 100644
--- a/isabelle/putnam_1962_a2.thy
+++ b/isabelle/putnam_1962_a2.thy
@@ -4,11 +4,11 @@ theory putnam_1962_a2 imports Complex_Main
begin
definition putnam_1962_a2_solution :: "(real \ real) set" where "putnam_1962_a2_solution \ undefined"
-(* {f :: real \ real. \ a c :: real. a > 0 \ f = (\ x. a / (1 - c * x)^2)} *)
+(* {f :: real \ real. \ a c :: real. a \ 0 \ f = (\ x. a / (1 - c * x)^2)} *)
theorem putnam_1962_a2:
fixes hf :: "real \ (real \ real) \ bool"
and hfinf :: "(real \ real) \ bool"
- defines "hf \ \ (e :: real) (f :: real \ real). \ x \ {0<.. \ (e :: real) (f :: real \ real). (\ x :: real. f x \ 0) \ (\ x \ {0<.. \ (f :: real \ real). \ x > 0. (interval_lebesgue_integral lebesgue 0 x f) / x = sqrt((f 0) * (f x))"
shows "(\ f :: real \ real. (hfinf f \ (\ g \ putnam_1962_a2_solution. \ x \ 0. g x = f x)) \
(\ e > 0. hf e f \ (\ g \ putnam_1962_a2_solution. \ x \ {0..
diff --git a/isabelle/putnam_1963_a3.thy b/isabelle/putnam_1963_a3.thy
index 7b5eae62..5f2916d2 100644
--- a/isabelle/putnam_1963_a3.thy
+++ b/isabelle/putnam_1963_a3.thy
@@ -7,19 +7,17 @@ definition putnam_1963_a3_solution :: "(real \ real) \ n
"putnam_1963_a3_solution \ undefined"
(* \ (f :: real \ real) (n :: nat) (x :: real) (t :: real). (x-t)^(n-1) * (f t) / (fact (n-1)) * t^n *)
theorem putnam_1963_a3:
- fixes n :: "nat"
- and f :: "real \ real"
- and P :: "nat \ (real \ real) \ (real \ real)"
- and delta :: "(real \ real) \ (real \ real)"
- and D :: "nat \ (real \ real) \ (real \ real)"
- and y :: "real \ real"
- defines "delta \ \ g. ((\ x :: real. x * deriv g x))"
- and "D \ \ m :: nat. \ g :: real \ real. (\ x :: real. (delta g) x - (real m) * (g x))"
- and "y \ \ x :: real. interval_lebesgue_integral lebesgue 1 (ereal x) (putnam_1963_a3_solution f n x)"
- assumes hn : "n \ 1"
- and hf : "continuous_on UNIV f"
- and hP : "P 0 y = y \ (\ m \ {0::nat.. k :: nat < n. ((deriv^^k) f) C1_differentiable_on UNIV) \ (\ x :: real \ 1. P n y x = f x) \ (\ i \ {0::nat.. (real \ real) \ (real \ real)"
+ and n :: "nat"
+ and f y :: "real \ real"
+ assumes hP : "(\ x. P 0 x = x) \ (\ (i :: nat) (y :: real \ real). P (i + 1) y = P i (\ x. x * deriv y x - (real_of_nat i) * y x))"
+ and hn : "0 < n"
+ and hf : "continuous_on {1..} f"
+ shows "((\ k :: nat < n.
+ ((deriv^^k) y) C1_differentiable_on {1..} ∧
+ ((deriv^^k) y) 1 = 0) \
+ (\ x :: real. x \ 0 \ (P n y) x = f x)) \
+ (\ x :: real \ 1. y x = interval_lebesgue_integral lebesgue 1 (ereal x) (putnam_1963_a3_solution f n x))"
sorry
end
\ No newline at end of file
diff --git a/isabelle/putnam_1965_a6.thy b/isabelle/putnam_1965_a6.thy
index 6bc8f8a4..57f9d12b 100644
--- a/isabelle/putnam_1965_a6.thy
+++ b/isabelle/putnam_1965_a6.thy
@@ -3,12 +3,16 @@ Complex_Main
begin
theorem putnam_1965_a6:
- fixes u v m :: real
- and pinter :: "(real \ real) \ bool"
- assumes hm: "m > 1"
- and huv: "u \ 0 \ v \ 0"
- defines "pinter \ (\p::real\real. u * (fst p) + v * (snd p) = 1 \ (fst p) powr m + (snd p) powr m = 1)"
- shows "((\! p :: real \ real. pinter p) \ (\ p :: real \ real. fst p \ 0 \ snd p \ 0 \ pinter p)) \ (\ n :: real. u powr n + v powr n = 1 \ m powi -1 + n powi -1 = 1)"
+ fixes u v m :: "real"
+ assumes hu : "0 < u"
+ and hv : "0 < v"
+ and hm : "1 < m"
+ shows "(\ x :: real > 0. \ y :: real > 0.
+ u * x + v * y = 1 \
+ x powr m + y powr m = 1 \
+ u = x powr (m - 1) \
+ v = y powr (m - 1)) \
+ (\ n :: real. u powr n + v powr n = 1 \ 1/m + 1/n = 1)"
sorry
end
\ No newline at end of file
diff --git a/isabelle/putnam_1965_b4.thy b/isabelle/putnam_1965_b4.thy
index 703a07d5..b658b46b 100644
--- a/isabelle/putnam_1965_b4.thy
+++ b/isabelle/putnam_1965_b4.thy
@@ -5,9 +5,16 @@ begin
definition putnam_1965_b4_solution :: "(((real \ real) \ real \ real) \ ((real \ real) \ real \ real)) \ ((real set) \ (real \ real))" where "putnam_1965_b4_solution \ undefined"
(* ((\ h :: real \ real. \ x :: real. h x + x, \ h :: real \ real. \ x :: real. h x + 1), ({x :: real. x \ 0}, sqrt)) *)
theorem putnam_1965_b4:
- fixes f :: "nat \ real \ real"
- assumes hf: "\ n > 0. f n = (\ x :: real. (\ i = 0 .. n div 2. (n choose (2 * i)) * x ^ i) / (\ i = 0 .. (n - 1) div 2. (n choose (2 * i + 1)) * x ^ i))"
- shows "let ((p, q), (s, g)) = putnam_1965_b4_solution in (\ n > 0. f (n + 1) = (\ x. p (f n) x / q (f n) x) \ s = {x :: real. convergent (\ n. f n x)} \ (\ x \ s. (\ n. f n x) \ g x))"
+ fixes f u v :: "nat \ real \ real"
+ and n :: "nat"
+ assumes hu : "\ n :: nat > 0. \ x. u n x = (\ i = 0 .. n div 2. (n choose (2 * i)) * x ^ i)"
+ and hv : "\ n :: nat > 0. \ x. v n x = (\ i = 0 .. (n - 1) div 2. (n choose (2 * i + 1)) * x ^ i)"
+ and hf : "\ n :: nat > 0. \ x. f n x = u n x / v n x"
+ and hn : "0 < n"
+ shows "let ((p, q), (s, g)) = putnam_1965_b4_solution in
+ (\ n > 0. 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 = {x :: real. convergent (\ n. f n x)} \
+ (\ x \ s. (\ n. f n x) \ g x))"
sorry
-end
+end
\ No newline at end of file
diff --git a/isabelle/putnam_1969_a5.thy b/isabelle/putnam_1969_a5.thy
index 221e6d8a..918fe5b9 100644
--- a/isabelle/putnam_1969_a5.thy
+++ b/isabelle/putnam_1969_a5.thy
@@ -3,8 +3,19 @@ theory putnam_1969_a5 imports Complex_Main
begin
theorem putnam_1969_a5:
- shows "\ x y :: real \ real. (x differentiable_on UNIV \ y differentiable_on UNIV) \ (\ t > 0. (x 0 = y 0 \ (\ u :: real \ real. continuous_on UNIV u \ x t = 0 \ y t = 0 \
- deriv x = (\ p :: real \ -2 * y p + u p) \ deriv y = (\ p :: real \ -2 * x p + u p))))"
+ fixes x0 y0 t :: "real"
+ assumes ht : "0 < t"
+ shows "x0 = y0 \ (\ x y u :: real \ real.
+ x differentiable_on UNIV \
+ y differentiable_on UNIV \
+ continuous_on UNIV u \
+ (\ p :: real. deriv x p = -2 * y p + u p) \
+ (\ p :: real. deriv y p = -2 * x p + u p) \
+ x 0 = x0 \
+ y 0 = y0 \
+ x t = 0 \
+ y t = 0)"
sorry
+
end
\ No newline at end of file
diff --git a/isabelle/putnam_1969_b2.thy b/isabelle/putnam_1969_b2.thy
index 9cd4c4cd..9c4f2d4f 100644
--- a/isabelle/putnam_1969_b2.thy
+++ b/isabelle/putnam_1969_b2.thy
@@ -6,11 +6,10 @@ begin
definition putnam_1969_b2_solution :: bool where "putnam_1969_b2_solution \ undefined"
(* False *)
theorem putnam_1969_b2:
- fixes G (structure)
- and h :: "nat \ bool"
- assumes hG: "group G \ finite (carrier G)"
- defines "h \ (\n::nat. (\H::nat\('a set). (\i::nat\{0..(n-1)}. subgroup (H i) G \ H i \ carrier G) \ (carrier G = (\i::nat\{0..(n-1)}. H i))))"
- shows "\(h 2) \ ((\(h 3)) \ putnam_1969_b2_solution)"
+ fixes P :: "nat \ bool"
+ defines "P \ \ n. \ G. group G \ finite (carrier G) \
+ (\ H. (\ i\{0.. (H i) \ carrier G) \ (carrier G \ (\