При работе с Welder я столкнулся с ситуацией, когда мне нужно доказать, что:
если content(l1) == content(l2) и f является идемпотентным, ассоциативным и коммутативным оператором, то fold(f,z,l1) = fold(f,z,l2)
На одном этапе доказательства я хотел показать, что для списка l1 вида x::xs:
свернуть (f, z, без (x, xs)) == свернуть (f, z, без (x, l2))
Где with(x,.) удаляет вхождения x из списка. Поэтому ясно, что размер без (x, xs) меньше, чем размер x:: xs, и поэтому, если бы в Welder была разрешена сильная индукция, я должен был бы получить равенство (содержимое равно).
В настоящее время система просто говорит мне, что нет гипотез индукции для без (x, xs). Так как же сделать сильную индукцию на Welder?