121 lines
2.0 KiB
C
Executable File
121 lines
2.0 KiB
C
Executable File
typedef enum {false, true} bool;
|
||
|
||
enum const_type
|
||
{
|
||
Num = 0,
|
||
// oper
|
||
Add,
|
||
Mul,
|
||
// pred
|
||
Eq,
|
||
Le,
|
||
// connect
|
||
And,
|
||
Or,
|
||
Impl
|
||
};
|
||
typedef enum const_type const_type;
|
||
|
||
enum quant_type
|
||
{
|
||
Forall,
|
||
Exists
|
||
};
|
||
typedef enum quant_type quant_type;
|
||
|
||
enum term_type
|
||
{
|
||
Var,
|
||
Const,
|
||
Apply,
|
||
Quant
|
||
};
|
||
typedef enum term_type term_type;
|
||
|
||
struct term
|
||
{
|
||
term_type type;
|
||
union {
|
||
char *Var;
|
||
struct
|
||
{
|
||
const_type type;
|
||
int content;
|
||
} Const;
|
||
struct
|
||
{
|
||
struct term *left;
|
||
struct term *right;
|
||
} Apply;
|
||
struct
|
||
{
|
||
quant_type type;
|
||
char *var;
|
||
struct term *body;
|
||
} Quant;
|
||
} content;
|
||
};
|
||
typedef struct term term;
|
||
|
||
struct term_list
|
||
{
|
||
term *element;
|
||
struct term_list *next;
|
||
};
|
||
typedef struct term_list term_list;
|
||
|
||
typedef struct var_sub
|
||
{
|
||
char *var;
|
||
term *sub_term;
|
||
} var_sub;
|
||
|
||
typedef struct var_sub_list
|
||
{
|
||
var_sub *cur;
|
||
struct var_sub_list *next;
|
||
} var_sub_list;
|
||
|
||
typedef enum {bool_res, termlist} res_type;
|
||
typedef struct{
|
||
res_type type;
|
||
union{
|
||
bool ans;
|
||
term_list* list;
|
||
} d;
|
||
} solve_res;
|
||
|
||
typedef struct{
|
||
term *assum;
|
||
term *concl;
|
||
} ImplyProp;
|
||
|
||
/* BEGIN Given Functions */
|
||
|
||
// malloc 函数,内存均初始为全0
|
||
term_list *malloc_term_list();
|
||
solve_res *malloc_solve_res();
|
||
|
||
// 构造函数
|
||
ImplyProp *createImplyProp(term *t1, term *t2);
|
||
|
||
// 深拷贝函数
|
||
term *copy_term(term *t);
|
||
term_list *copy_term_list(term_list *list);
|
||
|
||
// free 函数
|
||
void free_str(char *s);
|
||
void free_imply_prop(ImplyProp *p);
|
||
void free_term(term *t);
|
||
void free_term_list(term_list *list);
|
||
|
||
// string 相关函数
|
||
char *strdup(const char *s);
|
||
int strcmp(const char *s1, const char *s2);
|
||
|
||
/* END Given Functions */
|
||
|
||
term *subst_var(char *den, char *src, term *t);
|
||
term* subst_term(term* den, char* src, term* t);
|
||
bool alpha_equiv(term *t1, term *t2);
|