Esempio n. 1
0
    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))