Size: a a a

2020 April 25

AZ

Alex Zhukovsky in rust_offtopic
foldlRhs : (f : b -> a -> b) ->
          (init : b) ->
          (x : a) ->
          (xs : List a) ->
          foldl f init (xs ++ [x]) = f (foldl f init xs) x
foldlRhs f init x [] = Refl
foldlRhs f init x (y :: xs) = foldlRhs f (f init y) x xs

revCorrect : (xs : List a) ->
            (f : b -> a -> b) ->
            (init : b) ->
            foldl f init (revDumb xs) = foldr (flip f) init xs
revCorrect [] f init = Refl
revCorrect (x :: xs) f init = let rec = revCorrect xs f init in
                             rewrite sym rec in foldlRhs f init x (revDumb xs)
источник

G

Gymmasssorla in rust_offtopic
Alex Zhukovsky
foldlRhs : (f : b -> a -> b) ->
          (init : b) ->
          (x : a) ->
          (xs : List a) ->
          foldl f init (xs ++ [x]) = f (foldl f init xs) x
foldlRhs f init x [] = Refl
foldlRhs f init x (y :: xs) = foldlRhs f (f init y) x xs

revCorrect : (xs : List a) ->
            (f : b -> a -> b) ->
            (init : b) ->
            foldl f init (revDumb xs) = foldr (flip f) init xs
revCorrect [] f init = Refl
revCorrect (x :: xs) f init = let rec = revCorrect xs f init in
                             rewrite sym rec in foldlRhs f init x (revDumb xs)
а, это я видел
источник

G

Gymmasssorla in rust_offtopic
Alex Zhukovsky
foldlRhs : (f : b -> a -> b) ->
          (init : b) ->
          (x : a) ->
          (xs : List a) ->
          foldl f init (xs ++ [x]) = f (foldl f init xs) x
foldlRhs f init x [] = Refl
foldlRhs f init x (y :: xs) = foldlRhs f (f init y) x xs

revCorrect : (xs : List a) ->
            (f : b -> a -> b) ->
            (init : b) ->
            foldl f init (revDumb xs) = foldr (flip f) init xs
revCorrect [] f init = Refl
revCorrect (x :: xs) f init = let rec = revCorrect xs f init in
                             rewrite sym rec in foldlRhs f init x (revDumb xs)
я бы тоже не догадался через свёртки сделать, но я не понимаю почему он таким методом пошёл
источник

G

Gymmasssorla in rust_offtopic
типо это не очень интуитивно так верифицировать
источник

AZ

Alex Zhukovsky in rust_offtopic
по-моему норм
источник

AZ

Alex Zhukovsky in rust_offtopic
но только после олбъяснения)
источник

AZ

Alex Zhukovsky in rust_offtopic
это очень умно на самом деле
источник

AZ

Alex Zhukovsky in rust_offtopic
то что левая даёт то же что правая на развороте это очень умно
источник

AZ

Alex Zhukovsky in rust_offtopic
и вообще работает не только для списокв
источник

B

Bogdan in rust_offtopic
боже, как с этим бороться? если с чуваком на одинаковой позиции идшь и если начинаешь ему гворить про нейминг и опечатки — говрит что "доебываешься на ровном месте" ?)
источник

B

Bogdan in rust_offtopic
источник

G

Gymmasssorla in rust_offtopic
Alex Zhukovsky
то что левая даёт то же что правая на развороте это очень умно
ну хз, мне не понятно почему это удовлетворяет нашему интуитивному представлению о развороте списка
источник

AZ

Alex Zhukovsky in rust_offtopic
Полагаю для дерева доказать разворот куда сложнее
источник

B

Bogdan in rust_offtopic
иде  даеж подчеркивает, блин
источник

AZ

Alex Zhukovsky in rust_offtopic
А вот с таким легко для любого фолдабл, в том числе и дерева
источник

G

Gymmasssorla in rust_offtopic
можно было в принципе доказать что все операции на перевёрнутом списке дуальны соответствующим операциям на исходном
источник

AZ

Alex Zhukovsky in rust_offtopic
А какие ещё кроме фолда ты знаешь?
источник

G

Gymmasssorla in rust_offtopic
но что понимать под операциями. функции из стд? как то тупо
источник

G

Gymmasssorla in rust_offtopic
Alex Zhukovsky
А какие ещё кроме фолда ты знаешь?
например инволюцию
источник

AZ

Alex Zhukovsky in rust_offtopic
Это не операция)
источник