如何使用 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.
我如何在 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.