有时我的代码基于O.O.类和接口等概念。例如,学生对象有两个nat编号,一个用于他的学号,一个用于他的GPA。
public class Student {
// The private instance variables
private int studentNumber;
private int GPA;
}
有没有办法在Coq中编写这些概念?感谢您的指导。
答案 0 :(得分:2)
Coq拥有模拟字段集的记录:
Record student : Set := mkStudent {
studentNumber : string;
gpa : string
}.
您可以使用归纳类型对备选方案和子类进行建模:
Inductive person : Set :=
| Student : student -> person
| Teacher : teacher -> person.
当然,方法可以建模为函数:
Definition age (p: person) : nat :=
match p with
| Student s => ..
| Teacher t => ..
虽然这不是最干净的方法,但需要通过monad处理就地修改(可变性);它可以工作。
请记住,对于完整的校样,您需要提供映射到您的OOP模型并证明映射是正确/合理的。