lean4-htt/tests/lean/run/discrTreeKey.lean
2025-09-22 12:47:11 +00:00

93 lines
2 KiB
Text

import Init.Data.Nat.Basic
import Init.Data.List.Lemmas
/-!
This file provides examples of use of the commands #discr_tree_key and #discr_tree_simp_key
and guards against any breakage of the commands.
-/
universe u
open Nat List
/-!
We can produce `simp` keys for theorems of the form `=`, `↔`, `¬`, and `≠` by supplying the name
of the declaration.
-/
#check Nat.mul_one
/-- info: @HMul.hMul Nat Nat Nat _ _ 1 -/
#guard_msgs in
#discr_tree_simp_key Nat.mul_one
#check Nat.not_le
/-- info: Not (@LE.le Nat _ _ _) -/
#guard_msgs in
#discr_tree_simp_key Nat.not_le
#check and_not_self
/-- info: And _ (Not _) -/
#guard_msgs in
#discr_tree_simp_key and_not_self
#check Nat.add_one_ne_zero
/-- info: @Eq Nat _ 0 -/
#guard_msgs in
#discr_tree_simp_key Nat.add_one_ne_zero
#check zero_le
#discr_tree_simp_key zero_le
#check succ_eq_add_one
#discr_tree_simp_key succ_eq_add_one
#check Nat.pred_succ
#discr_tree_simp_key Nat.pred_succ
#check getElem?_nil
#discr_tree_simp_key getElem?_nil
#check or_cons
#discr_tree_simp_key or_cons
#check not_mem_nil
#discr_tree_simp_key not_mem_nil
#check mem_cons
#discr_tree_simp_key mem_cons
#check singleton_append
#discr_tree_simp_key singleton_append
#check append_nil
#discr_tree_simp_key append_eq_nil_iff
#check mapM_nil
#discr_tree_simp_key mapM_nil
/-!
We can produce keys for a general declarations by name using the default configuration
for generating keys.
-/
#check Nat.instIdempotentOpGcd
#discr_tree_key Nat.instIdempotentOpGcd
#check List.instDecidableMemOfLawfulBEq
#discr_tree_key List.instDecidableMemOfLawfulBEq
#check List.instForIn'InferInstanceMembership
#discr_tree_key List.instForIn'InferInstanceMembership
/-!
We can also specify a term directly.
-/
def bar (_ _ : Nat) : Nat := default
#discr_tree_key (∀ {a n : Nat}, bar a (OfNat.ofNat n) = default)
#discr_tree_simp_key (∀ {a n : Nat}, bar a (no_index (OfNat.ofNat n)) = default)
#discr_tree_simp_key (∀ m : Nat, ∃ n : Nat, m ≠ n)
#discr_tree_simp_key (∀ m : Nat, m > 0 → m ≠ 0)