lean4-htt/tests/lean/run/issue10766.lean
Joachim Breitner 54a3fbf88f
fix: improve error message when decide +kernel fails (#10780)
This PR improves the error message when `decide +kernel` fails in the
kernel, but not the elaborator. Fixes #10766.
2025-10-15 07:11:27 +00:00

39 lines
2.1 KiB
Text

noncomputable def powMod (a b n : Nat) : Nat :=
aux (b + 1) (a.mod n) b 1
where
aux : Nat → ((a b c : Nat) → Nat) :=
Nat.rec (fun _ _ _ => 0)
(fun _ r a b c =>
(b.beq 0).rec
(((b.mod 2).beq 0).rec
(r ((a.mul a).mod n) (b.div 2) ((a.mul c).mod n))
(r ((a.mul a).mod n) (b.div 2) c))
(c.mod n))
def x : Nat := 127780414391497973212171930170926986757577048484820926201064729783485263494817422495127775983679039078116803697168137524940219819335799478153348592755198599590903607242050230924443865709697486743641039970666450337071378658828331722728467720393963808366917988956767802913905167890490075236068196363700359481304279948916896583006686025357237170212018946813663108217900835975808683160984117514866915965161953626338070145596982334808959718966160701183250747572515090867613655044807172211728519357721287835503689517292364425608325467094686443862517374850243698013720305871319056887431952190952721719757200172695537054790570648290887720009455171821568413052107356003828041937567129362866696549587422369864562815134637684140271767482353107080370450890024342225936273158281477009232714640818424893445193089479459814572594522258577931514012256573162006292678354475638319009668319255772179069845291474717503333030909793536116894869761453687330048252587304656806182949368202671739705463406846852567720022377005763291104588535681445561286808586673846016527511475331939430139687698419185010117348285933672139833826832898565919546377321517928825162277951756632134321102813522053716838646284289
set_option maxRecDepth 20000
/--
error: Tactic `decide` failed. The elaborator is able to reduce the `Decidable` instance, but the kernel fails with:
(kernel) deep recursion detected
-/
#guard_msgs in
example : powMod 2 (x - 1) x = 1 := by decide +kernel
/-- error: (kernel) deep recursion detected -/
#guard_msgs in
example : powMod 2 (x - 1) x = 1 := by decide
/-- error: (kernel) deep recursion detected -/
#guard_msgs in
example : powMod 2 (x - 1) x = 1 := by rfl
set_option debug.skipKernelTC true
#guard_msgs in
example : powMod 2 (x - 1) x = 1 := by decide
#guard_msgs in
example : powMod 2 (x - 1) x = 1 := by rfl