fact: Definition SharpenFully {Sig} : forall (spec : ADT Sig) (DelegateIDs : nat) (DelegateSigs : Fin.t DelegateIDs -> ADTSig) (rep : (Fin.t DelegateIDs -> Type) -> Type) (cConstructors : forall (DelegateReps : Fin.t DelegateIDs -> Type) (DelegateImpls : forall idx, pcADT (DelegateSigs idx) (DelegateReps idx)) idx, cConstructorType (rep DelegateReps) (ConstructorDom Sig idx)) (cMethods : forall (DelegateReps : Fin.t DelegateIDs -> Type) (DelegateImpls : forall idx, pcADT (DelegateSigs idx) (DelegateReps idx)) idx, cMethodType (rep DelegateReps) (fst (MethodDomCod Sig idx)) (snd (MethodDomCod Sig idx))) (DelegateSpecs : forall idx, ADT (DelegateSigs idx)) (cAbsR : forall (DelegateReps : Fin.t DelegateIDs -> Type) (DelegateImpls : forall idx, pcADT (DelegateSigs idx) (DelegateReps idx)) (ValidImpls : forall idx : Fin.t DelegateIDs, refineADT (DelegateSpecs idx) (LiftcADT (existT _ _ (DelegateImpls idx)))), Rep spec -> rep DelegateReps -> Prop), (forall (DelegateReps : Fin.t DelegateIDs -> Type) (DelegateImpls : forall idx, pcADT (DelegateSigs idx) (DelegateReps idx)) (ValidImpls : forall idx : Fin.t DelegateIDs, refineADT (DelegateSpecs idx) (LiftcADT (existT _ _ (DelegateImpls idx)))), forall idx : ConstructorIndex Sig, @refineConstructor (Rep spec) (rep DelegateReps) (cAbsR _ _ ValidImpls) (ConstructorDom Sig idx) (Constructors spec idx) (LiftcConstructor _ _ (cConstructors DelegateReps DelegateImpls idx))) -> (forall (DelegateReps : Fin.t DelegateIDs -> Type) (DelegateImpls : forall idx, pcADT (DelegateSigs idx) (DelegateReps idx)) (ValidImpls : forall idx : Fin.t DelegateIDs, refineADT (DelegateSpecs idx) (LiftcADT (existT _ _ (DelegateImpls idx)))), forall idx, @refineMethod (Rep spec) (rep DelegateReps) (cAbsR _ _ ValidImpls) (fst (MethodDomCod Sig idx)) (snd (MethodDomCod Sig idx)) (Methods spec idx) (LiftcMethod (cMethods DelegateReps DelegateImpls idx))) -> FullySharpenedUnderDelegates spec {| Sharpened_DelegateSigs := DelegateSigs; Sharpened_Implementation := BuildMostlySharpenedcADT Sig DelegateSigs rep cConstructors cMethods; Sharpened_DelegateSpecs := DelegateSpecs |}.
imports: Coq.Lists.List Coq.Strings.String Fiat.Common Fiat.Common.ilist Fiat.Common.BoundedLookup Fiat.ADT.Core Fiat.ADT.ComputationalADT Fiat.ADTRefinement.Core Fiat.ADTRefinement.SetoidMorphisms