Hi,

>> {{{
>> sage: e = WordMorphismExtensionDual('a->ab,b->ac,c->a')
>> sage: e
>> E*(WordMorphism: a->ab, b->ac, c->a)
>> sage: f1 = Face((0,0,0),1)  # the face 1 or a at (0,0,0)
>> sage: f2 = Face((0,0,0),2)  # the face 2 or b at (0,0,0)
>> sage: f3 = Face((0,0,0),3)  # the face 3 or c at (0,0,0)
>> sage: e(f1)  # the image of f1
>> Patch([((0, 1, -1), 2), ((1, 0, -1), 1), ((0, 0, 0), 3)])
>> sage: e(f2)  # the image of f2
>> Patch([((0, 0, 0), 1)])
>> sage: e(f3)  # the image of f3
>> Patch([((0, 0, 0), 2)])
>> }}}

Instead of adding WordMorphismExtensionDual to the namespace, I prefer
the following :

sage: m = WordMorphism('a->ab,b->ac,c->a')
sage: e = e.extension_dual()
sage: e
Extension dual of WordMorphism: a->ab, b->ac, c->a


>> And one can iterates and this is the way we obtain our beautiful
>> pictures (is there a standard for the option iterations ?)
>> {{{
>> sage: e(f1,iterations=5)
>> Patch([((1, -3, 4), 1), ((0, -1, 2), 3), ((1, -1, 1), 1), ((-1, -1,
>> 4), 2), ((0, -1, 2), 1), ((1, -3, 3), 3), ((-1, -1, 4), 3), ((1, -2,
>> 2), 2), ((1, -1, 0), 1), ((2, -2, 0), 1), ((1, -3, 3), 1), ((0, -2,
>> 4), 2), ((0, -3, 5), 3), ((2, -2, 1), 1), ((-1, 0, 2), 2), ((0, 0, 1),
>> 2), ((0, -1, 2), 2), ((0, -2, 4), 3), ((2, -3, 1), 1), ((1, -2, 3),
>> 1), ((1, -1, 1), 2), ((0, 0, 0), 2), ((1, -2, 2), 3), ((0, -1, 3), 2),
>> ((1, -2, 2), 1), ((2, -3, 2), 1), ((-1, -2, 5), 3), ((0, -1, 3), 1),
>> ((1, -1, 0), 2), ((-1, 0, 3), 2), ((0, -2, 4), 1)])
>> }}}

Right now, with word morphism, one can do either of the following

sage: m = WordMorphism('a->ab,b->ac,c->a')
sage: (m^5)('a')
word: abacabaabacababacabaabac
sage: m('a', 5)
word: abacabaabacababacabaabac

You obtain the fixed point using :

sage: m('a', oo)
word: abacabaabacababacabaabacabacabaabacababa...

Hence, you could follow the same idea :

sage: (e^5)(f1)
A patch ...
sage: e(f1, 5)
A patch ...
sage: e(f1, oo)
The limit fractal!


Does the name of "patch" is really used by Arnoux, Ito? Or is it
Franco who used that name? Instead of patch, I would use another name
that evoques a little bit more the idea of a finite domain of a
discrete plane. So why not, "finite domain of a discrete plane" which
says what it is!?

> Thanks! So, somehow, e is a function from the set of patches to
> itself, right? I have no clue on the subject, so this might be
> completely silly, but what about:
>
> {{{
>   sage: Patches = e.codomain()          # or e.domain()?
> }}}
>
> ``patches`` would be a parent modeling the collection of all
> patches. And then, one could do things like:
>
> {{{
>   sage: f1 = Patches.face((0,0,0),1)                 # builds a face
>   sage: p = Patches( ( ((0,0,0),1), ((0,0,0),2) ) )  # builds a patch from an 
> iterable of face-data
> }}}

+1 : I agree with the ideas of Nicolas


After speaking with Timo (now in Montpellier), I think the extension
(before taking the dual) of word morphism corresponds to something I
use quite often for example to construct a Christoffel Tile :

sage: P = WordPaths('abAB')
sage: P
Word Paths on the square grid
sage: P.letters_to_steps()
{'a': (1, 0), 'A': (-1, 0), 'B': (0, -1), 'b': (0, 1)}
sage: L = WordMorphism('a->aBab,b->ab,A->AbAB,B->AB', codomain=P)
sage: bar = WordMorphism('a->A,b->B,A->a,B->b', codomain=P)
sage: w = P(words.ChristoffelWord(5,8, alphabet='ab'))
sage: L(w*bar(w)).plot(endarrow=False)

Maybe it can be usefull ...

Sébastien

-- 
You received this message because you are subscribed to the Google Groups 
"sage-combinat-devel" group.
To post to this group, send email to sage-combinat-de...@googlegroups.com.
To unsubscribe from this group, send email to 
sage-combinat-devel+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sage-combinat-devel?hl=en.

Reply via email to