Using `Nat.lt_trans` is too restrictive, and using `Nat.lt_of_lt_of_le` should make this tactic prove more goals. This fixes a regression probably introduced by #3991; at least in some cases before that `apply sizeOf_get` would have solved the goal here. And it’s true that this is now subsumed by `simp`, but because of the order that `macro_rules` are tried, the too restrictive variant with `Nat.lt_trans` would be tried before `simp`, without backtracking. Fixes #5027
16 lines
488 B
Text
16 lines
488 B
Text
inductive Term (α: Type): Type where
|
||
| Composite : Array (Term α) → Term α
|
||
| Atom: α → Term α
|
||
|
||
-- height of a term
|
||
def height (f: Term α): Nat :=
|
||
let rec max_height (a: Array (Term α)) (i: Nat) (m: Nat): Nat :=
|
||
if h: i < a.size then
|
||
-- The recusive call to height used to fail because of a too weak
|
||
-- array_get_dec
|
||
max_height a (i + 1) (max (height a[i]) m)
|
||
else
|
||
m
|
||
match f with
|
||
| .Composite a => 1 + max_height a 0 0
|
||
| .Atom _ => 1
|