fact: Record refineADT {Sig} (A B : ADT Sig) := refinesADT { AbsR : _; ADTRefinementPreservesConstructors : forall idx : ConstructorIndex Sig, @refineConstructor (Rep A) (Rep B) AbsR (ConstructorDom Sig idx) (Constructors A idx) (Constructors B idx); ADTRefinementPreservesMethods : forall idx : MethodIndex Sig, @refineMethod (Rep A) (Rep B) AbsR (fst (MethodDomCod Sig idx)) (snd (MethodDomCod Sig idx)) (Methods A idx) (Methods B idx) }.
imports: Fiat.Common Fiat.Computation Fiat.ADT Coq.Sets.Ensembles