Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 06e797b

Browse files
committed
refactor(data/nat/pairing): improve proof readability
in response to review comments on 0acdf1c
1 parent 0acdf1c commit 06e797b

File tree

1 file changed

+18
-15
lines changed

1 file changed

+18
-15
lines changed

data/nat/pairing.lean

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,33 +19,35 @@ if n - s*s < s then (n - s*s, s) else (s, n - s*s - s)
1919

2020
theorem mkpair_unpair (n : nat) : mkpair (unpair n).1 (unpair n).2 = n :=
2121
let s := sqrt n in begin
22-
simp [unpair], change sqrt n with s,
22+
dsimp [unpair], change sqrt n with s,
23+
have sm : s * s + (n - s * s) = n := nat.add_sub_cancel' (sqrt_le _),
2324
by_cases n - s * s < s with h; simp [h, mkpair],
24-
{ exact nat.add_sub_cancel' (sqrt_le _) },
25-
simp at h,
26-
suffices : n - s*s - s ≤ s,
27-
{ simp [not_lt_of_ge this],
28-
rw [add_left_comm, nat.add_sub_cancel' h, nat.add_sub_cancel' (sqrt_le _)] },
29-
apply nat.sub_le_left_of_le_add, apply nat.sub_le_left_of_le_add,
30-
rw ← add_assoc, apply sqrt_le_add
25+
{ exact sm },
26+
{ have hl : n - s*s - s ≤ s :=
27+
nat.sub_le_left_of_le_add (nat.sub_le_left_of_le_add $
28+
by rw ← add_assoc; apply sqrt_le_add),
29+
suffices : s * s + (s + (n - s * s - s)) = n, {simpf [not_lt_of_ge hl]},
30+
rwa [nat.add_sub_cancel' (le_of_not_gt h)] }
3131
end
3232

3333
theorem unpair_mkpair (a b : nat) : unpair (mkpair a b) = (a, b) :=
3434
begin
3535
by_cases a < b; simp [h, mkpair],
36-
{ have be : sqrt (a + b * b) = b,
36+
{ show unpair (a + b * b) = (a, b),
37+
have be : sqrt (a + b * b) = b,
3738
{ rw [add_comm, sqrt_add_eq],
3839
exact le_trans (le_of_lt h) (le_add_left _ _) },
3940
simp [unpair, be, nat.add_sub_cancel, h] },
40-
{ simp at h,
41+
{ show unpair (a + (b + a * a)) = (a, b),
4142
have ae : sqrt (a + (b + a * a)) = a,
4243
{ rw [← add_assoc, add_comm, sqrt_add_eq],
43-
exact add_le_add_left h _ },
44+
exact add_le_add_left (le_of_not_gt h) _ },
4445
have : a ≤ a + (b + a * a) - a * a,
4546
{ rw nat.add_sub_assoc (nat.le_add_left _ _), apply nat.le_add_right },
4647
simp [unpair, ae, not_lt_of_ge this],
47-
rw [nat.add_sub_assoc, nat.add_sub_cancel, nat.add_sub_cancel_left],
48-
apply nat.le_add_left }
48+
show a + (b + a * a) - a * a - a = b,
49+
rw [nat.add_sub_assoc (nat.le_add_left _ _),
50+
nat.add_sub_cancel, nat.add_sub_cancel_left] }
4951
end
5052

5153
theorem unpair_lt_aux {n : nat} (n1 : n ≥ 1) : (unpair n).1 < n :=
@@ -58,7 +60,8 @@ let s := sqrt n in begin
5860
exact lt_of_le_of_lt h (nat.sub_lt_self n1 (mul_pos s0 s0)) }
5961
end
6062

61-
theorem unpair_lt (n : nat) : (unpair n).1 ≤ n :=
62-
by cases n; [exact dec_trivial, apply le_of_lt (unpair_lt_aux (nat.succ_pos _))]
63+
theorem unpair_lt : ∀ (n : nat), (unpair n).1 ≤ n
64+
| 0 := dec_trivial
65+
| (n+1) := le_of_lt (unpair_lt_aux (nat.succ_pos _))
6366

6467
end nat

0 commit comments

Comments
 (0)