@@ -37,19 +37,18 @@ open order
37
37
namespace ordinal
38
38
39
39
/-- Inducts on the base `b` expansion of an ordinal. -/
40
- @[elab_as_eliminator] noncomputable def CNF_rec { b : ordinal} (hb : b ≠ 0 )
40
+ @[elab_as_eliminator] noncomputable def CNF_rec ( b : ordinal)
41
41
{C : ordinal → Sort *} (H0 : C 0 ) (H : ∀ o, o ≠ 0 → C (o % b ^ log b o) → C o) : ∀ o, C o
42
42
| o :=
43
43
if ho : o = 0 then by rwa ho else
44
- have _, from mod_opow_log_lt_self hb ho,
45
- H o ho (CNF_rec (o % b ^ log b o))
44
+ let hwf := mod_opow_log_lt_self b ho in H o ho (CNF_rec (o % b ^ log b o))
46
45
using_well_founded {dec_tac := `[assumption]}
47
46
48
- @[simp] theorem CNF_rec_zero {b} (hb) { C H0 H} : @CNF_rec b hb C H0 H 0 = H0 :=
47
+ @[simp] theorem CNF_rec_zero {b C H0 H} : @CNF_rec b C H0 H 0 = H0 :=
49
48
by rw [CNF_rec, dif_pos rfl]; refl
50
49
51
- @[simp] theorem CNF_rec_ne_zero {b} (hb) { C H0 H o} (ho) :
52
- @CNF_rec b hb C H0 H o = H o ho (@CNF_rec b hb C H0 H _) :=
50
+ @[simp] theorem CNF_rec_ne_zero {b C H0 H o} (ho) :
51
+ @CNF_rec b C H0 H o = H o ho (@CNF_rec b C H0 H _) :=
53
52
by rw [CNF_rec, dif_neg ho]
54
53
55
54
/-- The Cantor normal form of an ordinal `o` is the list of coefficients and exponents in the
@@ -60,18 +59,18 @@ We special-case `CNF 0 o = []`, `CNF b 0 = []`, and `CNF 1 o = [(0, o)]` for `o
60
59
`CNF b (b ^ u₁ * v₁ + b ^ u₂ * v₂) = [(u₁, v₁), (u₂, v₂)]` -/
61
60
@[pp_nodot] def CNF (b o : ordinal) : list (ordinal × ordinal) :=
62
61
if hb : b = 0 then [] else
63
- CNF_rec hb [] (λ o o0 IH, (log b o, o / b ^ log b o) :: IH) o
62
+ CNF_rec b [] (λ o o0 IH, (log b o, o / b ^ log b o) :: IH) o
64
63
65
64
@[simp] theorem zero_CNF (o) : CNF 0 o = [] :=
66
65
dif_pos rfl
67
66
68
67
@[simp] theorem CNF_zero (b) : CNF b 0 = [] :=
69
- if hb : b = 0 then dif_pos hb else (dif_neg hb).trans $ CNF_rec_zero _
68
+ if hb : b = 0 then dif_pos hb else (dif_neg hb).trans CNF_rec_zero
70
69
71
70
/-- Recursive definition for the Cantor normal form. -/
72
71
theorem CNF_ne_zero {b o : ordinal} (hb : b ≠ 0 ) (ho : o ≠ 0 ) :
73
72
CNF b o = (log b o, o / b ^ log b o) :: CNF b (o % b ^ log b o) :=
74
- by unfold CNF; rw [dif_neg hb, dif_neg hb, CNF_rec_ne_zero hb ho]
73
+ by unfold CNF; rw [dif_neg hb, dif_neg hb, CNF_rec_ne_zero ho]
75
74
76
75
@[simp] theorem one_CNF {o : ordinal} (ho : o ≠ 0 ) : CNF 1 o = [(0 , o)] :=
77
76
by rw [CNF_ne_zero ordinal.one_ne_zero ho, log_of_not_one_lt_left (irrefl _), opow_zero, mod_one,
@@ -80,7 +79,7 @@ by rw [CNF_ne_zero ordinal.one_ne_zero ho, log_of_not_one_lt_left (irrefl _), op
80
79
/-- Evaluating the Cantor normal form of an ordinal returns the ordinal. -/
81
80
theorem CNF_foldr {b : ordinal} (hb : b ≠ 0 ) (o) :
82
81
(CNF b o).foldr (λ p r, b ^ p.1 * p.2 + r) 0 = o :=
83
- CNF_rec hb (by rw CNF_zero; refl)
82
+ CNF_rec b (by rw CNF_zero; refl)
84
83
(λ o ho IH, by rw [CNF_ne_zero hb ho, list.foldr_cons, IH, div_add_mod]) o
85
84
86
85
/-- This theorem exists to factor out commonalities between the proofs of `ordinal.CNF_pairwise` and
@@ -91,12 +90,12 @@ begin
91
90
by_cases hb : b = 0 ,
92
91
{ simp only [hb, zero_CNF, list.pairwise.nil, and_true], exact λ _, false.elim },
93
92
cases lt_or_eq_of_le (one_le_iff_ne_zero.2 hb) with hb' hb',
94
- { refine CNF_rec hb _ _ o,
93
+ { refine CNF_rec b _ _ o,
95
94
{ simp only [CNF_zero, list.pairwise.nil, and_true], exact λ _, false.elim },
96
95
intros o ho IH, cases IH with IH₁ IH₂,
97
96
simp only [CNF_ne_zero hb ho, list.forall_mem_cons, list.pairwise_cons, IH₂, and_true],
98
97
refine ⟨⟨le_rfl, λ p m, _⟩, λ p m, _⟩,
99
- { exact (IH₁ p m).trans (log_mono_right _ $ le_of_lt $ mod_opow_log_lt_self hb ho) },
98
+ { exact (IH₁ p m).trans (log_mono_right _ $ le_of_lt $ mod_opow_log_lt_self b ho) },
100
99
{ refine (IH₁ p m).trans_lt ((lt_opow_iff_log_lt hb' _).1 _),
101
100
{ intro e,
102
101
rw e at m, simpa only [CNF_zero] using m },
@@ -128,7 +127,7 @@ private theorem CNF_snd_lt_aux {b o : ordinal.{u}} (hb' : 1 < b) :
128
127
∀ {p : ordinal × ordinal}, p ∈ CNF b o → p.2 < b ∧ 0 < p.2 :=
129
128
begin
130
129
have hb := (zero_lt_one.trans hb').ne',
131
- refine CNF_rec hb (λ _, by { rw CNF_zero, exact false.elim }) (λ o ho IH, _) o,
130
+ refine CNF_rec b (λ _, by { rw CNF_zero, exact false.elim }) (λ o ho IH, _) o,
132
131
simp only [CNF_ne_zero hb ho, list.mem_cons_iff, forall_eq_or_imp, iff_true_intro @IH, and_true],
133
132
nth_rewrite 1 ←@succ_le_iff,
134
133
rw [div_lt (opow_ne_zero _ hb), ←opow_succ, le_div (opow_ne_zero _ hb), succ_zero, mul_one],
0 commit comments