是的,使用 IDTAC策略> < /P>,coq,ltac,Coq,Ltac" /> 是的,使用 IDTAC策略> < /P>,coq,ltac,Coq,Ltac" />

Coq 是";printf调试“;在Ltac中是否可能? 是否有一种方法来打印变量(一个假设、策略、术语)在LTAC程序中间的值? < P>是的,使用 IDTAC策略> < /P>

Coq 是";printf调试“;在Ltac中是否可能? 是否有一种方法来打印变量(一个假设、策略、术语)在LTAC程序中间的值? < P>是的,使用 IDTAC策略> < /P>,coq,ltac,Coq,Ltac,您可以传递idtac一个常量字符串进行打印。如果模式匹配,它还可以打印标识符(如假设名称),如果使用模式匹配或type of访问它们,它还可以打印它们的类型。您还可以打印术语或Ltac let绑定变量的内容。最后,您可以传递idtac多个参数以将它们全部打印出来。您提到了打印策略-不幸的是,您不能使用idtac打印这件事。如果你试着去做,你会得到的 以下是一组示例: 目标正确->错误。 介绍。 idtac“你好,世界”。(*打印hello world*) 将目标与 |[H:True |-|]=>

您可以传递
idtac
一个常量字符串进行打印。如果模式匹配,它还可以打印标识符(如假设名称),如果使用模式匹配或
type of
访问它们,它还可以打印它们的类型。您还可以打印术语或Ltac let绑定变量的内容。最后,您可以传递
idtac
多个参数以将它们全部打印出来。您提到了打印策略-不幸的是,您不能使用
idtac
打印这件事。如果你试着去做,你会得到的

以下是一组示例:

目标正确->错误。
介绍。
idtac“你好,世界”。(*打印hello world*)
将目标与
|[H:True |-|]=>idtac H(*prints Htrue*)
结束。
将目标与
||-?g=>idtac g(*打印错误*)
结束。
设t:=idtac t中Htrue的类型。(*打印正确*)
设x:=idtac x中的constr:(1+1)。(*打印(1+1)*)
idtac“你好”在这里。(*在那里打印你好*)
(*请注意,这是一个Ltac级别的函数,而不是Gallina函数*)
让x:=(fun=>失败)在idtac x中。(*印刷品*)
中止

注意,你也可以在一个策略的中间打印出一个东西,它通过写<代码返回一个约束>让* =:=匹配目标与“=>IDTAC”“Fo”结束在…< /代码>中。