lean4-htt/tests/lean/run/654.lean
Leonardo de Moura 193d4dc9f5 feat: optimized deriving DecidableEq for enumeration types
The proof term is liner on the number of constructors, but type
checking is not linear because the reduction engine in the kernel is
not efficient.
2021-09-08 16:21:32 -07:00

290 lines
8.4 KiB
Text

inductive Foo where
| a | b | c
def f : Foo → Nat
| Foo.a => 10
| Foo.b => 20
| Foo.c => 35
inductive CXCursorKind where
| CXCursor_UnexposedDecl
| CXCursor_StructDecl
| CXCursor_UnionDecl
| CXCursor_ClassDecl
| CXCursor_EnumDecl
| CXCursor_FieldDecl
| CXCursor_EnumConstantDecl
| CXCursor_FunctionDecl
| CXCursor_VarDecl
| CXCursor_ParmDecl
| CXCursor_ObjCInterfaceDecl
| CXCursor_ObjCCategoryDecl
| CXCursor_ObjCProtocolDecl
| CXCursor_ObjCPropertyDecl
| CXCursor_ObjCIvarDecl
| CXCursor_ObjCInstanceMethodDecl
| CXCursor_ObjCClassMethodDecl
| CXCursor_ObjCImplementationDecl
| CXCursor_ObjCCategoryImplDecl
| CXCursor_TypedefDecl
| CXCursor_CXXMethod
| CXCursor_Namespace
| CXCursor_LinkageSpec
| CXCursor_Constructor
| CXCursor_Destructor
| CXCursor_ConversionFunction
| CXCursor_TemplateTypeParameter
| CXCursor_NonTypeTemplateParameter
| CXCursor_TemplateTemplateParameter
| CXCursor_FunctionTemplate
| CXCursor_ClassTemplate
| CXCursor_ClassTemplatePartialSpecialization
| CXCursor_NamespaceAlias
| CXCursor_UsingDirective
| CXCursor_UsingDeclaration
| CXCursor_TypeAliasDecl
| CXCursor_ObjCSynthesizeDecl
| CXCursor_ObjCDynamicDecl
| CXCursor_CXXAccessSpecifier
| CXCursor_FirstDecl
| CXCursor_LastDecl
| CXCursor_FirstRef
| CXCursor_ObjCSuperClassRef
| CXCursor_ObjCProtocolRef
| CXCursor_ObjCClassRef
| CXCursor_TypeRef
| CXCursor_CXXBaseSpecifier
| CXCursor_TemplateRef
| CXCursor_NamespaceRef
| CXCursor_MemberRef
| CXCursor_LabelRef
| CXCursor_OverloadedDeclRef
| CXCursor_VariableRef
| CXCursor_LastRef
| CXCursor_FirstInvalid
| CXCursor_InvalidFile
| CXCursor_NoDeclFound
| CXCursor_NotImplemented
| CXCursor_InvalidCode
| CXCursor_LastInvalid
| CXCursor_FirstExpr
| CXCursor_UnexposedExpr
| CXCursor_DeclRefExpr
| CXCursor_MemberRefExpr
| CXCursor_CallExpr
| CXCursor_ObjCMessageExpr
| CXCursor_BlockExpr
| CXCursor_IntegerLiteral
| CXCursor_FloatingLiteral
| CXCursor_ImaginaryLiteral
| CXCursor_StringLiteral
| CXCursor_CharacterLiteral
| CXCursor_ParenExpr
| CXCursor_UnaryOperator
| CXCursor_ArraySubscriptExpr
| CXCursor_BinaryOperator
| CXCursor_CompoundAssignOperator
| CXCursor_ConditionalOperator
| CXCursor_CStyleCastExpr
| CXCursor_CompoundLiteralExpr
| CXCursor_InitListExpr
| CXCursor_AddrLabelExpr
| CXCursor_StmtExpr
| CXCursor_GenericSelectionExpr
| CXCursor_GNUNullExpr
| CXCursor_CXXStaticCastExpr
| CXCursor_CXXDynamicCastExpr
| CXCursor_CXXReinterpretCastExpr
| CXCursor_CXXConstCastExpr
| CXCursor_CXXFunctionalCastExpr
| CXCursor_CXXTypeidExpr
| CXCursor_CXXBoolLiteralExpr
| CXCursor_CXXNullPtrLiteralExpr
| CXCursor_CXXThisExpr
| CXCursor_CXXThrowExpr
| CXCursor_CXXNewExpr
| CXCursor_CXXDeleteExpr
| CXCursor_UnaryExpr
| CXCursor_ObjCStringLiteral
| CXCursor_ObjCEncodeExpr
| CXCursor_ObjCSelectorExpr
| CXCursor_ObjCProtocolExpr
| CXCursor_ObjCBridgedCastExpr
| CXCursor_PackExpansionExpr
| CXCursor_SizeOfPackExpr
| CXCursor_LambdaExpr
| CXCursor_ObjCBoolLiteralExpr
| CXCursor_ObjCSelfExpr
| CXCursor_OMPArraySectionExpr
| CXCursor_ObjCAvailabilityCheckExpr
| CXCursor_FixedPointLiteral
| CXCursor_OMPArrayShapingExpr
| CXCursor_OMPIteratorExpr
| CXCursor_CXXAddrspaceCastExpr
| CXCursor_LastExpr
| CXCursor_FirstStmt
| CXCursor_UnexposedStmt
| CXCursor_LabelStmt
| CXCursor_CompoundStmt
| CXCursor_CaseStmt
| CXCursor_DefaultStmt
| CXCursor_IfStmt
| CXCursor_SwitchStmt
| CXCursor_WhileStmt
| CXCursor_DoStmt
| CXCursor_ForStmt
| CXCursor_GotoStmt
| CXCursor_IndirectGotoStmt
| CXCursor_ContinueStmt
| CXCursor_BreakStmt
| CXCursor_ReturnStmt
| CXCursor_GCCAsmStmt
| CXCursor_AsmStmt
| CXCursor_ObjCAtTryStmt
| CXCursor_ObjCAtCatchStmt
| CXCursor_ObjCAtFinallyStmt
| CXCursor_ObjCAtThrowStmt
| CXCursor_ObjCAtSynchronizedStmt
| CXCursor_ObjCAutoreleasePoolStmt
| CXCursor_ObjCForCollectionStmt
| CXCursor_CXXCatchStmt
| CXCursor_CXXTryStmt
| CXCursor_CXXForRangeStmt
| CXCursor_SEHTryStmt
| CXCursor_SEHExceptStmt
| CXCursor_SEHFinallyStmt
| CXCursor_MSAsmStmt
| CXCursor_NullStmt
| CXCursor_DeclStmt
| CXCursor_OMPParallelDirective
| CXCursor_OMPSimdDirective
| CXCursor_OMPForDirective
| CXCursor_OMPSectionsDirective
| CXCursor_OMPSectionDirective
| CXCursor_OMPSingleDirective
| CXCursor_OMPParallelForDirective
| CXCursor_OMPParallelSectionsDirective
| CXCursor_OMPTaskDirective
| CXCursor_OMPMasterDirective
| CXCursor_OMPCriticalDirective
| CXCursor_OMPTaskyieldDirective
| CXCursor_OMPBarrierDirective
| CXCursor_OMPTaskwaitDirective
| CXCursor_OMPFlushDirective
| CXCursor_SEHLeaveStmt
| CXCursor_OMPOrderedDirective
| CXCursor_OMPAtomicDirective
| CXCursor_OMPForSimdDirective
| CXCursor_OMPParallelForSimdDirective
| CXCursor_OMPTargetDirective
| CXCursor_OMPTeamsDirective
| CXCursor_OMPTaskgroupDirective
| CXCursor_OMPCancellationPointDirective
| CXCursor_OMPCancelDirective
| CXCursor_OMPTargetDataDirective
| CXCursor_OMPTaskLoopDirective
| CXCursor_OMPTaskLoopSimdDirective
| CXCursor_OMPDistributeDirective
| CXCursor_OMPTargetEnterDataDirective
| CXCursor_OMPTargetExitDataDirective
| CXCursor_OMPTargetParallelDirective
| CXCursor_OMPTargetParallelForDirective
| CXCursor_OMPTargetUpdateDirective
| CXCursor_OMPDistributeParallelForDirective
| CXCursor_OMPDistributeParallelForSimdDirective
| CXCursor_OMPDistributeSimdDirective
| CXCursor_OMPTargetParallelForSimdDirective
| CXCursor_OMPTargetSimdDirective
| CXCursor_OMPTeamsDistributeDirective
| CXCursor_OMPTeamsDistributeSimdDirective
| CXCursor_OMPTeamsDistributeParallelForSimdDirective
| CXCursor_OMPTeamsDistributeParallelForDirective
| CXCursor_OMPTargetTeamsDirective
| CXCursor_OMPTargetTeamsDistributeDirective
| CXCursor_OMPTargetTeamsDistributeParallelForDirective
| CXCursor_OMPTargetTeamsDistributeParallelForSimdDirective
| CXCursor_OMPTargetTeamsDistributeSimdDirective
| CXCursor_BuiltinBitCastExpr
| CXCursor_OMPMasterTaskLoopDirective
| CXCursor_OMPParallelMasterTaskLoopDirective
| CXCursor_OMPMasterTaskLoopSimdDirective
| CXCursor_OMPParallelMasterTaskLoopSimdDirective
| CXCursor_OMPParallelMasterDirective
| CXCursor_OMPDepobjDirective
| CXCursor_OMPScanDirective
| CXCursor_OMPTileDirective
| CXCursor_OMPCanonicalLoop
| CXCursor_OMPInteropDirective
| CXCursor_OMPDispatchDirective
| CXCursor_OMPMaskedDirective
| CXCursor_OMPUnrollDirective
| CXCursor_LastStmt
| CXCursor_TranslationUnit
| CXCursor_FirstAttr
| CXCursor_UnexposedAttr
| CXCursor_IBActionAttr
| CXCursor_IBOutletAttr
| CXCursor_IBOutletCollectionAttr
| CXCursor_CXXFinalAttr
| CXCursor_CXXOverrideAttr
| CXCursor_AnnotateAttr
| CXCursor_AsmLabelAttr
| CXCursor_PackedAttr
| CXCursor_PureAttr
| CXCursor_ConstAttr
| CXCursor_NoDuplicateAttr
| CXCursor_CUDAConstantAttr
| CXCursor_CUDADeviceAttr
| CXCursor_CUDAGlobalAttr
| CXCursor_CUDAHostAttr
| CXCursor_CUDASharedAttr
| CXCursor_VisibilityAttr
| CXCursor_DLLExport
| CXCursor_DLLImport
| CXCursor_NSReturnsRetained
| CXCursor_NSReturnsNotRetained
| CXCursor_NSReturnsAutoreleased
| CXCursor_NSConsumesSelf
| CXCursor_NSConsumed
| CXCursor_ObjCException
| CXCursor_ObjCNSObject
| CXCursor_ObjCIndependentClass
| CXCursor_ObjCPreciseLifetime
| CXCursor_ObjCReturnsInnerPointer
| CXCursor_ObjCRequiresSuper
| CXCursor_ObjCRootClass
| CXCursor_ObjCSubclassingRestricted
| CXCursor_ObjCExplicitProtocolImpl
| CXCursor_ObjCDesignatedInitializer
| CXCursor_ObjCRuntimeVisible
| CXCursor_ObjCBoxable
| CXCursor_FlagEnum
| CXCursor_ConvergentAttr
| CXCursor_WarnUnusedAttr
| CXCursor_WarnUnusedResultAttr
| CXCursor_AlignedAttr
| CXCursor_LastAttr
| CXCursor_PreprocessingDirective
| CXCursor_MacroDefinition
| CXCursor_MacroExpansion
| CXCursor_MacroInstantiation
| CXCursor_InclusionDirective
| CXCursor_FirstPreprocessing
| CXCursor_LastPreprocessing
| CXCursor_ModuleImportDecl
| CXCursor_TypeAliasTemplateDecl
| CXCursor_StaticAssert
| CXCursor_FriendDecl
| CXCursor_FirstExtraDecl
| CXCursor_LastExtraDecl
| CXCursor_OverloadCandidate
deriving BEq, DecidableEq
open CXCursorKind
example (h : CXCursor_CUDAGlobalAttr = CXCursor_CUDAHostAttr) : False := by
contradiction
#eval CXCursor_CUDAGlobalAttr == CXCursor_CUDAHostAttr
#eval decide (CXCursor_CUDAGlobalAttr = CXCursor_CUDAHostAttr)