如何在Coq中使用面向对象的概念证明属性

问题描述 投票:1回答:1

有时我的代码基于O.O.类和接口等概念。例如,学生对象有两个nat编号,一个用于他的学号,一个用于他的GPA。

 public class Student {
    // The private instance variables
    private int studentNumber;
    private int GPA;             
    }

有没有办法在Coq中编写这些概念?谢谢你的指导。

coq
1个回答
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模型并证明映射是正确/合理的。

© www.soinside.com 2019 - 2024. All rights reserved.