ADT Expr [ ] INITIALS errorExpr : -> Expr varExpr : String -> Expr genExpr : String * LExpr -> Expr selExpr : String * LExpr -> Expr CONSTRUCTORS eqExpr : Expr * Expr -> Expr ifExpr : Expr * Expr * Expr -> Expr SELECTORS EQ_Expr (c): Expr(i) * Expr(i) -> BOOL AXIOMS EQ_Expr(errorExpr,errorExpr) = TRUE EQ_Expr(errorExpr,varExpr(S1)) = FALSE EQ_Expr(errorExpr,genExpr(S1,L2)) = FALSE EQ_Expr(errorExpr,selExpr(S1,L2)) = FALSE EQ_Expr(errorExpr,eqExpr(E1,E2)) = FALSE EQ_Expr(errorExpr,ifExpr(E1,E2,E3)) = FALSE EQ_Expr(varExpr(S1),errorExpr) = FALSE EQ_Expr(varExpr(S1),varExpr(S2)) = EQ_String(S1,S2) EQ_Expr(varExpr(S1),genExpr(S2,L3)) = FALSE EQ_Expr(varExpr(S1),selExpr(S2,L3)) = FALSE EQ_Expr(varExpr(S1),eqExpr(E2,E3)) = FALSE EQ_Expr(varExpr(S1),ifExpr(E2,E3,E4)) = FALSE EQ_Expr(genExpr(S1,L2),errorExpr) = FALSE EQ_Expr(genExpr(S1,L2),varExpr(S3)) = FALSE EQ_Expr(genExpr(S1,L2),genExpr(S3,L4)) = EQ_String(S1,S3) EQ_Expr(genExpr(S1,L2),selExpr(S3,L4)) = FALSE EQ_Expr(genExpr(S1,L2),eqExpr(E3,E4)) = FALSE EQ_Expr(genExpr(S1,L2),ifExpr(E3,E4,E5)) = FALSE EQ_Expr(selExpr(S1,L2),errorExpr) = FALSE EQ_Expr(selExpr(S1,L2),varExpr(S3)) = FALSE EQ_Expr(selExpr(S1,L2),genExpr(S3,L4)) = FALSE EQ_Expr(selExpr(S1,L2),selExpr(S3,L4)) = EQ_String(S1,S3) EQ_Expr(selExpr(S1,L2),eqExpr(E3,E4)) = FALSE EQ_Expr(selExpr(S1,L2),ifExpr(E3,E4,E5)) = FALSE EQ_Expr(eqExpr(E1,E2),errorExpr) = FALSE EQ_Expr(eqExpr(E1,E2),varExpr(S3)) = FALSE EQ_Expr(eqExpr(E1,E2),genExpr(S3,L4)) = FALSE EQ_Expr(eqExpr(E1,E2),selExpr(S3,L4)) = FALSE EQ_Expr(eqExpr(E1,E2),eqExpr(E3,E4)) = AND(EQ_Expr(E1,E3),EQ_Expr(E2,E4)) EQ_Expr(eqExpr(E1,E2),ifExpr(E3,E4,E5)) = FALSE EQ_Expr(ifExpr(E1,E2,E3),errorExpr) = FALSE EQ_Expr(ifExpr(E1,E2,E3),varExpr(S4)) = FALSE EQ_Expr(ifExpr(E1,E2,E3),genExpr(S4,L5)) = FALSE EQ_Expr(ifExpr(E1,E2,E3),selExpr(S4,L5)) = FALSE EQ_Expr(ifExpr(E1,E2,E3),eqExpr(E4,E5)) = FALSE EQ_Expr(ifExpr(E1,E2,E3),ifExpr(E4,E5,E6)) = AND(EQ_Expr(E1,E4),AND(EQ_Expr(E2,E5),EQ_Expr(E3,E6)))