lean4-htt/tests/lean/run/mutwf4.lean
2021-10-06 17:33:51 -07:00

32 lines
667 B
Text

set_option trace.Elab.definition.wf true in
mutual
def f : Nat → Bool → Nat
| n, true => 2 * f n false
| 0, false => 1
| n, false => n + g n
def g (n : Nat) : Nat :=
if h : n ≠ 0 then
f (n-1) true
else
n
end
termination_by
invImage
(fun
| Sum.inl ⟨n, true⟩ => (n, 2)
| Sum.inl ⟨n, false⟩ => (n, 1)
| Sum.inr n => (n, 0))
$ Prod.lex sizeOfWFRel sizeOfWFRel
decreasing_by
simp [invImage, InvImage, Prod.lex, sizeOfWFRel, measure, Nat.lt_wfRel]
first
| apply Prod.Lex.left
apply Nat.pred_lt
assumption
| apply Prod.Lex.right
decide
#print f
#print g
#print f._unary._mutual