lean4-htt/tests/lean/run/decide_cbv1.lean
Wojciech Różowski 833434cd56
feat: add warning for cbv and decide_cbv tactics (#12601)
This PR adds a warning when using `cbv` or `decide_cbv` in tactic mode,
matching the existing warning in conv mode
(`src/Lean/Elab/Tactic/Conv/Cbv.lean`). The warning informs users that
these tactics are experimental and still under development. It can be
disabled with `set_option cbv.warning false`.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 22:47:01 +00:00

34 lines
927 B
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Std
set_option cbv.warning false
example : 1 ∈ [1,2,3] := by decide_cbv
example : 123482349 < 293849023490238490 := by decide_cbv
example : 3 ∈ (Std.TreeSet.empty.insertMany [1,2,3,4,5] : Std.TreeSet Nat) := by decide_cbv
def minFacAux (n : Nat) : Nat → Nat
| k =>
if h : n < k * k then n
else
if h' : k n then k
else
have : k ≤ n := by have := Nat.le_mul_self k; omega
minFacAux n (k + 2)
termination_by k => n + 2 - k
def Nat.minFac (n : Nat) : Nat :=
if 2 n then 2 else minFacAux n 3
def Nat.log (b n : Nat) : Nat :=
if b ≤ 1 then 0 else (go b n).2 where
go : Nat → Nat → Nat × Nat
| _, 0 => (n, 0)
| b, fuel + 1 =>
if n < b then
(n, 0)
else
let (q, e) := go (b * b) fuel
if q < b then (q, 2 * e) else (q / b, 2 * e + 1)
example : ¬∃ k, k ≤ Nat.log 2 15 ∧ 0 < k ∧ 15 = Nat.minFac 15 ^ k := by decide_cbv