inductive S :: "alpha list ⇒ bool" where
empty : "S []" |
step1 : "S w ⟹ S (a # w @ [b])" |
step2 : "⟦S w1; S w2⟧ ⟹ S (w1 @ w2)"
inductive T :: "alpha list ⇒ bool" where
empty : "T []" |
step : "⟦T w1; T w2⟧ ⟹ T (w1 @ [a] @ w2 @ [b])"
fun balanced :: "nat ⇒ alpha list ⇒ bool" where
"balanced 0 w = S w" |
"balanced (Suc 0) w = S (a # w)" |
"(balanced n w = S (a # m @ w)) ⟹ (balanced (Suc n) w = S (a # a # m @ w))"
我正在尝试编写一个函数balanced
,以便balanced n w
当且仅当S (an @ w)
列表包含n
相同字母列表的数量时才是正确的。对于函数的第三个方程,"(balanced n w = S (a # m @ w)) ⟹ (balanced (Suc n) w = S (a # a # m @ w))"
我得到错误“变量“m”仅出现在右侧:”即使m
左侧有。我能想到的唯一解决方案是以另一种方式编写函数,但目前无法想到如何。