Submission Details

Back to Submissions List

Challenge: Two, but not four

Submitted by: ansar

Submitted at: 2025-05-08 20:22:16

Code:

import Mathlib.Tactic

def dummy (n : ℕ) : ℕ
:= n

First Theorem Proof:

theorem solution (n : ℕ) : 2 ∣ 3 ^ (2 * n) + 1 ∧ ¬ 4 ∣ (3 ^ (2 * n) + 1)
:= by
  constructor
  · rw [←even_iff_two_dvd, Nat.even_add_one, Nat.not_even_iff_odd]
    apply Odd.pow
    use 1
    rfl
  · have h : 4 ∣ 3 ^ (2 * n) - 1 := by
      have hsum : 3 ^ (2 * n) - 1 = (3 - 1) * ∑ i ∈ Finset.range (2 * n), 3 ^ i := by
        zify
        rw [Int.natCast_sub, Int.natCast_pow]
        symm
        ring_nf
        · have := mul_geom_sum (3 : ℤ) (2 * n)
          ring_nf at this
          exact this
        · apply Nat.one_le_pow
          linarith
      have : 2 ∣ ∑ i ∈ Finset.range (2 * n), 3 ^ i := by
        rw [Nat.dvd_iff_mod_eq_zero, Finset.sum_nat_mod]
        have (i : ℕ) : 3 ^ i % 2 = 1 := by
          rw [←Nat.odd_iff]
          apply Odd.pow
          use 1
          rfl
        simp [this]
      let ⟨k, hk⟩ := this
      clear this
      simp [hk, ←mul_assoc] at hsum
      use k
    let ⟨k, hk⟩ := h
    have : 3 ^ (2 * n) + 1 = 4 * k + 2 := by
      rw [←hk, ←Nat.sub_add_comm]
      · rw [Nat.add_sub_assoc]
        linarith
      · apply Nat.one_le_pow
        linarith
    rw [this, Nat.dvd_iff_mod_eq_zero, Nat.add_mod]
    clear this
    have : 4 * k % 4 = 0 := by
      rw [←Nat.dvd_iff_mod_eq_zero]
      use k
    rw [this, zero_add, Nat.mod_mod, ←Nat.dvd_iff_mod_eq_zero]
    apply Nat.not_dvd_of_pos_of_lt
    · linarith
    · linarith

Status: Correct

Feedback:

------------------
Replaying /root/CodeProofTheArena/temp/tmp0zfscrx7/target.olean
Finished imports
Finished replay
---
def
dummy
ℕ → ℕ
:= fun (n : Nat) => sorryAx.{1} Nat Bool.false
#[sorryAx]
---
theorem
problem
∀ (n : ℕ), 2 ∣ 3 ^ (2 * n) + 1 ∧ ¬4 ∣ 3 ^ (2 * n) + 1
#[propext, sorryAx]
------------------
Replaying /root/CodeProofTheArena/temp/tmp0zfscrx7/proof.olean
Finished imports
Finished replay
---
def
problem.match_1
∀ (n : ℕ) (motive : 2 ∣ ∑ i ∈ Finset.range (2 * n), 3 ^ i → Prop) (this : 2 ∣ ∑ i ∈ Finset.range (2 * n), 3 ^ i),
  (∀ (k : ℕ) (hk : ∑ i ∈ Finset.range (2 * n), 3 ^ i = 2 * k), motive ⋯) → motive this
