如何使用 default 或 or 子句之类的东西在 coq 中耗尽匹配?

How to exhaust the match with in coq using something like default or or clause?

我如何在 coq 中编写一个与此类似的开关状态(在 Rust 中)? 特别是我很好奇如何在 coq 中合并分支以产生相同的输出,并通过一些默认实现耗尽剩余的分支。

type Voltages = u32; // in coq is similar to Definition Voltages := R.
type Timestamp = u32; // in coq is similar to Definition Timestamp := R.

const TD: Timestamp = 2; // dummy value cuz rust, in coq would be Variable TD : Timestamp.

enum Pin {
    Ground(bool),
    VoltageIn(bool),
    Threshold,
    Discharge,
    Output,
    Trigger,
    Reset,
    CtrlVoltage
}

impl Pin {
    fn evaluate() -> bool { // dummy for some other functions and predicates
        true
    }
}

fn is_high(p: Pin) -> bool {
    match p {
        Pin::Ground(value) | Pin::VoltageIn(value) => value, // how to grab 2 options in one match in coq?
        _ => Pin.evaluate() // how to exhaust the options in coq?
    }
}

在 coq 中,您可以通过管道分隔绑定相同变量的多个分支,并且仅使用一个 right-hand 侧值。 您还可以使用下划线作为通配符来捕捉所有剩余的情况。

Inductive t :=
| A (x : nat)
| B (x : nat) (y : bool)
| C (x : unit).

Definition foo (c : t) :=
  match c with
  | A x | B x _ => x
  | _ => 0
  end.