def test_paper_example(self): """ Generates the example that we used in the paper (from Alice in Wonderland) as if it's coming from the combinators. Checks that the right overall LF comes out. This is pretty insane, but a great test that the semantics is behaving correctly in the contexts in which we'll be using it. """ sem = semantics_from_string # Lexical sem_0_1 = sem(r"[<0,0>]") sem_1_2 = sem(r"\$x.$x") # Bapply sem_0_2 = apply(sem_1_2, sem_0_1) self.assertTrue(sem_0_2.alpha_equivalent(sem(r"[<0,0>]"))) # Lexical sem_2_3 = sem(r"\$x.leftonto($x)") sem_3_4 = sem(r"\$x.leftonto($x)") # Fcomp sem_2_4 = compose(sem_2_3, sem_3_4) self.assertTrue(sem_2_4.alpha_equivalent( sem(r"\$x.leftonto(leftonto($x))"))) # Lexical sem_4_5 = sem(r"\$x.leftonto($x)") # Fcomp sem_2_5 = compose(sem_2_4, sem_4_5) self.assertTrue(sem_2_5.alpha_equivalent( sem(r"\$x.leftonto(leftonto(leftonto($x)))"))) # Lexical sem_5_6 = sem(r"\$x.leftonto($x)") # Fcomp sem_2_6 = compose(sem_2_5, sem_5_6) self.assertTrue(sem_2_6.alpha_equivalent( sem(r"\$x.leftonto(leftonto(leftonto(leftonto($x))))"))) # Lexical sem_6_7 = sem(r"\$x.leftonto($x)") # Fcomp sem_2_7 = compose(sem_2_6, sem_6_7) self.assertTrue(sem_2_7.alpha_equivalent( sem(r"\$x.leftonto(leftonto(leftonto(leftonto(leftonto($x)))))"))) # Lexical sem_7_8 = sem(r"\$x.leftonto($x)") sem_8_9 = sem(r"\$x.$x") # Fcomp sem_7_9 = compose(sem_7_8, sem_8_9) self.assertTrue(sem_7_9.alpha_equivalent( sem(r"\$x.leftonto($x)"))) # Lexical sem_9_10 = sem(r"\$x.leftonto($x)") # Fcomp sem_7_10 = compose(sem_7_9, sem_9_10) self.assertTrue(sem_7_10.alpha_equivalent( sem(r"\$x.leftonto(leftonto($x))"))) # Coord sem_2_10 = Semantics(Coordination([sem_2_7.lf, sem_7_10.lf])) sem_2_10.beta_reduce() semtest = sem(r"(\$x.leftonto(leftonto(leftonto(leftonto(leftonto($x)))))) "\ "& (\$x.leftonto(leftonto($x)))") semtest.beta_reduce() self.assertTrue(sem_2_10.alpha_equivalent(semtest)) # Lexical sem_10_11 = sem(r"\$x.leftonto($x)") # Fcomp sem_2_11 = compose(sem_2_10, sem_10_11) semtest = sem(r"\$y.("\ "((\$x.leftonto(leftonto(leftonto(leftonto(leftonto($x)))))) "\ "& (\$x.leftonto(leftonto($x)))) leftonto($y))") semtest.beta_reduce() self.assertTrue(sem_2_11.alpha_equivalent(semtest)) # Skip a couple of lexical LFs sem_11_13 = sem(r"\$x.leftonto(leftonto($x))") # Coord sem_2_13 = Semantics(Coordination([sem_2_11.lf, sem_11_13.lf])) sem_2_13.beta_reduce() semtest = sem(r"(\$y.("\ "((\$x.leftonto(leftonto(leftonto(leftonto(leftonto($x)))))) "\ "& (\$x.leftonto(leftonto($x)))) leftonto($y))) "\ "& (\$x.leftonto(leftonto($x)))") semtest.beta_reduce() self.assertTrue(sem_2_13.alpha_equivalent(semtest)) # Lexical sem_13_14 = sem(r"[<0,0>]") # Fapply sem_2_14 = apply(sem_2_13, sem_13_14) semtest = sem(r"((\$y.("\ "((\$x.leftonto(leftonto(leftonto(leftonto(leftonto($x)))))) "\ "& (\$x.leftonto(leftonto($x)))) leftonto($y))) "\ "& (\$x.leftonto(leftonto($x))) [<0,0>])") semtest.beta_reduce() self.assertTrue(sem_2_14.alpha_equivalent(semtest)) # Finally, development sem_0_14 = Semantics(ListCat([sem_0_2.lf, sem_2_14.lf])) sem_0_14.beta_reduce() semtest = sem(r"[<0,0>, "\ "((\$y.("\ "((\$x.leftonto(leftonto(leftonto(leftonto(leftonto($x)))))) "\ "& (\$x.leftonto(leftonto($x)))) leftonto($y))) "\ "& (\$x.leftonto(leftonto($x))) <0,0>)]") semtest.beta_reduce() self.assertTrue(sem_0_14.alpha_equivalent(semtest))