import { z } from 'zod';
/**
 * ワークフロー状態のADT（代数的データ型）
 */
export type WorkflowState = {
    type: 'undefined';
} | {
    type: 'issue_defined';
} | {
    type: 'initial_options_registered';
} | {
    type: 'laddered';
} | {
    type: 'analogical_research_done';
} | {
    type: 'elimination_tested';
} | {
    type: 'options_fixed';
};
/**
 * ワークフロー状態のコンストラクタ
 */
export declare const WorkflowState: {
    readonly undefined: () => WorkflowState;
    readonly issueDefined: () => WorkflowState;
    readonly initialOptionsRegistered: () => WorkflowState;
    readonly laddered: () => WorkflowState;
    readonly analogicalResearchDone: () => WorkflowState;
    readonly eliminationTested: () => WorkflowState;
    readonly optionsFixed: () => WorkflowState;
};
/**
 * Zodスキーマ
 */
export declare const WorkflowStateSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
    type: z.ZodLiteral<"undefined">;
}, "strip", z.ZodTypeAny, {
    type: "undefined";
}, {
    type: "undefined";
}>, z.ZodObject<{
    type: z.ZodLiteral<"issue_defined">;
}, "strip", z.ZodTypeAny, {
    type: "issue_defined";
}, {
    type: "issue_defined";
}>, z.ZodObject<{
    type: z.ZodLiteral<"initial_options_registered">;
}, "strip", z.ZodTypeAny, {
    type: "initial_options_registered";
}, {
    type: "initial_options_registered";
}>, z.ZodObject<{
    type: z.ZodLiteral<"laddered">;
}, "strip", z.ZodTypeAny, {
    type: "laddered";
}, {
    type: "laddered";
}>, z.ZodObject<{
    type: z.ZodLiteral<"analogical_research_done">;
}, "strip", z.ZodTypeAny, {
    type: "analogical_research_done";
}, {
    type: "analogical_research_done";
}>, z.ZodObject<{
    type: z.ZodLiteral<"elimination_tested">;
}, "strip", z.ZodTypeAny, {
    type: "elimination_tested";
}, {
    type: "elimination_tested";
}>, z.ZodObject<{
    type: z.ZodLiteral<"options_fixed">;
}, "strip", z.ZodTypeAny, {
    type: "options_fixed";
}, {
    type: "options_fixed";
}>]>;
/**
 * 状態遷移が有効かどうかを判定する純粋関数
 */
export declare const isValidTransition: (from: WorkflowState, to: WorkflowState) => boolean;
/**
 * 状態の表示名を取得する純粋関数
 */
export declare const getDisplayName: (state: WorkflowState) => string;
/**
 * 状態を比較する純粋関数
 */
export declare const isState: (state: WorkflowState, type: WorkflowState["type"]) => boolean;
//# sourceMappingURL=workflow-state.d.ts.map