@@ -24,81 +24,20 @@ namespace Nat
24
24
25
25
/-! gcd -/
26
26
27
-
28
- #print Nat.gcd /-
29
- def gcd : Nat → Nat → Nat
30
- | 0, y => y
31
- | succ x, y =>
32
- have : y % succ x < succ x := mod_lt _ <| succ_pos _
33
- gcd (y % succ x) (succ x)
34
27
#align nat.gcd Nat.gcd
35
- -/
36
-
37
- #print Nat.gcd_zero_left /-
38
- @[ simp ]
39
- theorem gcd_zero_left (x : Nat) : gcd 0 x = x := by simp [ gcd ]
40
28
#align nat.gcd_zero_left Nat.gcd_zero_left
41
- -/
42
-
43
- #print Nat.gcd_succ /-
44
- @[ simp ]
45
- theorem gcd_succ (x y : Nat) : gcd (succ x) y = gcd (y % succ x) (succ x) := by simp [ gcd ]
46
29
#align nat.gcd_succ Nat.gcd_succ
47
- -/
48
-
49
- #print Nat.gcd_one_left /-
50
- @[ simp ]
51
- theorem gcd_one_left (n : ℕ) : gcd 1 n = 1 := by simp [ gcd ]
52
30
#align nat.gcd_one_left Nat.gcd_one_left
53
- -/
54
-
55
- theorem gcd_def (x y : ℕ) : gcd x y = if x = 0 then y else gcd (y % x) x := by
56
- cases x <;> simp [Nat.gcd_succ]
57
- --<;> simp [gcd, succ_ne_zero]
58
- #align nat.gcd_def Nat.gcd_def
59
-
60
-
61
- #print Nat.gcd_self /-
62
- @[ simp ]
63
- theorem gcd_self (n : ℕ) : gcd n n = n := by cases n <;> simp [gcd, mod_self]
64
31
#align nat.gcd_self Nat.gcd_self
65
- -/
66
-
67
- #print Nat.gcd_zero_right /-
68
- @[ simp ]
69
- theorem gcd_zero_right (n : ℕ) : gcd n 0 = n := by cases n <;> simp [ gcd ]
70
32
#align nat.gcd_zero_right Nat.gcd_zero_right
71
- -/
72
-
73
- #print Nat.gcd_rec /-
74
- theorem gcd_rec (m n : ℕ) : gcd m n = gcd (n % m) m := by cases m <;> simp [ gcd ]
75
33
#align nat.gcd_rec Nat.gcd_rec
76
- -/
77
-
78
- #print Nat.gcd.induction /-
79
- @[ elab_as_elim ]
80
- theorem gcd.induction {P : ℕ → ℕ → Prop} (m n : ℕ) (H0 : ∀ n, P 0 n)
81
- (H1 : ∀ m n, 0 < m → P (n % m) m → P m n) : P m n :=
82
- @induction _ _ lt_wfRel (fun m => ∀ n, P m n) m
83
- (fun k IH => by
84
- induction' k with k ih
85
- exact H0
86
- exact fun n => H1 _ _ (succ_pos _) (IH _ (mod_lt _ (succ_pos _)) _))
87
- n
88
34
#align nat.gcd.induction Nat.gcd.induction
89
- -/
90
-
91
- #print Nat.lcm /-
92
- def lcm (m n : ℕ) : ℕ :=
93
- m * n / gcd m n
94
35
#align nat.lcm Nat.lcm
95
- -/
96
36
97
- /--`Coprime m n` is a proposition that means that `gcd m n = 1`.
98
- There is an identical version in `Std.Data.Nat.GCD`-/
99
- @[reducible]
100
- def Coprime (m n : ℕ) : Prop :=
101
- gcd m n = 1
102
- #align nat.coprime Nat.Coprime
37
+ theorem gcd_def (x y : ℕ) : gcd x y = if x = 0 then y else gcd (y % x) x := by
38
+ cases x <;> simp [Nat.gcd_succ]
39
+ #align nat.gcd_def Nat.gcd_def
40
+
41
+ #align nat.coprime Nat.coprime
103
42
104
43
end Nat
0 commit comments