Demonstrate how Lean/LaTeX will co-exist for now.

finite-set-exercises
Joshua Potter 2023-04-08 15:09:11 -06:00
parent 87c1fb2a24
commit 30bda83706
6 changed files with 159 additions and 43 deletions

25
.gitignore vendored
View File

@ -1,5 +1,22 @@
# Lean # Lean
**/build */build
**/lake-packages/* */lake-packages
**/_target */_target
**/leanpkg.path */leanpkg.path
# TeX
*.aux
*.cb
*.cb2
*.fdb_latexmk
*.fls
*.fmt
*.fot
*.lof
*.log
*.lot
*.out
*.pdf
*.synctex.gz
*.toc
.*.lb

View File

@ -1,33 +1,41 @@
import Mathlib.Data.Real.Basic
import Mathlib.Tactic.NormNum import Mathlib.Tactic.NormNum
import Mathlib.Tactic.Ring import Mathlib.Tactic.Ring
/--[1] /--
A 0th-indexed arithmetic sequence. A `0`th-indexed arithmetic sequence.
-/ -/
structure Arithmetic where structure Arithmetic where
a₀ : Int a₀ : Real
Δ : Int Δ : Real
namespace Arithmetic namespace Arithmetic
/--[1] /--
Returns the value of the `n`th term of an arithmetic sequence. Returns the value of the `n`th term of an arithmetic sequence.
-/
def termClosed (seq : Arithmetic) (n : Nat) : Int := seq.a₀ + seq.Δ * n
/--[1] This function calculates the value of this term directly. Keep in mind the
Returns the value of the `n`th term of an arithmetic sequence. sequence is `0`th-indexed.
-/ -/
def termRecursive : Arithmetic → Nat → Int def termClosed (seq : Arithmetic) (n : Nat) : Real :=
seq.a₀ + seq.Δ * n
/--
Returns the value of the `n`th term of an arithmetic sequence.
This function calculates the value of this term recursively. Keep in mind the
sequence is `0`th-indexed.
-/
def termRecursive : Arithmetic → Nat → Real
| seq, 0 => seq.a₀ | seq, 0 => seq.a₀
| seq, (n + 1) => seq.Δ + seq.termRecursive n | seq, (n + 1) => seq.Δ + seq.termRecursive n
/--[1] /--
The recursive definition and closed definitions of an arithmetic sequence are The recursive and closed term definitions of an arithmetic sequence agree with
equivalent. one another.
-/ -/
theorem term_recursive_closed (seq : Arithmetic) (n : Nat) theorem term_recursive_closed (seq : Arithmetic) (n : Nat)
: seq.termRecursive n = seq.termClosed n := by : seq.termRecursive n = seq.termClosed n := by
induction n with induction n with
| zero => unfold termRecursive termClosed; norm_num | zero => unfold termRecursive termClosed; norm_num
| succ n ih => calc | succ n ih => calc
@ -35,14 +43,33 @@ theorem term_recursive_closed (seq : Arithmetic) (n : Nat)
= seq.Δ + seq.termRecursive n := rfl = seq.Δ + seq.termRecursive n := rfl
_ = seq.Δ + seq.termClosed n := by rw [ih] _ = seq.Δ + seq.termClosed n := by rw [ih]
_ = seq.Δ + (seq.a₀ + seq.Δ * n) := rfl _ = seq.Δ + (seq.a₀ + seq.Δ * n) := rfl
_ = seq.a₀ + seq.Δ * (n + 1) := by ring _ = seq.a₀ + seq.Δ * (↑n + 1) := by ring
_ = seq.a₀ + seq.Δ * ↑(n + 1) := by simp
_ = termClosed seq (n + 1) := rfl _ = termClosed seq (n + 1) := rfl
/--[1] /--
Summation of the first `n` terms of an arithmetic sequence. The summation of the first `n + 1` terms of an arithmetic sequence.
This function calculates the sum directly.
-/ -/
def sum : Arithmetic → Nat → Int noncomputable def sum_closed (seq : Arithmetic) (n : Nat) : Real :=
((n + 1) * (seq.a₀ + seq.termClosed n)) / 2
/--
The summation of the first `n + 1` terms of an arithmetic sequence.
This function calculates the sum recursively.
-/
def sum_recursive : Arithmetic → Nat → Real
| _, 0 => 0 | _, 0 => 0
| seq, (n + 1) => seq.termClosed n + seq.sum n | seq, (n + 1) => seq.termClosed (n + 1) + seq.sum_recursive n
/--
The recursive and closed definitions of the sum of an arithmetic sequence agree
with one another.
-/
theorem sum_recursive_closed (seq : Arithmetic) (n : Nat)
: sum_recursive seq n = sum_closed seq n :=
sorry
end Arithmetic end Arithmetic

View File

@ -0,0 +1,22 @@
\documentclass{article}
\usepackage{amsfonts, amsthm}
\newtheorem{theorem}{Theorem}
\begin{document}
\begin{theorem}[Sum of Arithmetic Series]
Let $(a_i)_{i \geq 0}$ be an arithmetic sequence with common difference $d$.
Then for some $n \in \mathbb{N}$,
$$\sum_{i=0}^n a_i = \frac{(n + 1)(a_0 + a_n)}{2}.$$
\end{theorem}
\begin{proof}
Common.Sequence.Arithmetic.sum\_recursive\_closed
\end{proof}
\end{document}

