f {...} } 実装を増やして仕様が変わってしまう例 require C ensure D func (s SomeStruct) f {...} SomeStruct の f は、SomeInterface の f の仕様を満たしているとは限らない → インターフェースの仕様を 再証明する必 要性 追加 証明済み
f {...} } Gobra におけるモジュラーな検証 require C ensure D func (s SomeStruct) f {...} 追加 証明済み (SomeStruct) implements SomeInterface { (s SomeStruct) f { // A ⟹ C と D ⟹ B の証明 } } SomeStruct の f が、SomeInterface の f の仕様を満たしていること の証明をプ ログラマが書けば再証明しなくて OK Behavioral Subtyping
Oortwijn, João C. Pereira, & Peter Müller. (2021). Gobra: Modular Specification and Verification of Go Programs (extended version). • A Tutorial on Gobra https://github.com/viperproject/gobra/blob/master/docs/tutorial. md 参考文献