anton-k / ru-haskell-book

учебник по Haskell
Other
274 stars 24 forks source link

Неправильное определение группы для Bool #97

Open anton-k opened 4 years ago

anton-k commented 4 years ago

Антон, здравствуйте! Подскажите, пожалуйста, если не затруднит. Не очень понятен момент из книги

instance Group Bool where e = True (+) a b = and a b inv a = not a

На самом деле приведённое выше определение экземпляра для Group не верно, хотя по типам оно подходит. Оно не верно как раз из-за нарушения свойств. Для группы необходимо, чтобы для любого a выполнялось: inv a + a == e - почему необходимо, чтобы выполнялось это условие?

С наилучшими пожеланиями

через email

ulysses4ever commented 4 years ago

a + a == e

На самом деле, a + inv a = e, но это тоже не выполняется. Если в определении + заменить and на or, то вроде нормально. Другой вариант: заменить определение e на False. Вроде тоже можно.

nponeccop commented 3 years ago

Для группы необходимо, чтобы для любого a выполнялось: inv a + a == e - почему необходимо, чтобы выполнялось это условие?

По определению группы, 3й пункт на скриншоте:

https://en.wikipedia.org/wiki/Group_(mathematics)

image

Но конечно не выполняется - для False нет обратного. False не обратный потому что False && False == False != True; True не обратный для False потому что True && False != True

Так что там только моноид.