Я хотел бы доказать это:
lemma NatDivision(a: nat, b: nat)
requires b != 0
ensures a / b == (a as real / b as real).Floor
Я не знаю, с чего начать — это кажется почти аксиомой.
Если бы я знал что такое аксиомы, я мог бы работать оттуда, но я порылся в исходном коде Dafny и не смог найти аксиомы для nat
деления. (This Is Boogie 2 утверждает, что Boogie требует, чтобы вы определили свои собственные, поэтому я предполагаю, что они где-то есть, может быть, в коде C#.)
(Более широкий контекст: я пытаюсь доказать, что (a + n * b) % b == a % b
для натуральных чисел, используя этот подход. Вот почти работающее доказательство Дафни.)