我可以使用 Axiom 命令定义与此等效的命令吗?

时间:2021-07-28 15:41:18

标签: coq

mu 无法定义。

Definiton mu (A : Type) (f : A -> A) : A := f (mu A f).

然而,Axiom 命令可用于伪定义 mu

Axiom mu : forall A : Type, (A -> A) -> A.

Axiom mu_beta : forall (A : Type) (f : A -> A), mu A f = f (mu A f).

我可以对 higher_pathhigher_path_argument 做同样的事情吗?即使使用了几种技术,它似乎仍然是不可能的。

Definition higher_path
  : forall n : nat, higher_path_argument n -> Type
  := fun n : nat =>
    match n with
    | O => fun x : higher_path_argument 0 => x
    | S n_p =>
      fun x : higher_path_argument (S n_p) =>
        match x with
        | existT _ x_a x_b =>
          match x_b with
          | pair x_b_a x_b_b => x_b_a = x_b_b :> higher_path n_p x_a
          end
        end
    end.

Definition higher_path_argument
  : nat -> Type
  := fun n : nat =>
    match n with
    | O => Type
    | S n_p =>
      sigT
        (A := higher_path_argument n_p)
        (fun x_p => prod (higher_path n_p x_p) (higher_path n_p x_p))
    end.

1 个答案:

答案 0 :(得分:1)

你必须从

开始
Axiom higher_path_argument : nat -> Type.
Axiom higher_path : forall n : nat, higher_path_argument n -> Type.

然后 higher_path_argument_beta 您必须在 higher_path_beta 中使用它来计算类型。然而,你最终会得到一些非常冗长的东西。