Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 在不锈钢中证明功能终止时出现匹配错误_Scala_Stainless - Fatal编程技术网

Scala 在不锈钢中证明功能终止时出现匹配错误

Scala 在不锈钢中证明功能终止时出现匹配错误,scala,stainless,Scala,Stainless,我有这段代码,它证明了不锈钢/Leon中排序算法的终止。请注意,所使用的排名函数或度量值并不正确,因为这来自于家庭作业集 import stainless.lang._ import stainless.collection._ object QuickSort { def isSorted(list: List[BigInt]): Boolean = list match { case Cons(x, xs @ Cons(y, _)) => x <= y &

我有这段代码,它证明了不锈钢/Leon中排序算法的终止。请注意,所使用的排名函数或度量值并不正确,因为这来自于家庭作业集

import stainless.lang._
import stainless.collection._


object QuickSort {

  def isSorted(list: List[BigInt]): Boolean = list match {
    case Cons(x, xs @ Cons(y, _)) => x <= y && isSorted(xs)
    case _ => true
  }

  def quickSort(list: List[BigInt]): List[BigInt] = {
    decreases((list.size,0))
    list match {
      case Nil() => Nil[BigInt]()
      case Cons(x, xs) => par(x, Nil(), Nil(), xs)
    }
  } ensuring { res => isSorted(res) }

  def par(x: BigInt, l: List[BigInt], r: List[BigInt], ls: List[BigInt]): List[BigInt] = {
    decreases((l.size,l.size))
    ls match {
      case Nil() => quickSort(l) ++ Cons(x, quickSort(r))
      case Cons(x2, xs2) => if (x2 <= x) par(x, Cons(x2, l), r, xs2) else par(x, l, Cons(x2, r), xs2)
    }
  }
}
关于为什么会发生这种情况以及我如何解决它,有什么想法吗?我还尝试调用
reduces(list.size,BigInt(0))
和其他几个版本,但都不起作用

编辑


显然,删除import scala.BigInt.\u行可以解决这个问题,所以知道为什么会发生这种情况吗?

不锈钢从scalac前端提取其树的方式需要一个特定的树结构来提取BigInt。当从
scala.BigInt.\ucode>导入
BigInt()
时,此结构略有不同

这没有多大意义,可以通过使用符号而不是精确的树匹配来避免。我会研究解决这个问题

[ Error  ] exercise.scala:14:5: error: overloaded method value decreases with alternatives:
[ Error  ]   (rank: (Int, Int, Int, Int, Int))Unit <and>
[ Error  ]   (rank: (Int, Int, Int, Int))Unit <and>
[ Error  ]   (rank: (Int, Int, Int))Unit <and>
[ Error  ]   (rank: (Int, Int))Unit <and>
[ Error  ]   (rank: Int)Unit <and>
[ Error  ]   (rank: (BigInt, BigInt, BigInt, BigInt, BigInt))Unit <and>
[ Error  ]   (rank: (BigInt, BigInt, BigInt, BigInt))Unit <and>
[ Error  ]   (rank: (BigInt, BigInt, BigInt))Unit <and>
[ Error  ]   (rank: (BigInt, BigInt))Unit <and>
[ Error  ]   (rank: BigInt)Unit
[ Error  ]  cannot be applied to ((BigInt, Int))
               decreases((list.size,0))
               ^
Exception in thread "main" scala.MatchError: <untyped> (of class inox.ast.Types$Untyped$)
    at stainless.extraction.oo.MethodLifting$BaseTransformer$1.transform(MethodLifting.scala:139)
    at inox.ast.TreeTransformer$$anonfun$3.apply(TreeOps.scala:115)
    at inox.ast.TreeTransformer$$anonfun$3.apply(TreeOps.scala:114)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.immutable.List.foreach(List.scala:381)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
    at scala.collection.immutable.List.map(List.scala:285)
    at inox.ast.TreeTransformer$class.transform(TreeOps.scala:114)
    at stainless.extraction.oo.MethodLifting$BaseTransformer$1.transform(MethodLifting.scala:149)
    at inox.ast.TreeTransformer$$anonfun$3.apply(TreeOps.scala:115)
    at inox.ast.TreeTransformer$$anonfun$3.apply(TreeOps.scala:114)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.immutable.List.foreach(List.scala:381)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
    at scala.collection.immutable.List.map(List.scala:285)
    at inox.ast.TreeTransformer$class.transform(TreeOps.scala:114)
    at stainless.extraction.oo.MethodLifting$BaseTransformer$1.transform(MethodLifting.scala:149)
    at inox.ast.TreeTransformer$$anonfun$3.apply(TreeOps.scala:115)
    at inox.ast.TreeTransformer$$anonfun$3.apply(TreeOps.scala:114)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.immutable.List.foreach(List.scala:381)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
    at scala.collection.immutable.List.map(List.scala:285)
    at inox.ast.TreeTransformer$class.transform(TreeOps.scala:114)
    at stainless.extraction.oo.MethodLifting$BaseTransformer$1.transform(MethodLifting.scala:149)
    at inox.ast.TreeTransformer$class.transform(TreeOps.scala:185)
    at stainless.extraction.oo.MethodLifting$BaseTransformer$1.transform(MethodLifting.scala:133)
    at stainless.extraction.oo.MethodLifting$$anonfun$38.apply(MethodLifting.scala:285)
    at stainless.extraction.oo.MethodLifting$$anonfun$38.apply(MethodLifting.scala:281)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.Iterator$class.foreach(Iterator.scala:893)
    at scala.collection.AbstractIterator.foreach(Iterator.scala:1336)
    at scala.collection.MapLike$DefaultValuesIterable.foreach(MapLike.scala:206)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
    at scala.collection.AbstractTraversable.map(Traversable.scala:104)
    at stainless.extraction.oo.MethodLifting$class.transform(MethodLifting.scala:281)
    at stainless.extraction.oo.package$extractor$.transform(package.scala:16)
    at stainless.extraction.oo.package$extractor$.transform(package.scala:16)
    at inox.ast.SymbolTransformer$$anon$3.transform(TreeOps.scala:262)
    at inox.ast.SymbolTransformer$$anon$3.transform(TreeOps.scala:262)
    at inox.ast.SymbolTransformer$$anon$3.transform(TreeOps.scala:262)
    at inox.ast.SymbolTransformer$$anon$3.transform(TreeOps.scala:262)
    at inox.ast.SymbolTransformer$$anon$3.transform(TreeOps.scala:262)
    at inox.ast.SymbolTransformer$$anon$3.transform(TreeOps.scala:262)
    at inox.ast.SymbolTransformer$$anon$3.transform(TreeOps.scala:262)
    at inox.Program$$anon$2.<init>(Program.scala:78)
    at inox.Program$class.transform(Program.scala:76)
    at stainless.frontends.scalac.CodeExtraction$Extraction$$anon$1.transform(CodeExtraction.scala:187)
    at stainless.SimpleComponent$class.extract(Component.scala:46)
    at stainless.termination.TerminationComponent$.extract(TerminationComponent.scala:8)
    at stainless.SimpleComponent$class.apply(Component.scala:50)
    at stainless.termination.TerminationComponent$.apply(TerminationComponent.scala:8)
    at stainless.MainHelpers$$anonfun$main$1.apply(MainHelpers.scala:76)
    at stainless.MainHelpers$$anonfun$main$1.apply(MainHelpers.scala:76)
    at scala.collection.immutable.List.foreach(List.scala:381)
    at stainless.MainHelpers$class.main(MainHelpers.scala:76)
    at stainless.Main$.main(Main.scala:5)
    at stainless.Main.main(Main.scala)