Zulip Chat Archive

Stream: lean4

Topic: proof golfing


Siddharth Bhat (Aug 20 2024 at 16:46):

theorem h (m : BitVec 64) (P : BitVec 64  Bool)
    (h : m  0x00000006 
         P 0x00000000 
         P 0x00000001 
         P 0x00000002 
         P 0x00000003 
         P 0x00000004 
         P 0x00000005 
         P 0x00000006) :
    P m := by
  obtain m, hm := m
  simp_all [BitVec.le_def]
  -- this proof is unfortunate, it's surely golfable,
  -- and one would hope that the automation would do better.
  obtain hm | hm | hm | hm | hm | hm | hm : m = 0  m = 1  m = 2  m = 3 
    m = 4  m = 5  m = 6 := by omega
  repeat (simp [hm] at h ⊢; simp [h])

Using only core Lean (no mathlib / batteries), is this proof golfable?

Kyle Miller (Aug 20 2024 at 17:01):

The only thing I can see is replacing the last line with all_goals subst_vars; simp_all.

Kyle Miller (Aug 20 2024 at 17:04):

You said no mathlib, but mathlib does have a tactic for that obtain.

theorem h (m : BitVec 64) (P : BitVec 64  Bool)
    (h : m  0x00000006 
         P 0x00000000 
         P 0x00000001 
         P 0x00000002 
         P 0x00000003 
         P 0x00000004 
         P 0x00000005 
         P 0x00000006) :
    P m := by
  obtain m, hm := m
  simp_all [BitVec.le_def]
  have := h.1
  -- Mathlib.Tactic.IntervalCases
  interval_cases m <;> simp_all

Last updated: May 02 2025 at 03:31 UTC