3

我正在尝试进行以下工作:

    Definition gen `{A:Type}
           {i o: nat}
           (f: nat -> (option nat))
           {ibound: forall (n n':nat), f n = Some n' -> n' < i}
           (x: svector A i) (t:nat) (ti: t < o): option A
  := match (f t) with
     | None => None
     | Some t' => Vnth x (ibound t t' _)
     end.

代替最后一个“_”,我需要一个“f t”等于“Some t'”的证据。我不知道如何从比赛中得到它。Vnth 定义为:

Vnth
     : ∀ (A : Type) (n : nat), vector A n → ∀ i : nat, i < n → A
4

1 回答 1

3

编写此函数需要一个所谓的车队模式的实例(请参阅此处)。我相信以下应该有效,尽管我无法测试它,因为我没有你的其余定义。

Definition gen `{A:Type}
           {i o: nat}
           (f: nat -> (option nat))
           {ibound: forall (n n':nat), f n = Some n' -> n' < i}
           (x: svector A i) (t:nat) (ti: t < o): option A
  := match f t as x return f t = x -> option A with
     | None => fun _ => None
     | Some t' => fun p => Vnth x (ibound t t' p)
     end (eq_refl (f t)).
于 2015-07-23T03:08:35.370 回答