View File

@ -1,33 +1,41 @@
import Mathlib.Data.Real.Basic
import Mathlib.Tactic.NormNum import Mathlib.Tactic.NormNum
import Mathlib.Tactic.Ring import Mathlib.Tactic.Ring
/--[1] /--
A 0th-indexed geometric sequence. A `0th`-indexed geometric sequence.
-/ -/
structure Geometric where structure Geometric where
a₀ : Int a₀ : Real
r : Int r : Real
namespace Geometric namespace Geometric
/--[1] /--
The value of the `n`th term of an geometric sequence. Returns the value of the `n`th term of a geometric sequence.
-/
def termClosed (seq : Geometric) (n : Nat) : Int := seq.a₀ * seq.r ^ n
/--[1] This function calculates the value of this term directly. Keep in mind the
The value of the `n`th term of an geometric sequence. sequence is `0`th-indexed.
-/ -/
def termRecursive : Geometric → Nat → Int def termClosed (seq : Geometric) (n : Nat) : Real :=
seq.a₀ * seq.r ^ n
/--
Returns the value of the `n`th term of a geometric sequence.
This function calculates the value of this term recursively. Keep in mind the
sequence is `0`th-indexed.
-/
def termRecursive : Geometric → Nat → Real
| seq, 0 => seq.a₀ | seq, 0 => seq.a₀
| seq, (n + 1) => seq.r * (seq.termRecursive n) | seq, (n + 1) => seq.r * (seq.termRecursive n)
/--[1] /--
The recursive definition and closed definitions of a geometric sequence are The recursive and closed term definitions of a geometric sequence agree with
equivalent. one another.
-/ -/
theorem term_recursive_closed (seq : Geometric) (n : Nat) theorem term_recursive_closed (seq : Geometric) (n : Nat)
: seq.termRecursive n = seq.termClosed n := by : seq.termRecursive n = seq.termClosed n := by
induction n with induction n with
| zero => unfold termClosed termRecursive; norm_num | zero => unfold termClosed termRecursive; norm_num
| succ n ih => calc | succ n ih => calc
@ -38,11 +46,30 @@ theorem term_recursive_closed (seq : Geometric) (n : Nat)
_ = seq.a₀ * seq.r ^ (n + 1) := by ring _ = seq.a₀ * seq.r ^ (n + 1) := by ring
_ = seq.termClosed (n + 1) := rfl _ = seq.termClosed (n + 1) := rfl
/--[1] /--
Summation of the first `n` terms of a geometric sequence. The summation of the first `n + 1` terms of a geometric sequence.
This function calculates the sum directly.
-/ -/
def sum : Geometric → Nat → Int noncomputable def sum_closed_ratio_neq_one (seq : Geometric) (n : Nat)
: seq.r ≠ 1 → Real :=
fun _ => (seq.a₀ * (1 - seq.r ^ (n + 1))) / (1 - seq.r)
/--
The summation of the first `n + 1` terms of a geometric sequence.
This function calculates the sum recursively.
-/
def sum_recursive : Geometric → Nat → Real
| _, 0 => 0 | _, 0 => 0
| seq, (n + 1) => seq.termClosed n + seq.sum n | seq, (n + 1) => seq.termClosed n + seq.sum_recursive n
/--
The recursive and closed definitions of the sum of an arithmetic sequence agree
with one another.
-/
theorem sum_recursive_closed (seq : Geometric) (n : Nat) (p : seq.r ≠ 1)
: sum_recursive seq n = sum_closed_ratio_neq_one seq n p :=
sorry
end Geometric end Geometric

View File

@ -0,0 +1,22 @@
\documentclass{article}
\usepackage{amsfonts, amsthm}
\newtheorem{theorem}{Theorem}
\begin{document}
\begin{theorem}[Sum of Geometric Series]
Let $(a_i)_{i \geq 0}$ be a geometric sequence with common ratio $r \neq 1$.
Then for some $n \in \mathbb{N}$,
$$\sum_{i=0}^n a_i = \frac{a_0(1 - r^{n+1})}{1 - r}.$$
\end{theorem}
\begin{proof}
Common.Sequence.Geometric.sum\_recursive\_closed.
\end{proof}
\end{document}

View File

@ -69,7 +69,8 @@ theorem eq_iff_snoc {t₁ t₂ : Tuple α n}
/-- /--
Implements decidable equality for `Tuple α m`, provided `a` has decidable equality. Implements decidable equality for `Tuple α m`, provided `a` has decidable equality.
-/ -/
protected def hasDecEq [DecidableEq α] (t₁ t₂ : Tuple α n) : Decidable (Eq t₁ t₂) := protected def hasDecEq [DecidableEq α] (t₁ t₂ : Tuple α n)
: Decidable (Eq t₁ t₂) :=
match t₁, t₂ with match t₁, t₂ with
| t[], t[] => isTrue eq_nil | t[], t[] => isTrue eq_nil
| snoc as a, snoc bs b => | snoc as a, snoc bs b =>