मैं स्ट्रीम के समान कुछ लिख रहा हूं। मैं एक functor कानून साबित करने में सक्षम हूँ, लेकिन मैं साबित होता है कि यह कुल है एक तरह से समझ नहीं कर सकते हैं:धारा के फंक्टर कानूनों का सबूत
module Stream
import Classes.Verified
%default total
codata MyStream a = MkStream a (MyStream a)
mapStream : (a -> b) -> MyStream a -> MyStream b
mapStream f (MkStream a s) = MkStream (f a) (mapStream f s)
streamFunctorComposition : (s : MyStream a) -> (f : a -> b) -> (g : b -> c) -> mapStream (\x => g (f x)) s = mapStream g (mapStream f s)
streamFunctorComposition (MkStream x y) f g =
let inductiveHypothesis = streamFunctorComposition y f g
in ?streamFunctorCompositionStepCase
---------- Proofs ----------
streamFunctorCompositionStepCase = proof
intros
rewrite inductiveHypothesis
trivial
देता है:
*Stream> :total streamFunctorComposition
Stream.streamFunctorComposition is possibly not total due to recursive path:
Stream.streamFunctorComposition, Stream.streamFunctorComposition
वहाँ codata से अधिक functor कानूनों साबित करने के लिए एक चाल है जो कुलता परीक्षक भी पास करता है?
एक अर्थ में, कोडडाटा से पूछने के लिए यह एक अजीब चीज है। कोडटाटा पर काम करने वाले कार्यों को कुल मिलाकर चेक की आवश्यकता होती है, जिससे उनकी खपत कुछ फैशन में सीमित हो जाती है। यह आपको वास्तव में * समानता गवाह की गणना * करने में सक्षम होने से रोकता है - यह एक संभावित अनंत लूप के अंत में है। आपका समकक्ष संबंध अच्छी तरह से धाराओं को डिक्री करके समस्या को दूर करता है यदि उनके सभी प्रारंभिक खंड बराबर हैं। – dfeuer