小编Bri*_*nna的帖子

使用Scala无形证明自然数加法的相关性

以下代码是Idris:

natAssociative : (a : Nat) -> (b : Nat) -> (c : Nat) -> (a + b) + c = a + (b + c)
natAssociative Z b c = the (b + c = b + c) refl
natAssociative (S k) b c = replace {P=\x => S (k + b) + c = S x} (natAssociative k b c) refl
Run Code Online (Sandbox Code Playgroud)

我正在艰难地将其转化为无形.我尝试了一些不同的编码,但我认为这是最有希望的开始:

import scalaz.Leibniz._
import shapeless.{ HNil, Nat, Succ, Poly3 }
import shapeless.Nat._
import shapeless.ops.nat._

object natAssociative extends …
Run Code Online (Sandbox Code Playgroud)

scala proof dependent-type shapeless

13
推荐指数
1
解决办法
412
查看次数

流的仿函数定律的证明

我一直在写类似Stream的东西.我能够证明每个算子法,但我无法找到证明它总数的方法:

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 = …
Run Code Online (Sandbox Code Playgroud)

verification idris coinduction

6
推荐指数
1
解决办法
505
查看次数