我需要一個有保證子集類型的nats隨機流,如this stream will only give 0 < nat < 10
。有人幫我做這個?
我發現這個函數用於產生隨機數:
CoFixpoint rand (seed n1 n2 : Z) : Stream Z :=
let seed' := Zmod seed n2 in Cons seed' (rand (seed' * n1) n1 n2).
我想與任意子集類型,例如以取代Z
Definition Z_gt0 := { Z | Z > 0}.
因此,我們有:
CoFixpoint rand (seed n1 n2 : Z_gt0) : Stream Z_gt0 :=
let seed' := Zmod seed n2 in Cons seed' (rand (seed' * n1) n1 n2).
現在的問題是,Zmod
不接受Z
但不Z_gt0
。
我是否必須重新定義所有功能?還是已經有一個庫函數可以使用了?
TO MOD:請爲子集類型或優化類型添加標籤。
順便說一句,你應該打開''Z''作用域(全局或本地) Z_gt0'',否則'''_'''測試將在''nat''中。像''定義Z_gt0:= {Z | Z> 0}%Z.''應該可以做到。 – Vinz 2014-10-21 12:18:54
對,所以'需要導入ZArith'? – 2014-10-21 13:25:46
這還不夠,你必須在頂層「打開Scope Zscope」(不知道語法),或者在必要時使用'%Z''本地範圍。 – Vinz 2014-10-21 13:46:14