Я действительно хочу доказать одну теорему, но думаю, если я докажу, что с другой стороны это тоже хорошо.Когда это закончится?
Я определил поток положительных рациональных чисел, как это:
one : ℤ
one = + 1
next : pair → pair
next q = if (n eq one) then (mkPair (+ m Data.Integer.+ one) 1)
else (mkPair (n Data.Integer.- one) (m Nat.+ 1))
where
n = getX q
m = getY q
-- eq is defined correctly for equivalence of two integer.
rational : Stream pair
rational = iterate next (mkPair one 1)
RQ : pair → Stream pair → Stream pair
RQ q (x ∷ xs) = (x add q) ∷ ♯ (RQ q (♭ xs))
positiveRat : Stream pair
positiveRat = RQ (mkPair (+ 0) (1)) rational
Здесь pair
является запись с ℤ и ℕ полей:
--records of rational number
record pair : Set where
field
x : ℤ
y : ℕ
mkPair : ℤ → ℕ → pair
mkPair a b = record { x = a; y = b}
Теперь я хочу, чтобы доказать, что каждый рациональный, который находится в positiveRat
будет положительным.
open import Data.Stream
open import Data.Nat
open import Data.Rational
open import Data.Integer
open import Coinduction
open import Data.Unit
lemma : (x : pair) → (x ∈ positiveRat) → (+ 0 Data.Integer.≤ pair.x x)
lemma .(record { x = + 1 ; y = 1 }) here = +≤+ z≤n
lemma .(record { x = + 2 ; y = 1 }) (there here) = +≤+ z≤n
lemma .(record { x = + 1 ; y = 2 }) (there (there here)) = {!!}
lemma q (there (there (there pf))) = {!!}
Я пишу доказательство путем расщепления на pf
. Но это невозможно остановить.
Обновлен код отсутствует импорт и другие вспомогательные определения. Убедитесь, что ваш код является typecheable как есть. – Cactus
импорт совпадают со второй частью над леммой. и теперь я дал другое определение. – ajayv
Я не вижу «ans» –