Zulip Chat Archive

Stream: lean4

Topic: matching on `Char.ofNat`


Jovan Gerbscheid (Jan 20 2024 at 03:36):

I noticed that Char.ofNat is tagged as @[match_pattern], but if I actually try to match on it, I get an error:

#check match ' ' with
  | .ofNat 5 => true
  | _ => false

gives the error

tactic 'cases' failed, nested error:
tactic 'induction' failed, recursor 'Or.casesOn' can only eliminate into Prop
case mk.mk.mk.case_1
motive: Char  Sort ?u.2602
h_1: Unit 
  motive
    { val := { val := { val := 5, isLt := (_ : 5 < UInt32.size) } },
      valid := (_ : 5 < 55296  57343 < 5  5 < 1114112) }
h_2: (x : Char)  motive x
isLt: 5 < UInt32.size
valid: UInt32.isValidChar { val := { val := 5, isLt := isLt } }
 motive { val := { val := { val := 5, isLt := isLt } }, valid := valid }
 after processing
  (Char.mk (UInt32.mk (@Fin.mk 5 _)) _)
the dependent pattern matcher can solve the following kinds of equations
- <var> = <term> and <term> = <var>
- <term> = <term> where the terms are definitionally equal
- <constructor> = <constructor>, examples: List.cons x xs = List.cons y ys, and List.cons x xs = List.nil

Last updated: May 02 2025 at 03:31 UTC