Skip to content

Commit 4764a22

Browse files
committed
chore: Use the nat_lit elaborator more (#28666)
Also replace some `show`s working around Qq with `=Q`. This code was already using Qq, so we may as well use the consistent spelling here.
1 parent c4e5d83 commit 4764a22

11 files changed

Lines changed: 35 additions & 37 deletions

File tree

Mathlib/Tactic/ModCases.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ def modCases (h : TSyntax `Lean.binderIdent) (e : Q(ℤ)) (n : ℕ) : TacticM Un
8181
let ⟨u, p, g⟩ ← inferTypeQ (.mvar (← getMainGoal))
8282
have lit : Q(ℕ) := mkRawNatLit n
8383
have p₁ : Nat.ble 1 $lit =Q true := ⟨⟩
84-
let (p₂, gs) ← proveOnModCases lit e (mkRawNatLit 0) p
84+
let (p₂, gs) ← proveOnModCases lit e q(nat_lit 0) p
8585
let gs ← gs.mapM fun g => do
8686
let (fvar, g) ← match h with
8787
| `(binderIdent| $n:ident) => g.intro n.getId
@@ -156,7 +156,7 @@ def modCases (h : TSyntax `Lean.binderIdent) (e : Q(ℕ)) (n : ℕ) : TacticM Un
156156
let ⟨u, p, g⟩ ← inferTypeQ (.mvar (← getMainGoal))
157157
have lit : Q(ℕ) := mkRawNatLit n
158158
let p₁ : Q(Nat.ble 1 $lit = true) := (q(Eq.refl true) : Expr)
159-
let (p₂, gs) ← proveOnModCases lit e (mkRawNatLit 0) p
159+
let (p₂, gs) ← proveOnModCases lit e q(nat_lit 0) p
160160
let gs ← gs.mapM fun g => do
161161
let (fvar, g) ← match h with
162162
| `(binderIdent| $n:ident) => g.intro n.getId

Mathlib/Tactic/NormNum/Basic.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,15 @@ theorem isNat_zero (α) [AddMonoidWithOne α] : IsNat (Zero.zero : α) (nat_lit
4343
@[norm_num Zero.zero] def evalZero : NormNumExt where eval {u α} e := do
4444
let sα ← inferAddMonoidWithOne α
4545
match e with
46-
| ~q(Zero.zero) => return .isNat sα (mkRawNatLit 0) q(isNat_zero $α)
46+
| ~q(Zero.zero) => return .isNat sα q(nat_lit 0) q(isNat_zero $α)
4747

4848
theorem isNat_one (α) [AddMonoidWithOne α] : IsNat (One.one : α) (nat_lit 1) := ⟨Nat.cast_one.symm⟩
4949

5050
/-- The `norm_num` extension which identifies the expression `One.one`, returning `1`. -/
5151
@[norm_num One.one] def evalOne : NormNumExt where eval {u α} e := do
5252
let sα ← inferAddMonoidWithOne α
5353
match e with
54-
| ~q(One.one) => return .isNat sα (mkRawNatLit 1) q(isNat_one $α)
54+
| ~q(One.one) => return .isNat sα q(nat_lit 1) q(isNat_one $α)
5555

5656
theorem isNat_ofNat (α : Type u) [AddMonoidWithOne α] {a : α} {n : ℕ}
5757
(h : n = a) : IsNat a n := ⟨h.symm⟩

Mathlib/Tactic/NormNum/BigOperators.lean

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -392,9 +392,8 @@ partial def evalFinsetSum : NormNumExt where eval {u β} e := do
392392
have f : Q($α → $β) := f
393393
let instCS : Q(CommSemiring $β) ← synthInstanceQ q(CommSemiring $β) <|>
394394
throwError "not a commutative semiring: {β}"
395-
let n : Q(ℕ) := mkRawNatLit 0
396-
let pf : Q(IsNat (Finset.sum ∅ $f) $n) := q(@Finset.sum_empty $β $α $instCS $f)
397-
let res_empty := Result.isNat _ n pf
395+
let pf : Q(IsNat (Finset.sum ∅ $f) (nat_lit 0)) := q(@Finset.sum_empty $β $α $instCS $f)
396+
let res_empty := Result.isNat _ _ q($pf)
398397

399398
evalFinsetBigop q(Finset.sum) f res_empty (fun {a s' h} res_fa res_sum_s' ↦ do
400399
let fa : Q($β) := Expr.app f a

Mathlib/Tactic/NormNum/GCD.lean

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -92,10 +92,10 @@ theorem isInt_lcm : {x y nx ny : ℤ} → {z : ℕ} →
9292
and an equality proof. Panics if `ex` or `ey` aren't natural number literals. -/
9393
def proveNatGCD (ex ey : Q(ℕ)) : (ed : Q(ℕ)) × Q(Nat.gcd $ex $ey = $ed) :=
9494
match ex.natLit!, ey.natLit! with
95-
| 0, _ => show (ed : Q(ℕ)) × Q(Nat.gcd 0 $ey = $ed) from ⟨ey, q(Nat.gcd_zero_left $ey)⟩
96-
| _, 0 => show (ed : Q(ℕ)) × Q(Nat.gcd $ex 0 = $ed) from ⟨ex, q(Nat.gcd_zero_right $ex)⟩
97-
| 1, _ => show (ed : Q(ℕ)) × Q(Nat.gcd 1 $ey = $ed) from ⟨mkRawNatLit 1, q(Nat.gcd_one_left $ey)⟩
98-
| _, 1 => show (ed : Q(ℕ)) × Q(Nat.gcd $ex 1 = $ed) from ⟨mkRawNatLit 1, q(Nat.gcd_one_right $ex)⟩
95+
| 0, _ => have : $ex =Q nat_lit 0 := ⟨⟩; ⟨ey, q(Nat.gcd_zero_left $ey)⟩
96+
| _, 0 => have : $ey =Q nat_lit 0 := ⟨⟩; ⟨ex, q(Nat.gcd_zero_right $ex)⟩
97+
| 1, _ => have : $ex =Q nat_lit 1 := ⟨⟩; ⟨q(nat_lit 1), q(Nat.gcd_one_left $ey)⟩
98+
| _, 1 => have : $ey =Q nat_lit 1 := ⟨⟩; ⟨q(nat_lit 1), q(Nat.gcd_one_right $ex)⟩
9999
| x, y =>
100100
let (d, a, b) := Nat.xgcdAux x 1 0 y 0 1
101101
if d = x then
@@ -110,10 +110,10 @@ def proveNatGCD (ex ey : Q(ℕ)) : (ed : Q(ℕ)) × Q(Nat.gcd $ex $ey = $ed) :=
110110
if d = 1 then
111111
if a ≥ 0 then
112112
have pt : Q($ex * $ea' = $ey * $eb' + 1) := (q(Eq.refl ($ex * $ea')) : Expr)
113-
mkRawNatLit 1, q(nat_gcd_helper_2' $ex $ey $ea' $eb' $pt)⟩
113+
q(nat_lit 1), q(nat_gcd_helper_2' $ex $ey $ea' $eb' $pt)⟩
114114
else
115115
have pt : Q($ey * $eb' = $ex * $ea' + 1) := (q(Eq.refl ($ey * $eb')) : Expr)
116-
mkRawNatLit 1, q(nat_gcd_helper_1' $ex $ey $ea' $eb' $pt)⟩
116+
q(nat_lit 1), q(nat_gcd_helper_1' $ex $ey $ea' $eb' $pt)⟩
117117
else
118118
have ed : Q(ℕ) := mkRawNatLit d
119119
have pu : Q(Nat.mod $ex $ed = 0) := (q(Eq.refl (nat_lit 0)) : Expr)
@@ -142,9 +142,9 @@ and an equality proof. Panics if `ex` or `ey` aren't natural number literals. -/
142142
def proveNatLCM (ex ey : Q(ℕ)) : (ed : Q(ℕ)) × Q(Nat.lcm $ex $ey = $ed) :=
143143
match ex.natLit!, ey.natLit! with
144144
| 0, _ =>
145-
show (ed : Q(ℕ)) × Q(Nat.lcm 0 $ey = $ed) frommkRawNatLit 0, q(Nat.lcm_zero_left $ey)⟩
145+
show (ed : Q(ℕ)) × Q(Nat.lcm 0 $ey = $ed) fromq(nat_lit 0), q(Nat.lcm_zero_left $ey)⟩
146146
| _, 0 =>
147-
show (ed : Q(ℕ)) × Q(Nat.lcm $ex 0 = $ed) frommkRawNatLit 0, q(Nat.lcm_zero_right $ex)⟩
147+
show (ed : Q(ℕ)) × Q(Nat.lcm $ex 0 = $ed) fromq(nat_lit 0), q(Nat.lcm_zero_right $ex)⟩
148148
| 1, _ => show (ed : Q(ℕ)) × Q(Nat.lcm 1 $ey = $ed) from ⟨ey, q(Nat.lcm_one_left $ey)⟩
149149
| _, 1 => show (ed : Q(ℕ)) × Q(Nat.lcm $ex 1 = $ed) from ⟨ex, q(Nat.lcm_one_right $ex)⟩
150150
| x, y =>

Mathlib/Tactic/NormNum/NatFib.lean

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@ theorem isFibAux_two_mul_add_one {n a b n' a' b' : ℕ} (H : IsFibAux n a b)
4242
partial def proveNatFibAux (en' : Q(ℕ)) : (ea' eb' : Q(ℕ)) × Q(IsFibAux $en' $ea' $eb') :=
4343
match en'.natLit! with
4444
| 0 =>
45-
show (ea' eb' : Q(ℕ)) × Q(IsFibAux 0 $ea' $eb') from
46-
mkRawNatLit 0, mkRawNatLit 1, q(isFibAux_zero)⟩
45+
have : $en' =Q nat_lit 0 := ⟨⟩;
46+
q(nat_lit 0), q(nat_lit 1), q(isFibAux_zero)⟩
4747
| 1 =>
48-
show (ea' eb' : Q(ℕ)) × Q(IsFibAux 1 $ea' $eb') from
49-
mkRawNatLit 1, mkRawNatLit 1, q(isFibAux_one)⟩
48+
have : $en' =Q nat_lit 1 := ⟨⟩;
49+
q(nat_lit 1), q(nat_lit 1), q(isFibAux_one)⟩
5050
| n' =>
5151
have en : Q(ℕ) := mkRawNatLit <| n' / 2
5252
let ⟨ea, eb, H⟩ := proveNatFibAux en
@@ -79,9 +79,9 @@ theorem isFibAux_two_mul_add_one_done {n a b n' a' : ℕ} (H : IsFibAux n a b)
7979
and an equality proof. Panics if `ex` isn't a natural number literal. -/
8080
def proveNatFib (en' : Q(ℕ)) : (em : Q(ℕ)) × Q(Nat.fib $en' = $em) :=
8181
match en'.natLit! with
82-
| 0 => show (em : Q(ℕ)) × Q(Nat.fib 0 = $em) from ⟨mkRawNatLit 0, q(Nat.fib_zero)⟩
83-
| 1 => show (em : Q(ℕ)) × Q(Nat.fib 1 = $em) from ⟨mkRawNatLit 1, q(Nat.fib_one)⟩
84-
| 2 => show (em : Q(ℕ)) × Q(Nat.fib 2 = $em) from ⟨mkRawNatLit 1, q(Nat.fib_two)⟩
82+
| 0 => have : $en' =Q nat_lit 0 := ⟨⟩; ⟨q(nat_lit 0), q(Nat.fib_zero)⟩
83+
| 1 => have : $en' =Q nat_lit 1 := ⟨⟩; ⟨q(nat_lit 1), q(Nat.fib_one)⟩
84+
| 2 => have : $en' =Q nat_lit 2 := ⟨⟩; ⟨q(nat_lit 1), q(Nat.fib_two)⟩
8585
| n' =>
8686
have en : Q(ℕ) := mkRawNatLit <| n' / 2
8787
let ⟨ea, eb, H⟩ := proveNatFibAux en

Mathlib/Tactic/NormNum/NatLog.lean

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,12 @@ Panics if `ex` or `en` aren't natural number literals.
3939
-/
4040
def proveNatLog (eb en : Q(ℕ)) : (ek : Q(ℕ)) × Q(Nat.log $eb $en = $ek) :=
4141
match eb.natLit!, en.natLit! with
42-
| 0, _ => show (ek : Q(ℕ)) × Q(Nat.log 0 $en = $ek) from ⟨mkRawNatLit 0, q(nat_log_zero $en)⟩
43-
| 1, _ => show (ek : Q(ℕ)) × Q(Nat.log 1 $en = $ek) from ⟨mkRawNatLit 0, q(nat_log_one $en)⟩
42+
| 0, _ => have : $eb =Q nat_lit 0 := ⟨⟩; ⟨q(nat_lit 0), q(nat_log_zero $en)⟩
43+
| 1, _ => have : $eb =Q nat_lit 1 := ⟨⟩; ⟨q(nat_lit 0), q(nat_log_one $en)⟩
4444
| b, n =>
4545
if n < b then
4646
have hh : Q(Nat.blt $en $eb = true) := (q(Eq.refl true) : Expr)
47-
mkRawNatLit 0, q(nat_log_helper0 $eb $en $hh)⟩
47+
q(nat_lit 0), q(nat_log_helper0 $eb $en $hh)⟩
4848
else
4949
let k := Nat.log b n
5050
have ek : Q(ℕ) := mkRawNatLit k
@@ -92,10 +92,10 @@ def proveNatClog (eb en : Q(ℕ)) : (ek : Q(ℕ)) × Q(Nat.clog $eb $en = $ek) :
9292
let n := en.natLit!
9393
if _ : b ≤ 1 then
9494
have h : Q(Nat.ble $eb 1 = true) := reflBoolTrue
95-
mkRawNatLit 0, q(nat_clog_zero_left $eb $en $h)⟩
95+
q(nat_lit 0), q(nat_clog_zero_left $eb $en $h)⟩
9696
else if _ : n ≤ 1 then
9797
have h : Q(Nat.ble $en 1 = true) := reflBoolTrue
98-
mkRawNatLit 0, q(nat_clog_zero_right $eb $en $h)⟩
98+
q(nat_lit 0), q(nat_clog_zero_right $eb $en $h)⟩
9999
else
100100
match h : Nat.clog b n with
101101
| 0 => False.elim <|

Mathlib/Tactic/NormNum/NatSqrt.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ theorem isNat_sqrt : {x nx z : ℕ} → IsNat x nx → Nat.sqrt nx = z → IsNat
2929
and an equality proof. Panics if `ex` isn't a natural number literal. -/
3030
def proveNatSqrt (ex : Q(ℕ)) : (ey : Q(ℕ)) × Q(Nat.sqrt $ex = $ey) :=
3131
match ex.natLit! with
32-
| 0 => show (ey : Q(ℕ)) × Q(Nat.sqrt 0 = $ey) from ⟨mkRawNatLit 0, q(Nat.sqrt_zero)⟩
33-
| 1 => show (ey : Q(ℕ)) × Q(Nat.sqrt 1 = $ey) from ⟨mkRawNatLit 1, q(Nat.sqrt_one)⟩
32+
| 0 => have : $ex =Q nat_lit 0 := ⟨⟩; ⟨q(nat_lit 0), q(Nat.sqrt_zero)⟩
33+
| 1 => have : $ex =Q nat_lit 1 := ⟨⟩; ⟨q(nat_lit 1), q(Nat.sqrt_one)⟩
3434
| x =>
3535
let y := Nat.sqrt x
3636
have ey : Q(ℕ) := mkRawNatLit y

Mathlib/Tactic/NormNum/Pow.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ partial def evalNatPow (a b : Q(ℕ)) : (c : Q(ℕ)) × Q(Nat.pow $a $b = $c) :=
7575
haveI : $b =Q 1 := ⟨⟩
7676
⟨a, q(natPow_one)⟩
7777
else
78-
let ⟨c, p⟩ := go b.natLit!.log2 a (mkRawNatLit 1) a b _ .rfl
78+
let ⟨c, p⟩ := go b.natLit!.log2 a q(nat_lit 1) a b _ .rfl
7979
⟨c, q(($p).run)⟩
8080
where
8181
/-- Invariants: `a ^ b₀ = c₀`, `depth > 0`, `b >>> depth = b₀`, `p := Nat.pow $a $b₀ = $c₀` -/

Mathlib/Tactic/NormNum/PowMod.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ partial def evalNatPowMod (a b m : Q(ℕ)) : (c : Q(ℕ)) × Q(Nat.mod (Nat.pow
9494
else
9595
have c₀ : Q(ℕ) := mkRawNatLit (a.natLit! % m.natLit!)
9696
haveI : $c₀ =Q Nat.mod $a $m := ⟨⟩
97-
let ⟨c, p⟩ := go b.natLit!.log2 a m (mkRawNatLit 1) c₀ b _ .rfl
97+
let ⟨c, p⟩ := go b.natLit!.log2 a m q(nat_lit 1) c₀ b _ .rfl
9898
⟨c, q(($p).run)⟩
9999
where
100100
/-- Invariants: `a ^ b₀ % m = c₀`, `depth > 0`, `b >>> depth = b₀` -/

Mathlib/Tactic/Ring/Basic.lean

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -596,9 +596,8 @@ def evalNegProd {a : Q($α)} (rα : Q(Ring $α)) (va : ExProd sα a) :
596596
Lean.Core.checkSystem decl_name%.toString
597597
match va with
598598
| .const za ha =>
599-
let lit : Q(ℕ) := mkRawNatLit 1
600599
let ⟨m1, _⟩ := ExProd.mkNegNat sα rα 1
601-
let rm := Result.isNegNat rα lit (q(IsInt.of_raw $α (.negOfNat $lit)) : Expr)
600+
let rm := Result.isNegNat rα q(nat_lit 1) (q(IsInt.of_raw $α (.negOfNat (nat_lit 1))) : Expr)
602601
let ra := Result.ofRawRat za a ha
603602
let rb ← NormNum.evalMul.core q($m1 * $a) q(HMul.hMul) _ _
604603
q(CommSemiring.toSemiring) rm ra

0 commit comments

Comments
 (0)