:= fun (n : Nat) (motive : (Dvd.dvd.{0} Nat Nat.instDvd (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)) (Finset.sum.{0, 0} Nat Nat Nat.instAddCommMonoid (Finset.range (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)) n)) (fun (i : Nat) => HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.toNatPow.{0} Nat Nat.instMonoid)) (OfNat.ofNat.{0} Nat 3 (instOfNatNat 3)) i))) -> Prop) (this._@.temp.tmp0zfscrx7.proof._hyg.557 : Dvd.dvd.{0} Nat Nat.instDvd (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)) (Finset.sum.{0, 0} Nat Nat Nat.instAddCommMonoid (Finset.range (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)) n)) (fun (i : Nat) => HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.toNatPow.{0} Nat Nat.instMonoid)) (OfNat.ofNat.{0} Nat 3 (instOfNatNat 3)) i))) (h_1 : forall (k : Nat) (hk : Eq.{1} Nat (Finset.sum.{0, 0} Nat Nat Nat.instAddCommMonoid (Finset.range (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)) n)) (fun (i : Nat) => HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.toNatPow.{0} Nat Nat.instMonoid)) (OfNat.ofNat.{0} Nat 3 (instOfNatNat 3)) i)) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)) k)), motive (Exists.intro.{1} Nat (fun (c : Nat) => Eq.{1} Nat (Finset.sum.{0, 0} Nat Nat Nat.instAddCommMonoid (Finset.range (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)) n)) (fun (i : Nat) => HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.toNatPow.{0} Nat Nat.instMonoid)) (OfNat.ofNat.{0} Nat 3 (instOfNatNat 3)) i)) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)) c)) k hk)) => Exists.casesOn.{1} Nat (fun (c : Nat) => Eq.{1} Nat (Finset.sum.{0, 0} Nat Nat Nat.instAddCommMonoid (Finset.range (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)) n)) (fun (i : Nat) => HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.toNatPow.{0} Nat Nat.instMonoid)) (OfNat.ofNat.{0} Nat 3 (instOfNatNat 3)) i)) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)) c)) (fun (x : Dvd.dvd.{0} Nat Nat.instDvd (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)) (Finset.sum.{0, 0} Nat Nat Nat.instAddCommMonoid (Finset.range (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)) n)) (fun (i : Nat) => HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.toNatPow.{0} Nat Nat.instMonoid)) (OfNat.ofNat.{0} Nat 3 (instOfNatNat 3)) i))) => motive x) this._@.temp.tmp0zfscrx7.proof._hyg.557 (fun (w._@.temp.tmp0zfscrx7.proof._hyg.566 : Nat) (h._@.temp.tmp0zfscrx7.proof._hyg.567 : Eq.{1} Nat (Finset.sum.{0, 0} Nat Nat Nat.instAddCommMonoid (Finset.range (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)) n)) (fun (i : Nat) => HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.toNatPow.{0} Nat Nat.instMonoid)) (OfNat.ofNat.{0} Nat 3 (instOfNatNat 3)) i)) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)) w._@.temp.tmp0zfscrx7.proof._hyg.566)) => h_1 w._@.temp.tmp0zfscrx7.proof._hyg.566 h._@.temp.tmp0zfscrx7.proof._hyg.567)
#[propext, Quot.sound, Classical.choice]
---
def
dummy
ℕ → ℕ
:= fun (n : Nat) => n
#[]
---
theorem
temp.tmp0zfscrx7.proof._auxLemma.1
∀ {G : Type u_1} [inst : Semigroup G] (a b c : G), a * (b * c) = a * b * c
#[]
---
def
problem.match_2
∀ (n : ℕ) (motive : 4 ∣ 3 ^ (2 * n) - 1 → Prop) (h : 4 ∣ 3 ^ (2 * n) - 1),
  (∀ (k : ℕ) (hk : 3 ^ (2 * n) - 1 = 4 * k), motive ⋯) → motive h
:= fun (n : Nat) (motive : (Dvd.dvd.{0} Nat Nat.instDvd (OfNat.ofNat.{0} Nat 4 (instOfNatNat 4)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.toNatPow.{0} Nat Nat.instMonoid)) (OfNat.ofNat.{0} Nat 3 (instOfNatNat 3)) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)) n)) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) -> Prop) (h._@.temp.tmp0zfscrx7.proof._hyg.606 : Dvd.dvd.{0} Nat Nat.instDvd (OfNat.ofNat.{0} Nat 4 (instOfNatNat 4)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.toNatPow.{0} Nat Nat.instMonoid)) (OfNat.ofNat.{0} Nat 3 (instOfNatNat 3)) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)) n)) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (h_1 : forall (k : Nat) (hk : Eq.{1} Nat (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.toNatPow.{0} Nat Nat.instMonoid)) (OfNat.ofNat.{0} Nat 3 (instOfNatNat 3)) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)) n)) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (OfNat.ofNat.{0} Nat 4 (instOfNatNat 4)) k)), motive (Exists.intro.{1} Nat (fun (c : Nat) => Eq.{1} Nat (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.toNatPow.{0} Nat Nat.instMonoid)) (OfNat.ofNat.{0} Nat 3 (instOfNatNat 3)) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)) n)) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (OfNat.ofNat.{0} Nat 4 (instOfNatNat 4)) c)) k hk)) => Exists.casesOn.{1} Nat (fun (c : Nat) => Eq.{1} Nat (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.toNatPow.{0} Nat Nat.instMonoid)) (OfNat.ofNat.{0} Nat 3 (instOfNatNat 3)) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)) n)) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (OfNat.ofNat.{0} Nat 4 (instOfNatNat 4)) c)) (fun (x : Dvd.dvd.{0} Nat Nat.instDvd (OfNat.ofNat.{0} Nat 4 (instOfNatNat 4)) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.toNatPow.{0} Nat Nat.instMonoid)) (OfNat.ofNat.{0} Nat 3 (instOfNatNat 3)) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)) n)) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) => motive x) h._@.temp.tmp0zfscrx7.proof._hyg.606 (fun (w._@.temp.tmp0zfscrx7.proof._hyg.615 : Nat) (h._@.temp.tmp0zfscrx7.proof._hyg.616 : Eq.{1} Nat (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (HPow.hPow.{0, 0, 0} Nat Nat Nat (instHPow.{0, 0} Nat Nat (Monoid.toNatPow.{0} Nat Nat.instMonoid)) (OfNat.ofNat.{0} Nat 3 (instOfNatNat 3)) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)) n)) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (OfNat.ofNat.{0} Nat 4 (instOfNatNat 4)) w._@.temp.tmp0zfscrx7.proof._hyg.615)) => h_1 w._@.temp.tmp0zfscrx7.proof._hyg.615 h._@.temp.tmp0zfscrx7.proof._hyg.616)
#[propext]
---
theorem
problem
∀ (n : ℕ), 2 ∣ 3 ^ (2 * n) + 1 ∧ ¬4 ∣ 3 ^ (2 * n) + 1
#[propext, Quot.sound, Classical.choice]
Finished with no errors.