`splitAt`を使用してVecに` rotate`関数を実装するにはどうすればよいですか?

MaiaVictor

質問

rotateVecに関数を実装しようとしています。この関数は、すべての要素のn位置を左に移動し、ループします。を使用してその関数を実装できますsplitAtこれがスケッチです:

open import Data.Nat
open import Data.Nat.DivMod
open import Data.Fin
open import Data.Vec
open import Relation.Nullary.Decidable
open import Relation.Binary.PropositionalEquality

rotateLeft : {A : Set} -> {w : ℕ} -> {w≢0 : False (w ≟ 0)} -> ℕ -> Vec A w -> Vec A w
rotateLeft {A} {w} n vec =
  let parts = splitAt (toℕ (n mod w)) {n = ?} vec
  in  ?

問題は、あるsplitAt2つの入力を必要とし、mそしてnベクトルの大きさとなるように、m + nここでのベクトルのサイズはであるwため、kそのようなものを見つける必要がありますk + toℕ (n mod w) = wそのための便利な標準関数は見つかりませんでした。続行するための最良の方法は何ですか?

いくつかの可能性?

おそらく、そのk = n mod w証拠を私に与えてくれればk < w、それは私が関数を実装してみることができるということで役立つでしょうdiff : ∀ {k w} -> k < w -> ∃ (λ a : Nat) -> a + k = w別の可能性は、単に受信するだろうabベクトルのシフトとサイズへの入力ではなく、ビットとして、私は最高のインターフェイスであることはよく分かりません。

更新

私は以下を実装しました:

add-diff : (a : ℕ) -> (b : Fin (suc a)) -> toℕ b + (a ℕ-ℕ b) ≡ a
add-diff zero    zero    = refl
add-diff zero    (suc ())
add-diff (suc a) zero    = refl
add-diff (suc a) (suc b) = cong suc (aaa a b)

今、私はその証拠が必要です∀ {n m} -> n mod m < m

アダムス

これが私が思いついたものです。

open import Data.Vec
open import Data.Nat
open import Data.Nat.DivMod
open import Data.Fin hiding (_+_)
open import Data.Product
open import Relation.Binary.PropositionalEquality
open import Data.Nat.Properties using (+-comm)

difference : ∀ m (n : Fin m) → ∃ λ o → m ≡ toℕ n + o
difference zero ()
difference (suc m) zero = suc m , refl
difference (suc m) (suc n) with difference m n
difference (suc m) (suc n) | o , p1 = o , cong suc p1

rotate-help : ∀ {A : Set} {m} (n : Fin m) → Vec A m → Vec A m
rotate-help {A} {m = m} n vec with difference m n
... | o , p rewrite p with splitAt (toℕ n) vec
... | xs , ys , _ = subst (Vec A) (+-comm o (toℕ n)) (ys ++ xs)

rotate : ∀ {A : Set} {m} (n : ℕ) → Vec A m → Vec A m
rotate {m = zero} n v = v
rotate {m = suc m} n v = rotate-help (n mod suc m) v

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

typeOf関数を実装するにはどうすればよいですか?

分類Dev

関数を実装するにはどうすればよいですか?

分類Dev

RustでWindowsIOCPを使用して非同期関数を実装するにはどうすればよいですか?

分類Dev

Pythonを使用して `単項関数chainer`を実装するにはどうすればよいですか?

分類Dev

APIを使用して除外関数を実装するにはどうすればよいですか

分類Dev

SwiftUIでonAppearのような関数を実装するにはどうすればよいですか?

分類Dev

JavaScriptで非同期関数間の依存関係を実装するにはどうすればよいですか?

分類Dev

memcpy()のような高速コピー関数を実装するにはどうすればよいですか?

分類Dev

AnyおよびSendTraitsにSized、Serialize / Deserialize関数を実装するにはどうすればよいですか?

分類Dev

これらのJavaScript関数を効率的に実装するにはどうすればよいですか

分類Dev

PostgresでExcelのSMALLおよびLARGE関数を実装するにはどうすればよいですか?

分類Dev

OKHttpのBufferedSink(またはBufferedSource)にseek()関数を実装するにはどうすればよいですか?

分類Dev

(任意の)引数を使用して(任意の)関数を呼び出す関数を実装するにはどうすればよいですか?

分類Dev

