私は(Z, Z)
からwhatever
にマップの一種として扱う関数Z -> Z -> whatever
を持っています。FF
とタイプしましょう。Coqの無限表現の有限部分集合を使った計算
whatever
は、nix
またはinj_whatever
から構成可能な単純和です。
私はの形で、いくつかのデータを初期化し、このマップ:
Definition i (x y : Z) (f : FF) : FF :=
fun x' y' =>
if andb (x =? x') (y =? y')
then inj_whatever
else f x y.
=?
はコックのZArith
から、Z
のブール決定可能平等を表します。
ここでは、FF
のうちの2つについて同等性を持たせたいと考えています。私はfunctional_extensionality
を呼び出しても構いません。私が今やりたいことは、Coqが2つの等価性を計算的に決定させることです。FF
例えば
、我々はの線に沿って何かやるとします今、私たちはfoo
とfoo'
を作るために、いくつかの任意の値を追加
Definition empty : FF := fun x y => nix.
を、それらが機能extensionalityの下に等価です:
Definition foo := i 0 0 (i 0 (-42) (i 56 1 empty)).
Definition foo' := i 0 (-42) (i 56 1 (i 0 0 empty)).
omctをfoo = foo'
とCoqで決める。 Ltac
レベルのもの?実際の終了計算?有限なものにドメイン制限が必要ですか?
ドメインの制限は、複雑なものです。 f : FF -> FF
という方法でマップを操作します。f
は、計算が定義されているZ x Z
のサブセットを拡張できます。考えてみると、f : FF -> FF
はありませんが、f : FF -> FF_1
のようになります。ここで、FF_1
は、小さな定数で拡張されたZ x Z
のサブセットです。そのため、f
をn回適用すると、ドメイン制限がFF
に加えてn * constant
のドメインに相当するFF_n
になります。関数f
はゆっくり(一定の係数で)ドメインFFを定義して拡張します。
あなたの質問は非常に曖昧なので、何をしたいのか解明するのは難しく、解決策を提案するのは難しいです。 「最小限で、完全で、検証可能な例」を提供してください。 – ejgallego
@ejgallegoあなたは絶対に正しいです、私は単純な例で状況を修正しようとしました。 – ScarletAmaranth
これは、 "A - > B"という関数では、 "A"はどこにあるのかというと、私の好みではまだあまりにも曖昧です。例えば、 "_whatever_"第二に、適切なフレームワークを使用すれば、あまりにも痛みを伴わずに、そのような関数の平等を計算平等に反映させることができます。 – ejgallego