Продолжение monad является контрпример, который вы ищете. Я недостаточно осведомлен, чтобы предоставить полное доказательство, но я дам вам пару ссылок для поиска.
Идея состоит в том, что монады имеют понятие «ранг», связанное с ними. «Ранг» примерно означает количество операций, необходимых для обеспечения полной функциональности монады.
Я подозреваю, что, за исключением монадов с продолжением, все монады, с которыми мы имеем дело в Haskell, имеют ранг, например. Identity
, Maybe
, State s
, Either e
, ... и их комбинации через их трансформаторы. Например, Identity
не производится никакими операциями, Maybe
генерируется Nothing
, State s
по get
и put s
и Either e
по Left e
. (Возможно, это показывает, что они все на самом деле имеют конечный ранг, или, возможно, put s
рассчитывает как другая операцию для каждого s
, так State s
имеет ранг размера s
, я не уверен.)
Free монады конечно, имеют ранг, потому что Free f
явно генерируется операциями, закодированными f
.
Вот техническое определение ранга, но это не очень поучительно: http://journals.cambridge.org/action/displayAbstract?aid=4759448
Здесь вы можете увидеть утверждение о том, что продолжение монада не имеет ранг: http://www.cs.bham.ac.uk/~hxt/cw04/hyland.pdf. Я не уверен, как они это доказывают, но подразумевается, что монада продолжения не генерируется никаким набором операций и, следовательно, не может быть выражена как (частное) от свободной монады.
Надеюсь, кто-то может прийти и убрать мои технические возможности, но это структура доказательства, которую вы хотите.
может быть, вы должны переместить этот раздел информатики (https://scicomp.stackexchange.com/) - скорее всего, вы получите ответ там – Carsten
Но ' Писатель w' не изоморфен 'Free ((,) w)', а просто его частному. В конце концов, 'Writer w' * is *' ((,) w) '. Кроме того, 'Cont r' изоморфен частному' Free (Cont r) ', как я показал ниже. Можете ли вы уточнить дальше? –
@TomEllis Хорошая мысль, мне нужно подумать об этом. –