Coq Can';t证明用程序不动点定义的函数的简单事实

Coq Can';t证明用程序不动点定义的函数的简单事实,coq,dependent-type,Coq,Dependent Type,之前,我能够证明对于所有nat1:Nat,Trim nat1->Trim(pred nat1)对于以下pred的定义 Fixpoint pred (nat1: Nat): Nat := match nat1 with | Empt => Empt | Fill Zer nat3 => Fill One (pred nat3) | Fill One nat3 => trim (Fill Zer nat3) end. 但是对于pred的以下新定义,我不知道如何

之前,我能够证明
对于所有nat1:Nat,Trim nat1->Trim(pred nat1)
对于以下
pred
的定义

Fixpoint pred (nat1: Nat): Nat :=
  match nat1 with
  | Empt => Empt
  | Fill Zer nat3 => Fill One (pred nat3)
  | Fill One nat3 => trim (Fill Zer nat3)
  end.
但是对于
pred
的以下新定义,我不知道如何证明所有nat1的
:{nat2:Nat | Trim nat2/\Pos nat2},Trim(pred nat1)

有人能给我一个提示吗?我不知道用
sig
证明什么。也许我做错了什么。我不知道。完整的代码是。前面的代码。

我决定作弊

Fixpoint pred' (n1: Nat): Nat :=
  match n1 with
  | Empt => Empt
  | Fill Zer n1 => Fill One (pred' n1)
  | Fill One n1 => trim (Fill Zer n1)
  end.

Definition pred (n1: Nat) (H1: Trim n1) (H2: comp n1 zer = Great): Nat :=
  pred' n1.
Fixpoint pred' (n1: Nat): Nat :=
  match n1 with
  | Empt => Empt
  | Fill Zer n1 => Fill One (pred' n1)
  | Fill One n1 => trim (Fill Zer n1)
  end.

Definition pred (n1: Nat) (H1: Trim n1) (H2: comp n1 zer = Great): Nat :=
  pred' n1.