イベントリスナーに関数を実装するにはどうすればよいですか

分類Dev

nodejsに「gzencode」(PHP関数)を実装するにはどうすればよいですか?

分類Dev

関数を実装せずに宣言するにはどうすればよいですか?

分類Dev

最小ヒープにdownHeap()関数を実装するにはどうすればよいですか?

分類Dev

この関数にwhileループを実装するにはどうすればよいですか

分類Dev

リンクリストにlen()関数を実装するにはどうすればよいですか?

分類Dev

Python コードに FacetGrid 関数を実装するにはどうすればよいですか?

分類Dev

Cで連分数を使用して自然対数を実装するにはどうすればよいですか?

分類Dev

引数を使用してLuaでrfindを実装するにはどうすればよいですか?

分類Dev

n回の反復を持つ関数を実装するにはどうすればよいですか?

分類Dev

RustでArmA3 DLLのRVExtension関数を実装するにはどうすればよいですか?

分類Dev

talibのLINEARREG_SLOPE関数をjsで実装するにはどうすればよいですか?

分類Dev

BigQueryで汎用のOracleDECODE関数を実装するにはどうすればよいですか?

分類Dev

JavaScriptで関数multiply(2)(3)(5)を実装するにはどうすればよいですか?

分類Dev

TypeScriptで型付きの「両方」の関数を実装するにはどうすればよいですか?

分類Dev

TensorFlowでBesselJ関数を実装するにはどうすればよいですか

Related 関連記事

  1. 1

    typeOf関数を実装するにはどうすればよいですか?

  2. 2

    関数を実装するにはどうすればよいですか?

  3. 3

    RustでWindowsIOCPを使用して非同期関数を実装するにはどうすればよいですか?

  4. 4

    Pythonを使用して `単項関数chainer`を実装するにはどうすればよいですか?

  5. 5

    APIを使用して除外関数を実装するにはどうすればよいですか

  6. 6

    SwiftUIでonAppearのような関数を実装するにはどうすればよいですか?

  7. 7

    JavaScriptで非同期関数間の依存関係を実装するにはどうすればよいですか?

  8. 8

    memcpy()のような高速コピー関数を実装するにはどうすればよいですか?

  9. 9

    AnyおよびSendTraitsにSized、Serialize / Deserialize関数を実装するにはどうすればよいですか?

  10. 10

    これらのJavaScript関数を効率的に実装するにはどうすればよいですか

  11. 11

    PostgresでExcelのSMALLおよびLARGE関数を実装するにはどうすればよいですか?

  12. 12

    OKHttpのBufferedSink(またはBufferedSource)にseek()関数を実装するにはどうすればよいですか?

  13. 13

    (任意の)引数を使用して(任意の)関数を呼び出す関数を実装するにはどうすればよいですか?

  14. 14

    イベントリスナーに関数を実装するにはどうすればよいですか

  15. 15

    nodejsに「gzencode」(PHP関数)を実装するにはどうすればよいですか?

  16. 16

    関数を実装せずに宣言するにはどうすればよいですか?

  17. 17

    最小ヒープにdownHeap()関数を実装するにはどうすればよいですか?

  18. 18

    この関数にwhileループを実装するにはどうすればよいですか

  19. 19

    リンクリストにlen()関数を実装するにはどうすればよいですか?

  20. 20

    Python コードに FacetGrid 関数を実装するにはどうすればよいですか?

  21. 21

    Cで連分数を使用して自然対数を実装するにはどうすればよいですか?

  22. 22

    引数を使用してLuaでrfindを実装するにはどうすればよいですか?

  23. 23

    n回の反復を持つ関数を実装するにはどうすればよいですか?

  24. 24

    RustでArmA3 DLLのRVExtension関数を実装するにはどうすればよいですか?

  25. 25

    talibのLINEARREG_SLOPE関数をjsで実装するにはどうすればよいですか?

  26. 26

    BigQueryで汎用のOracleDECODE関数を実装するにはどうすればよいですか?

  27. 27

    JavaScriptで関数multiply(2)(3)(5)を実装するにはどうすればよいですか?

  28. 28

    TypeScriptで型付きの「両方」の関数を実装するにはどうすればよいですか?

  29. 29

    TensorFlowでBesselJ関数を実装するにはどうすればよいですか

ホットタグ

アーカイブ