Size: a a a

2020 November 08

BT

Bayram Tagiev in 2ch /pr/ 🎃
Shy-тан
Ну sub 0 m тождественно 0
Вот
источник

S

Shy-тан in 2ch /pr/ 🎃
Муравей
Если мы о нат числах
Почему?
источник

BT

Bayram Tagiev in 2ch /pr/ 🎃
Муравей
Это вообще не имеющее смысла выражение
Почему же
источник

BT

Bayram Tagiev in 2ch /pr/ 🎃
Эти два тоже доказуемы
источник

М

Муравей in 2ch /pr/ 🎃
Ну ты не можешь из 3 зайцев убить 5
источник

BT

Bayram Tagiev in 2ch /pr/ 🎃
Муравей
Ну ты не можешь из 3 зайцев убить 5
Короче, у тебя на выходе натрусльное число всегда получается, то есть меньше нуля не может быть
источник

S

Shy-тан in 2ch /pr/ 🎃
Мы же говорим о корректности объявленной функции. Которая, по условию, возвращает 0 при попытке вычесть из нуля что-то
источник

BT

Bayram Tagiev in 2ch /pr/ 🎃
3-5=0
Тождественно
источник

S

Shy-тан in 2ch /pr/ 🎃
И ты на любых числах рекурсивно её вызываешь, выкидывая сукцессоры, т. е делая аргумент n -1 и агрумент m - 1
источник

М

Муравей in 2ch /pr/ 🎃
источник

В

Волчарко in 2ch /pr/ 🎃
да как угодно ебать
источник

В

Волчарко in 2ch /pr/ 🎃
даже просто через запись
источник

S

Shy-тан in 2ch /pr/ 🎃
Так у нас функция же, мы пытаемся относительно неё леммы доказать. Она не может вернуть не натуральное число
источник

S

Shy-тан in 2ch /pr/ 🎃
Но это не доказано
источник

М

Муравей in 2ch /pr/ 🎃
Ты не можешь ей даже предложить такой вариант не оперируя целыми числами над множеством натуральных
источник

S

Shy-тан in 2ch /pr/ 🎃
Могу. Прочитай ещё раз.
fun sub :: "nat ⇒ nat ⇒ nat"
 where
   "sub 0 m = 0" |
   "sub n 0 = n" |
   "sub (Suc n) (Suc m) = sub n m"

Тут паттернматчинг
Если мы получили 0, m => 0
Если мы получили n, 0 => n
Иначе => sub n - 1, m - 1
источник

S

Shy-тан in 2ch /pr/ 🎃
Suc - это конструктор натуральных чисел. Suc 0 будет 1, Suc ( Suc 0 ) будет 2, и так далее
источник

S

Shy-тан in 2ch /pr/ 🎃
Мы оперируем конструкторами числа, а не числами
источник

S

Shy-тан in 2ch /pr/ 🎃
И он справлдлив только для натуральных чисел
источник

S

Shy-тан in 2ch /pr/ 🎃
Вот, например, доказательство сложения двух натуральных чисел
theory Add
imports Main
begin

fun add :: "nat ⇒ nat ⇒ nat"
 where "add 0 n = n" |
"add (Suc n) m = Suc (add n m)"

lemma support1[simp]: "add n 0 = n"
 apply (induction n)
  apply auto
 done

lemma support2[simp]: "Suc (add y x) = add y (Suc x)"
 apply (induction y)
  apply auto
 done

lemma "add x y = add y x"
 apply (induction x)
   apply auto
 done

end
источник